diff --git a/.gitignore b/.gitignore index 2655c8e..2c2c277 100644 --- a/.gitignore +++ b/.gitignore @@ -348,6 +348,11 @@ MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ +app/XDM/XDM.Win.Installer/ffmpeg-x86.exe +*.wixobj +app/XDM/XDM.Win.Installer/net4.7.2.wxs +app/XDM/XDM.Win.Installer/net4.7.2/ +app/XDM/XDM.Win.Installer/*.msi +*.wixpdb +app/XDM/XDM.Win.Installer/*.exe app/xdm-browser-monitor/extension-code.js -app/XDM/translation-generator/ -app/XDM/XDM.Win.Installer/ diff --git a/app/XDM/.editorconfig b/app/XDM/.editorconfig new file mode 100644 index 0000000..a7a6802 --- /dev/null +++ b/app/XDM/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. +dotnet_diagnostic.CS8618.severity = silent diff --git a/app/XDM/BrowserMonitor/BrowserMonitor.csproj b/app/XDM/BrowserMonitor/BrowserMonitor.csproj deleted file mode 100644 index 6e7c0ea..0000000 --- a/app/XDM/BrowserMonitor/BrowserMonitor.csproj +++ /dev/null @@ -1,25 +0,0 @@ - - - - net3.5;net4.5;net4.7.2;net5.0 - AnyCPU;x86 - 9.0 - enable - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/XDM/BrowserMonitor/NativeMessagingHostHandler.cs b/app/XDM/BrowserMonitor/NativeMessagingHostHandler.cs deleted file mode 100644 index 3de494e..0000000 --- a/app/XDM/BrowserMonitor/NativeMessagingHostHandler.cs +++ /dev/null @@ -1,297 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO.Pipes; -using System.IO; -using XDM.Core.Lib.Common; -using System.Threading; -#if NET35 -using NetFX.Polyfill; -#else -using System.Collections.Concurrent; -#endif -using TraceLog; - -namespace BrowserMonitoring -{ - public class NativeMessagingHostHandler : IDisposable - { - private int MaxPipeInstance = 254; - private static readonly string PipeName = "XDM_Ipc_Browser_Monitoring_Pipe"; - private List inPipes = new(); - private Dictionary inOutMap = new(); - private readonly IApp app; - private static Mutex globalMutex; - private readonly BlockingCollection Messages = new(); - private Thread WriterThread; - - public static void EnsureSingleInstance(IApp app) - { - try - { - using var mutex = Mutex.OpenExisting(@"Global\XDM_Active_Instance"); - throw new InstanceAlreadyRunningException(@"XDM instance already running, Mutex exists 'Global\XDM_Active_Instance'"); - } - catch (Exception ex) - { - Log.Debug(ex, "Exception in NativeMessagingHostHandler ctor"); - if (ex is InstanceAlreadyRunningException) - { - Log.Debug(ex, "Sending args to running instance"); - - if (app.Args != null && app.Args.Length > 0) - { - SendArgsToRunningInstance(app.Args); - Environment.Exit(0); - } - throw; - } - } - globalMutex = new Mutex(true, @"Global\XDM_Active_Instance"); - } - - public NativeMessagingHostHandler(IApp app) - { - this.app = app; - try - { - using var mutex = Mutex.OpenExisting(@"Global\XDM_Active_Instance"); - throw new InstanceAlreadyRunningException(@"XDM instance already running, Mutex exists 'Global\XDM_Active_Instance'"); - } - catch (Exception ex) - { - Log.Debug(ex, "Exception in NativeMessagingHostHandler ctor"); - if (ex is InstanceAlreadyRunningException) - { - Log.Debug(ex, "Sending args to running instance"); - - if (app.Args != null && app.Args.Length > 0) - { - SendArgsToRunningInstance(app.Args); - Environment.Exit(0); - } - throw; - } - } - globalMutex = new Mutex(true, @"Global\XDM_Active_Instance"); - } - - public void BroadcastConfig() - { - var bytes = GetSyncBytes(app); - Messages.Add(bytes); - } - - public void StartPipedChannel() - { - WriterThread = new Thread(() => - { - while (true) - { - //Log.Debug("Total messages to be sent to native host: " + Messages.Count); - var bytes = Messages.Take(); - foreach (var key in inOutMap.Keys) - { - //Log.Debug("Sending message to native host"); - try - { - var outpipe = inOutMap[key]; - WriteMessage(outpipe, bytes); - //Log.Debug("Send message to native host successfully"); - } - catch (Exception ex) - { - Log.Debug(ex, "Send message to native host failed"); - } - } - } - }); - WriterThread.Start(); - new Thread(() => - { - try - { - if (inPipes.Count == MaxPipeInstance) - { - Log.Debug("Max pipe count of " + MaxPipeInstance + " is reached"); - return; - } - var inPipe = - new NamedPipeServerStream(PipeName, - PipeDirection.In, NamedPipeServerStream.MaxAllowedServerInstances, - PipeTransmissionMode.Byte, PipeOptions.WriteThrough); - inPipes.Add(inPipe); - var first = true; - while (true) - { - Log.Debug("Waiting for native host pipe..."); - inPipe.WaitForConnection(); - Log.Debug("Pipe request received"); - - if (first) - { - Log.Debug("Creating one more additional pipe"); - StartPipedChannel(); - first = false; - } - - try - { - ConsumePipe(inPipe); - } - catch (Exception e) - { - inPipe.Disconnect(); - Log.Debug(e, "Error in message exchange"); - } - Log.Debug("Terminated message exchange, will reuse the pipe"); - } - } - catch (Exception ex) - { - Log.Debug(ex, "Error in message exchange flow"); - } - }).Start(); - } - - private void ConsumePipe(NamedPipeServerStream inPipe) - { - try - { - Log.Debug("Initiate message handshake"); - var clientPipeName = Encoding.UTF8.GetString(ReadMessageBytes(inPipe)); - Log.Debug("Client pipe: " + clientPipeName); - if (clientPipeName.StartsWith("XDM-APP-")) - { - var command = ReadMessageBytes(inPipe); - var args = ArgsProcessor.ParseArgs(Encoding.UTF8.GetString(command).Split('\r')); - ArgsProcessor.Process(app, args); - return; - } - var outPipe = new NamedPipeClientStream(".", clientPipeName, PipeDirection.Out); - outPipe.Connect(); - SendConfig(outPipe); - inOutMap[inPipe] = outPipe; - Log.Debug("Message handshake completed"); - while (true) - { - var text = ReadMessageBytes(inPipe); - using var ms = new MemoryStream(text); - using var br = new BinaryReader(ms); - // Log.Debug("{Text}", text); - var envelop = RawBrowserMessageEnvelop.Deserialize(br); - BrowserMessageHandler.Handle(app, envelop); - } - } - finally - { - try - { - NamedPipeClientStream? op = null; - lock (this) - { - if (inOutMap.TryGetValue(inPipe, out op)) - { - inOutMap.Remove(inPipe); - } - } - op?.Close(); - op?.Dispose(); - } - catch { } - } - } - - private void SendConfig(Stream pipe) - { - var bytes = GetSyncBytes(app); - WriteMessage(pipe, bytes); - } - - private static void ReadFully(Stream stream, byte[] buf, int bytesToRead) - { - var rem = bytesToRead; - var index = 0; - while (rem > 0) - { - var c = stream.Read(buf, index, rem); - if (c == 0) throw new IOException("Unexpected EOF"); - index += c; - rem -= c; - } - } - - private static byte[] ReadMessageBytes(Stream pipe) - { - var b4 = new byte[4]; - ReadFully(pipe, b4, 4); - var syncLength = BitConverter.ToInt32(b4, 0); - var bytes = new byte[syncLength]; - ReadFully(pipe, bytes, syncLength); - return bytes; - } - - private static void WriteMessage(Stream pipe, string message) - { - var msgBytes = Encoding.UTF8.GetBytes(message); - WriteMessage(pipe, msgBytes); - } - - private static void WriteMessage(Stream pipe, byte[] msgBytes) - { - var bytes = BitConverter.GetBytes(msgBytes.Length); - pipe.Write(bytes, 0, bytes.Length); - pipe.Write(msgBytes, 0, msgBytes.Length); - pipe.Flush(); - } - - public void Dispose() - { - foreach (var pipe in inPipes) - { - try { pipe.Disconnect(); } catch { } - try { pipe.Dispose(); } catch { } - } - } - - private static byte[] GetSyncBytes(IApp app) - { - var msg = new SyncMessage() - { - Enabled = Config.Instance.IsBrowserMonitoringEnabled, - BlockedHosts = Config.Instance.BlockedHosts, - VideoUrls = new string[0], - FileExts = Config.Instance.FileExtensions, - VidExts = Config.Instance.VideoExtensions, - VidList = app.GetVideoList(false).Select(a => new VideoItem - { - Id = a.ID, - Text = a.File, - Info = a.DisplayName - }).ToList(), - MimeList = new string[] { "video", "audio", "mpegurl", "f4m", "m3u8", "dash" }, - BlockedMimeList = new string[] { "text/javascript", "application/javascript", "text/css", "text/html" }, - VideoUrlsWithPostReq = new string[] { "ubei/v1/player?key=", "ubei/v1/next?key=" } - }; - return msg.Serialize(); - } - - private static void SendArgsToRunningInstance(string[] args) - { - using var clientPipe = - new NamedPipeClientStream(".", PipeName, PipeDirection.Out); - clientPipe.Connect(); - WriteMessage(clientPipe, $"XDM-APP-${Guid.NewGuid()}"); - WriteMessage(clientPipe, string.Join("\r", args)); - clientPipe.Flush(); - } - } - - public class InstanceAlreadyRunningException : Exception - { - public InstanceAlreadyRunningException(string message) : base(message) - { - } - } -} diff --git a/app/XDM/BrowserMonitor/RawBrowserMessageEnvelop.cs b/app/XDM/BrowserMonitor/RawBrowserMessageEnvelop.cs deleted file mode 100644 index 7f1c386..0000000 --- a/app/XDM/BrowserMonitor/RawBrowserMessageEnvelop.cs +++ /dev/null @@ -1,87 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using XDM.Core.Lib.Util; - - -namespace BrowserMonitoring -{ - public struct RawBrowserMessageEnvelop - { - public string MessageType { get; set; } - - public RawBrowserMessage Message { get; set; } - - public string[] VideoIds { get; set; } - - public void Serialize(BinaryWriter w) - { - RawBrowserMessageEnvelopSerializerV1.Serialize(this, w); - } - - public static RawBrowserMessageEnvelop Deserialize(BinaryReader r) - { - var version = r.ReadInt32(); - if (version == 1) - { - return RawBrowserMessageEnvelopSerializerV1.Deserialize(r); - } - throw new InvalidDataException($"Version ${version} not supported."); - } - } - - internal static class RawBrowserMessageEnvelopSerializerV1 - { - public static void Serialize(RawBrowserMessageEnvelop e, BinaryWriter w) - { - w.Write(1); - w.Write(e.MessageType); - w.Write(e.Message != null); - if (e.Message != null) - { - w.Write(e.Message.Url ?? string.Empty); - w.Write(e.Message.File ?? string.Empty); - w.Write(e.Message.Method ?? string.Empty); - w.Write(e.Message.RequestBody ?? string.Empty); - Helpers.WriteStateHeaders(e.Message.RequestHeaders, w); - Helpers.WriteStateHeaders(e.Message.ResponseHeaders, w); - Helpers.WriteStateCookies(e.Message.Cookies, w); - } - var count = e.VideoIds?.Length ?? 0; - w.Write(count); - if (e.VideoIds != null && e.VideoIds.Length > 0) - { - foreach (var item in e.VideoIds) - { - w.Write(item); - } - } - } - - public static RawBrowserMessageEnvelop Deserialize(BinaryReader r) - { - var e = new RawBrowserMessageEnvelop { }; - e.MessageType = Helpers.ReadString(r); - if (r.ReadBoolean()) - { - e.Message = new(); - e.Message.Url = Helpers.ReadString(r); - e.Message.File = Helpers.ReadString(r); - e.Message.Method = Helpers.ReadString(r); - e.Message.RequestBody = Helpers.ReadString(r); - Helpers.ReadStateHeaders(r, out Dictionary> dict1); - Helpers.ReadStateHeaders(r, out Dictionary> dict2); - Helpers.ReadStateCookies(r, out Dictionary dict3); - e.Message.RequestHeaders = dict1; - e.Message.ResponseHeaders = dict2; - e.Message.Cookies = dict3; - } - var count = r.ReadInt32(); - e.VideoIds = new string[count]; - for (int i = 0; i < count; i++) - { - e.VideoIds[i] = r.ReadString(); - } - return e; - } - } -} diff --git a/app/XDM/CoreFx.Polyfill/CoreFx.Polyfill.csproj b/app/XDM/CoreFx.Polyfill/CoreFx.Polyfill.csproj deleted file mode 100644 index b9974ef..0000000 --- a/app/XDM/CoreFx.Polyfill/CoreFx.Polyfill.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - net4.5.2 - 9.0 - enable - - - - - - - - - - - - diff --git a/app/XDM/CoreFx.Polyfill/ExternalInit.cs b/app/XDM/CoreFx.Polyfill/ExternalInit.cs deleted file mode 100644 index 830871d..0000000 --- a/app/XDM/CoreFx.Polyfill/ExternalInit.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.ComponentModel; - -namespace System.Runtime.CompilerServices -{ - [EditorBrowsable(EditorBrowsableState.Never)] - internal class IsExternalInit { } -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/HashHelpers.cs b/app/XDM/CoreFx.Polyfill/HashHelpers.cs deleted file mode 100644 index f3e5b58..0000000 --- a/app/XDM/CoreFx.Polyfill/HashHelpers.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Numerics.Hashing -{ - internal static class HashHelpers - { - public static int Combine(int h1, int h2) - { - // RyuJIT optimizes this to use the ROL instruction - // Related GitHub pull request: https://github.com/dotnet/coreclr/pull/1830 - uint rol5 = ((uint)h1 << 5) | ((uint)h1 >> 27); - return ((int)rol5 + h1) ^ h2; - } - } -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/Index.cs b/app/XDM/CoreFx.Polyfill/Index.cs deleted file mode 100644 index d29e272..0000000 --- a/app/XDM/CoreFx.Polyfill/Index.cs +++ /dev/null @@ -1,157 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.CompilerServices; - -namespace System -{ - /// Represent a type can be used to index a collection either from the start or the end. - /// - /// Index is used by the C# compiler to support the new index syntax - /// - /// int[] someArray = new int[5] { 1, 2, 3, 4, 5 } ; - /// int lastElement = someArray[^1]; // lastElement = 5 - /// - /// - public readonly struct Index : IEquatable - { - private readonly int _value; - - /// Construct an Index using a value and indicating if the index is from the start or from the end. - /// The index value. it has to be zero or positive number. - /// Indicating if the index is from the start or from the end. - /// - /// If the Index constructed from the end, index value 1 means pointing at the last element and index value 0 means pointing at beyond last element. - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Index(int value, bool fromEnd = false) - { - if (value < 0) - { - throw new ArgumentOutOfRangeException("ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException();"); - - } - - if (fromEnd) - _value = ~value; - else - _value = value; - } - - // The following private constructors mainly created for perf reason to avoid the checks - private Index(int value) - { - _value = value; - } - - /// Create an Index pointing at first element. - public static Index Start => new Index(0); - - /// Create an Index pointing at beyond last element. - public static Index End => new Index(~0); - - /// Create an Index from the start at the position indicated by the value. - /// The index value from the start. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Index FromStart(int value) - { - if (value < 0) - { - throw new ArgumentOutOfRangeException("ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException"); - - } - - return new Index(value); - } - - /// Create an Index from the end at the position indicated by the value. - /// The index value from the end. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Index FromEnd(int value) - { - if (value < 0) - { - throw new ArgumentOutOfRangeException("ThrowHelper.ThrowValueArgumentOutOfRange_NeedNonNegNumException();"); - - } - - return new Index(~value); - } - - /// Returns the index value. - public int Value - { - get - { - if (_value < 0) - return ~_value; - else - return _value; - } - } - - /// Indicates whether the index is from the start or the end. - public bool IsFromEnd => _value < 0; - - /// Calculate the offset from the start using the giving collection length. - /// The length of the collection that the Index will be used with. length has to be a positive value - /// - /// For performance reason, we don't validate the input length parameter and the returned offset value against negative values. - /// we don't validate either the returned offset is greater than the input length. - /// It is expected Index will be used with collections which always have non negative length/count. If the returned offset is negative and - /// then used to index a collection will get out of range exception which will be same affect as the validation. - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int GetOffset(int length) - { - int offset = _value; - if (IsFromEnd) - { - // offset = length - (~value) - // offset = length + (~(~value) + 1) - // offset = length + value + 1 - - offset += length + 1; - } - return offset; - } - - /// Indicates whether the current Index object is equal to another object of the same type. - /// An object to compare with this object - public override bool Equals([NotNullWhen(true)] object? value) => value is Index && _value == ((Index)value)._value; - - /// Indicates whether the current Index object is equal to another Index object. - /// An object to compare with this object - public bool Equals(Index other) => _value == other._value; - - /// Returns the hash code for this instance. - public override int GetHashCode() => _value; - - /// Converts integer number to an Index. - public static implicit operator Index(int value) => FromStart(value); - - /// Converts the value of the current Index object to its equivalent string representation. - public override string ToString() - { - if (IsFromEnd) - return ToStringFromEnd(); - - return ((uint)Value).ToString(); - } - - private string ToStringFromEnd() - { -#if (!NETSTANDARD2_0 && !NETFRAMEWORK) - Span span = stackalloc char[11]; // 1 for ^ and 10 for longest possible uint value - bool formatted = ((uint)Value).TryFormat(span.Slice(1), out int charsWritten); - Debug.Assert(formatted); - span[0] = '^'; - return new string(span.Slice(0, charsWritten + 1)); -#else - return '^' + Value.ToString(); -#endif - } - } -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/KeyValuePair.cs b/app/XDM/CoreFx.Polyfill/KeyValuePair.cs deleted file mode 100644 index 28957c9..0000000 --- a/app/XDM/CoreFx.Polyfill/KeyValuePair.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.ComponentModel; -using System.Diagnostics; -using System.Text; - -namespace System.Collections.Generic -{ - // Provides the Create factory method for KeyValuePair. - public static class KeyValuePair - { - // Creates a new KeyValuePair from the given values. - public static KeyValuePair Create(TKey key, TValue value) - { - return new KeyValuePair(key, value); - } - - /// - /// Used by KeyValuePair.ToString to reduce generic code - /// - internal static string PairToString(object? key, object? value) - { - var s = new StringBuilder(); - - s.Append('['); - - if (key != null) - { - s.Append(key.ToString()); - } - - s.Append(", "); - - if (value != null) - { - s.Append(value.ToString()); - } - - s.Append(']'); - - return s.ToString(); - } - } - - //// A KeyValuePair holds a key and a value from a dictionary. - //// It is used by the IEnumerable implementation for both IDictionary - //// and IReadOnlyDictionary. - //[Serializable] - //[System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")] - //public readonly struct KeyValuePair - //{ - // [DebuggerBrowsable(DebuggerBrowsableState.Never)] - // private readonly TKey key; // Do not rename (binary serialization) - // [DebuggerBrowsable(DebuggerBrowsableState.Never)] - // private readonly TValue value; // Do not rename (binary serialization) - - // public KeyValuePair(TKey key, TValue value) - // { - // this.key = key; - // this.value = value; - // } - - // public TKey Key => key; - - // public TValue Value => value; - - // public override string ToString() - // { - // return KeyValuePair.PairToString(Key, Value); - // } - - // [EditorBrowsable(EditorBrowsableState.Never)] - // public void Deconstruct(out TKey key, out TValue value) - // { - // key = Key; - // value = Value; - // } - //} -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/NotNullWhenAttribute.cs b/app/XDM/CoreFx.Polyfill/NotNullWhenAttribute.cs deleted file mode 100644 index 87bc9ce..0000000 --- a/app/XDM/CoreFx.Polyfill/NotNullWhenAttribute.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -#if NETFRAMEWORK || NETSTANDARD2_0 - -namespace System.Diagnostics.CodeAnalysis -{ - /// Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. - [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] - public sealed class NotNullWhenAttribute : Attribute - { - /// Initializes the attribute with the specified return value condition. - /// - /// The return value condition. If the method returns this value, the associated parameter will not be null. - /// - public NotNullWhenAttribute(bool returnValue) - { - ReturnValue = returnValue; - } - - /// Gets the return value condition. - public bool ReturnValue { get; } - } -} -#endif \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/OSPlatform.cs b/app/XDM/CoreFx.Polyfill/OSPlatform.cs deleted file mode 100644 index 392628f..0000000 --- a/app/XDM/CoreFx.Polyfill/OSPlatform.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Diagnostics.CodeAnalysis; - -namespace System.Runtime.InteropServices -{ - public readonly struct OSPlatform : IEquatable - { - public static OSPlatform FreeBSD { get; } = new OSPlatform("FREEBSD"); - - public static OSPlatform Linux { get; } = new OSPlatform("LINUX"); - - public static OSPlatform OSX { get; } = new OSPlatform("OSX"); - - public static OSPlatform Windows { get; } = new OSPlatform("WINDOWS"); - - internal string Name { get; } - - private OSPlatform(string osPlatform) - { - if (osPlatform == null) throw new ArgumentNullException(nameof(osPlatform)); - if (osPlatform.Length == 0) throw new ArgumentException("SR.Argument_EmptyValue", nameof(osPlatform)); - - Name = osPlatform; - } - - /// - /// Creates a new OSPlatform instance. - /// - /// If you plan to call this method frequently, please consider caching its result. - public static OSPlatform Create(string osPlatform) - { - return new OSPlatform(osPlatform); - } - - public bool Equals(OSPlatform other) - { - return Equals(other.Name); - } - - internal bool Equals(string? other) - { - return string.Equals(Name, other, StringComparison.OrdinalIgnoreCase); - } - - public override bool Equals([NotNullWhen(true)] object? obj) - { - return obj is OSPlatform osPlatform && Equals(osPlatform); - } - - public override int GetHashCode() - { - return Name == null ? 0 : StringComparer.OrdinalIgnoreCase.GetHashCode(Name); - } - - public override string ToString() - { - return Name ?? string.Empty; - } - - public static bool operator ==(OSPlatform left, OSPlatform right) - { - return left.Equals(right); - } - - public static bool operator !=(OSPlatform left, OSPlatform right) - { - return !(left == right); - } - } -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/ProcessStartInfoHelper.cs b/app/XDM/CoreFx.Polyfill/ProcessStartInfoHelper.cs deleted file mode 100644 index 5798163..0000000 --- a/app/XDM/CoreFx.Polyfill/ProcessStartInfoHelper.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CoreFx.Polyfill -{ - public static class ProcessStartInfoHelper - { - public static string ArgumentListToArgsString(IList arguments) - { - var stringBuilder = new StringBuilder(); - foreach (var argument in arguments) - { - AppendArgument(stringBuilder, argument); - } - return stringBuilder.ToString(); - } - - public static void AppendArgument(StringBuilder stringBuilder, string argument) - { - if (stringBuilder.Length != 0) - { - stringBuilder.Append(' '); - } - - // Parsing rules for non-argv[0] arguments: - // - Backslash is a normal character except followed by a quote. - // - 2N backslashes followed by a quote ==> N literal backslashes followed by unescaped quote - // - 2N+1 backslashes followed by a quote ==> N literal backslashes followed by a literal quote - // - Parsing stops at first whitespace outside of quoted region. - // - (post 2008 rule): A closing quote followed by another quote ==> literal quote, and parsing remains in quoting mode. - if (argument.Length != 0 && ContainsNoWhitespaceOrQuotes(argument)) - { - // Simple case - no quoting or changes needed. - stringBuilder.Append(argument); - } - else - { - stringBuilder.Append(Quote); - int idx = 0; - while (idx < argument.Length) - { - char c = argument[idx++]; - if (c == Backslash) - { - int numBackSlash = 1; - while (idx < argument.Length && argument[idx] == Backslash) - { - idx++; - numBackSlash++; - } - - if (idx == argument.Length) - { - // We'll emit an end quote after this so must double the number of backslashes. - stringBuilder.Append(Backslash, numBackSlash * 2); - } - else if (argument[idx] == Quote) - { - // Backslashes will be followed by a quote. Must double the number of backslashes. - stringBuilder.Append(Backslash, numBackSlash * 2 + 1); - stringBuilder.Append(Quote); - idx++; - } - else - { - // Backslash will not be followed by a quote, so emit as normal characters. - stringBuilder.Append(Backslash, numBackSlash); - } - - continue; - } - - if (c == Quote) - { - // Escape the quote so it appears as a literal. This also guarantees that we won't end up generating a closing quote followed - // by another quote (which parses differently pre-2008 vs. post-2008.) - stringBuilder.Append(Backslash); - stringBuilder.Append(Quote); - continue; - } - - stringBuilder.Append(c); - } - - stringBuilder.Append(Quote); - } - } - - private static bool ContainsNoWhitespaceOrQuotes(string s) - { - for (int i = 0; i < s.Length; i++) - { - char c = s[i]; - if (char.IsWhiteSpace(c) || c == Quote) - { - return false; - } - } - - return true; - } - - private const char Quote = '\"'; - private const char Backslash = '\\'; - } -} diff --git a/app/XDM/CoreFx.Polyfill/Range.cs b/app/XDM/CoreFx.Polyfill/Range.cs deleted file mode 100644 index 7c4449d..0000000 --- a/app/XDM/CoreFx.Polyfill/Range.cs +++ /dev/null @@ -1,133 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Collections; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Numerics.Hashing; -using System.Runtime.CompilerServices; - -namespace System -{ - /// Represent a range has start and end indexes. - /// - /// Range is used by the C# compiler to support the range syntax. - /// - /// int[] someArray = new int[5] { 1, 2, 3, 4, 5 }; - /// int[] subArray1 = someArray[0..2]; // { 1, 2 } - /// int[] subArray2 = someArray[1..^0]; // { 2, 3, 4, 5 } - /// - /// - public readonly struct Range : IEquatable - { - /// Represent the inclusive start index of the Range. - public Index Start { get; } - - /// Represent the exclusive end index of the Range. - public Index End { get; } - - /// Construct a Range object using the start and end indexes. - /// Represent the inclusive start index of the range. - /// Represent the exclusive end index of the range. - public Range(Index start, Index end) - { - Start = start; - End = end; - } - - /// Indicates whether the current Range object is equal to another object of the same type. - /// An object to compare with this object - public override bool Equals([NotNullWhen(true)] object? value) => - value is Range r && - r.Start.Equals(Start) && - r.End.Equals(End); - - /// Indicates whether the current Range object is equal to another Range object. - /// An object to compare with this object - public bool Equals(Range other) => other.Start.Equals(Start) && other.End.Equals(End); - - /// Returns the hash code for this instance. - public override int GetHashCode() - { -#if (!NETSTANDARD2_0 && !NETFRAMEWORK) - return HashCode.Combine(Start.GetHashCode(), End.GetHashCode()); -#else - return HashHelpers.Combine(Start.GetHashCode(), End.GetHashCode()); -#endif - } - - /// Converts the value of the current Range object to its equivalent string representation. - public override string ToString() - { -#if (!NETSTANDARD2_0 && !NETFRAMEWORK) - Span span = stackalloc char[2 + (2 * 11)]; // 2 for "..", then for each index 1 for '^' and 10 for longest possible uint - int pos = 0; - - if (Start.IsFromEnd) - { - span[0] = '^'; - pos = 1; - } - bool formatted = ((uint)Start.Value).TryFormat(span.Slice(pos), out int charsWritten); - Debug.Assert(formatted); - pos += charsWritten; - - span[pos++] = '.'; - span[pos++] = '.'; - - if (End.IsFromEnd) - { - span[pos++] = '^'; - } - formatted = ((uint)End.Value).TryFormat(span.Slice(pos), out charsWritten); - Debug.Assert(formatted); - pos += charsWritten; - - return new string(span.Slice(0, pos)); -#else - return Start.ToString() + ".." + End.ToString(); -#endif - } - - /// Create a Range object starting from start index to the end of the collection. - public static Range StartAt(Index start) => new Range(start, Index.End); - - /// Create a Range object starting from first element in the collection to the end Index. - public static Range EndAt(Index end) => new Range(Index.Start, end); - - /// Create a Range object starting from first element to the end. - public static Range All => new Range(Index.Start, Index.End); - - /// Calculate the start offset and length of range object using a collection length. - /// The length of the collection that the range will be used with. length has to be a positive value. - /// - /// For performance reason, we don't validate the input length parameter against negative values. - /// It is expected Range will be used with collections which always have non negative length/count. - /// We validate the range is inside the length scope though. - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public (int Offset, int Length) GetOffsetAndLength(int length) - { - int start; - Index startIndex = Start; - if (startIndex.IsFromEnd) - start = length - startIndex.Value; - else - start = startIndex.Value; - - int end; - Index endIndex = End; - if (endIndex.IsFromEnd) - end = length - endIndex.Value; - else - end = endIndex.Value; - - if ((uint)end > (uint)length || (uint)start > (uint)end) - { - throw new ArgumentOutOfRangeException("ExceptionArgument.length"); - } - - return (start, end - start); - } - } -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/RuntimeInformation.cs b/app/XDM/CoreFx.Polyfill/RuntimeInformation.cs deleted file mode 100644 index 46193dc..0000000 --- a/app/XDM/CoreFx.Polyfill/RuntimeInformation.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System.Reflection; - -namespace System.Runtime.InteropServices -{ - public static partial class RuntimeInformation - { - /// - /// Indicates whether the current application is running on the specified platform. - /// - public static bool IsOSPlatform(OSPlatform osPlatform) => IsOSPlatform(osPlatform.Name); - - /// - /// Indicates whether the current application is running on the specified platform. - /// - /// Case-insensitive platform name. Examples: Browser, Linux, FreeBSD, Android, iOS, macOS, tvOS, watchOS, Windows. - public static bool IsOSPlatform(string platform) - { - if (platform == null) - { - throw new ArgumentNullException(nameof(platform)); - } - return platform.Equals("WINDOWS", StringComparison.OrdinalIgnoreCase); - } - } -} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/SR.cs b/app/XDM/CoreFx.Polyfill/SR.cs deleted file mode 100644 index a7f2fea..0000000 --- a/app/XDM/CoreFx.Polyfill/SR.cs +++ /dev/null @@ -1,138 +0,0 @@ -//// Licensed to the .NET Foundation under one or more agreements. -//// The .NET Foundation licenses this file to you under the MIT license. - -//#nullable enable -//using System.Resources; - -//namespace System -//{ -// internal static partial class SR -// { -// private static readonly bool s_usingResourceKeys = false; - -// // This method is used to decide if we need to append the exception message parameters to the message when calling SR.Format. -// // by default it returns the value of System.Resources.UseSystemResourceKeys AppContext switch or false if not specified. -// // Native code generators can replace the value this returns based on user input at the time of native code generation. -// // The Linker is also capable of replacing the value of this method when the application is being trimmed. -// private static bool UsingResourceKeys() => s_usingResourceKeys; - -// internal static string GetResourceString(string resourceKey) -// { -// if (UsingResourceKeys()) -// { -// return resourceKey; -// } - -// string? resourceString = null; -// try -// { -// resourceString = -//#if SYSTEM_PRIVATE_CORELIB -// InternalGetResourceString(resourceKey); -//#else -// ResourceManager.GetString(resourceKey); -//#endif -// } -// catch (MissingManifestResourceException) { } - -// return resourceString!; // only null if missing resources -// } - -// internal static string GetResourceString(string resourceKey, string defaultString) -// { -// string resourceString = GetResourceString(resourceKey); - -// return resourceKey == resourceString || resourceString == null ? defaultString : resourceString; -// } - -// internal static string Format(string resourceFormat, object? p1) -// { -// if (UsingResourceKeys()) -// { -// return string.Join(", ", resourceFormat, p1); -// } - -// return string.Format(resourceFormat, p1); -// } - -// internal static string Format(string resourceFormat, object? p1, object? p2) -// { -// if (UsingResourceKeys()) -// { -// return string.Join(", ", resourceFormat, p1, p2); -// } - -// return string.Format(resourceFormat, p1, p2); -// } - -// internal static string Format(string resourceFormat, object? p1, object? p2, object? p3) -// { -// if (UsingResourceKeys()) -// { -// return string.Join(", ", resourceFormat, p1, p2, p3); -// } - -// return string.Format(resourceFormat, p1, p2, p3); -// } - -// internal static string Format(string resourceFormat, params object?[]? args) -// { -// if (args != null) -// { -// if (UsingResourceKeys()) -// { -// return resourceFormat + ", " + string.Join(", ", args); -// } - -// return string.Format(resourceFormat, args); -// } - -// return resourceFormat; -// } - -// internal static string Format(IFormatProvider? provider, string resourceFormat, object? p1) -// { -// if (UsingResourceKeys()) -// { -// return string.Join(", ", resourceFormat, p1); -// } - -// return string.Format(provider, resourceFormat, p1); -// } - -// internal static string Format(IFormatProvider? provider, string resourceFormat, object? p1, object? p2) -// { -// if (UsingResourceKeys()) -// { -// return string.Join(", ", resourceFormat, p1, p2); -// } - -// return string.Format(provider, resourceFormat, p1, p2); -// } - -// internal static string Format(IFormatProvider? provider, string resourceFormat, object? p1, object? p2, object? p3) -// { -// if (UsingResourceKeys()) -// { -// return string.Join(", ", resourceFormat, p1, p2, p3); -// } - -// return string.Format(provider, resourceFormat, p1, p2, p3); -// } - -// internal static string Format(IFormatProvider? provider, string resourceFormat, params object?[]? args) -// { -// if (args != null) -// { -// if (UsingResourceKeys()) -// { -// return resourceFormat + ", " + string.Join(", ", args); -// } - -// return string.Format(provider, resourceFormat, args); -// } - -// return resourceFormat; -// } -// } -//} \ No newline at end of file diff --git a/app/XDM/CoreFx.Polyfill/ShimCompatExtensions.cs b/app/XDM/CoreFx.Polyfill/ShimCompatExtensions.cs deleted file mode 100644 index 82ae50c..0000000 --- a/app/XDM/CoreFx.Polyfill/ShimCompatExtensions.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace System -{ - public static class ShimCompatExtensions - { - - public static string Join(char separator, IEnumerable values) - { - return string.Join(separator.ToString(), values); - } - - public static bool ContainsKey(this IDictionary dict, TKey key) - { - return dict.TryGetValue(key, out _); - } - - public static bool ContainsKey(this GroupCollection dict, string key) - { - try - { - return dict[key] != null; - } - catch - { - return false; - } - } - - public static TValue? GetValueOrDefault(this IDictionary dict, TKey key) - { - return GetValueOrDefault(dict, key, default(TValue)!); - } - - /// - /// Gets the value for a given key if a matching key exists in the dictionary. - /// - /// The key to search for. - /// The default value to return if no matching key is found in the dictionary. - /// - /// The value for the key, or if no matching key was found. - /// - public static TValue GetValueOrDefault(this IDictionary dict, TKey key, TValue defaultValue) - { - - TValue value; - if (dict.TryGetValue(key, out value!)) - { - return value; - } - - return defaultValue; - } - } -} diff --git a/app/XDM/CoreFx.Polyfill/StringExtensions.cs b/app/XDM/CoreFx.Polyfill/StringExtensions.cs deleted file mode 100644 index 72071fa..0000000 --- a/app/XDM/CoreFx.Polyfill/StringExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CoreFx.Polyfill -{ - public static class StringExtensions - { - public static string[] Split(this string str) - { - return str.Split(str.ToCharArray()); - } - } -} diff --git a/app/XDM/CoreFx.Polyfill/ThrowHelper.cs b/app/XDM/CoreFx.Polyfill/ThrowHelper.cs deleted file mode 100644 index 65e4d0b..0000000 --- a/app/XDM/CoreFx.Polyfill/ThrowHelper.cs +++ /dev/null @@ -1,1165 +0,0 @@ -//// Licensed to the .NET Foundation under one or more agreements. -//// The .NET Foundation licenses this file to you under the MIT license. - - -//// This file defines an internal static class used to throw exceptions in BCL code. -//// The main purpose is to reduce code size. -//// -//// The old way to throw an exception generates quite a lot IL code and assembly code. -//// Following is an example: -//// C# source -//// throw new ArgumentNullException(nameof(key), SR.ArgumentNull_Key); -//// IL code: -//// IL_0003: ldstr "key" -//// IL_0008: ldstr "ArgumentNull_Key" -//// IL_000d: call string System.Environment::GetResourceString(string) -//// IL_0012: newobj instance void System.ArgumentNullException::.ctor(string,string) -//// IL_0017: throw -//// which is 21bytes in IL. -//// -//// So we want to get rid of the ldstr and call to Environment.GetResource in IL. -//// In order to do that, I created two enums: ExceptionResource, ExceptionArgument to represent the -//// argument name and resource name in a small integer. The source code will be changed to -//// ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key, ExceptionResource.ArgumentNull_Key); -//// -//// The IL code will be 7 bytes. -//// IL_0008: ldc.i4.4 -//// IL_0009: ldc.i4.4 -//// IL_000a: call void System.ThrowHelper::ThrowArgumentNullException(valuetype System.ExceptionArgument) -//// IL_000f: ldarg.0 -//// -//// This will also reduce the Jitted code size a lot. -//// -//// It is very important we do this for generic classes because we can easily generate the same code -//// multiple times for different instantiation. -//// - -//using System.Buffers; -//using System.Collections.Generic; -//using System.Diagnostics; -//using System.Diagnostics.CodeAnalysis; -//using System.IO; -//using System.Runtime.CompilerServices; -//using System.Runtime.Serialization; - -//namespace System -//{ -// [StackTraceHidden] -// internal static class ThrowHelper -// { -// [DoesNotReturn] -// internal static void ThrowArrayTypeMismatchException() -// { -// throw new ArrayTypeMismatchException(); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidTypeWithPointersNotSupported(Type targetType) -// { -// throw new ArgumentException(SR.Format(SR.Argument_InvalidTypeWithPointersNotSupported, targetType)); -// } - -// [DoesNotReturn] -// internal static void ThrowIndexOutOfRangeException() -// { -// throw new IndexOutOfRangeException(); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException() -// { -// throw new ArgumentOutOfRangeException(); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_DestinationTooShort() -// { -// throw new ArgumentException(SR.Argument_DestinationTooShort, "destination"); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_OverlapAlignmentMismatch() -// { -// throw new ArgumentException(SR.Argument_OverlapAlignmentMismatch); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_CannotExtractScalar(ExceptionArgument argument) -// { -// throw GetArgumentException(ExceptionResource.Argument_CannotExtractScalar, argument); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_TupleIncorrectType(object obj) -// { -// throw new ArgumentException(SR.Format(SR.ArgumentException_ValueTupleIncorrectType, obj.GetType()), "other"); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_IndexException() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.index, -// ExceptionResource.ArgumentOutOfRange_Index); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_BadComparer(object? comparer) -// { -// throw new ArgumentException(SR.Format(SR.Arg_BogusIComparer, comparer)); -// } - -// [DoesNotReturn] -// internal static void ThrowIndexArgumentOutOfRange_NeedNonNegNumException() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.index, -// ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); -// } - -// [DoesNotReturn] -// internal static void ThrowValueArgumentOutOfRange_NeedNonNegNumException() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.value, -// ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); -// } - -// [DoesNotReturn] -// internal static void ThrowLengthArgumentOutOfRange_ArgumentOutOfRange_NeedNonNegNum() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.length, -// ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); -// } - -// [DoesNotReturn] -// internal static void ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.startIndex, -// ExceptionResource.ArgumentOutOfRange_Index); -// } - -// [DoesNotReturn] -// internal static void ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.count, -// ExceptionResource.ArgumentOutOfRange_Count); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_Year() -// { -// throw GetArgumentOutOfRangeException(ExceptionArgument.year, -// ExceptionResource.ArgumentOutOfRange_Year); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_Month(int month) -// { -// throw new ArgumentOutOfRangeException(nameof(month), month, SR.ArgumentOutOfRange_Month); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_DayNumber(int dayNumber) -// { -// throw new ArgumentOutOfRangeException(nameof(dayNumber), dayNumber, SR.ArgumentOutOfRange_DayNumber); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_BadYearMonthDay() -// { -// throw new ArgumentOutOfRangeException(null, SR.ArgumentOutOfRange_BadYearMonthDay); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_BadHourMinuteSecond() -// { -// throw new ArgumentOutOfRangeException(null, SR.ArgumentOutOfRange_BadHourMinuteSecond); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRange_TimeSpanTooLong() -// { -// throw new ArgumentOutOfRangeException(null, SR.Overflow_TimeSpanTooLong); -// } - -// [DoesNotReturn] -// internal static void ThrowWrongKeyTypeArgumentException(T key, Type targetType) -// { -// // Generic key to move the boxing to the right hand side of throw -// throw GetWrongKeyTypeArgumentException((object?)key, targetType); -// } - -// [DoesNotReturn] -// internal static void ThrowWrongValueTypeArgumentException(T value, Type targetType) -// { -// // Generic key to move the boxing to the right hand side of throw -// throw GetWrongValueTypeArgumentException((object?)value, targetType); -// } - -// private static ArgumentException GetAddingDuplicateWithKeyArgumentException(object? key) -// { -// return new ArgumentException(SR.Format(SR.Argument_AddingDuplicateWithKey, key)); -// } - -// [DoesNotReturn] -// internal static void ThrowAddingDuplicateWithKeyArgumentException(T key) -// { -// // Generic key to move the boxing to the right hand side of throw -// throw GetAddingDuplicateWithKeyArgumentException((object?)key); -// } - -// [DoesNotReturn] -// internal static void ThrowKeyNotFoundException(T key) -// { -// // Generic key to move the boxing to the right hand side of throw -// throw GetKeyNotFoundException((object?)key); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException(ExceptionResource resource) -// { -// throw GetArgumentException(resource); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException(ExceptionResource resource, ExceptionArgument argument) -// { -// throw GetArgumentException(resource, argument); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_HandleNotSync(string paramName) -// { -// throw new ArgumentException(SR.Arg_HandleNotSync, paramName); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_HandleNotAsync(string paramName) -// { -// throw new ArgumentException(SR.Arg_HandleNotAsync, paramName); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentNullException(ExceptionArgument argument) -// { -// throw new ArgumentNullException(GetArgumentName(argument)); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentNullException(ExceptionResource resource) -// { -// throw new ArgumentNullException(GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentNullException(ExceptionArgument argument, ExceptionResource resource) -// { -// throw new ArgumentNullException(GetArgumentName(argument), GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException(ExceptionArgument argument) -// { -// throw new ArgumentOutOfRangeException(GetArgumentName(argument)); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) -// { -// throw GetArgumentOutOfRangeException(argument, resource); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException(ExceptionArgument argument, int paramNumber, ExceptionResource resource) -// { -// throw GetArgumentOutOfRangeException(argument, paramNumber, resource); -// } - -// [DoesNotReturn] -// internal static void ThrowEndOfFileException() -// { -// throw CreateEndOfFileException(); -// } - -// internal static Exception CreateEndOfFileException() => -// new EndOfStreamException(SR.IO_EOF_ReadBeyondEOF); - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException() -// { -// throw new InvalidOperationException(); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException(ExceptionResource resource) -// { -// throw GetInvalidOperationException(resource); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_OutstandingReferences() -// { -// throw new InvalidOperationException(SR.Memory_OutstandingReferences); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException(ExceptionResource resource, Exception e) -// { -// throw new InvalidOperationException(GetResourceString(resource), e); -// } - -// [DoesNotReturn] -// internal static void ThrowSerializationException(ExceptionResource resource) -// { -// throw new SerializationException(GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowSecurityException(ExceptionResource resource) -// { -// throw new System.Security.SecurityException(GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowRankException(ExceptionResource resource) -// { -// throw new RankException(GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowNotSupportedException(ExceptionResource resource) -// { -// throw new NotSupportedException(GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowNotSupportedException_UnseekableStream() -// { -// throw new NotSupportedException(SR.NotSupported_UnseekableStream); -// } - -// [DoesNotReturn] -// internal static void ThrowNotSupportedException_UnreadableStream() -// { -// throw new NotSupportedException(SR.NotSupported_UnreadableStream); -// } - -// [DoesNotReturn] -// internal static void ThrowNotSupportedException_UnwritableStream() -// { -// throw new NotSupportedException(SR.NotSupported_UnwritableStream); -// } - -// [DoesNotReturn] -// internal static void ThrowUnauthorizedAccessException(ExceptionResource resource) -// { -// throw new UnauthorizedAccessException(GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowObjectDisposedException(string objectName, ExceptionResource resource) -// { -// throw new ObjectDisposedException(objectName, GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowObjectDisposedException_StreamClosed(string? objectName) -// { -// throw new ObjectDisposedException(objectName, SR.ObjectDisposed_StreamClosed); -// } - -// [DoesNotReturn] -// internal static void ThrowObjectDisposedException_FileClosed() -// { -// throw new ObjectDisposedException(null, SR.ObjectDisposed_FileClosed); -// } - -// [DoesNotReturn] -// internal static void ThrowObjectDisposedException(ExceptionResource resource) -// { -// throw new ObjectDisposedException(null, GetResourceString(resource)); -// } - -// [DoesNotReturn] -// internal static void ThrowNotSupportedException() -// { -// throw new NotSupportedException(); -// } - -// [DoesNotReturn] -// internal static void ThrowAggregateException(List exceptions) -// { -// throw new AggregateException(exceptions); -// } - -// [DoesNotReturn] -// internal static void ThrowOutOfMemoryException() -// { -// throw new OutOfMemoryException(); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_Argument_InvalidArrayType() -// { -// throw new ArgumentException(SR.Argument_InvalidArrayType); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentException_InvalidHandle(string? paramName) -// { -// throw new ArgumentException(SR.Arg_InvalidHandle, paramName); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_InvalidOperation_EnumNotStarted() -// { -// throw new InvalidOperationException(SR.InvalidOperation_EnumNotStarted); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_InvalidOperation_EnumEnded() -// { -// throw new InvalidOperationException(SR.InvalidOperation_EnumEnded); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_EnumCurrent(int index) -// { -// throw GetInvalidOperationException_EnumCurrent(index); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion() -// { -// throw new InvalidOperationException(SR.InvalidOperation_EnumFailedVersion); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen() -// { -// throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_InvalidOperation_NoValue() -// { -// throw new InvalidOperationException(SR.InvalidOperation_NoValue); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_ConcurrentOperationsNotSupported() -// { -// throw new InvalidOperationException(SR.InvalidOperation_ConcurrentOperationsNotSupported); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_HandleIsNotInitialized() -// { -// throw new InvalidOperationException(SR.InvalidOperation_HandleIsNotInitialized); -// } - -// [DoesNotReturn] -// internal static void ThrowInvalidOperationException_HandleIsNotPinned() -// { -// throw new InvalidOperationException(SR.InvalidOperation_HandleIsNotPinned); -// } - -// [DoesNotReturn] -// internal static void ThrowArraySegmentCtorValidationFailedExceptions(Array? array, int offset, int count) -// { -// throw GetArraySegmentCtorValidationFailedException(array, offset, count); -// } - -// [DoesNotReturn] -// internal static void ThrowFormatException_BadFormatSpecifier() -// { -// throw new FormatException(SR.Argument_BadFormatSpecifier); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException_PrecisionTooLarge() -// { -// throw new ArgumentOutOfRangeException("precision", SR.Format(SR.Argument_PrecisionTooLarge, StandardFormat.MaxPrecision)); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException_SymbolDoesNotFit() -// { -// throw new ArgumentOutOfRangeException("symbol", SR.Argument_BadFormatSpecifier); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException_NeedPosNum(string? paramName) -// { -// throw new ArgumentOutOfRangeException(paramName, SR.ArgumentOutOfRange_NeedPosNum); -// } - -// [DoesNotReturn] -// internal static void ThrowArgumentOutOfRangeException_NeedNonNegNum(string paramName) -// { -// throw new ArgumentOutOfRangeException(paramName, SR.ArgumentOutOfRange_NeedNonNegNum); -// } - -// [DoesNotReturn] -// internal static void ArgumentOutOfRangeException_Enum_Value() -// { -// throw new ArgumentOutOfRangeException("value", SR.ArgumentOutOfRange_Enum); -// } - -// private static Exception GetArraySegmentCtorValidationFailedException(Array? array, int offset, int count) -// { -// if (array == null) -// return new ArgumentNullException(nameof(array)); -// if (offset < 0) -// return new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_NeedNonNegNum); -// if (count < 0) -// return new ArgumentOutOfRangeException(nameof(count), SR.ArgumentOutOfRange_NeedNonNegNum); - -// Debug.Assert(array.Length - offset < count); -// return new ArgumentException(SR.Argument_InvalidOffLen); -// } - -// private static ArgumentException GetArgumentException(ExceptionResource resource) -// { -// return new ArgumentException(GetResourceString(resource)); -// } - -// private static InvalidOperationException GetInvalidOperationException(ExceptionResource resource) -// { -// return new InvalidOperationException(GetResourceString(resource)); -// } - -// private static ArgumentException GetWrongKeyTypeArgumentException(object? key, Type targetType) -// { -// return new ArgumentException(SR.Format(SR.Arg_WrongType, key, targetType), nameof(key)); -// } - -// private static ArgumentException GetWrongValueTypeArgumentException(object? value, Type targetType) -// { -// return new ArgumentException(SR.Format(SR.Arg_WrongType, value, targetType), nameof(value)); -// } - -// private static KeyNotFoundException GetKeyNotFoundException(object? key) -// { -// return new KeyNotFoundException(SR.Format(SR.Arg_KeyNotFoundWithKey, key)); -// } - -// private static ArgumentOutOfRangeException GetArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) -// { -// return new ArgumentOutOfRangeException(GetArgumentName(argument), GetResourceString(resource)); -// } - -// private static ArgumentException GetArgumentException(ExceptionResource resource, ExceptionArgument argument) -// { -// return new ArgumentException(GetResourceString(resource), GetArgumentName(argument)); -// } - -// private static ArgumentOutOfRangeException GetArgumentOutOfRangeException(ExceptionArgument argument, int paramNumber, ExceptionResource resource) -// { -// return new ArgumentOutOfRangeException(GetArgumentName(argument) + "[" + paramNumber.ToString() + "]", GetResourceString(resource)); -// } - -// private static InvalidOperationException GetInvalidOperationException_EnumCurrent(int index) -// { -// return new InvalidOperationException( -// index < 0 ? -// SR.InvalidOperation_EnumNotStarted : -// SR.InvalidOperation_EnumEnded); -// } - -// // Allow nulls for reference types and Nullable, but not for value types. -// // Aggressively inline so the jit evaluates the if in place and either drops the call altogether -// // Or just leaves null test and call to the Non-returning ThrowHelper.ThrowArgumentNullException -// [MethodImpl(MethodImplOptions.AggressiveInlining)] -// internal static void IfNullAndNullsAreIllegalThenThrow(object? value, ExceptionArgument argName) -// { -// // Note that default(T) is not equal to null for value types except when T is Nullable. -// if (!(default(T) == null) && value == null) -// ThrowHelper.ThrowArgumentNullException(argName); -// } - -// // Throws if 'T' is disallowed in Vector in the Numerics namespace. -// // If 'T' is allowed, no-ops. JIT will elide the method entirely if 'T' -// // is supported and we're on an optimized release build. -// [MethodImpl(MethodImplOptions.AggressiveInlining)] -// internal static void ThrowForUnsupportedNumericsVectorBaseType() where T : struct -// { -// if (typeof(T) != typeof(byte) && typeof(T) != typeof(sbyte) && -// typeof(T) != typeof(short) && typeof(T) != typeof(ushort) && -// typeof(T) != typeof(int) && typeof(T) != typeof(uint) && -// typeof(T) != typeof(long) && typeof(T) != typeof(ulong) && -// typeof(T) != typeof(float) && typeof(T) != typeof(double) && -// typeof(T) != typeof(nint) && typeof(T) != typeof(nuint)) -// { -// ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); -// } -// } - -// // Throws if 'T' is disallowed in Vector64/128/256 in the Intrinsics namespace. -// // If 'T' is allowed, no-ops. JIT will elide the method entirely if 'T' -// // is supported and we're on an optimized release build. -// [MethodImpl(MethodImplOptions.AggressiveInlining)] -// internal static void ThrowForUnsupportedIntrinsicsVectorBaseType() where T : struct -// { -// if (typeof(T) != typeof(byte) && typeof(T) != typeof(sbyte) && -// typeof(T) != typeof(short) && typeof(T) != typeof(ushort) && -// typeof(T) != typeof(int) && typeof(T) != typeof(uint) && -// typeof(T) != typeof(long) && typeof(T) != typeof(ulong) && -// typeof(T) != typeof(float) && typeof(T) != typeof(double)) -// { -// ThrowNotSupportedException(ExceptionResource.Arg_TypeNotSupported); -// } -// } - -//#if false // Reflection-based implementation does not work for CoreRT/ProjectN -// // This function will convert an ExceptionArgument enum value to the argument name string. -// [MethodImpl(MethodImplOptions.NoInlining)] -// private static string GetArgumentName(ExceptionArgument argument) -// { -// Debug.Assert(Enum.IsDefined(typeof(ExceptionArgument), argument), -// "The enum value is not defined, please check the ExceptionArgument Enum."); - -// return argument.ToString(); -// } -//#endif - -// private static string GetArgumentName(ExceptionArgument argument) -// { -// switch (argument) -// { -// case ExceptionArgument.obj: -// return "obj"; -// case ExceptionArgument.dictionary: -// return "dictionary"; -// case ExceptionArgument.array: -// return "array"; -// case ExceptionArgument.info: -// return "info"; -// case ExceptionArgument.key: -// return "key"; -// case ExceptionArgument.text: -// return "text"; -// case ExceptionArgument.values: -// return "values"; -// case ExceptionArgument.value: -// return "value"; -// case ExceptionArgument.startIndex: -// return "startIndex"; -// case ExceptionArgument.task: -// return "task"; -// case ExceptionArgument.bytes: -// return "bytes"; -// case ExceptionArgument.byteIndex: -// return "byteIndex"; -// case ExceptionArgument.byteCount: -// return "byteCount"; -// case ExceptionArgument.ch: -// return "ch"; -// case ExceptionArgument.chars: -// return "chars"; -// case ExceptionArgument.charIndex: -// return "charIndex"; -// case ExceptionArgument.charCount: -// return "charCount"; -// case ExceptionArgument.s: -// return "s"; -// case ExceptionArgument.input: -// return "input"; -// case ExceptionArgument.ownedMemory: -// return "ownedMemory"; -// case ExceptionArgument.list: -// return "list"; -// case ExceptionArgument.index: -// return "index"; -// case ExceptionArgument.capacity: -// return "capacity"; -// case ExceptionArgument.collection: -// return "collection"; -// case ExceptionArgument.item: -// return "item"; -// case ExceptionArgument.converter: -// return "converter"; -// case ExceptionArgument.match: -// return "match"; -// case ExceptionArgument.count: -// return "count"; -// case ExceptionArgument.action: -// return "action"; -// case ExceptionArgument.comparison: -// return "comparison"; -// case ExceptionArgument.exceptions: -// return "exceptions"; -// case ExceptionArgument.exception: -// return "exception"; -// case ExceptionArgument.pointer: -// return "pointer"; -// case ExceptionArgument.start: -// return "start"; -// case ExceptionArgument.format: -// return "format"; -// case ExceptionArgument.formats: -// return "formats"; -// case ExceptionArgument.culture: -// return "culture"; -// case ExceptionArgument.comparer: -// return "comparer"; -// case ExceptionArgument.comparable: -// return "comparable"; -// case ExceptionArgument.source: -// return "source"; -// case ExceptionArgument.state: -// return "state"; -// case ExceptionArgument.length: -// return "length"; -// case ExceptionArgument.comparisonType: -// return "comparisonType"; -// case ExceptionArgument.manager: -// return "manager"; -// case ExceptionArgument.sourceBytesToCopy: -// return "sourceBytesToCopy"; -// case ExceptionArgument.callBack: -// return "callBack"; -// case ExceptionArgument.creationOptions: -// return "creationOptions"; -// case ExceptionArgument.function: -// return "function"; -// case ExceptionArgument.scheduler: -// return "scheduler"; -// case ExceptionArgument.continuationAction: -// return "continuationAction"; -// case ExceptionArgument.continuationFunction: -// return "continuationFunction"; -// case ExceptionArgument.tasks: -// return "tasks"; -// case ExceptionArgument.asyncResult: -// return "asyncResult"; -// case ExceptionArgument.beginMethod: -// return "beginMethod"; -// case ExceptionArgument.endMethod: -// return "endMethod"; -// case ExceptionArgument.endFunction: -// return "endFunction"; -// case ExceptionArgument.cancellationToken: -// return "cancellationToken"; -// case ExceptionArgument.continuationOptions: -// return "continuationOptions"; -// case ExceptionArgument.delay: -// return "delay"; -// case ExceptionArgument.millisecondsDelay: -// return "millisecondsDelay"; -// case ExceptionArgument.millisecondsTimeout: -// return "millisecondsTimeout"; -// case ExceptionArgument.stateMachine: -// return "stateMachine"; -// case ExceptionArgument.timeout: -// return "timeout"; -// case ExceptionArgument.type: -// return "type"; -// case ExceptionArgument.sourceIndex: -// return "sourceIndex"; -// case ExceptionArgument.sourceArray: -// return "sourceArray"; -// case ExceptionArgument.destinationIndex: -// return "destinationIndex"; -// case ExceptionArgument.destinationArray: -// return "destinationArray"; -// case ExceptionArgument.pHandle: -// return "pHandle"; -// case ExceptionArgument.handle: -// return "handle"; -// case ExceptionArgument.other: -// return "other"; -// case ExceptionArgument.newSize: -// return "newSize"; -// case ExceptionArgument.lowerBounds: -// return "lowerBounds"; -// case ExceptionArgument.lengths: -// return "lengths"; -// case ExceptionArgument.len: -// return "len"; -// case ExceptionArgument.keys: -// return "keys"; -// case ExceptionArgument.indices: -// return "indices"; -// case ExceptionArgument.index1: -// return "index1"; -// case ExceptionArgument.index2: -// return "index2"; -// case ExceptionArgument.index3: -// return "index3"; -// case ExceptionArgument.length1: -// return "length1"; -// case ExceptionArgument.length2: -// return "length2"; -// case ExceptionArgument.length3: -// return "length3"; -// case ExceptionArgument.endIndex: -// return "endIndex"; -// case ExceptionArgument.elementType: -// return "elementType"; -// case ExceptionArgument.arrayIndex: -// return "arrayIndex"; -// case ExceptionArgument.year: -// return "year"; -// case ExceptionArgument.codePoint: -// return "codePoint"; -// case ExceptionArgument.str: -// return "str"; -// case ExceptionArgument.options: -// return "options"; -// case ExceptionArgument.prefix: -// return "prefix"; -// case ExceptionArgument.suffix: -// return "suffix"; -// case ExceptionArgument.buffer: -// return "buffer"; -// case ExceptionArgument.buffers: -// return "buffers"; -// case ExceptionArgument.offset: -// return "offset"; -// case ExceptionArgument.stream: -// return "stream"; -// default: -// Debug.Fail("The enum value is not defined, please check the ExceptionArgument Enum."); -// return ""; -// } -// } - -//#if false // Reflection-based implementation does not work for CoreRT/ProjectN -// // This function will convert an ExceptionResource enum value to the resource string. -// [MethodImpl(MethodImplOptions.NoInlining)] -// private static string GetResourceString(ExceptionResource resource) -// { -// Debug.Assert(Enum.IsDefined(typeof(ExceptionResource), resource), -// "The enum value is not defined, please check the ExceptionResource Enum."); - -// return SR.GetResourceString(resource.ToString()); -// } -//#endif - -// private static string GetResourceString(ExceptionResource resource) -// { -// switch (resource) -// { -// case ExceptionResource.ArgumentOutOfRange_Index: -// return SR.ArgumentOutOfRange_Index; -// case ExceptionResource.ArgumentOutOfRange_IndexCount: -// return SR.ArgumentOutOfRange_IndexCount; -// case ExceptionResource.ArgumentOutOfRange_IndexCountBuffer: -// return SR.ArgumentOutOfRange_IndexCountBuffer; -// case ExceptionResource.ArgumentOutOfRange_Count: -// return SR.ArgumentOutOfRange_Count; -// case ExceptionResource.ArgumentOutOfRange_Year: -// return SR.ArgumentOutOfRange_Year; -// case ExceptionResource.Arg_ArrayPlusOffTooSmall: -// return SR.Arg_ArrayPlusOffTooSmall; -// case ExceptionResource.NotSupported_ReadOnlyCollection: -// return SR.NotSupported_ReadOnlyCollection; -// case ExceptionResource.Arg_RankMultiDimNotSupported: -// return SR.Arg_RankMultiDimNotSupported; -// case ExceptionResource.Arg_NonZeroLowerBound: -// return SR.Arg_NonZeroLowerBound; -// case ExceptionResource.ArgumentOutOfRange_GetCharCountOverflow: -// return SR.ArgumentOutOfRange_GetCharCountOverflow; -// case ExceptionResource.ArgumentOutOfRange_ListInsert: -// return SR.ArgumentOutOfRange_ListInsert; -// case ExceptionResource.ArgumentOutOfRange_NeedNonNegNum: -// return SR.ArgumentOutOfRange_NeedNonNegNum; -// case ExceptionResource.ArgumentOutOfRange_SmallCapacity: -// return SR.ArgumentOutOfRange_SmallCapacity; -// case ExceptionResource.Argument_InvalidOffLen: -// return SR.Argument_InvalidOffLen; -// case ExceptionResource.Argument_CannotExtractScalar: -// return SR.Argument_CannotExtractScalar; -// case ExceptionResource.ArgumentOutOfRange_BiggerThanCollection: -// return SR.ArgumentOutOfRange_BiggerThanCollection; -// case ExceptionResource.Serialization_MissingKeys: -// return SR.Serialization_MissingKeys; -// case ExceptionResource.Serialization_NullKey: -// return SR.Serialization_NullKey; -// case ExceptionResource.NotSupported_KeyCollectionSet: -// return SR.NotSupported_KeyCollectionSet; -// case ExceptionResource.NotSupported_ValueCollectionSet: -// return SR.NotSupported_ValueCollectionSet; -// case ExceptionResource.InvalidOperation_NullArray: -// return SR.InvalidOperation_NullArray; -// case ExceptionResource.TaskT_TransitionToFinal_AlreadyCompleted: -// return SR.TaskT_TransitionToFinal_AlreadyCompleted; -// case ExceptionResource.TaskCompletionSourceT_TrySetException_NullException: -// return SR.TaskCompletionSourceT_TrySetException_NullException; -// case ExceptionResource.TaskCompletionSourceT_TrySetException_NoExceptions: -// return SR.TaskCompletionSourceT_TrySetException_NoExceptions; -// case ExceptionResource.NotSupported_StringComparison: -// return SR.NotSupported_StringComparison; -// case ExceptionResource.ConcurrentCollection_SyncRoot_NotSupported: -// return SR.ConcurrentCollection_SyncRoot_NotSupported; -// case ExceptionResource.Task_MultiTaskContinuation_NullTask: -// return SR.Task_MultiTaskContinuation_NullTask; -// case ExceptionResource.InvalidOperation_WrongAsyncResultOrEndCalledMultiple: -// return SR.InvalidOperation_WrongAsyncResultOrEndCalledMultiple; -// case ExceptionResource.Task_MultiTaskContinuation_EmptyTaskList: -// return SR.Task_MultiTaskContinuation_EmptyTaskList; -// case ExceptionResource.Task_Start_TaskCompleted: -// return SR.Task_Start_TaskCompleted; -// case ExceptionResource.Task_Start_Promise: -// return SR.Task_Start_Promise; -// case ExceptionResource.Task_Start_ContinuationTask: -// return SR.Task_Start_ContinuationTask; -// case ExceptionResource.Task_Start_AlreadyStarted: -// return SR.Task_Start_AlreadyStarted; -// case ExceptionResource.Task_RunSynchronously_Continuation: -// return SR.Task_RunSynchronously_Continuation; -// case ExceptionResource.Task_RunSynchronously_Promise: -// return SR.Task_RunSynchronously_Promise; -// case ExceptionResource.Task_RunSynchronously_TaskCompleted: -// return SR.Task_RunSynchronously_TaskCompleted; -// case ExceptionResource.Task_RunSynchronously_AlreadyStarted: -// return SR.Task_RunSynchronously_AlreadyStarted; -// case ExceptionResource.AsyncMethodBuilder_InstanceNotInitialized: -// return SR.AsyncMethodBuilder_InstanceNotInitialized; -// case ExceptionResource.Task_ContinueWith_ESandLR: -// return SR.Task_ContinueWith_ESandLR; -// case ExceptionResource.Task_ContinueWith_NotOnAnything: -// return SR.Task_ContinueWith_NotOnAnything; -// case ExceptionResource.Task_InvalidTimerTimeSpan: -// return SR.Task_InvalidTimerTimeSpan; -// case ExceptionResource.Task_Delay_InvalidMillisecondsDelay: -// return SR.Task_Delay_InvalidMillisecondsDelay; -// case ExceptionResource.Task_Dispose_NotCompleted: -// return SR.Task_Dispose_NotCompleted; -// case ExceptionResource.Task_ThrowIfDisposed: -// return SR.Task_ThrowIfDisposed; -// case ExceptionResource.Task_WaitMulti_NullTask: -// return SR.Task_WaitMulti_NullTask; -// case ExceptionResource.ArgumentException_OtherNotArrayOfCorrectLength: -// return SR.ArgumentException_OtherNotArrayOfCorrectLength; -// case ExceptionResource.ArgumentNull_Array: -// return SR.ArgumentNull_Array; -// case ExceptionResource.ArgumentNull_SafeHandle: -// return SR.ArgumentNull_SafeHandle; -// case ExceptionResource.ArgumentOutOfRange_EndIndexStartIndex: -// return SR.ArgumentOutOfRange_EndIndexStartIndex; -// case ExceptionResource.ArgumentOutOfRange_Enum: -// return SR.ArgumentOutOfRange_Enum; -// case ExceptionResource.ArgumentOutOfRange_HugeArrayNotSupported: -// return SR.ArgumentOutOfRange_HugeArrayNotSupported; -// case ExceptionResource.Argument_AddingDuplicate: -// return SR.Argument_AddingDuplicate; -// case ExceptionResource.Argument_InvalidArgumentForComparison: -// return SR.Argument_InvalidArgumentForComparison; -// case ExceptionResource.Arg_LowerBoundsMustMatch: -// return SR.Arg_LowerBoundsMustMatch; -// case ExceptionResource.Arg_MustBeType: -// return SR.Arg_MustBeType; -// case ExceptionResource.Arg_Need1DArray: -// return SR.Arg_Need1DArray; -// case ExceptionResource.Arg_Need2DArray: -// return SR.Arg_Need2DArray; -// case ExceptionResource.Arg_Need3DArray: -// return SR.Arg_Need3DArray; -// case ExceptionResource.Arg_NeedAtLeast1Rank: -// return SR.Arg_NeedAtLeast1Rank; -// case ExceptionResource.Arg_RankIndices: -// return SR.Arg_RankIndices; -// case ExceptionResource.Arg_RanksAndBounds: -// return SR.Arg_RanksAndBounds; -// case ExceptionResource.InvalidOperation_IComparerFailed: -// return SR.InvalidOperation_IComparerFailed; -// case ExceptionResource.NotSupported_FixedSizeCollection: -// return SR.NotSupported_FixedSizeCollection; -// case ExceptionResource.Rank_MultiDimNotSupported: -// return SR.Rank_MultiDimNotSupported; -// case ExceptionResource.Arg_TypeNotSupported: -// return SR.Arg_TypeNotSupported; -// case ExceptionResource.Argument_SpansMustHaveSameLength: -// return SR.Argument_SpansMustHaveSameLength; -// case ExceptionResource.Argument_InvalidFlag: -// return SR.Argument_InvalidFlag; -// case ExceptionResource.CancellationTokenSource_Disposed: -// return SR.CancellationTokenSource_Disposed; -// case ExceptionResource.Argument_AlignmentMustBePow2: -// return SR.Argument_AlignmentMustBePow2; -// default: -// Debug.Fail("The enum value is not defined, please check the ExceptionResource Enum."); -// return ""; -// } -// } -// } - -// // -// // The convention for this enum is using the argument name as the enum name -// // -// internal enum ExceptionArgument -// { -// obj, -// dictionary, -// array, -// info, -// key, -// text, -// values, -// value, -// startIndex, -// task, -// bytes, -// byteIndex, -// byteCount, -// ch, -// chars, -// charIndex, -// charCount, -// s, -// input, -// ownedMemory, -// list, -// index, -// capacity, -// collection, -// item, -// converter, -// match, -// count, -// action, -// comparison, -// exceptions, -// exception, -// pointer, -// start, -// format, -// formats, -// culture, -// comparer, -// comparable, -// source, -// state, -// length, -// comparisonType, -// manager, -// sourceBytesToCopy, -// callBack, -// creationOptions, -// function, -// scheduler, -// continuationAction, -// continuationFunction, -// tasks, -// asyncResult, -// beginMethod, -// endMethod, -// endFunction, -// cancellationToken, -// continuationOptions, -// delay, -// millisecondsDelay, -// millisecondsTimeout, -// stateMachine, -// timeout, -// type, -// sourceIndex, -// sourceArray, -// destinationIndex, -// destinationArray, -// pHandle, -// handle, -// other, -// newSize, -// lowerBounds, -// lengths, -// len, -// keys, -// indices, -// index1, -// index2, -// index3, -// length1, -// length2, -// length3, -// endIndex, -// elementType, -// arrayIndex, -// year, -// codePoint, -// str, -// options, -// prefix, -// suffix, -// buffer, -// buffers, -// offset, -// stream -// } - -// // -// // The convention for this enum is using the resource name as the enum name -// // -// internal enum ExceptionResource -// { -// ArgumentOutOfRange_Index, -// ArgumentOutOfRange_IndexCount, -// ArgumentOutOfRange_IndexCountBuffer, -// ArgumentOutOfRange_Count, -// ArgumentOutOfRange_Year, -// Arg_ArrayPlusOffTooSmall, -// NotSupported_ReadOnlyCollection, -// Arg_RankMultiDimNotSupported, -// Arg_NonZeroLowerBound, -// ArgumentOutOfRange_GetCharCountOverflow, -// ArgumentOutOfRange_ListInsert, -// ArgumentOutOfRange_NeedNonNegNum, -// ArgumentOutOfRange_SmallCapacity, -// Argument_InvalidOffLen, -// Argument_CannotExtractScalar, -// ArgumentOutOfRange_BiggerThanCollection, -// Serialization_MissingKeys, -// Serialization_NullKey, -// NotSupported_KeyCollectionSet, -// NotSupported_ValueCollectionSet, -// InvalidOperation_NullArray, -// TaskT_TransitionToFinal_AlreadyCompleted, -// TaskCompletionSourceT_TrySetException_NullException, -// TaskCompletionSourceT_TrySetException_NoExceptions, -// NotSupported_StringComparison, -// ConcurrentCollection_SyncRoot_NotSupported, -// Task_MultiTaskContinuation_NullTask, -// InvalidOperation_WrongAsyncResultOrEndCalledMultiple, -// Task_MultiTaskContinuation_EmptyTaskList, -// Task_Start_TaskCompleted, -// Task_Start_Promise, -// Task_Start_ContinuationTask, -// Task_Start_AlreadyStarted, -// Task_RunSynchronously_Continuation, -// Task_RunSynchronously_Promise, -// Task_RunSynchronously_TaskCompleted, -// Task_RunSynchronously_AlreadyStarted, -// AsyncMethodBuilder_InstanceNotInitialized, -// Task_ContinueWith_ESandLR, -// Task_ContinueWith_NotOnAnything, -// Task_InvalidTimerTimeSpan, -// Task_Delay_InvalidMillisecondsDelay, -// Task_Dispose_NotCompleted, -// Task_ThrowIfDisposed, -// Task_WaitMulti_NullTask, -// ArgumentException_OtherNotArrayOfCorrectLength, -// ArgumentNull_Array, -// ArgumentNull_SafeHandle, -// ArgumentOutOfRange_EndIndexStartIndex, -// ArgumentOutOfRange_Enum, -// ArgumentOutOfRange_HugeArrayNotSupported, -// Argument_AddingDuplicate, -// Argument_InvalidArgumentForComparison, -// Arg_LowerBoundsMustMatch, -// Arg_MustBeType, -// Arg_Need1DArray, -// Arg_Need2DArray, -// Arg_Need3DArray, -// Arg_NeedAtLeast1Rank, -// Arg_RankIndices, -// Arg_RanksAndBounds, -// InvalidOperation_IComparerFailed, -// NotSupported_FixedSizeCollection, -// Rank_MultiDimNotSupported, -// Arg_TypeNotSupported, -// Argument_SpansMustHaveSameLength, -// Argument_InvalidFlag, -// CancellationTokenSource_Disposed, -// Argument_AlignmentMustBePow2, -// } -//} \ No newline at end of file diff --git a/app/XDM/FFmpegCustomBuild/ReadME.txt b/app/XDM/FFmpegCustomBuild/ReadME.txt new file mode 100644 index 0000000..ba861bb --- /dev/null +++ b/app/XDM/FFmpegCustomBuild/ReadME.txt @@ -0,0 +1,2 @@ +Clone https://github.com/m-ab-s/media-autobuild_suite +Put ffmpeg_options.txt inside build folder \ No newline at end of file diff --git a/app/XDM/FFmpegCustomBuild/ffmpeg_options.txt b/app/XDM/FFmpegCustomBuild/ffmpeg_options.txt new file mode 100644 index 0000000..3b42bb3 --- /dev/null +++ b/app/XDM/FFmpegCustomBuild/ffmpeg_options.txt @@ -0,0 +1,16 @@ +# Lines starting with this character are ignored +# To override some options specifically for the shared build, create a ffmpeg_options_shared.txt file. + +# Basic built-in options, can be removed if you delete "--disable-autodetect" +--disable-everything +--disable-network +--disable-autodetect +--enable-small +--enable-demuxer=mov,mp4,m4a,3gp,3g2,mj2,matroska,webm,mpegts +--enable-libmp3lame +--enable-encoder=libmp3lame +--enable-muxer=mp4,matroska,mpegts,mp3 +--enable-protocol=file,srt,concat +--enable-bsfs +--enable-filter=acopy,concat,copy +--enable-decoder=vorbis,opus,aac,ac3 diff --git a/app/XDM/HttpServer/HttpServer.csproj b/app/XDM/HttpServer/HttpServer.csproj deleted file mode 100644 index 965af94..0000000 --- a/app/XDM/HttpServer/HttpServer.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net3.5;net4.5;net4.7.2;net5.0 - 9.0 - enable - - - - - - - - \ No newline at end of file diff --git a/app/XDM/Interop.WinHttp/Interop.WinHttp.csproj b/app/XDM/Interop.WinHttp/Interop.WinHttp.csproj deleted file mode 100644 index 3f552f2..0000000 --- a/app/XDM/Interop.WinHttp/Interop.WinHttp.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net3.5;net4.5;net4.7.2;net5.0 - 9.0 - enable - - - diff --git a/app/XDM/Interop.WinHttp/Interop.winhttp.cs b/app/XDM/Interop.WinHttp/Interop.winhttp.cs deleted file mode 100644 index 335271f..0000000 --- a/app/XDM/Interop.WinHttp/Interop.winhttp.cs +++ /dev/null @@ -1,208 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Runtime.InteropServices; -using System.Text; - - Interop -{ - class Libraries - { - public const string WinHttp = "winhttp.dll"; - } - internal static partial class WinHttp - { - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - public static extern SafeWinHttpHandle WinHttpOpen( - IntPtr userAgent, - uint accessType, - string? proxyName, - string? proxyBypass, int flags); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpCloseHandle( - IntPtr handle); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - public static extern SafeWinHttpHandle WinHttpConnect( - SafeWinHttpHandle sessionHandle, - string serverName, - ushort serverPort, - uint reserved); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - public static extern SafeWinHttpHandle WinHttpOpenRequest( - SafeWinHttpHandle connectHandle, - string verb, - string objectName, - string? version, - string referrer, - string acceptTypes, - uint flags); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpAddRequestHeaders( - SafeWinHttpHandle requestHandle, -#pragma warning disable CA1838 // Uses pooled StringBuilder - [In] StringBuilder headers, -#pragma warning restore CA1838 - uint headersLength, - uint modifiers); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpAddRequestHeaders( - SafeWinHttpHandle requestHandle, - string headers, - uint headersLength, - uint modifiers); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpSendRequest( - SafeWinHttpHandle requestHandle, - IntPtr headers, - uint headersLength, - IntPtr optional, - uint optionalLength, - uint totalLength, - IntPtr context); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpReceiveResponse( - SafeWinHttpHandle requestHandle, - IntPtr reserved); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryDataAvailable( - SafeWinHttpHandle requestHandle, - IntPtr parameterIgnoredAndShouldBeNullForAsync); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpReadData( - SafeWinHttpHandle requestHandle, - IntPtr buffer, - uint bufferSize, - IntPtr parameterIgnoredAndShouldBeNullForAsync); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryHeaders( - SafeWinHttpHandle requestHandle, - uint infoLevel, - string name, - IntPtr buffer, - ref uint bufferLength, - ref uint index); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryHeaders( - SafeWinHttpHandle requestHandle, - uint infoLevel, - string name, - ref uint number, - ref uint bufferLength, - IntPtr index); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryOption( - SafeWinHttpHandle handle, - uint option, - ref IntPtr buffer, - ref uint bufferSize); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryOption( - SafeWinHttpHandle handle, - uint option, - IntPtr buffer, - ref uint bufferSize); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryOption( - SafeWinHttpHandle handle, - uint option, - ref uint buffer, - ref uint bufferSize); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpWriteData( - SafeWinHttpHandle requestHandle, - IntPtr buffer, - uint bufferSize, - IntPtr parameterIgnoredAndShouldBeNullForAsync); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpSetOption( - SafeWinHttpHandle handle, - uint option, - ref uint optionData, - uint optionLength = sizeof(uint)); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpSetOption( - SafeWinHttpHandle handle, - uint option, - IntPtr optionData, - uint optionLength); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpSetCredentials( - SafeWinHttpHandle requestHandle, - uint authTargets, - uint authScheme, - string? userName, - string? password, - IntPtr reserved); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpQueryAuthSchemes( - SafeWinHttpHandle requestHandle, - out uint supportedSchemes, - out uint firstScheme, - out uint authTarget); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpSetTimeouts( - SafeWinHttpHandle handle, - int resolveTimeout, - int connectTimeout, - int sendTimeout, - int receiveTimeout); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpGetIEProxyConfigForCurrentUser( - out WINHTTP_CURRENT_USER_IE_PROXY_CONFIG proxyConfig); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool WinHttpGetProxyForUrl( - SafeWinHttpHandle? sessionHandle, string url, - ref WINHTTP_AUTOPROXY_OPTIONS autoProxyOptions, - out WINHTTP_PROXY_INFO proxyInfo); - - [DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)] - public static extern IntPtr WinHttpSetStatusCallback( - SafeWinHttpHandle handle, - WINHTTP_STATUS_CALLBACK callback, - uint notificationFlags, - IntPtr reserved); - } -} diff --git a/app/XDM/Lang/Arabic (العربية).txt b/app/XDM/Lang/Arabic.txt similarity index 100% rename from app/XDM/Lang/Arabic (العربية).txt rename to app/XDM/Lang/Arabic.txt diff --git a/app/XDM/Lang/Chinese Traditional (繁體中文).txt b/app/XDM/Lang/Chinese Traditional.txt similarity index 100% rename from app/XDM/Lang/Chinese Traditional (繁體中文).txt rename to app/XDM/Lang/Chinese Traditional.txt diff --git a/app/XDM/Lang/Chinese simplified (简体中文).txt b/app/XDM/Lang/Chinese simplified.txt similarity index 100% rename from app/XDM/Lang/Chinese simplified (简体中文).txt rename to app/XDM/Lang/Chinese simplified.txt diff --git a/app/XDM/Lang/English.txt b/app/XDM/Lang/English.txt index 96caa40..7ab9b9a 100644 --- a/app/XDM/Lang/English.txt +++ b/app/XDM/Lang/English.txt @@ -53,7 +53,7 @@ ND_ADDRESS=Address ND_FILE=File LBL_SAVE_IN=Save in ND_IGNORE_URL=Do not capture download from this address -ND_MORE=MORE... +ND_MORE=More... ND_DOWNLOAD_LATER=Download Later ND_DOWNLOAD_NOW=Download Now ND_AUTO_CAT=Automatically select based on file type @@ -84,8 +84,8 @@ MSG_DOWNLOAD_FFMPEG=Download FFmpeg? LBL_QUEUE_OPT3=Do not use queue VID_PASTE_URL=Please paste video URL link here SETTINGS_ADV=Advanced settings -VID_CHK=Check/Uncheck All -O_VID_FMT=Formats +VID_CHK=Select all +O_VID_FMT=Format BAT_PATTERN=Pattern BAT_LINKS=Links BAT_SELECT_ITEMS=Select items to download @@ -126,8 +126,8 @@ SETTINGS_GENERAL=General settings SETTINGS_NETWORK=Network settings SETTINGS_CRED=Password manager SETTINGS_ADV=Advanced settings -DESC_MONITORING_1=Please select browsers to monitor and make sure, browser addon is installed and enabled in respective browsers -DESC_OTHER_BROWSERS=XDM can also be integrated into other Chromium based browser (SRWare Iron etc) or Mozilla based (Icewasel, Waterfox etc) browsers using below links +DESC_MONITORING_1=Please make sure XDM extension is installed in your browser. To install the browser extension, please click on the buttons below or copy paste the link directly in the browser +DESC_OTHER_BROWSERS=XDM can also be integrated into other Chromium based browser (Vivaldi, Brave browser etc) or Mozilla based (Icewasel, Waterfox etc) browsers using below links DESC_CHROME=Chromium based browsers DESC_MOZ=Firefox based browsers DESC_FILETYPES=XDM will automatically take over downloads from browser for below file types @@ -152,7 +152,7 @@ SETTINGS_FOLDER=Default download folder SETTINGS_DARK_THEME=Use dark theme if possible (Require app restart) SETTINGS_CAT_ADD=Add SETTINGS_CAT_EDIT=Edit -DESC_NET1=Connection timeout +DESC_NET1=Connection timeout in seconds DESC_NET2=Segments per download NET_MAX_RETRY=Maximum retry limit NET_SYSTEM_PROXY=Use system proxy settings @@ -189,4 +189,31 @@ MSG_NO_UPDATE=No updates available/already upto date MSG_UPDATED=Update successfull MSG_ALREADY_RUNNING=An old version of XDM is already running MSG_BROWSER_LAUNCH_FAILED=Unable to launch -MSG_NATIVE_HOST_FAILED=Error installing native host \ No newline at end of file +MSG_NATIVE_HOST_FAILED=Error installing native host +MSG_DONT_SHOW_AGAIN=Don't show this again +MSG_NO_USERNAME=User name required +MSG_REF_LINK_MSG=New download link is accepted +MSG_CATEGORY=Category +MSG_CAT_NAME_MISSING=Category name required +MSG_CAT_FILE_TYPES_MISSING=File types required +MSG_CAT_FOLDER_MISSING=Download folder required +MSG_HOST_NAME_MISSING=Host name required +MSG_QUALITY=Quality +MSG_MP3=Mp3 Audio +MSG_TIME=Time +STAT_ASSEMBLING=Assembling +STAT_WAITING=Waiting +MSG_UPDATE_AVAILABLE=Update(s) available +MSG_RESTORE=Restore Window +MSG_DOUBLE_CLICK_ACTION=Double click on download item +MSG_OPEN_FILE=Open file +MSG_FALLBACK_UA=User agent to be used if download is added manually +MSG_SAVE_AS_MP3=Save as MP3 +MSG_VID_WIKI_TEXT=If you are interested in downloading streaming video from the browser using XDM +MSG_VID_WIKI_LINK=Please click here +NO_REFRESH_LINK=Link refresh is not available for this download +MSG_NO_VIDEO=No video found. However there might be other ways to download the video. Please click "Learn More" button for details. +MSG_VIDEO_DOWNLOAD_HELP=Learn More +MSG_READ_BROWSER_COOKIE=Read cookies from browser +MSG_SELECT_FOLDER=Select +MSG_IMPORT_DONE=Import complete \ No newline at end of file diff --git a/app/XDM/Lang/Farsi - Persian (فارسی).txt b/app/XDM/Lang/Farsi-Persian.txt similarity index 100% rename from app/XDM/Lang/Farsi - Persian (فارسی).txt rename to app/XDM/Lang/Farsi-Persian.txt diff --git a/app/XDM/Lang/French(Français).txt b/app/XDM/Lang/French.txt similarity index 100% rename from app/XDM/Lang/French(Français).txt rename to app/XDM/Lang/French.txt diff --git a/app/XDM/Lang/German(Deutsch).txt b/app/XDM/Lang/German.txt similarity index 100% rename from app/XDM/Lang/German(Deutsch).txt rename to app/XDM/Lang/German.txt diff --git a/app/XDM/Lang/Indonesian (Bahasa Indonesia).txt b/app/XDM/Lang/Indonesian.txt similarity index 100% rename from app/XDM/Lang/Indonesian (Bahasa Indonesia).txt rename to app/XDM/Lang/Indonesian.txt diff --git a/app/XDM/Lang/Korea (한국어).txt b/app/XDM/Lang/Korea.txt similarity index 100% rename from app/XDM/Lang/Korea (한국어).txt rename to app/XDM/Lang/Korea.txt diff --git a/app/XDM/Lang/Portuguese Brazil (Português (Brasil)).txt b/app/XDM/Lang/Portuguese Brazil.txt similarity index 100% rename from app/XDM/Lang/Portuguese Brazil (Português (Brasil)).txt rename to app/XDM/Lang/Portuguese Brazil.txt diff --git a/app/XDM/Lang/Romanian (ROMÂNĂ).txt b/app/XDM/Lang/Romanian.txt similarity index 100% rename from app/XDM/Lang/Romanian (ROMÂNĂ).txt rename to app/XDM/Lang/Romanian.txt diff --git a/app/XDM/Lang/Russian(Rусский).txt b/app/XDM/Lang/Russian.txt similarity index 100% rename from app/XDM/Lang/Russian(Rусский).txt rename to app/XDM/Lang/Russian.txt diff --git a/app/XDM/Lang/Serbian - Latin (Srpski (latinica)).txt b/app/XDM/Lang/Serbian - Latin.txt similarity index 100% rename from app/XDM/Lang/Serbian - Latin (Srpski (latinica)).txt rename to app/XDM/Lang/Serbian - Latin.txt diff --git a/app/XDM/Lang/Serbian Cyrillic (Српски (ћирилица)).txt b/app/XDM/Lang/Serbian Cyrillic.txt similarity index 100% rename from app/XDM/Lang/Serbian Cyrillic (Српски (ћирилица)).txt rename to app/XDM/Lang/Serbian Cyrillic.txt diff --git a/app/XDM/Lang/Spanish (Español).txt b/app/XDM/Lang/Spanish.txt similarity index 100% rename from app/XDM/Lang/Spanish (Español).txt rename to app/XDM/Lang/Spanish.txt diff --git a/app/XDM/Lang/Traditional Chinese - Taiwan (繁體中文(台灣)).txt b/app/XDM/Lang/Traditional Chinese - Taiwan.txt similarity index 100% rename from app/XDM/Lang/Traditional Chinese - Taiwan (繁體中文(台灣)).txt rename to app/XDM/Lang/Traditional Chinese - Taiwan.txt diff --git a/app/XDM/Lang/Turkish(Türkçe).txt b/app/XDM/Lang/Turkish.txt similarity index 100% rename from app/XDM/Lang/Turkish(Türkçe).txt rename to app/XDM/Lang/Turkish.txt diff --git a/app/XDM/Lang/Ukrainian(Українська).txt b/app/XDM/Lang/Ukrainian.txt similarity index 100% rename from app/XDM/Lang/Ukrainian(Українська).txt rename to app/XDM/Lang/Ukrainian.txt diff --git a/app/XDM/Lang/index.txt b/app/XDM/Lang/index.txt new file mode 100644 index 0000000..3b84fec --- /dev/null +++ b/app/XDM/Lang/index.txt @@ -0,0 +1,25 @@ +English=English.txt +Arabic (العربية)=Arabic.txt +Chinese simplified (简体中文)=Chinese simplified.txt +Chinese Traditional (繁體中文)=Chinese Traditional.txt +Czech=Czech.txt +Farsi - Persian (فارسی)=Farsi-Persian.txt +French(Français)=French.txt +German(Deutsch)=German.txt +Hungarian=Hungarian.txt +Indonesian (Bahasa Indonesia)=Indonesian.txt +Italian=Italian.txt +Korea (한국어)=Korea.txt +Malayalam=Malayalam.txt +Nepali=Nepali.txt +Polish=Polish.txt +Portuguese Brazil (Português (Brasil))=Portuguese Brazil.txt +Romanian (ROMÂNĂ)=Romanian.txt +Russian(Rусский)=Russian.txt +Serbian - Latin (Srpski (latinica))=Serbian - Latin.txt +Serbian Cyrillic (Српски (ћирилица))=Serbian Cyrillic.txt +Spanish (Español)=Spanish.txt +Traditional Chinese - Taiwan (繁體中文(台灣))=Traditional Chinese - Taiwan.txt +Turkish(Türkçe)=Turkish.txt +Ukrainian(Українська)=Ukrainian.txt +Vietnamese=Vietnamese.txt \ No newline at end of file diff --git a/app/XDM/MediaParser.Hls/MediaParser.csproj b/app/XDM/MediaParser.Hls/MediaParser.csproj deleted file mode 100644 index 4b49013..0000000 --- a/app/XDM/MediaParser.Hls/MediaParser.csproj +++ /dev/null @@ -1,40 +0,0 @@ - - - - net3.5;net4.5;net4.7.2;net5.0 - AnyCPU;x86 - 9.0 - enable - - - - - - - - - - - - - - - 4.5.0 - - - - - - 4.5.0 - - - - - - 4.5.0 - - - - diff --git a/app/XDM/MockServer/MockServer.csproj b/app/XDM/MockServer/MockServer.csproj index 913bf3e..74d6759 100644 --- a/app/XDM/MockServer/MockServer.csproj +++ b/app/XDM/MockServer/MockServer.csproj @@ -1,12 +1,17 @@ - net5.0;net4.5.2 - AnyCPU;x86 + net5.0; + AnyCPU;x86;x64 9.0 enable + + none + false + + @@ -14,8 +19,4 @@ - - - - diff --git a/app/XDM/NativeMessagingHost/BlockingCollection.cs b/app/XDM/NativeMessagingHost/BlockingCollection.cs new file mode 100644 index 0000000..127fe16 --- /dev/null +++ b/app/XDM/NativeMessagingHost/BlockingCollection.cs @@ -0,0 +1,39 @@ +#if NET35 + +using System.Collections.Generic; +using System.Threading; + +namespace NetFX.Polyfill2 +{ + public class BlockingCollection + { + private object _queueLock = new(); + private Queue _queue = new(); + private AutoResetEvent _objectAvailableEvent = new(false); + + public T Take() + { + lock (_queueLock) + { + if (_queue.Count > 0) + return _queue.Dequeue(); + } + + _objectAvailableEvent.WaitOne(); + + return Take(); + } + + public void Add(T obj) + { + lock (_queueLock) + { + _queue.Enqueue(obj); + } + + _objectAvailableEvent.Set(); + } + } +} + +#endif diff --git a/app/XDM/NativeMessagingHost/NativeMessagingHost.csproj b/app/XDM/NativeMessagingHost/NativeMessagingHost.csproj index 1d79512..870fce2 100644 --- a/app/XDM/NativeMessagingHost/NativeMessagingHost.csproj +++ b/app/XDM/NativeMessagingHost/NativeMessagingHost.csproj @@ -2,30 +2,27 @@ Exe - net3.5;net4.5;net4.7.2;net5.0 + net3.5;net4.7.2;net6.0 true 9.0 - AnyCPU;x86 - + + - + - - - - - - + App.PostDotNet4.config @@ -33,4 +30,11 @@ App.PreDotNet4.config + + none + false + + + + diff --git a/app/XDM/NativeMessagingHost/NativeMessagingHostApp.cs b/app/XDM/NativeMessagingHost/NativeMessagingHostApp.cs index ae8d27c..e130bf3 100644 --- a/app/XDM/NativeMessagingHost/NativeMessagingHostApp.cs +++ b/app/XDM/NativeMessagingHost/NativeMessagingHostApp.cs @@ -6,11 +6,11 @@ using System.Text; using System.Threading; using System.Diagnostics; using Newtonsoft.Json; -using BrowserMonitoring; using Newtonsoft.Json.Serialization; +using BrowserMonitoring; #if NET35 -using NetFX.Polyfill; +using NetFX.Polyfill2; #else using System.Collections.Concurrent; #endif @@ -19,44 +19,66 @@ namespace NativeHost { public class NativeMessagingHostApp { + static bool isFirefox = true; static BlockingCollection receivedBrowserMessages = new(); static BlockingCollection queuedBrowserMessages = new(); static CamelCasePropertyNamesContractResolver cr = new(); - static StreamWriter log = new StreamWriter(new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "native-host.log"), FileMode.Create)); + //static StreamWriter log = new StreamWriter(new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "native-host.log"), FileMode.Create)); static void Main(string[] args) { - //var json = BinaryToJson(new byte[0]); + try + { + var debugMode = Environment.GetEnvironmentVariable("XDM_DEBUG_MODE"); + if (!string.IsNullOrEmpty(debugMode) && debugMode == "1") + { + var logFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "messaging-log.txt"); + Trace.Listeners.Add(new TextWriterTraceListener(logFile, "myListener")); + Trace.AutoFlush = true; + } + Debug("Application_Startup"); + if (args.Length > 0 && args[0].StartsWith("chrome-extension:")) + { + isFirefox = false; + } + } + catch { } + Debug("Process running from: " + AppDomain.CurrentDomain.BaseDirectory); #if !NET35 - Debug(Environment.Is64BitProcess+""); + Debug("Is64BitProcess: " + Environment.Is64BitProcess); #endif try { - Debug("Trying to open mutex"); - using var mutex = Mutex.OpenExisting(@"Global\XDM_Active_Instance"); - Debug("Mutex opened"); - } - catch - { - Debug("Mutex open failed, spawn xdm process...++"); - CreateXDMInstance(); - } - Debug("next"); - try - { - - var inputReader = Console.OpenStandardInput(); var outputWriter = Console.OpenStandardOutput(); + + //var msg = ReadMessageBytes(inputReader); + //var message = Encoding.UTF8.GetString(msg); + //Debug(message); + try + { + Debug("Trying to open mutex"); + using var mutex = Mutex.OpenExisting(@"Global\XDM_Active_Instance"); + Debug("Mutex opened"); + } + catch + { + Debug("Mutex open failed, spawn xdm process...++"); + CreateXDMInstance(); + } + var t1 = new Thread(() => { + Debug("t1 reading messages from stdin sent by browser: "); try { while (true) { //read from process stdin and write to blocking queue, //they will be sent to xdm once pipe handshake complets - var msg = ReadMessageBytes(inputReader); - Debug(Encoding.UTF8.GetString(msg)); + Debug("Waiting for message - stdin..."); + var msg = NativeMessageSerializer.ReadMessageBytes(inputReader, false); + Debug("Reading message from stdin - size: " + msg.Length); + Debug("Stdin - " + Encoding.UTF8.GetString(msg)); receivedBrowserMessages.Add(JsonToBinary(msg)); } } @@ -77,10 +99,12 @@ namespace NativeHost { //read from blocking queue and write to stdout, //these messages were queued by xdm - var msg = queuedBrowserMessages.Take();//doesn't make much sense to it async + var msg = queuedBrowserMessages.Take(); + Debug("Sending to browser: " + Encoding.UTF8.GetString(msg)); var json = BinaryToJson(msg); + Debug("Sending to browser: "); Debug(Encoding.UTF8.GetString(json)); - WriteMessage(outputWriter, json); + NativeMessageSerializer.WriteMessage(outputWriter, json, false); } } catch (Exception exx) @@ -101,21 +125,38 @@ namespace NativeHost } } - private static void CreateXDMInstance() + private static void CreateXDMInstance(bool minimized = true) { try { - Debug("XDM instance creating...1"); - ProcessStartInfo psi = new() + var file = Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".."), + Environment.OSVersion.Platform == PlatformID.Win32NT ? "xdm-app.exe" : "xdm-app"); + Debug("XDM instance creating...1 " + file); + if (isFirefox && Environment.OSVersion.Platform == PlatformID.Win32NT) { - FileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XDM.WinForm.UI.exe"), - UseShellExecute = true, - Arguments = "-m" - }; + var args = minimized ? " -m" : ""; + if (!NativeProcess.Win32CreateProcess(file, $"\"{file}\"{args}")) + { + Debug("Win32 create process failed!"); + } + } + else + { + ProcessStartInfo psi = new() + { + FileName = file, + UseShellExecute = true + }; - Debug("XDM instance creating..."); - Process.Start(psi); - Debug("XDM instance created"); + if (minimized) + { + psi.Arguments = "-m"; + } + + Debug("XDM instance creating..."); + Process.Start(psi); + Debug("XDM instance created"); + } } catch (Exception ex) { @@ -125,56 +166,58 @@ namespace NativeHost private static void ProcessMessages() { - Debug("Log start"); + Debug("start"); try { - NamedPipeServerStream inPipe = null; - NamedPipeClientStream outPipe = null; - while (true) + //NamedPipeServerStream inPipe = null; + NamedPipeClientStream pipe = null; + // while (true) { try { - var pipeName = Guid.NewGuid().ToString(); - inPipe = new NamedPipeServerStream(pipeName, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.WriteThrough); + //var pipeName = Guid.NewGuid().ToString(); + //inPipe = new NamedPipeServerStream(pipeName, PipeDirection.In, 1, PipeTransmissionMode.Byte, PipeOptions.WriteThrough); //start handshake with XDM - outPipe = new NamedPipeClientStream(".", "XDM_Ipc_Browser_Monitoring_Pipe", PipeDirection.Out); + pipe = new NamedPipeClientStream(".", "XDM_Ipc_Browser_Monitoring_Pipe", PipeDirection.InOut, PipeOptions.Asynchronous); Debug("start handshake with XDM"); - outPipe.Connect(); - WriteMessage(outPipe, pipeName); - Debug("pipename: " + pipeName); + pipe.Connect(); + //NativeMessageSerializer.WriteMessage(outPipe, pipeName); + //Debug("pipename: " + pipeName); - inPipe.WaitForConnection(); - var syncMsgBytes = ReadMessageBytes(inPipe); - Debug("No task message size: " + syncMsgBytes.Length); + //inPipe.WaitForConnection(); + //var syncMsgBytes = NativeMessageSerializer.ReadMessageBytes(inPipe); + //Debug("No task message size: " + syncMsgBytes.Length); - queuedBrowserMessages.Add(syncMsgBytes); + //queuedBrowserMessages.Add(syncMsgBytes); //handshake with XDM is complete Debug("handshake with XDM is complete"); using var waitHandle = new ManualResetEvent(false); - //queue messages from xdm pipe for browser + //Direction: XDM ---> NativeHost + //Read messages from XDM's named pipe and add them to queuedBrowserMessages var task1 = new Thread(() => { try { while (true) { - var syncMsgBytes = ReadMessageBytes(inPipe); - //Debug("Task1 message size: " + syncMsgBytes.Length); + var syncMsgBytes = NativeMessageSerializer.ReadMessageBytes(pipe); + Debug("Message received from XDM of size: " + syncMsgBytes.Length); if (syncMsgBytes.Length == 0) { break; } + Debug("Message from XDM: " + Encoding.UTF8.GetString(syncMsgBytes)); queuedBrowserMessages.Add(syncMsgBytes); } } catch (Exception ex) { - Debug(ex.ToString()); + Debug(ex.ToString(), ex); queuedBrowserMessages.Add(Encoding.UTF8.GetBytes("{\"appExited\":\"true\"}")); } waitHandle.Set(); @@ -182,7 +225,8 @@ namespace NativeHost } ); - //queue messages to xdm pipe from browser + //Direction: NativeHost ---> XDM + //Take messages from receivedBrowserMessages and write them to XDM's named pipe var task2 = new Thread(() => { try @@ -190,7 +234,7 @@ namespace NativeHost while (true) { byte[] syncMsgBytes = null; - Debug("Task2 reading from browser stdin..."); + Debug("Task2 reading messages queued by browser..."); syncMsgBytes = receivedBrowserMessages.Take(); if (syncMsgBytes.Length == 2 && (char)syncMsgBytes[0] == '{' && (char)syncMsgBytes[1] == '}') { @@ -198,13 +242,14 @@ namespace NativeHost throw new OperationCanceledException("Empty object"); } //Debug("Task2 message size fron browser stdin: " + syncMsgBytes.Length); - //Debug(Encoding.UTF8.GetString(syncMsgBytes)); - WriteMessage(outPipe, syncMsgBytes); + Debug("Sending message to XDM..."); + NativeMessageSerializer.WriteMessage(pipe, syncMsgBytes); + Debug("Sent message to XDM"); } } catch (Exception ex) { - Debug(ex.ToString()); + Debug(ex.ToString(), ex); } waitHandle.Set(); Debug("Task2 finished"); @@ -220,24 +265,29 @@ namespace NativeHost } catch (Exception ex) { - Debug(ex.ToString()); + Debug(ex.ToString(), ex); } + //try + //{ + // inPipe.Disconnect(); + //} + //catch { } try { - inPipe.Disconnect(); + pipe.Close(); } catch { } try { - outPipe.Dispose(); - } - catch { } - try - { - inPipe.Dispose(); + pipe.Dispose(); } catch { } + //try + //{ + // inPipe.Dispose(); + //} + //catch { } } } catch (Exception exxxx) @@ -246,67 +296,24 @@ namespace NativeHost } } - private static void Debug(string msg) + private static void Debug(string msg, Exception? ex2 = null) { - try + Trace.WriteLine($"[xdm-native-messaging-host {DateTime.Now}] {msg}"); + if (ex2 != null) { - log.WriteLine(msg); - log.Flush(); - //File.AppendAllText(@"c:\log.txt", msg + "\r\n"); - Trace.WriteLine($"[{DateTime.Now}][NativeHost] {msg}"); - } - catch(Exception ex) - { - log.WriteLine(ex.ToString()); - log.Flush(); + Trace.WriteLine($"[xdm-native-messaging-host {DateTime.Now}] {ex2}"); } } - private static void WriteMessage(Stream pipe, string message) - { - var msgBytes = Encoding.UTF8.GetBytes(message); - WriteMessage(pipe, msgBytes); - } - - private static void WriteMessage(Stream pipe, byte[] msgBytes) - { - pipe.Write(BitConverter.GetBytes(msgBytes.Length), 0, 4); - pipe.Write(msgBytes, 0, msgBytes.Length); - pipe.Flush(); - } - - private static byte[] ReadMessageBytes(Stream pipe) - { - var b4 = new byte[4]; - ReadFully(pipe, b4, 4); - var syncLength = BitConverter.ToInt32(b4, 0); - var bytes = new byte[syncLength]; - ReadFully(pipe, bytes, syncLength); - return bytes; - } - - private static string ReadMessageString(Stream pipe) - { - var b4 = new byte[4]; - ReadFully(pipe, b4, 4); - var syncLength = BitConverter.ToInt32(b4, 0); - var bytes = new byte[syncLength]; - ReadFully(pipe, bytes, syncLength); - return Encoding.UTF8.GetString(bytes); - } - - private static void ReadFully(Stream stream, byte[] buf, int bytesToRead) - { - var rem = bytesToRead; - var index = 0; - while (rem > 0) - { - var c = stream.Read(buf, index, rem); - if (c == 0) throw new IOException("Unexpected EOF"); - index += c; - rem -= c; - } - } + //private static string ReadMessageString(Stream pipe) + //{ + // var b4 = new byte[4]; + // ReadFully(pipe, b4, 4); + // var syncLength = BitConverter.ToInt32(b4, 0); + // var bytes = new byte[syncLength]; + // ReadFully(pipe, bytes, syncLength); + // return Encoding.UTF8.GetString(bytes); + //} private static byte[] JsonToBinary(byte[] input) { diff --git a/app/XDM/NativeMessagingHost/NativeProcess.cs b/app/XDM/NativeMessagingHost/NativeProcess.cs new file mode 100644 index 0000000..08e8daa --- /dev/null +++ b/app/XDM/NativeMessagingHost/NativeProcess.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace NativeHost +{ + internal static class NativeProcess + { + internal static bool Win32CreateProcess(string? file, string? args) + { + const uint CREATE_UNICODE_ENVIRONMENT = 0x00000400; + const uint CREATE_BREAKAWAY_FROM_JOB = 0x01000000; + const uint CREATE_NEW_PROCESS_GROUP = 0x00000200; + PROCESS_INFORMATION pInfo = new PROCESS_INFORMATION(); + STARTUPINFO sInfo = new STARTUPINFO(); + SECURITY_ATTRIBUTES pSec = new SECURITY_ATTRIBUTES(); + SECURITY_ATTRIBUTES tSec = new SECURITY_ATTRIBUTES(); + pSec.nLength = Marshal.SizeOf(pSec); + tSec.nLength = Marshal.SizeOf(tSec); + + return CreateProcess(file, args, + ref pSec, ref tSec, false, CREATE_UNICODE_ENVIRONMENT | CREATE_BREAKAWAY_FROM_JOB | CREATE_NEW_PROCESS_GROUP, + IntPtr.Zero, null, ref sInfo, out pInfo); + } + + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] + internal static extern bool CreateProcess( + string? lpApplicationName, + string? lpCommandLine, + ref SECURITY_ATTRIBUTES lpProcessAttributes, + ref SECURITY_ATTRIBUTES lpThreadAttributes, + bool bInheritHandles, + uint dwCreationFlags, + IntPtr lpEnvironment, + string? lpCurrentDirectory, + [In] ref STARTUPINFO lpStartupInfo, + out PROCESS_INFORMATION lpProcessInformation); + } + + [StructLayout(LayoutKind.Sequential)] + internal struct SECURITY_ATTRIBUTES + { + public int nLength; + public IntPtr lpSecurityDescriptor; + public int bInheritHandle; + } + + // This also works with CharSet.Ansi as long as the calling function uses the same character set. + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct STARTUPINFO + { + public Int32 cb; + public string lpReserved; + public string lpDesktop; + public string lpTitle; + public Int32 dwX; + public Int32 dwY; + public Int32 dwXSize; + public Int32 dwYSize; + public Int32 dwXCountChars; + public Int32 dwYCountChars; + public Int32 dwFillAttribute; + public Int32 dwFlags; + public Int16 wShowWindow; + public Int16 cbReserved2; + public IntPtr lpReserved2; + public IntPtr hStdInput; + public IntPtr hStdOutput; + public IntPtr hStdError; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct PROCESS_INFORMATION + { + public IntPtr hProcess; + public IntPtr hThread; + public int dwProcessId; + public int dwThreadId; + } +} diff --git a/app/XDM/NetFX.Polyfill/ConcurrentDictionary.cs b/app/XDM/NetFX.Polyfill/ConcurrentDictionary.cs deleted file mode 100644 index b3d63b1..0000000 --- a/app/XDM/NetFX.Polyfill/ConcurrentDictionary.cs +++ /dev/null @@ -1,99 +0,0 @@ -//using System; -//using System.Collections; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; - -//namespace NetFX.Polyfill -//{ -// public class ConcurrentDictionary : IDictionary -// { -// private Dictionary dictionary; - -// public V this[K key] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - -// public ICollection Keys => throw new NotImplementedException(); - -// public ICollection Values => throw new NotImplementedException(); - -// public int Count => throw new NotImplementedException(); - -// public bool IsReadOnly => throw new NotImplementedException(); - -// public void Add(K key, V value) -// { -// throw new NotImplementedException(); -// } - -// public void Add(KeyValuePair item) -// { -// throw new NotImplementedException(); -// } - -// public void Clear() -// { -// throw new NotImplementedException(); -// } - -// public bool Contains(KeyValuePair item) -// { -// throw new NotImplementedException(); -// } - -// public bool ContainsKey(K key) -// { -// throw new NotImplementedException(); -// } - -// public void CopyTo(KeyValuePair[] array, int arrayIndex) -// { -// throw new NotImplementedException(); -// } - -// public IEnumerator> GetEnumerator() -// { -// lock (this) -// { -// foreach (var item in dictionary) -// { -// yield return item; -// } -// } -// } - -// public bool Remove(K key) -// { -// lock (this) -// { -// return dictionary.Remove(key); -// } -// } - -// public bool Remove(KeyValuePair item) -// { -// lock (this) -// { -// return dictionary.Remove(item.Key); -// } -// } - -// public bool TryGetValue(K key, out V value) -// { -// lock (this) -// { -// return dictionary.TryGetValue(key, out value); -// } -// } - -// IEnumerator IEnumerable.GetEnumerator() -// { -// lock (this) -// { -// foreach (var item in dictionary) -// { -// yield return item; -// } -// } -// } -// } -//} diff --git a/app/XDM/NetFX.Polyfill/NetFX.Polyfill.csproj b/app/XDM/NetFX.Polyfill/NetFX.Polyfill.csproj deleted file mode 100644 index fc22ec4..0000000 --- a/app/XDM/NetFX.Polyfill/NetFX.Polyfill.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - net3.5;net4.5;net4.7.2 - 9.0 - enable - AnyCPU;x86 - - - - - - - - - - - diff --git a/app/XDM/SerializeGenerator/Program.cs b/app/XDM/SerializeGenerator/Program.cs deleted file mode 100644 index 99e128e..0000000 --- a/app/XDM/SerializeGenerator/Program.cs +++ /dev/null @@ -1,127 +0,0 @@ -//using System; -//using System.Reflection; -//using System.Text; -//using XDM.Core.Lib.Common; - -//namespace SerializeGenerator -//{ -// class Program -// { -// static int c = 1; -// static void Main(string[] args) -// { -// var type = typeof(Config); - -// } - -// private static void GenerateCode(Type type, StringBuilder serializer, StringBuilder deserializer) -// { -// serializer.Append(@" -// private static void WriteString(BinaryWriter w, string value, string name) -// { -// w.Write(name); -// w.Write(STRING); -// w.Write(value ?? string.Empty); -// } - -// private static void WriteBoolean(BinaryWriter w, bool value, string name) -// { -// w.Write(name); -// w.Write(BOOL); -// w.Write(value); -// } - -// private static void WriteInt32(BinaryWriter w, int value, string name) -// { -// w.Write(name); -// w.Write(INT); -// w.Write(value); -// } - -// private static void WriteStringArray(BinaryWriter w, IEnumerable array, string name, int count) -// { -// w.Write(name); -// w.Write(STRING_ARRAY); -// w.Write((short)count); -// foreach (var item in array) -// { -// w.Write(item); -// } -// } - -// private -//"); - -// foreach (var property in type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)) -// { -// if (property.PropertyType.IsArray || property.PropertyType.GetInterface("IEnumerable") != null) -// { -// if (property.PropertyType.IsArray) -// { -// serializer.Append($"var c{c++}=obj.{property.Name}?.Length??0;\r\n"); -// serializer.Append($"writer.Write(c{c});\r\n"); -// serializer.Append($"if(obj.{property.Name}!=null)" + "{foreach(var item in obj." + property.Name + "){"); -// //deserializer.Append($"var c{c++}=reader.ReadInt32();\r\n"); -// //deserializer.Append("if(c" + c + ">0){"); - -// GenerateCode(property.PropertyType, serializer, deserializer); -// serializer.Append("}}\r\n"); - -// } -// } - -// if (property.PropertyType == typeof(string) -// || property.PropertyType == typeof(int) -// || property.PropertyType == typeof(long) -// || property.PropertyType == typeof(bool) -// || property.PropertyType == typeof(double) -// || property.PropertyType == typeof(float) -// || property.PropertyType.IsEnum) -// { -// if (property.PropertyType == typeof(string)) -// { -// serializer.Append($"writer.Write(obj.{property.Name}??string.Empty);\r\n"); -// deserializer.Append($"obj.{property.Name}=Helper.ReadString(reader);\r\n"); -// } -// else if (property.PropertyType.IsEnum) -// { -// serializer.Append($"writer.Write((int)obj.{property.Name});\r\n"); -// deserializer.Append($"obj.{property.Name}=({property.PropertyType})reader.ReadInt32();\r\n"); -// } -// else if (property.PropertyType == typeof(int)) -// { -// serializer.Append($"writer.Write(obj.{property.Name});\r\n"); -// deserializer.Append($"obj.{property.Name}=reader.ReadInt32();\r\n"); -// } -// else if (property.PropertyType == typeof(long)) -// { -// serializer.Append($"writer.Write(obj.{property.Name});\r\n"); -// deserializer.Append($"obj.{property.Name}=reader.ReadInt64();\r\n"); -// } -// else if (property.PropertyType == typeof(bool)) -// { -// serializer.Append($"writer.Write(obj.{property.Name});\r\n"); -// deserializer.Append($"obj.{property.Name}=reader.ReadBoolean();\r\n"); -// } -// else if (property.PropertyType == typeof(double)) -// { -// serializer.Append($"writer.Write(obj.{property.Name});\r\n"); -// deserializer.Append($"obj.{property.Name}=reader.ReadDouble();\r\n"); -// } -// else if (property.PropertyType == typeof(float)) -// { -// serializer.Append($"writer.Write(obj.{property.Name});\r\n"); -// deserializer.Append($"obj.{property.Name}=reader.ReadFloat();\r\n"); -// } -// } -// else -// { -// if (property.PropertyType.IsValueType || property.PropertyType.IsClass) -// { -// GenerateCode(property.PropertyType, serializer, deserializer); -// } -// } -// } -// } -// } -//} diff --git a/app/XDM/SerializeGenerator/SerializeGenerator.csproj b/app/XDM/SerializeGenerator/SerializeGenerator.csproj deleted file mode 100644 index 4a1c035..0000000 --- a/app/XDM/SerializeGenerator/SerializeGenerator.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - Exe - net5.0 - - - - - - - diff --git a/app/XDM/TraceLog/Log.cs b/app/XDM/TraceLog/Log.cs deleted file mode 100644 index 974558a..0000000 --- a/app/XDM/TraceLog/Log.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Diagnostics; - -namespace TraceLog -{ - public static class Log - { - public static void Debug(object obj, string message) - { - Trace.WriteLine(message + " : " + obj); - } - - public static void Debug(string message) - { - Trace.WriteLine(message); - } - } -} diff --git a/app/XDM/TraceLog/TraceLog.csproj b/app/XDM/TraceLog/TraceLog.csproj deleted file mode 100644 index c4c1ea1..0000000 --- a/app/XDM/TraceLog/TraceLog.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - - net3.5;net4.5;net4.7.2;net5.0 - 9.0 - enable - AnyCPU;x86 - - - diff --git a/app/XDM/Translations/TextResource.cs b/app/XDM/Translations/TextResource.cs index 56f116d..f1c8fb7 100644 --- a/app/XDM/Translations/TextResource.cs +++ b/app/XDM/Translations/TextResource.cs @@ -10,12 +10,12 @@ namespace Translations static TextResource() { - Load("English"); + Load("English.txt"); } public static void Load(string language) { - var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.Combine("Lang", $"{language}.txt")); + var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.Combine("Lang", $"{language}")); if (File.Exists(file)) { LoadTexts(file); @@ -46,5 +46,10 @@ namespace Translations texts[key] = val; } } + + public static IEnumerable GetKeys() + { + return texts.Keys; + } } } diff --git a/app/XDM/Translations/Translations.csproj b/app/XDM/Translations/Translations.csproj index af58153..d06b294 100644 --- a/app/XDM/Translations/Translations.csproj +++ b/app/XDM/Translations/Translations.csproj @@ -2,9 +2,14 @@ net3.5;net4.5;net4.7.2;net5.0 - AnyCPU;x86 + AnyCPU;x86;x64 9.0 enable + + none + false + + diff --git a/app/XDM/BrowserMonitor/BrowserMessageHandler.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/BrowserMessageHandler.cs similarity index 86% rename from app/XDM/BrowserMonitor/BrowserMessageHandler.cs rename to app/XDM/XDM.App.Core/BrowserMonitoring/BrowserMessageHandler.cs index 83782fa..19200db 100644 --- a/app/XDM/BrowserMonitor/BrowserMessageHandler.cs +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/BrowserMessageHandler.cs @@ -32,10 +32,17 @@ namespace BrowserMonitoring return; } - var rawMessage = envelop.Message; - if (rawMessage == null) + if (envelop.MessageType == "custom") { - Log.Debug("Raw message is null"); + var args = ArgsProcessor.ParseArgs(envelop.CustomData.Split('\r')); + ArgsProcessor.Process(app, args); + return; + } + + var rawMessage = envelop.Message; + if (rawMessage == null && envelop.Messages == null) + { + Log.Debug("Raw message/messages is null"); return; }; @@ -50,6 +57,17 @@ namespace BrowserMonitoring } break; } + case "links": + { + var messages = new List(envelop.Messages.Length); + foreach (var msg in envelop.Messages) + { + var message = Parse(msg); + messages.Add(message); + } + app.AddBatchLinks(messages); + break; + } case "video": { var message = Parse(rawMessage); diff --git a/app/XDM/BrowserMonitor/BrowserMonitor.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/BrowserMonitor.cs similarity index 100% rename from app/XDM/BrowserMonitor/BrowserMonitor.cs rename to app/XDM/XDM.App.Core/BrowserMonitoring/BrowserMonitor.cs diff --git a/app/XDM/BrowserMonitor/IpcHttpHandler.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/IpcHttpHandler.cs similarity index 55% rename from app/XDM/BrowserMonitor/IpcHttpHandler.cs rename to app/XDM/XDM.App.Core/BrowserMonitoring/IpcHttpHandler.cs index d635588..e530ecf 100644 --- a/app/XDM/BrowserMonitor/IpcHttpHandler.cs +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/IpcHttpHandler.cs @@ -40,7 +40,6 @@ namespace BrowserMonitoring Log.Debug(ex.ToString()); app.AppUI.ShowMessageBox(null, TextResource.GetText("MSG_ALREADY_RUNNING")); } - }).Start(); } @@ -63,46 +62,59 @@ namespace BrowserMonitoring switch (context.RequestPath) { case "/download": - Log.Debug(Encoding.UTF8.GetString(context.RequestBody!)); - var message = Message.ParseMessage(Encoding.UTF8.GetString(context.RequestBody!)); - if (!(Helpers.IsBlockedHost(message.Url) || Helpers.IsCompressedJSorCSS(message.Url))) { - app.AddDownload(message); - } - break; - case "/video": - Console.WriteLine(Encoding.UTF8.GetString(context.RequestBody!)); - var message2 = Message.ParseMessage(Encoding.UTF8.GetString(context.RequestBody!)); - var contentType = message2.GetResponseHeaderFirstValue("Content-Type")?.ToLowerInvariant() ?? string.Empty; - - if (VideoUrlHelper.IsHLS(contentType)) - { - VideoUrlHelper.ProcessHLSVideo(message2, app); - } - - if (VideoUrlHelper.IsDASH(contentType)) - { - VideoUrlHelper.ProcessDashVideo(message2, app); - } - - if (!VideoUrlHelper.ProcessYtDashSegment(message2, app)) - { - if (contentType != null && !(contentType.Contains("f4f") || - contentType.Contains("m4s") || - contentType.Contains("mp2t") || message2.Url.Contains("abst") || - message2.Url.Contains("f4x") || message2.Url.Contains(".fbcdn") - || message2.Url.Contains("http://127.0.0.1:9614"))) + var text = Encoding.UTF8.GetString(context.RequestBody!); + Log.Debug(text); + var message = Message.ParseMessage(text); + if (!(Helpers.IsBlockedHost(message.Url) || Helpers.IsCompressedJSorCSS(message.Url))) { - VideoUrlHelper.ProcessNormalVideo(message2, app); + app.AddDownload(message); } + break; } - break; - case "/item": - foreach (var item in Encoding.UTF8.GetString(context.RequestBody!).Split(new char[] { '\r', '\n' })) + case "/video": { - app.AddVideoDownload(item); + var text = Encoding.UTF8.GetString(context.RequestBody!); + Log.Debug(text); + var message2 = Message.ParseMessage(Encoding.UTF8.GetString(context.RequestBody!)); + var contentType = message2.GetResponseHeaderFirstValue("Content-Type")?.ToLowerInvariant() ?? string.Empty; + if (VideoUrlHelper.IsHLS(contentType)) + { + VideoUrlHelper.ProcessHLSVideo(message2, app); + } + if (VideoUrlHelper.IsDASH(contentType)) + { + VideoUrlHelper.ProcessDashVideo(message2, app); + } + if (!VideoUrlHelper.ProcessYtDashSegment(message2, app)) + { + if (contentType != null && !(contentType.Contains("f4f") || + contentType.Contains("m4s") || + contentType.Contains("mp2t") || message2.Url.Contains("abst") || + message2.Url.Contains("f4x") || message2.Url.Contains(".fbcdn") + || message2.Url.Contains("http://127.0.0.1:9614"))) + { + VideoUrlHelper.ProcessNormalVideo(message2, app); + } + } + break; + } + case "/links": + { + var text = Encoding.UTF8.GetString(context.RequestBody!); + Log.Debug(text); + var arr = text.Split(new string[] { "\r\n\r\n" }, StringSplitOptions.RemoveEmptyEntries); + app.AddBatchLinks(arr.Select(str => Message.ParseMessage(str.Trim())).ToList()); + break; + } + case "/item": + { + foreach (var item in Encoding.UTF8.GetString(context.RequestBody!).Split(new char[] { '\r', '\n' })) + { + app.AddVideoDownload(item); + } + break; } - break; case "/clear": app.ClearVideoList(); break; diff --git a/app/XDM/XDM.App.Core/BrowserMonitoring/JsonMessageParser.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/JsonMessageParser.cs new file mode 100644 index 0000000..deb56b9 --- /dev/null +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/JsonMessageParser.cs @@ -0,0 +1,217 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using Newtonsoft.Json; + +namespace BrowserMonitoring +{ + public class JsonMessageParser + { + private T? ReadProperty(JsonTextReader reader, string name) + { + if (reader.TokenType == JsonToken.PropertyName && reader.Value?.ToString() == name && + reader.Read() && reader.Value != null) + { + return (T)reader.Value; + } + return default(T); + } + + private bool IsObjectStart(JsonTextReader reader, string name) + { + return reader.TokenType == JsonToken.PropertyName && reader.Value?.ToString() == name && + reader.Read() && reader.TokenType == JsonToken.StartObject; + } + + private bool IsListStart(JsonTextReader reader, string name) + { + return reader.TokenType == JsonToken.PropertyName && reader.Value?.ToString() == name && + reader.Read() && reader.TokenType == JsonToken.StartArray; + } + + private void SkipUnknownParts(JsonTextReader reader) + { + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.StartObject) + { + var n = 1; + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) n--; + if (reader.TokenType == JsonToken.StartObject) n++; + if (n == 0) return; + } + } + else if (reader.TokenType == JsonToken.StartArray) + { + var n = 1; + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) n--; + if (reader.TokenType == JsonToken.StartArray) n++; + if (n == 0) return; + } + } + else if (reader.Value != null) + { + continue; + } + } + } + } + + private RawBrowserMessage ReadMessageObject(JsonTextReader reader) + { + var msg = new RawBrowserMessage { Cookies = new(), ResponseHeaders = new(), RequestHeaders = new() }; + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + var url = ReadProperty(reader, "url"); + if (url != null) + { + msg.Url = url; + } + if (IsObjectStart(reader, "cookies")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + var cookieName = (string)reader.Value; + if (reader.Read() && reader.TokenType == JsonToken.String) + { + var cookieValue = (string)reader.Value; + msg.Cookies[cookieName] = cookieValue; + } + } + } + } + + if (IsObjectStart(reader, "responseHeaders"))// && IsListStart(reader, "realUA")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + var headerName = (string)reader.Value; + if (IsListStart(reader, headerName)) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.String) + { + if (msg.ResponseHeaders.TryGetValue(headerName, out var list)) + { + list.Add((string)reader.Value); + } + else + { + msg.ResponseHeaders[headerName] = new() { (string)reader.Value }; + } + } + } + } + } + } + } + + if (IsObjectStart(reader, "requestHeaders")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + var headerName = (string)reader.Value; + if (IsListStart(reader, headerName)) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.String) + { + if (msg.RequestHeaders.TryGetValue(headerName, out var list)) + { + list.Add((string)reader.Value); + } + else + { + msg.RequestHeaders[headerName] = new() { (string)reader.Value }; + } + } + } + } + } + } + } + SkipUnknownParts(reader); + } + return msg; + } + + public RawBrowserMessageEnvelop Parse(Stream stream) + { + var envelop = new RawBrowserMessageEnvelop(); + var reader = new JsonTextReader(new StreamReader(stream)); + if (reader.Read() && reader.TokenType == JsonToken.StartObject) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + var messageType = ReadProperty(reader, "messageType"); + if (messageType != null) + { + envelop.MessageType = messageType; + } + var customData = ReadProperty(reader, "customData"); + if (customData != null) + { + envelop.CustomData = customData; + } + if (IsObjectStart(reader, "message")) + { + var msg = ReadMessageObject(reader); + envelop.Message = msg; + } + if (IsListStart(reader, "messages")) + { + var list = new List(); + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.StartObject) + { + var msg = ReadMessageObject(reader); + list.Add(msg); + envelop.Messages = list.ToArray(); + } + } + } + if (IsListStart(reader, "videoIds")) + { + var list = new List(); + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.StartObject) + { + var msg = ReadMessageObject(reader); + list.Add(msg); + envelop.Messages = list.ToArray(); + } + } + } + SkipUnknownParts(reader); + } + } + return envelop; + } + } +} diff --git a/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingConfigurer.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingConfigurer.cs new file mode 100644 index 0000000..18eff7c --- /dev/null +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingConfigurer.cs @@ -0,0 +1,108 @@ +using Microsoft.Win32; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using TraceLog; +using XDM.Core.Lib.Common; + +namespace BrowserMonitoring +{ + internal static class NativeMessagingConfigurer + { + private static void CreateMessagingHostManifest(Browser browser, string appName, string manifestPath) + { + var allowedExtensions = browser == Browser.Firefox ? new[] { + "browser-mon@xdman.sourceforge.net" + } : new[] { + "chrome-extension://danmljfachfhpbfikjgedlfifabhofcj/", + "chrome-extension://dkckaoghoiffdbomfbbodbbgmhjblecj/", + "chrome-extension://ejpbcmllmliidhlpkcgbphhmaodjihnc/", + "chrome-extension://fogpiboapmefmkbodpmfnohfflonbgig/" + }; + var folder = Path.GetDirectoryName(manifestPath)!; + if (!Directory.Exists(folder)) + { + try + { + Directory.CreateDirectory(folder); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + } + using var stream = new FileStream(manifestPath, FileMode.Create); + using var textWriter = new StreamWriter(stream); + using var writer = new JsonTextWriter(textWriter); + writer.Formatting = Formatting.Indented; + writer.WriteStartObject(); + writer.WritePropertyName("name"); + writer.WriteValue(appName); + writer.WritePropertyName("description"); + writer.WriteValue("Native messaging host for Xtreme Download Manager"); + writer.WritePropertyName("path"); + writer.WriteValue(Path.Combine( + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MessagingHost"), + Environment.OSVersion.Platform == PlatformID.Win32NT ? + "xdm-messaging-host.exe" : "xdm-messaging-host")); + writer.WritePropertyName("type"); + writer.WriteValue("stdio"); + writer.WritePropertyName(browser == Browser.Firefox ? "allowed_extensions" : "allowed_origins"); + writer.WriteStartArray(); + foreach (var extension in allowedExtensions) + { + writer.WriteValue(extension); + } + writer.WriteEndArray(); + writer.WriteEndObject(); + writer.Close(); + } + + public static void InstallNativeMessagingHost(Browser browser) + { + var appName = browser == Browser.Firefox ? "xdmff.native_host" : + "xdm_chrome.native_host"; + var os = Environment.OSVersion.Platform; + if (os == PlatformID.Win32NT) + { + var manifestPath = Path.Combine(Config.DataDir, $"{appName}.json"); + CreateMessagingHostManifest(browser, appName, manifestPath); + var regPath = (browser == Browser.Firefox ? + @"Software\Mozilla\NativeMessagingHosts\" : + @"SOFTWARE\Google\Chrome\NativeMessagingHosts"); + using var regKey = Registry.CurrentUser.CreateSubKey(regPath); + using var key = regKey.CreateSubKey(appName, RegistryKeyPermissionCheck.ReadWriteSubTree); + key.SetValue(null, manifestPath); + } + else + { +#if NET5_0_OR_GREATER + string manifestPath; + var home = Environment.GetEnvironmentVariable("HOME")!; + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + manifestPath = Path.Combine(home, browser == Browser.Firefox ? + $"Library/Application Support/Mozilla/NativeMessagingHosts/{appName}.json" : + $"Library/Application Support/Google/Chrome/NativeMessagingHosts/{appName}.json"); + } + else + { + manifestPath = Path.Combine(home, browser == Browser.Firefox ? + $".mozilla/native-messaging-hosts/{appName}.json" : + $".config/google-chrome/NativeMessagingHosts/{appName}.json"); + } + Log.Debug($"Manifest file: {manifestPath}"); + CreateMessagingHostManifest(browser, appName, manifestPath); +#endif + } + } + } + + public enum Browser + { + Chrome, Firefox, MSEdge + } +} diff --git a/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingHostChannel.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingHostChannel.cs new file mode 100644 index 0000000..77c5a53 --- /dev/null +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingHostChannel.cs @@ -0,0 +1,97 @@ +using System; +using System.IO.Pipes; +using System.Threading; +using TraceLog; + +namespace BrowserMonitoring +{ + internal sealed class NativeMessagingHostChannel + { + private NamedPipeServerStream pipe; + internal event EventHandler? MessageReceived; + internal event EventHandler? Disconnected; + private Thread readerThread; + + internal NativeMessagingHostChannel(NamedPipeServerStream pipe) + { + this.pipe = pipe; + readerThread = new Thread(() => + { + try + { + ReadDataFromPipe(); + } + catch (Exception ex) + { + Log.Debug(ex, ex.ToString()); + Disconnect(); + } + this.Disconnected?.Invoke(this, EventArgs.Empty); + }); + } + + internal void Disconnect() + { + try + { + if (pipe.IsConnected) + { + pipe.Disconnect(); + } + } + catch (Exception ex) + { + Log.Debug(ex, ex.ToString()); + } + } + + internal void Publish(byte[] data) + { + try + { + NativeMessageSerializer.WriteMessage(pipe, data); + pipe.Flush(); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + } + + internal void ReadDataFromPipe() + { + while (true) + { + Log.Debug("Waiting for message from native host..."); + var bytes = NativeMessageSerializer.ReadMessageBytes(pipe); + Log.Debug($"Message from native host {bytes.Length} bytes"); + this.MessageReceived?.Invoke(this, new NativeMessageEventArgs(bytes)); + } + } + + internal void Start(byte[] initialConfig) + { + try + { + readerThread.Start(); + NativeMessageSerializer.WriteMessage(pipe, initialConfig); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + } + } + + internal class NativeMessageEventArgs : EventArgs + { + private byte[] data; + + internal NativeMessageEventArgs(byte[] data) + { + this.data = data; + } + + internal byte[] Data => data; + } +} diff --git a/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingHostHandler.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingHostHandler.cs new file mode 100644 index 0000000..bc90169 --- /dev/null +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/NativeMessagingHostHandler.cs @@ -0,0 +1,367 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO.Pipes; +using System.IO; +using XDM.Core.Lib.Common; +using System.Threading; +#if NET35 +using NetFX.Polyfill; +#else +using System.Collections.Concurrent; +#endif +using TraceLog; + +namespace BrowserMonitoring +{ + public class NativeMessagingHostHandler : IDisposable + { + private int MaxPipeInstance = 254; + private static readonly string PipeName = "XDM_Ipc_Browser_Monitoring_Pipe"; + private List connectedChannels = new(); + //private List inPipes = new(); + //private Dictionary inOutMap = new(); + private readonly IApp app; + private static Mutex globalMutex; + // private readonly BlockingCollection Messages = new(); + //private Thread WriterThread; + private Thread listenerThread; + + public static void EnsureSingleInstance(IApp app) + { + try + { + using var mutex = Mutex.OpenExisting(@"Global\XDM_Active_Instance"); + throw new InstanceAlreadyRunningException(@"XDM instance already running, Mutex exists 'Global\XDM_Active_Instance'"); + } + catch (Exception ex) + { + Log.Debug(ex, "Exception in NativeMessagingHostHandler ctor"); + if (ex is InstanceAlreadyRunningException) + { + if (app.Args != null && app.Args.Length > 0) + { + Log.Debug(ex, "Sending args to running instance"); + SendArgsToRunningInstance(app.Args); + Environment.Exit(0); + } + throw; + } + } + globalMutex = new Mutex(true, @"Global\XDM_Active_Instance"); + } + + public NativeMessagingHostHandler(IApp app) + { + this.app = app; + EnsureSingleInstance(this.app); + } + + public void BroadcastConfig() + { + var bytes = GetSyncBytes(app); + lock (this) + { + foreach (var channel in connectedChannels) + { + try + { + channel.Publish(bytes); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + } + } + //Messages.Add(bytes); + } + + public void StartPipedChannel() + { + listenerThread = new Thread(() => + { + while (true) + { + var pipe = + new NamedPipeServerStream(PipeName, + PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, + PipeTransmissionMode.Byte, PipeOptions.Asynchronous); + Log.Debug("Waiting for native host pipe..."); + pipe.WaitForConnection(); + Log.Debug("Pipe request received"); + lock (connectedChannels) + { + var channel = CreateChannel(pipe); + connectedChannels.Add(channel); + channel.Start(GetSyncBytes(app)); + } + } + }); + listenerThread.Start(); + } + + private NativeMessagingHostChannel CreateChannel(NamedPipeServerStream pipe) + { + var channel = new NativeMessagingHostChannel(pipe); + channel.MessageReceived += (sender, args) => + { + try + { + using var br = new BinaryReader(new MemoryStream(args.Data)); + var envelop = RawBrowserMessageEnvelop.Deserialize(br); + BrowserMessageHandler.Handle(app, envelop); + } + catch (Exception ex) + { + Log.Debug(ex, ex.ToString()); + } + }; + channel.Disconnected += (sender, bytes) => + { + lock (connectedChannels) + { + connectedChannels.Remove((NativeMessagingHostChannel)sender); + } + }; + return channel; + } + + //public void StartPipedChannel() + //{ + // WriterThread = new Thread(() => + // { + // while (true) + // { + // //Log.Debug("Total messages to be sent to native host: " + Messages.Count); + // var bytes = Messages.Take(); + // foreach (var key in inOutMap.Keys) + // { + // //Log.Debug("Sending message to native host"); + // try + // { + // var outpipe = inOutMap[key]; + // NativeMessageSerializer.WriteMessage(outpipe, bytes); + // //Log.Debug("Send message to native host successfully"); + // } + // catch (Exception ex) + // { + // Log.Debug(ex, "Send message to native host failed"); + // } + // } + // } + // }); + // WriterThread.Start(); + // new Thread(() => + // { + // try + // { + // if (inPipes.Count == MaxPipeInstance) + // { + // Log.Debug("Max pipe count of " + MaxPipeInstance + " is reached"); + // return; + // } + // var inPipe = + // new NamedPipeServerStream(PipeName, + // PipeDirection.In, NamedPipeServerStream.MaxAllowedServerInstances, + // PipeTransmissionMode.Byte, PipeOptions.WriteThrough); + // inPipes.Add(inPipe); + // var first = true; + // while (true) + // { + // Log.Debug("Waiting for native host pipe..."); + // inPipe.WaitForConnection(); + // Log.Debug("Pipe request received"); + + // if (first) + // { + // Log.Debug("Creating one more additional pipe"); + // StartPipedChannel(); + // first = false; + // } + + // try + // { + // ConsumePipe(inPipe); + // } + // catch (Exception e) + // { + // inPipe.Disconnect(); + // Log.Debug(e, "Error in message exchange"); + // } + // Log.Debug("Terminated message exchange, will reuse the pipe"); + // } + // } + // catch (Exception ex) + // { + // Log.Debug(ex, "Error in message exchange flow"); + // } + // }).Start(); + //} + + //private void ConsumePipe(NamedPipeServerStream inPipe) + //{ + // try + // { + // Log.Debug("Initiate message handshake"); + // var clientPipeName = Encoding.UTF8.GetString(NativeMessageSerializer.ReadMessageBytes(inPipe)); + // Log.Debug("Client pipe: " + clientPipeName); + // if (clientPipeName.StartsWith("XDM-APP-")) + // { + // var command = NativeMessageSerializer.ReadMessageBytes(inPipe); + // var args = ArgsProcessor.ParseArgs(Encoding.UTF8.GetString(command).Split('\r')); + // ArgsProcessor.Process(app, args); + // return; + // } + // var outPipe = new NamedPipeClientStream(".", clientPipeName, PipeDirection.Out); + // outPipe.Connect(); + // SendConfig(outPipe); + // inOutMap[inPipe] = outPipe; + // Log.Debug("Message handshake completed"); + // while (true) + // { + // var text = NativeMessageSerializer.ReadMessageBytes(inPipe); + // using var ms = new MemoryStream(text); + // using var br = new BinaryReader(ms); + // // Log.Debug("{Text}", text); + // var envelop = RawBrowserMessageEnvelop.Deserialize(br); + // BrowserMessageHandler.Handle(app, envelop); + // } + // } + // finally + // { + // try + // { + // NamedPipeClientStream? op = null; + // lock (this) + // { + // if (inOutMap.TryGetValue(inPipe, out op)) + // { + // inOutMap.Remove(inPipe); + // } + // } + // op?.Close(); + // op?.Dispose(); + // } + // catch { } + // } + //} + + //private void SendConfig(Stream pipe) + //{ + // var bytes = GetSyncBytes(app); + // NativeMessageSerializer.WriteMessage(pipe, bytes); + //} + + //private static void ReadFully(Stream stream, byte[] buf, int bytesToRead) + //{ + // var rem = bytesToRead; + // var index = 0; + // while (rem > 0) + // { + // var c = stream.Read(buf, index, rem); + // if (c == 0) throw new IOException("Unexpected EOF"); + // index += c; + // rem -= c; + // } + //} + + //private static byte[] ReadMessageBytes(Stream pipe) + //{ + // var b4 = new byte[4]; + // ReadFully(pipe, b4, 4); + // var syncLength = BitConverter.ToInt32(b4, 0); + // if (syncLength > 4 * 8196) + // { + // throw new ArgumentException($"Message length too long: {syncLength}"); + // } + // var bytes = new byte[syncLength]; + // ReadFully(pipe, bytes, syncLength); + // return bytes; + //} + + //private static void WriteMessage(Stream pipe, string message) + //{ + // var msgBytes = Encoding.UTF8.GetBytes(message); + // WriteMessage(pipe, msgBytes); + //} + + //private static void WriteMessage(Stream pipe, byte[] msgBytes) + //{ + + // var bytes = BitConverter.GetBytes(msgBytes.Length); + // pipe.Write(bytes, 0, bytes.Length); + // pipe.Write(msgBytes, 0, msgBytes.Length); + // pipe.Flush(); + //} + + public void Dispose() + { + lock (connectedChannels) + { + foreach (var channel in connectedChannels) + { + channel.Disconnect(); + } + } + //foreach (var pipe in inPipes) + //{ + // try { pipe.Disconnect(); } catch { } + // try { pipe.Dispose(); } catch { } + //} + } + + private static byte[] GetSyncBytes(IApp app) + { + var msg = new SyncMessage() + { + Enabled = Config.Instance.IsBrowserMonitoringEnabled, + BlockedHosts = Config.Instance.BlockedHosts, + VideoUrls = new string[0], + FileExts = Config.Instance.FileExtensions, + VidExts = Config.Instance.VideoExtensions, + VidList = app.GetVideoList(false).Select(a => new VideoItem + { + Id = a.ID, + Text = a.File, + Info = a.DisplayName + }).ToList(), + MimeList = new string[] { "video", "audio", "mpegurl", "f4m", "m3u8", "dash" }, + BlockedMimeList = new string[] { "text/javascript", "application/javascript", "text/css", "text/html" }, + VideoUrlsWithPostReq = new string[] { "ubei/v1/player?key=", "ubei/v1/next?key=" } + }; + return msg.Serialize(); + } + + private static void SendArgsToRunningInstance(string[] args) + { + if (args == null || args.Length < 1) return; + try + { + using var npc = + new NamedPipeClientStream(".", PipeName, PipeDirection.Out); + npc.Connect(); + var b = new MemoryStream(); + var wb = new BinaryWriter(b); + wb.Write(Int32.MaxValue); + wb.Write(string.Join("\r", args)); + wb.Close(); + NativeMessageSerializer.WriteMessage(npc, b.ToArray()); + npc.Flush(); + npc.Close(); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + } + } + + public class InstanceAlreadyRunningException : Exception + { + public InstanceAlreadyRunningException(string message) : base(message) + { + } + } +} diff --git a/app/XDM/BrowserMonitor/VideoUrlHelper.cs b/app/XDM/XDM.App.Core/BrowserMonitoring/VideoUrlHelper.cs similarity index 86% rename from app/XDM/BrowserMonitor/VideoUrlHelper.cs rename to app/XDM/XDM.App.Core/BrowserMonitoring/VideoUrlHelper.cs index cd1d247..6d9ef6f 100644 --- a/app/XDM/BrowserMonitor/VideoUrlHelper.cs +++ b/app/XDM/XDM.App.Core/BrowserMonitoring/VideoUrlHelper.cs @@ -86,7 +86,8 @@ namespace BrowserMonitoring var displayInfo = new StreamingVideoDisplayInfo { Quality = $"[{fileExt.ToUpperInvariant()}] {size} {item.FormatDescription}", - Size = item.Size + Size = item.Size, + CreationTime = DateTime.Now }; //var displayText = $"[{fileExt.ToUpperInvariant()}] {size} {item.FormatDescription}"; @@ -117,7 +118,8 @@ namespace BrowserMonitoring var displayInfo = new StreamingVideoDisplayInfo { Quality = $"[{fileExt.ToUpperInvariant()}] {size} {item.FormatDescription}", - Size = item.Size + Size = item.Size, + CreationTime = DateTime.Now }; list.Add((Info: mediaItem, DisplayInfo: displayInfo)); @@ -175,7 +177,8 @@ namespace BrowserMonitoring Log.Debug("Display text dash: " + displayText); app.AddVideoNotification(new StreamingVideoDisplayInfo { - Quality = displayText + Quality = displayText, + CreationTime = DateTime.Now }, mediaItem); } else @@ -197,7 +200,8 @@ namespace BrowserMonitoring Log.Debug("Display text hls: " + displayText); app.AddVideoNotification(new StreamingVideoDisplayInfo { - Quality = displayText + Quality = displayText, + CreationTime = DateTime.Now }, mediaItem); } } @@ -235,7 +239,8 @@ namespace BrowserMonitoring Log.Debug("Display text hls: " + displayText); app.AddVideoNotification(new StreamingVideoDisplayInfo { - Quality = displayText + Quality = displayText, + CreationTime = DateTime.Now }, mediaItem); } @@ -309,7 +314,8 @@ namespace BrowserMonitoring Log.Debug("Display text hls: " + plc.Quality); app.AddVideoNotification(new StreamingVideoDisplayInfo { - Quality = displayText + Quality = displayText, + CreationTime = DateTime.Now }, video); } } @@ -336,7 +342,8 @@ namespace BrowserMonitoring var displayText = $"[{container}]"; app.AddVideoNotification(new StreamingVideoDisplayInfo { - Quality = displayText + Quality = displayText, + CreationTime = DateTime.Now }, video); } } @@ -432,22 +439,27 @@ namespace BrowserMonitoring if (AddToQueue(info)) { + if (!info.IsVideo && mime.StartsWith("audio/")) + { + HandleDashAudio(info, app, message); + } var di = GetDASHPair(info); if (di == null) { return true; } - var video = new DualSourceHTTPDownloadInfo - { - Uri1 = di.Url, - Uri2 = info.Url, - Headers1 = di.Headers, - Headers2 = info.Headers, - File = Helpers.SanitizeFileName(message.File ?? Helpers.GetFileName(new Uri(message.Url))) + ".mkv", - Cookies1 = di.Cookies, - Cookies2 = info.Cookies, - ContentLength = di.Length + info.Length - }; + var video = CreateDualSourceHTTPDownloadInfo(di, info, message); + // new DualSourceHTTPDownloadInfo + //{ + // Uri1 = di.Url, + // Uri2 = info.Url, + // Headers1 = di.Headers, + // Headers2 = info.Headers, + // File = Helpers.SanitizeFileName(message.File ?? Helpers.GetFileName(new Uri(message.Url))) + ".mkv", + // Cookies1 = di.Cookies, + // Cookies2 = info.Cookies, + // ContentLength = di.Length + info.Length + //}; var size = di.Length + info.Length; Log.Debug("Itag: " + info.ITag + " " + di.ITag); @@ -457,7 +469,8 @@ namespace BrowserMonitoring app.AddVideoNotification(new StreamingVideoDisplayInfo { Quality = displayText, - Size = size + Size = size, + CreationTime = DateTime.Now }, video); } @@ -467,6 +480,62 @@ namespace BrowserMonitoring return false; } + private static void HandleDashAudio(DashInfo info, IApp app, Message message) + { + try + { + var size = info.Length; + Log.Debug("Itag: " + info.ITag + " " + info.ITag); + var name = Helpers.GetFileName(new Uri(info.Url)); + var ext = Path.GetExtension(name); + + if (string.IsNullOrEmpty(ext)) + { + ext = info.Mime.Contains("webm") ? ".webm" : info.Mime.Contains("mp4") ? ".mp4" : "mkv"; + } + + var quality = ext.Substring(1)?.ToUpperInvariant(); + var displayText = $"[{quality} AUDIO] {(size > 0 ? Helpers.FormatSize(size) : string.Empty)}"; + + var video = new SingleSourceHTTPDownloadInfo + { + Uri = info.Url, + Headers = info.Headers, + File = Helpers.SanitizeFileName(message.File ?? Helpers.GetFileName(new Uri(message.Url))) + ext, + Cookies = info.Cookies, + ContentLength = size, + ContentType = info.Mime + }; + + app.AddVideoNotification(new StreamingVideoDisplayInfo + { + Quality = displayText, + Size = size, + CreationTime = DateTime.Now + }, video); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + } + + private static DualSourceHTTPDownloadInfo CreateDualSourceHTTPDownloadInfo(DashInfo info1, DashInfo info2, Message message) + { + var (video, audio) = info1.IsVideo ? (info1, info2) : (info2, info1); + return new DualSourceHTTPDownloadInfo + { + Uri1 = video.Url, + Uri2 = audio.Url, + Headers1 = video.Headers, + Headers2 = audio.Headers, + File = Helpers.SanitizeFileName(message.File ?? Helpers.GetFileName(new Uri(message.Url))) + ".mkv", + Cookies1 = video.Cookies, + Cookies2 = audio.Cookies, + ContentLength = video.Length + audio.Length + }; + } + internal static void ProcessNormalVideo(Message message2, IApp app) { if (IsMediaFragment(message2.GetRequestHeaderFirstValue("Referer"))) @@ -530,7 +599,8 @@ namespace BrowserMonitoring app.AddVideoNotification(new StreamingVideoDisplayInfo { Quality = displayText, - Size = size + Size = size, + CreationTime = DateTime.Now }, video); ; } diff --git a/app/XDM/HttpServer/HttpParser.cs b/app/XDM/XDM.App.Core/HttpServer/HttpParser.cs similarity index 100% rename from app/XDM/HttpServer/HttpParser.cs rename to app/XDM/XDM.App.Core/HttpServer/HttpParser.cs diff --git a/app/XDM/HttpServer/HttpServer.cs b/app/XDM/XDM.App.Core/HttpServer/HttpServer.cs similarity index 100% rename from app/XDM/HttpServer/HttpServer.cs rename to app/XDM/XDM.App.Core/HttpServer/HttpServer.cs diff --git a/app/XDM/HttpServer/LineReader.cs b/app/XDM/XDM.App.Core/HttpServer/LineReader.cs similarity index 100% rename from app/XDM/HttpServer/LineReader.cs rename to app/XDM/XDM.App.Core/HttpServer/LineReader.cs diff --git a/app/XDM/HttpServer/RequestContext.cs b/app/XDM/XDM.App.Core/HttpServer/RequestContext.cs similarity index 100% rename from app/XDM/HttpServer/RequestContext.cs rename to app/XDM/XDM.App.Core/HttpServer/RequestContext.cs diff --git a/app/XDM/HttpServer/RequestContextEventArgs.cs b/app/XDM/XDM.App.Core/HttpServer/RequestContextEventArgs.cs similarity index 100% rename from app/XDM/HttpServer/RequestContextEventArgs.cs rename to app/XDM/XDM.App.Core/HttpServer/RequestContextEventArgs.cs diff --git a/app/XDM/HttpServer/ResponseStatus.cs b/app/XDM/XDM.App.Core/HttpServer/ResponseStatus.cs similarity index 100% rename from app/XDM/HttpServer/ResponseStatus.cs rename to app/XDM/XDM.App.Core/HttpServer/ResponseStatus.cs diff --git a/app/XDM/MediaParser.Hls/Dash/DashUtil.cs b/app/XDM/XDM.App.Core/MediaParser/Dash/DashUtil.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Dash/DashUtil.cs rename to app/XDM/XDM.App.Core/MediaParser/Dash/DashUtil.cs diff --git a/app/XDM/MediaParser.Hls/Dash/MpdParser.cs b/app/XDM/XDM.App.Core/MediaParser/Dash/MpdParser.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Dash/MpdParser.cs rename to app/XDM/XDM.App.Core/MediaParser/Dash/MpdParser.cs diff --git a/app/XDM/MediaParser.Hls/Dash/Representation.cs b/app/XDM/XDM.App.Core/MediaParser/Dash/Representation.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Dash/Representation.cs rename to app/XDM/XDM.App.Core/MediaParser/Dash/Representation.cs diff --git a/app/XDM/MediaParser.Hls/Hls/HlsHelper.cs b/app/XDM/XDM.App.Core/MediaParser/Hls/HlsHelper.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Hls/HlsHelper.cs rename to app/XDM/XDM.App.Core/MediaParser/Hls/HlsHelper.cs diff --git a/app/XDM/MediaParser.Hls/Hls/HlsMediaSegment.cs b/app/XDM/XDM.App.Core/MediaParser/Hls/HlsMediaSegment.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Hls/HlsMediaSegment.cs rename to app/XDM/XDM.App.Core/MediaParser/Hls/HlsMediaSegment.cs diff --git a/app/XDM/MediaParser.Hls/Hls/HlsParser.cs b/app/XDM/XDM.App.Core/MediaParser/Hls/HlsParser.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Hls/HlsParser.cs rename to app/XDM/XDM.App.Core/MediaParser/Hls/HlsParser.cs diff --git a/app/XDM/MediaParser.Hls/Hls/HlsPlaylist.cs b/app/XDM/XDM.App.Core/MediaParser/Hls/HlsPlaylist.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Hls/HlsPlaylist.cs rename to app/XDM/XDM.App.Core/MediaParser/Hls/HlsPlaylist.cs diff --git a/app/XDM/MediaParser.Hls/Hls/HlsPlaylistContainer.cs b/app/XDM/XDM.App.Core/MediaParser/Hls/HlsPlaylistContainer.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Hls/HlsPlaylistContainer.cs rename to app/XDM/XDM.App.Core/MediaParser/Hls/HlsPlaylistContainer.cs diff --git a/app/XDM/MediaParser.Hls/Util/UrlResolver.cs b/app/XDM/XDM.App.Core/MediaParser/Util/UrlResolver.cs similarity index 100% rename from app/XDM/MediaParser.Hls/Util/UrlResolver.cs rename to app/XDM/XDM.App.Core/MediaParser/Util/UrlResolver.cs diff --git a/app/XDM/MediaParser.Hls/YouTube/VideoFormatData.cs b/app/XDM/XDM.App.Core/MediaParser/YouTube/VideoFormatData.cs similarity index 100% rename from app/XDM/MediaParser.Hls/YouTube/VideoFormatData.cs rename to app/XDM/XDM.App.Core/MediaParser/YouTube/VideoFormatData.cs diff --git a/app/XDM/MediaParser.Hls/YouTube/YoutubeDataFormatParser.cs b/app/XDM/XDM.App.Core/MediaParser/YouTube/YoutubeDataFormatParser.cs similarity index 100% rename from app/XDM/MediaParser.Hls/YouTube/YoutubeDataFormatParser.cs rename to app/XDM/XDM.App.Core/MediaParser/YouTube/YoutubeDataFormatParser.cs diff --git a/app/XDM/NetFX.Polyfill/BlockingCollection.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/BlockingCollection.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/BlockingCollection.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/BlockingCollection.cs diff --git a/app/XDM/NetFX.Polyfill/DictionaryExtensions.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/DictionaryExtensions.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/DictionaryExtensions.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/DictionaryExtensions.cs diff --git a/app/XDM/NetFX.Polyfill/GroupCollectionExtension.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/GroupCollectionExtension.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/GroupCollectionExtension.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/GroupCollectionExtension.cs diff --git a/app/XDM/NetFX.Polyfill/ProcessStartInfoHelper.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/ProcessStartInfoHelper.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/ProcessStartInfoHelper.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/ProcessStartInfoHelper.cs diff --git a/app/XDM/NetFX.Polyfill/StreamExtension.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/StreamExtension.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/StreamExtension.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/StreamExtension.cs diff --git a/app/XDM/NetFX.Polyfill/TupleElementNamesAttribute.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/TupleElementNamesAttribute.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/TupleElementNamesAttribute.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/TupleElementNamesAttribute.cs diff --git a/app/XDM/NetFX.Polyfill/ValueTuplePolyfill.cs b/app/XDM/XDM.App.Core/NetFX.Polyfill/ValueTuplePolyfill.cs similarity index 100% rename from app/XDM/NetFX.Polyfill/ValueTuplePolyfill.cs rename to app/XDM/XDM.App.Core/NetFX.Polyfill/ValueTuplePolyfill.cs diff --git a/app/XDM/XDM.App.Core/TraceLog/Log.cs b/app/XDM/XDM.App.Core/TraceLog/Log.cs new file mode 100644 index 0000000..8bc85ce --- /dev/null +++ b/app/XDM/XDM.App.Core/TraceLog/Log.cs @@ -0,0 +1,36 @@ +using System; +using System.Diagnostics; + +namespace TraceLog +{ + public static class Log + { + public static void InitFileBasedTrace(string logfile) + { + try + { + Trace.WriteLine("Log init..."); + //Trace.Listeners.RemoveAt(0); + Trace.Listeners.Add(new TextWriterTraceListener(logfile, "myListener")); + Trace.AutoFlush = true; + Trace.WriteLine("Log init..."); + } + catch (Exception ex) + { + Trace.WriteLine(ex.ToString()); + } + } + + public static void Debug(object obj, string message) + { + Trace.WriteLine($"[xdm-{DateTime.Now.ToLongTimeString()}] {message} : {obj}"); + //Trace.Flush(); + } + + public static void Debug(string message) + { + Trace.WriteLine($"[xdm-{DateTime.Now.ToLongTimeString()}] {message}"); + //Trace.Flush(); + } + } +} diff --git a/app/XDM/XDM.App.Core/Translations/ReadME.txt b/app/XDM/XDM.App.Core/Translations/ReadME.txt new file mode 100644 index 0000000..6378e70 --- /dev/null +++ b/app/XDM/XDM.App.Core/Translations/ReadME.txt @@ -0,0 +1 @@ +Language files are stored in $(SOLUTION)\Lang directory \ No newline at end of file diff --git a/app/XDM/XDM.App.Core/Translations/TextResource.cs b/app/XDM/XDM.App.Core/Translations/TextResource.cs new file mode 100644 index 0000000..f1c8fb7 --- /dev/null +++ b/app/XDM/XDM.App.Core/Translations/TextResource.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace Translations +{ + public static class TextResource + { + private static Dictionary texts = new(); + + static TextResource() + { + Load("English.txt"); + } + + public static void Load(string language) + { + var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.Combine("Lang", $"{language}")); + if (File.Exists(file)) + { + LoadTexts(file); + } + } + + public static string GetText(string key) + { + if (texts.TryGetValue(key, out string? label) && label != null) + { + return label; + } + return string.Empty; + } + + private static void LoadTexts(string path) + { + var lines = File.ReadAllLines(path); + foreach (var line in lines) + { + if (string.IsNullOrEmpty(line)) + { + continue; + } + var index = line.IndexOf('='); + var key = line.Substring(0, index); + var val = line.Substring(index + 1); + texts[key] = val; + } + } + + public static IEnumerable GetKeys() + { + return texts.Keys; + } + } +} diff --git a/app/XDM/XDM.App.Core/XDM.App.Core.projitems b/app/XDM/XDM.App.Core/XDM.App.Core.projitems new file mode 100644 index 0000000..78310d5 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.App.Core.projitems @@ -0,0 +1,196 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 5bbea202-65d2-481a-b457-6d8fcc8970d7 + + + XDM.App.Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/XDM/XDM.App.Core/XDM.App.Core.shproj b/app/XDM/XDM.App.Core/XDM.App.Core.shproj new file mode 100644 index 0000000..0a04caf --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.App.Core.shproj @@ -0,0 +1,13 @@ + + + + 5bbea202-65d2-481a-b457-6d8fcc8970d7 + 14.0 + + + + + + + + diff --git a/app/XDM/XDM.App.Core/XDM.Common.UI/BatchDownloadViewController.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/BatchDownloadViewController.cs new file mode 100644 index 0000000..7bb7603 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/BatchDownloadViewController.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TraceLog; +using Translations; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; +using XDM.Core.Lib.Downloader.Progressive.SingleHttp; +using XDM.Core.Lib.UI; + +namespace XDM.Common.UI +{ + public class BatchDownloadViewController + { + private IBatchDownloadView view; + public IAppUI AppUI { get; set; } + public IApp App { get; set; } + public int BatchSize { get; private set; } = 0; + + public BatchDownloadViewController(IBatchDownloadView view, IApp app, IAppUI appUI) + { + this.view = view; + this.AppUI = appUI; + this.App = app; + + var arr = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; + this.view.SetStartLetterRange(arr); + this.view.SetEndLetterRange(arr); + this.view.IsLetterMode = true; + + this.view.PatternChanged += View_PatternChanged; + this.view.OkClicked += View_OkClicked; + } + + private void View_OkClicked(object? sender, EventArgs e) + { + OnOKClicked(); + } + + private void View_PatternChanged(object? sender, EventArgs e) + { + OnBatchPatternChange(); + } + + public void Run() + { + this.view.ShowWindow(); + } + + private void OnOKClicked() + { + if (this.view.IsBatchMode) + { + var links = GenerateBatchLink()?.Select(x => (object)new SingleSourceHTTPDownloadInfo { Uri = x.ToString() }); + if (links == null || !links.Any()) + { + AppUI.ShowMessageBox(this.view, TextResource.GetText("BAT_SELECT_ITEMS")); + return; + } + this.view.DestroyWindow(); + AppUI.ShowDownloadSelectionWindow(FileNameFetchMode.FileNameAndExtension, links); + //var dsvc = new DownloadSelectionViewController(this.view.CreateDownloadSelectionView(), + // App, AppUI, FileNameFetchMode.FileNameAndExtension, links); + //dsvc.Run(); + //var window = new DownloadSelectionWindow(App, AppUI, Core.Lib.Downloader.FileNameFetchMode.FileNameAndExtension, links); + //this.Close(); + //window.Show(); + } + } + + private void OnBatchPatternChange() + { + try + { + view.BatchAddress1 = view.BatchAddress2 = view.BatchAddressN = string.Empty; + var c = 0; + var last = string.Empty; + BatchSize = 0; + foreach (var url in GenerateBatchLink()) + { + if (c == 0) + { + view.BatchAddress1 = url.ToString(); + } + else if (c == 1) + { + view.BatchAddress2 = url.ToString(); + } + last = url.ToString(); + c++; + BatchSize++; + } + if (c > 1) + { + view.BatchAddressN = last; + } + } + catch (UriFormatException) + { + AppUI?.ShowMessageBox(this.view, TextResource.GetText("MSG_INVALID_URL")); + } + catch (Exception ex) + { + Log.Debug(ex, "Error"); + } + } + + public IEnumerable GenerateBatchLink() + { + if (!this.view.Url.Contains('*')) return Enumerable.Empty(); + try + { + return GenerateBatchLink(this.view.Url); + } + catch (Exception ex) + { + Log.Debug(ex, "Error generating batch links"); + return Enumerable.Empty(); + } + } + + private IEnumerable GenerateBatchLink(string url) + { + var list = new List(); + if (this.view.IsLetterMode) + { + if (!(this.view.StartLetter.HasValue && this.view.EndLetter.HasValue)) throw new ArgumentException(); + var startChar = this.view.StartLetter.Value; + var endChar = this.view.EndLetter.Value; + + if (startChar >= endChar) + { + Log.Debug("startChar >= endChar"); + return list; + } + + for (var i = startChar; i <= endChar; i++) + { + list.Add(new Uri(url.Replace('*', i))); + } + } + else + { + var startNum = this.view.StartNumber;// ParseIntSafe(TxtNumberFrom.Text); + var endNum = this.view.EndNumber; //ParseIntSafe(TxtNumberTo.Text); + + if (startNum >= endNum) + { + Log.Debug("startNum >= endNum"); + return list; + } + + for (var i = startNum; i <= endNum; i++) + { + var s = url.Replace("*", + this.view.IsUsingLeadingZero ? i.ToString($"D{this.view.LeadingZeroCount}") : + i.ToString()); + list.Add(new Uri(s)); + } + } + return list; + } + } +} diff --git a/app/XDM/XDM.Common.UI/CommonUtils.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/CommonUtils.cs similarity index 76% rename from app/XDM/XDM.Common.UI/CommonUtils.cs rename to app/XDM/XDM.App.Core/XDM.Common.UI/CommonUtils.cs index 72ba29b..879adf7 100644 --- a/app/XDM/XDM.Common.UI/CommonUtils.cs +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/CommonUtils.cs @@ -3,6 +3,7 @@ using TraceLog; using Translations; using XDM.Core.Lib.Common; using XDM.Core.Lib.UI; +using XDM.Core.Lib.Util; namespace XDM.Common.UI { @@ -46,21 +47,18 @@ namespace XDM.Common.UI internal static void OnFileBrowsed(object? sender, FileBrowsedEventArgs args) { - var file = Path.GetFileName(args.SelectedFile); - var folder = Path.GetDirectoryName(args.SelectedFile)!; - if (!Config.Instance.RecentFolders.Contains(folder)) + var folder = args.SelectedFile; + if (string.IsNullOrEmpty(folder)) { - Config.Instance.RecentFolders.Insert(0, folder); + return; } + Helpers.UpdateRecentFolderList(folder); if (sender != null) { var fileSelectable = (IFileSelectable)sender; - fileSelectable.SelectedFileName = file; fileSelectable.SetFolderValues(GetFolderValues()); fileSelectable.SeletedFolderIndex = 2; } - Config.Instance.FolderSelectionMode = FolderSelectionMode.Manual; - Config.SaveConfig(); } internal static void OnDropdownSelectionChanged(object? sender, FileBrowsedEventArgs args) @@ -73,13 +71,14 @@ namespace XDM.Common.UI { Config.Instance.FolderSelectionMode = FolderSelectionMode.Auto; } - else + else if (!string.IsNullOrEmpty(args.SelectedFile)) { Config.Instance.FolderSelectionMode = FolderSelectionMode.Manual; - if (index != 1) + if (index > 1) { - Config.Instance.RecentFolders.Remove(args.SelectedFile); - Config.Instance.RecentFolders.Insert(0, args.SelectedFile); + Config.Instance.UserSelectedDownloadFolder = args.SelectedFile; + //Config.Instance.RecentFolders.Remove(args.SelectedFile); + //Config.Instance.RecentFolders.Insert(0, args.SelectedFile); } } Config.SaveConfig(); @@ -94,11 +93,8 @@ namespace XDM.Common.UI Log.Debug($"Index value {index} is invalid for {Config.Instance.FolderSelectionMode}"); return null; } - if (index - 2 < Config.Instance.RecentFolders.Count) - { - return Config.Instance.RecentFolders[index - 2]; - } - return Config.Instance.DefaultDownloadFolder; + return Config.Instance.RecentFolders.Count > 0 ? Config.Instance.RecentFolders[index - 2] : + Config.Instance.DefaultDownloadFolder; } } } diff --git a/app/XDM/XDM.Common.UI/ComponentUpdaterUI.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/ComponentUpdaterUI.cs similarity index 96% rename from app/XDM/XDM.Common.UI/ComponentUpdaterUI.cs rename to app/XDM/XDM.App.Core/XDM.Common.UI/ComponentUpdaterUI.cs index 91e3281..bd19474 100644 --- a/app/XDM/XDM.Common.UI/ComponentUpdaterUI.cs +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/ComponentUpdaterUI.cs @@ -51,7 +51,7 @@ namespace XDM.Common.UI try { updaterUI.Inderminate = true; - if (!UpdateChecker.GetAppUpdates(app.AppVerion, out IList updates, out _, this.updateMode)) + if (!UpdateChecker.GetAppUpdates(app.AppVerion, out updates, out _, this.updateMode)) { updaterUI.DownloadFailed(this, new DownloadFailedEventArgs(ErrorCode.Generic)); } diff --git a/app/XDM/XDM.Common.UI/DownloadCompleteDialogHelper.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/DownloadCompleteDialogHelper.cs similarity index 55% rename from app/XDM/XDM.Common.UI/DownloadCompleteDialogHelper.cs rename to app/XDM/XDM.App.Core/XDM.Common.UI/DownloadCompleteDialogHelper.cs index 414c376..3fe715d 100644 --- a/app/XDM/XDM.Common.UI/DownloadCompleteDialogHelper.cs +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/DownloadCompleteDialogHelper.cs @@ -11,11 +11,21 @@ namespace XDM.Common.UI dwnCmpldDlg.FolderText = folder; dwnCmpldDlg.FileOpenClicked += (sender, args) => { - Helpers.OpenFile(args.Path); + if (!string.IsNullOrEmpty(args.Path)) + { + Helpers.OpenFile(args.Path!); + } }; dwnCmpldDlg.FolderOpenClicked += (sender, args) => { - Helpers.OpenFolder(args.Path, args.FileName); + if (!string.IsNullOrEmpty(args.Path)) + { + Helpers.OpenFolder(args.Path!, args.FileName); + } + }; + dwnCmpldDlg.DontShowAgainClickd += (sender, args) => + { + Config.Instance.ShowDownloadCompleteWindow = false; }; dwnCmpldDlg.ShowDownloadCompleteDialog(); } diff --git a/app/XDM/XDM.App.Core/XDM.Common.UI/DownloadSelectionViewController.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/DownloadSelectionViewController.cs new file mode 100644 index 0000000..c13d3ea --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/DownloadSelectionViewController.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Translations; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; +using XDM.Core.Lib.Downloader.Adaptive.Dash; +using XDM.Core.Lib.Downloader.Adaptive.Hls; +using XDM.Core.Lib.Downloader.Progressive.DualHttp; +using XDM.Core.Lib.Downloader.Progressive.SingleHttp; +using XDM.Core.Lib.UI; +using XDM.Core.Lib.Util; + +namespace XDM.Common.UI +{ + public class DownloadSelectionViewController + { + private IDownloadSelectionView view; + private FileNameFetchMode mode; + + public IAppUI AppUI { get; set; } + public IApp App { get; set; } + + public DownloadSelectionViewController(IDownloadSelectionView view, + IApp app, IAppUI appUI, + FileNameFetchMode mode, IEnumerable downloads) + { + this.view = view; + App = app; + AppUI = appUI; + this.mode = mode; + + string? folder = null; + if (Config.Instance.FolderSelectionMode == FolderSelectionMode.Manual) + { + folder = Helpers.GetManualDownloadFolder(); + } + view.DownloadLocation = folder ?? Config.Instance.DefaultDownloadFolder; + view.SetData(mode, downloads, PopuplateEntryWrapper); + + view.BrowseClicked += (_, _) => + { + var folder = view.SelectFolder(); + if (!string.IsNullOrEmpty(folder)) + { + view.DownloadLocation = folder; + Config.Instance.UserSelectedDownloadFolder = folder; + Helpers.UpdateRecentFolderList(folder); + } + }; + view.DownloadClicked += View_DownloadClicked; ; + view.DownloadLaterClicked += View_DownloadLaterClicked; + view.QueueSchedulerClicked += (s, e) => + { + appUI.ShowQueueWindow(view); + }; + } + + public void Run() + { + this.view.ShowWindow(); + } + + private void View_DownloadLaterClicked(object? sender, DownloadLaterEventArgs e) + { + DownloadSelectedItems(false, e.QueueId); + } + + private void View_DownloadClicked(object? sender, EventArgs e) + { + DownloadSelectedItems(true, null); + } + + private bool PopuplateEntryWrapper(object obj, IDownloadEntryWrapper entry) + { + if (obj is SingleSourceHTTPDownloadInfo shi) + { + entry.EntryType = "Http"; + entry.Name = shi.File ?? Helpers.GetFileName(new Uri(shi.Uri)); + } + else if (obj is DualSourceHTTPDownloadInfo dhi) + { + entry.EntryType = "Dash"; + entry.Name = dhi.File ?? Helpers.GetFileName(new Uri(dhi.Uri1)); + } + else if (obj is MultiSourceHLSDownloadInfo mhi) + { + entry.EntryType = "Hls"; + entry.Name = mhi.File ?? Helpers.GetFileName(new Uri(mhi.VideoUri)); + } + else if (obj is MultiSourceDASHDownloadInfo mdi) + { + entry.EntryType = "MpegDash"; + entry.Name = mdi.File ?? Helpers.GetFileName(new Uri(mdi.Url)); + } + else + { + return false; + } + entry.DownloadEntry = obj; + return true; + } + + private void AddDownload(IDownloadEntryWrapper wrapper, bool startImmediately, string? queueId) + { + App.SubmitDownload( + wrapper.DownloadEntry, + wrapper.Name, + mode, + view.DownloadLocation, + startImmediately, + view.Authentication, + view.Proxy ?? Config.Instance.Proxy, + view.EnableSpeedLimit, + view.EnableSpeedLimit ? view.SpeedLimit : 0, + queueId, + false + ); + } + + private void DownloadSelectedItems(bool startImmediately, string? queueId) + { + if (string.IsNullOrEmpty(view.DownloadLocation)) + { + AppUI.ShowMessageBox(view, TextResource.GetText("MSG_CAT_FOLDER_MISSING")); + return; + } + if (view.SelectedRowCount == 0) + { + AppUI.ShowMessageBox(view, TextResource.GetText("BAT_SELECT_ITEMS")); + return; + } + + foreach (var item in view.SelectedItems) + { + if (item.IsSelected) + { + AddDownload(item, startImmediately, queueId); + } + } + view.CloseWindow(); + } + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Common.UI/IconMap.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/IconMap.cs new file mode 100644 index 0000000..028adcd --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/IconMap.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace XDM.Common.UI +{ + public static class IconMap + { + private static Dictionary> imageTypes = new() + { + ["CAT_COMPRESSED"] = new HashSet { ".zip", ".gz", ".tar", ".xz", ".7z", ".rar", ".bz2" }, + ["CAT_MUSIC"] = new HashSet { ".mp3", ".aac", ".ac3", ".wma", ".m4a", ".ogg", ".mka" }, + ["CAT_VIDEOS"] = new HashSet { ".mp4", ".mkv", ".ts", ".webm", ".avi", ".divx", ".mov", ".m4v" }, + ["CAT_DOCUMENTS"] = new HashSet { ".docx", ".doc", ".pdf", ".txt", ".xlsx", ".xls", ".html" }, + ["CAT_PROGRAMS"] = new HashSet { ".exe", ".bin", ".appx", ".app", ".msi", ".rpm", ".deb" } + }; + + public static string GetVectorNameForCategory(string categoryname) + { + return categoryname switch + { + "CAT_COMPRESSED" => "ri-file-zip-line", + "CAT_MUSIC" => "ri-file-music-line", + "CAT_VIDEOS" => "ri-movie-line", + "CAT_DOCUMENTS" => "ri-file-text-line", + "CAT_PROGRAMS" => "ri-microsoft-line", + _ => "ri-file-line", + }; + } + + private static string GetFileType(string ext) + { + foreach (var key in imageTypes.Keys) + { + var extList = imageTypes[key]; + if (extList.Contains(ext)) + { + return key; + } + } + return "Other"; + } + + public static string GetVectorNameForFileType(string file) + { + var ext = Path.GetExtension(file)?.ToLowerInvariant() ?? string.Empty; + var fileType = GetFileType(ext); + return fileType switch + { + "CAT_COMPRESSED" => "ri-file-zip-fill", + "CAT_MUSIC" => "ri-file-music-fill", + "CAT_VIDEOS" => "ri-movie-fill", + "CAT_DOCUMENTS" => "ri-file-text-fill", + "CAT_PROGRAMS" => "ri-microsoft-fill", + _ => "ri-file-fill", + }; + } + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Common.UI/LinkRefreshDialogHelper.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/LinkRefreshDialogHelper.cs new file mode 100644 index 0000000..3c4ab41 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/LinkRefreshDialogHelper.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using TraceLog; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; +using XDM.Core.Lib.Downloader.Progressive.DualHttp; +using XDM.Core.Lib.Downloader.Progressive.SingleHttp; +using XDM.Core.Lib.Util; + +namespace XDM.Common.UI +{ + public static class LinkRefreshDialogHelper + { + public static bool RefreshLink(BaseDownloadEntry item, IApp app, IRefreshLinkDialogSkeleton dialog) + { + try + { + + if (item.DownloadType != "Http" && item.DownloadType != "Dash") + { + return false; + } + string? referer = null; + if (item.DownloadType == "Http") + { + var state = DownloadStateStore.LoadSingleSourceHTTPDownloaderState(item.Id); + referer = GetReferer(state.Headers); + //if (!TransactedIO.ReadStream(item.Id + ".state", Config.DataDir, s => + //{ + // var state = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes(s); + // referer = GetReferer(state.Headers); + //})) + //{ + // throw new FileNotFoundException(Path.Combine(Config.DataDir, item.Id + ".state")); + //} + + //var state = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes( + // File.ReadAllBytes(Path.Combine(Config.DataDir, item.Id + ".state"))); + ////JsonConvert.DeserializeObject( + //// File.ReadAllText(Path.Combine(Config.DataDir, item.Id + ".state"))); + //referer = GetReferer(state.Headers); + } + else if (item.DownloadType == "Dash") + { + var state = DownloadStateStore.LoadDualSourceHTTPDownloaderState(item.Id); + //JsonConvert.DeserializeObject( + // File.ReadAllText(Path.Combine(Config.DataDir, item.Id + ".state"))); + referer = GetReferer(state.Headers1); + } + else + { + return false; + } + Log.Debug("Referer: " + referer); + if (referer != null) + { + dialog.WatchingStopped += (a, b) => + { + app.ClearRefreshLinkCandidate(); + }; + + OpenBrowser(referer); + if (item.DownloadType == "Http") + { + var downloader = new SingleSourceHTTPDownloader(item.Id); + downloader.RestoreState(); + app.RefreshedLinkReceived += (_, _) => dialog.LinkReceived(); + app.WaitFromRefreshedLink(downloader); + } + else if (item.DownloadType == "Dash") + { + var downloader = new DualSourceHTTPDownloader(item.Id); + downloader.RestoreState(); + app.RefreshedLinkReceived += (_, _) => dialog.LinkReceived(); + app.WaitFromRefreshedLink(downloader); + } + + dialog.ShowWindow(); + return true; + } + } + catch (Exception e) + { + Log.Debug(e, e.Message); + } + return false; + } + + private static string GetReferer(Dictionary> headers) + { + return headers?.Where( + header => header.Key.ToLowerInvariant() == "referer") + .FirstOrDefault().Value?.FirstOrDefault(); + } + + private static void OpenBrowser(string url) + { + Helpers.OpenBrowser(url); + } + } +} diff --git a/app/XDM/XDM.Common.UI/NewDownloadDialogHelper.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/NewDownloadDialogHelper.cs similarity index 87% rename from app/XDM/XDM.Common.UI/NewDownloadDialogHelper.cs rename to app/XDM/XDM.App.Core/XDM.Common.UI/NewDownloadDialogHelper.cs index 7b372f4..20a1dda 100644 --- a/app/XDM/XDM.Common.UI/NewDownloadDialogHelper.cs +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/NewDownloadDialogHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Collections.Generic; using Translations; using XDM.Core.Lib.Common; @@ -16,7 +17,24 @@ namespace XDM.Common.UI { window.DestroyEvent += (_, _) => destroyCallback?.Invoke(); window.SetFolderValues(CommonUtils.GetFolderValues()); - window.SeletedFolderIndex = Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto ? 0 : 2; + if (Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto) + { + window.SeletedFolderIndex = 0; + } + else + { + var index = CommonUtils.GetFolderValues().ToList().IndexOf(Config.Instance.UserSelectedDownloadFolder); + if (index > 1) + { + window.SeletedFolderIndex = index; + } + else + { + Config.Instance.FolderSelectionMode = FolderSelectionMode.Auto; + window.SeletedFolderIndex = 0; + } + } + //window.SeletedFolderIndex = Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto ? 0 : 2; var fileName = string.Empty; @@ -41,7 +59,7 @@ namespace XDM.Common.UI else { var url = appUi.GetUrlFromClipboard(); - if (url != null) + if (!string.IsNullOrEmpty(url)) { window.Url = url; window.SelectedFileName = Helpers.SanitizeFileName(Helpers.GetFileName(new Uri(url))); @@ -169,7 +187,7 @@ namespace XDM.Common.UI selectedFolder, startImmediately, window.Authentication, window.Proxy ?? Config.Instance.Proxy, - window.EnableSpeedLimit ? window.SpeedLimit : 0, queueId); + window.EnableSpeedLimit ? window.SpeedLimit : 0, queueId, false); //var http = new SingleSourceHTTPDownloader(new SingleSourceHTTPDownloadInfo //{ diff --git a/app/XDM/XDM.Common.UI/NewVideoDownloadDialogHelper.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/NewVideoDownloadDialogHelper.cs similarity index 55% rename from app/XDM/XDM.Common.UI/NewVideoDownloadDialogHelper.cs rename to app/XDM/XDM.App.Core/XDM.Common.UI/NewVideoDownloadDialogHelper.cs index de2cc9c..04783b8 100644 --- a/app/XDM/XDM.Common.UI/NewVideoDownloadDialogHelper.cs +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/NewVideoDownloadDialogHelper.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Linq; using Translations; using XDM.Core.Lib.Common; using XDM.Core.Lib.Common.MediaProcessor; @@ -8,16 +9,46 @@ namespace XDM.Common.UI { public class NewVideoDownloadDialogHelper { - public static void ShowVideoDownloadDialog(IApp app, IAppUI appUi, INewVideoDownloadDialog window, string id, string name, long size) + public static void ShowVideoDownloadDialog(IApp app, IAppUI appUi, INewVideoDownloadDialog window, + string id, string name, long size, string? contentType) { window.SetFolderValues(CommonUtils.GetFolderValues()); - window.SeletedFolderIndex = Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto ? 0 : 2; + if (Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto) + { + window.SeletedFolderIndex = 0; + } + else + { + var index = CommonUtils.GetFolderValues().ToList().IndexOf(Config.Instance.UserSelectedDownloadFolder); + if (index > 1) + { + window.SeletedFolderIndex = index; + } + else + { + Config.Instance.FolderSelectionMode = FolderSelectionMode.Auto; + window.SeletedFolderIndex = 0; + } + } + //window.SeletedFolderIndex = Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto ? 0 : 2; window.SelectedFileName = Helpers.SanitizeFileName(name); window.FileSize = Helpers.FormatSize(size); window.FileBrowsedEvent += CommonUtils.OnFileBrowsed; window.DropdownSelectionChangedEvent += CommonUtils.OnDropdownSelectionChanged; + if (!string.IsNullOrEmpty(contentType)) + { + var mime = contentType!.ToLowerInvariant(); + if (mime.StartsWith("audio")) + { + if (!(mime.Contains("mpeg") || mime.Contains("mp3"))) + { + window.ShowMp3Checkbox = true; + } + } + } + window.DownloadClicked += (a, b) => { if (string.IsNullOrEmpty(window.SelectedFileName)) @@ -33,13 +64,19 @@ namespace XDM.Common.UI } return; } - app.StartVideoDownload(id, Helpers.SanitizeFileName(window.SelectedFileName), + var name = Helpers.SanitizeFileName(window.SelectedFileName); + if (window.IsMp3CheckboxChecked) + { + name = AddMp3Extension(name); + } + app.StartVideoDownload(id, name, CommonUtils.SelectedFolderFromIndex(window.SeletedFolderIndex), true, window.Authentication, window.Proxy ?? Config.Instance.Proxy, window.EnableSpeedLimit ? window.SpeedLimit : 0, - null); + null, + window.IsMp3CheckboxChecked); window.DisposeWindow(); }; @@ -50,13 +87,19 @@ namespace XDM.Common.UI window.ShowMessageBox(TextResource.GetText("MSG_NO_FILE")); return; } - app.StartVideoDownload(id, Helpers.SanitizeFileName(window.SelectedFileName), + var name = Helpers.SanitizeFileName(window.SelectedFileName); + if (window.IsMp3CheckboxChecked) + { + name = AddMp3Extension(name); + } + app.StartVideoDownload(id, name, CommonUtils.SelectedFolderFromIndex(window.SeletedFolderIndex), false, window.Authentication, window.Proxy ?? Config.Instance.Proxy, window.EnableSpeedLimit ? window.SpeedLimit : 0, - b.QueueId); + b.QueueId, + window.IsMp3CheckboxChecked); window.DisposeWindow(); }; @@ -73,6 +116,11 @@ namespace XDM.Common.UI window.ShowWindow(); } + private static string AddMp3Extension(string name) + { + return $"{Path.GetFileNameWithoutExtension(name)}.mp3"; + } + private static bool IsFFmpegInstalled() { try diff --git a/app/XDM/XDM.App.Core/XDM.Common.UI/VideoDownloaderController.cs b/app/XDM/XDM.App.Core/XDM.Common.UI/VideoDownloaderController.cs new file mode 100644 index 0000000..ef0bb96 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Common.UI/VideoDownloaderController.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using TraceLog; +using Translations; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; +using XDM.Core.Lib.Downloader.Adaptive.Dash; +using XDM.Core.Lib.Downloader.Adaptive.Hls; +using XDM.Core.Lib.Downloader.Progressive.DualHttp; +using XDM.Core.Lib.Downloader.Progressive.SingleHttp; +using XDM.Core.Lib.UI; +using XDM.Core.Lib.Util; +using YDLWrapper; + +namespace XDM.Common.UI +{ + public class VideoDownloaderController + { + private YDLProcess? ydl; + private List videoItemList; + private List videoQualities; + private IVideoDownloadView view; + private IAppUI appUI; + private IApp app; + + public VideoDownloaderController(IVideoDownloadView view, IAppUI appUI, IApp app) + { + this.appUI = appUI; + this.app = app; + this.view = view; + + var browsers = new Dictionary + { + ["Google Chrome"] = "chrome", + ["Microsoft Edge"] = "edge", + ["Mozilla Firefox"] = "firefox", + ["Brave"] = "brave", + ["Opera"] = "opera", + ["Chromium"] = "chromium", + ["Safari"] = "safari", + ["Vivaldi"] = "vivaldi" + }; + + this.view.AllowedBrowsers = browsers.Keys.ToList(); + + view.SearchClicked += (_, _) => + { + var url = view.Url; + string? browser = null; + if (!string.IsNullOrEmpty(view.SelectedBrowser)) + { + browsers.TryGetValue(view.SelectedBrowser!, out browser); + } + if (Helpers.IsUriValid(url)) + { + view.SwitchToProcessingPage(); + ProcessVideo(url, browser, result => appUI.RunOnUiThread(() => + { + if (result != null) + { + view.SwitchToFinalPage(); + SetVideoResultList(result); + } + else + { + view.SwitchToErrorPage(); + } + })); + } + else + { + appUI.ShowMessageBox(view, TextResource.GetText("MSG_INVALID_URL")); + } + }; + + view.CancelClicked += (_, _) => + { + CancelOperation(); + view.SwitchToInitialPage(); + }; + + view.WindowClosed += (_, _) => + { + CancelOperation(); + }; + + view.BrowseClicked += (_, _) => + { + var folder = view.SelectFolder(); + if (!string.IsNullOrEmpty(folder)) + { + view.DownloadLocation = folder; + Config.Instance.UserSelectedDownloadFolder = folder; + Helpers.UpdateRecentFolderList(folder); + } + }; + + view.DownloadClicked += View_DownloadClicked; + view.DownloadLaterClicked += View_DownloadLaterClicked; + view.QueueSchedulerClicked += (s, e) => + { + appUI.ShowQueueWindow(s); + }; + } + + private void View_DownloadLaterClicked(object? sender, DownloadLaterEventArgs e) + { + DownloadSelectedItems(false, e.QueueId); + } + + private void View_DownloadClicked(object? sender, EventArgs e) + { + DownloadSelectedItems(true, null); + } + + public void Run() + { + var url = appUI.GetUrlFromClipboard(); + if (url != null && Helpers.IsUriValid(url)) + { + view.Url = url; + } + view.DownloadLocation = Helpers.GetVideoDownloadFolder(); + view.ShowWindow(); + } + + private void SetVideoResultList(List items) + { + if (items == null) return; + + this.videoItemList = items; + + var formatSet = new HashSet(); + foreach (var item in items) + { + if (item.Formats != null) + { + item.Formats.ForEach(item => + { + if (!string.IsNullOrEmpty(item.Height)) + { + if (Int32.TryParse(item.Height, out int height)) + { + formatSet.Add(height); + } + } + }); + } + } + var formatsList = new List(formatSet); + formatsList.Sort(); + formatsList.Reverse(); + this.videoQualities = formatsList; + + var videoList = this.videoItemList.Select(x => x.Title); + var formatList = this.videoQualities.Select(n => $"{n}p"); + + view.SetVideoResultList(videoList, formatList); + + if (formatsList.Count > 0) + { + view.SelectedFormat = 0; + } + } + + private void CancelOperation() + { + try + { + if (ydl != null) + { + ydl.Cancel(); + } + } + catch (Exception ex) + { + Log.Debug(ex, "Error cancelling ydl"); + } + } + + private void ProcessVideo(string url, string? browser, Action?> callback) + { + ydl = new YDLProcess + { + Uri = new Uri(url), + BrowserName = browser + }; + new Thread(() => + { + try + { + ydl.Start(); + callback.Invoke(YDLOutputParser.Parse(ydl.JsonOutputFile)); + } + catch (Exception ex) + { + Log.Debug(ex, "Error while running youtube-dl"); + callback.Invoke(null); + } + }).Start(); + } + + private void DownloadSelectedItems(bool startImmediately, string? queueId) + { + if (string.IsNullOrEmpty(view.DownloadLocation)) + { + appUI!.ShowMessageBox(view, TextResource.GetText("MSG_CAT_FOLDER_MISSING")); + return; + } + if (this.view.SelectedItemCount == 0) + { + appUI!.ShowMessageBox(view, TextResource.GetText("BAT_SELECT_ITEMS")); + return; + } + var quality = -1; + if (view.SelectedFormat >= 0) + { + quality = this.videoQualities[view.SelectedFormat]; + } + + var selectedIndices = view.SelectedRows; + foreach (var index in selectedIndices) + { + var entry = videoItemList[index]; + var fmt = FindMatchingFormatByQuality(entry, quality); + if (fmt.HasValue) + { + AddDownload(fmt.Value, startImmediately, queueId); + } + } + view.CloseWindow(); + } + + private YDLVideoFormatEntry? FindMatchingFormatByQuality(YDLVideoEntry videoEntry, int quality = -1) + { + if (videoEntry.Formats.Count == 0) return null; + if (quality == -1) + { + return videoEntry.Formats[0]; + } + //if we find an mp4 video with desired height/resolution return it + var fmt = FindOnlyMatchingMp4(videoEntry, quality); + if (fmt != null) + { + return fmt; + } + //if no mp4 is found look for other formats like mkv or webm + foreach (var format in videoEntry.Formats) + { + if (!string.IsNullOrEmpty(format.Height) && + Int32.TryParse(format.Height, out int height) && + height == quality) + { + return format; + } + } + //so far no luck, try to find next best resoultion + var max = -1; + foreach (var format in videoEntry.Formats) + { + if (!string.IsNullOrEmpty(format.Height) && + Int32.TryParse(format.Height, out int height) && + height > 0 && + quality > height) + { + if (height > max) + { + max = height; + fmt = format; + } + } + } + if (fmt != null) + { + return fmt; + } + //could not found anything as per criteria, return the first format + return videoEntry.Formats[0]; + } + + private YDLVideoFormatEntry? FindOnlyMatchingMp4(YDLVideoEntry videoEntry, int quality) + { + if (videoEntry.Formats.Count == 0) return null; + foreach (var format in videoEntry.Formats) + { + if (!string.IsNullOrEmpty(format.Height) && + Int32.TryParse(format.Height, out int height) && + height == quality && + (format.FileExt?.ToLowerInvariant()?.EndsWith("mp4") ?? false)) + { + return format; + } + } + return null; + } + + private void AddDownload(YDLVideoFormatEntry videoEntry, bool startImmediately, string? queueId) + { + object? info = videoEntry.YDLEntryType switch + { + YDLEntryType.Http => new SingleSourceHTTPDownloadInfo + { + Uri = videoEntry.VideoUrl + }, + YDLEntryType.Dash => new DualSourceHTTPDownloadInfo + { + Uri1 = videoEntry.VideoUrl, + Uri2 = videoEntry.AudioUrl + }, + YDLEntryType.Hls => new MultiSourceHLSDownloadInfo + { + VideoUri = videoEntry.VideoUrl, + AudioUri = videoEntry.AudioUrl + }, + YDLEntryType.MpegDash => new MultiSourceDASHDownloadInfo + { + VideoSegments = videoEntry.VideoFragments?.Select(x => new Uri(new Uri(videoEntry.FragmentBaseUrl), x.Path)).ToList(), + AudioSegments = videoEntry.AudioFragments?.Select(x => new Uri(new Uri(videoEntry.FragmentBaseUrl), x.Path)).ToList(), + AudioFormat = videoEntry.AudioFormat != null ? "." + videoEntry.AudioFormat : null, + VideoFormat = videoEntry.VideoFormat != null ? "." + videoEntry.VideoFormat : null, + Url = videoEntry.VideoUrl + }, + }; + if (info != null) + { + app!.SubmitDownload( + info, + videoEntry.Title + "." + videoEntry.FileExt, + FileNameFetchMode.None, + view.DownloadLocation, + startImmediately, + view.Authentication, view.Proxy ?? Config.Instance.Proxy, + view.EnableSpeedLimit, + view.EnableSpeedLimit ? view.SpeedLimit : 0, queueId, + false + ); + } + } + } +} diff --git a/app/XDM/XDM_CoreFx/Interop.CURL/CurlNative.cs b/app/XDM/XDM.App.Core/XDM.Core/Interop.CURL/CurlNative.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Interop.CURL/CurlNative.cs rename to app/XDM/XDM.App.Core/XDM.Core/Interop.CURL/CurlNative.cs diff --git a/app/XDM/Interop.WinHttp/Interop.SafeWinHttpHandle.cs b/app/XDM/XDM.App.Core/XDM.Core/Interop.WinHttp/Interop.SafeWinHttpHandle.cs similarity index 100% rename from app/XDM/Interop.WinHttp/Interop.SafeWinHttpHandle.cs rename to app/XDM/XDM.App.Core/XDM.Core/Interop.WinHttp/Interop.SafeWinHttpHandle.cs diff --git a/app/XDM/XDM_CoreFx/Interop.WinHttp/Interop.winhttp.cs b/app/XDM/XDM.App.Core/XDM.Core/Interop.WinHttp/Interop.winhttp.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Interop.WinHttp/Interop.winhttp.cs rename to app/XDM/XDM.App.Core/XDM.Core/Interop.WinHttp/Interop.winhttp.cs diff --git a/app/XDM/Interop.WinHttp/Interop.winhttp_types.cs b/app/XDM/XDM.App.Core/XDM.Core/Interop.WinHttp/Interop.winhttp_types.cs similarity index 100% rename from app/XDM/Interop.WinHttp/Interop.winhttp_types.cs rename to app/XDM/XDM.App.Core/XDM.Core/Interop.WinHttp/Interop.winhttp_types.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/CurlHttpClient.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/CurlHttpClient.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/CurlHttpClient.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/CurlHttpClient.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/CurlResponseStream.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/CurlResponseStream.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/CurlResponseStream.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/CurlResponseStream.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/CurlSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/CurlSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/CurlSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/CurlSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/DotNetHttpClient.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/DotNetHttpClient.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/DotNetHttpClient.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/DotNetHttpClient.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/DotNetHttpSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/DotNetHttpSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/DotNetHttpSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/DotNetHttpSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpClientFactory.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpClientFactory.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpClientFactory.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpClientFactory.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpRequest.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpRequest.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpRequest.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpRequest.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpResponse.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpResponse.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpResponse.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpResponse.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/HttpSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/HttpSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/IHttpClient.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/IHttpClient.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/IHttpClient.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/IHttpClient.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/IHttpClientFactory.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/IHttpClientFactory.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/IHttpClientFactory.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/IHttpClientFactory.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/IHttpSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/IHttpSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/IHttpSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/IHttpSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/NetFxHttpClient.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/NetFxHttpClient.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/NetFxHttpClient.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/NetFxHttpClient.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/NetFxHttpSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/NetFxHttpSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/NetFxHttpSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/NetFxHttpSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/ProxyHelper.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/ProxyHelper.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/ProxyHelper.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/ProxyHelper.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WebRequestExtensions.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WebRequestExtensions.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WebRequestExtensions.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WebRequestExtensions.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinHttpClient.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinHttpClient.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinHttpClient.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinHttpClient.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinHttpResponseStream.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinHttpResponseStream.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinHttpResponseStream.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinHttpResponseStream.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinHttpSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinHttpSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinHttpSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinHttpSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetClient.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetClient.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetClient.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetClient.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetProxyHelper.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetProxyHelper.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetProxyHelper.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetProxyHelper.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetResponseStream.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetResponseStream.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetResponseStream.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetResponseStream.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetSession.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetSession.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Clients/Http/WinInetSession.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Clients/Http/WinInetSession.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/ArgsProcessor.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ArgsProcessor.cs similarity index 87% rename from app/XDM/XDM_CoreFx/Lib/Common/ArgsProcessor.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ArgsProcessor.cs index d1270be..abc46ce 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/ArgsProcessor.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ArgsProcessor.cs @@ -20,12 +20,13 @@ namespace XDM.Core.Lib.Common } } - public static Dictionary ParseArgs(string[] args) + public static Dictionary ParseArgs(string[] args, int start = 0) { var options = new Dictionary(); var key = string.Empty; - foreach (var arg in args) + for (int i = start; i < args.Length; i++) { + var arg = args[i]; if (key != string.Empty) { options[key] = arg; diff --git a/app/XDM/XDM_CoreFx/Lib/Common/AuthenticationInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/AuthenticationInfo.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/AuthenticationInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/AuthenticationInfo.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/CancelFlag.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/CancelFlag.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/CancelFlag.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/CancelFlag.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/Category.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Category.cs similarity index 79% rename from app/XDM/XDM_CoreFx/Lib/Common/Category.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Category.cs index dd31d69..4ecbdc8 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/Category.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Category.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; namespace XDM.Core.Lib.Common { diff --git a/app/XDM/XDM_CoreFx/Lib/Common/Collections/GenericOrderedDictionary.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Collections/GenericOrderedDictionary.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/Collections/GenericOrderedDictionary.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Collections/GenericOrderedDictionary.cs diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Config.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Config.cs new file mode 100644 index 0000000..f5680f0 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Config.cs @@ -0,0 +1,491 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using TraceLog; +using XDM.Core.Lib.Util; + +namespace XDM.Core.Lib.Common +{ + public class Config + { + private static Config instance; + private static object lockObj = new(); + public static Config Instance + { + get + { + if (instance == null) + { + lock (lockObj) + { + if (instance == null) + { + LoadConfig(); + } + } + } + + return instance!; + } + + private set + { + instance = value; + } + } + + public const string ChromeWebstoreUrl = "https://chrome.google.com/webstore/detail/xtreme-download-manager/dkckaoghoiffdbomfbbodbbgmhjblecj"; + public const string FirefoxAMOUrl = "https://addons.mozilla.org/en-US/firefox/addon/xdm-browser-monitor/"; + + public static string DataDir { get; set; } + + public bool IsBrowserMonitoringEnabled { get; set; } = true; + + public static string DefaultFallbackUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"; + + public string FallbackUserAgent { get; set; } = DefaultFallbackUserAgent; + + public static string[] DefaultVideoExtensions => new string[] + { + "MP4", "M3U8", "F4M", "WEBM", "OGG", "MP3", "AAC", "FLV", "MKV", "DIVX", + "MOV", "MPG", "MPEG","OPUS" + }; + + public string[] VideoExtensions { get; set; } + + public static string[] DefaultFileExtensions => new string[] + { + "3GP", "7Z", "AVI", "BZ2", "DEB", "DOC", "DOCX", "EXE", "GZ", "ISO", + "MSI", "PDF", "PPT", "PPTX", "RAR", "RPM", "XLS", "XLSX", "SIT", "SITX", "TAR", "JAR", "ZIP", "XZ" + }; + + public string[] FileExtensions { get; set; } + + public static string[] DefaultBlockedHosts => new string[] + { + "update.microsoft.com","windowsupdate.com","thwawte.com" + }; + + public string[] BlockedHosts { get; set; } + + public string Language { get; set; } = "English"; + + public bool AllowSystemDarkTheme { get; set; } = false; + + private Config() + { + VideoExtensions = DefaultVideoExtensions; + FileExtensions = DefaultFileExtensions; + BlockedHosts = DefaultBlockedHosts; + } + + public List RecentFolders { get; set; } = new List(); + + public FolderSelectionMode FolderSelectionMode { get; set; } + + public FileConflictResolution FileConflictResolution { get; set; } + + public int MaxRetry { get; set; } = 10; + + public int RetryDelay { get; set; } = 10; + + public int MaxParallelDownloads { get; set; } = 1; + + public bool ShowProgressWindow { get; set; } = true; + + public bool ShowDownloadCompleteWindow { get; set; } = true; + + public bool StartDownloadAutomatically { get; set; } = false; + + public bool FetchServerTimeStamp { get; set; } = false; + + public bool MonitorClipboard { get; set; } = false; + + public int MinVideoSize { get; set; } = 1 * 1024; + + public string TempDir { get; set; } + + public int NetworkTimeout { get; set; } = 30; + + public int MaxSegments { get; set; } = 8; + + public int DefaltDownloadSpeed { get; set; } = 0; + + public bool EnableSpeedLimit { get; set; } = false; + + public bool ShutdownAfterAllFinished { get; set; } = false; + + public bool KeepPCAwake { get; set; } = true; + + public bool RunCommandAfterCompletion { get; set; } = false; + + public string AfterCompletionCommand { get; set; } + + public bool ScanWithAntiVirus { get; set; } = false; + + public string AntiVirusExecutable { get; set; } + + public string AntiVirusArgs { get; set; } + + public ProxyInfo? Proxy { get; set; } + + public bool DoubleClickOpenFile { get; set; } = false; + + public bool RunOnLogon + { + get => Helpers.IsAutoStartEnabled(); + set => Helpers.EnableAutoStart(value); + } + + public string UserSelectedDownloadFolder { get; set; } + + public string DefaultDownloadFolder { get; set; } = + Helpers.GetOsDefaultDownloadFolder(); + + public static IEnumerable DefaultCategories = new[] + { + new Category + { + Name="CAT_DOCUMENTS", + DisplayName="Document", + FileExtensions=new HashSet + { + ".DOC", ".DOCX", ".PDF", ".MD", ".XLSX",".XLS", ".CBZ" + }, + DefaultFolder=Path.Combine(Helpers.GetOsDefaultDownloadFolder(), + "Documents"), + IsPredefined=true + }, + new Category + { + Name="CAT_MUSIC", + DisplayName="Music", + FileExtensions=new HashSet + { + ".MP3", ".AAC",".MPA",".WMA",".MIDI" + }, + DefaultFolder=Path.Combine(Helpers.GetOsDefaultDownloadFolder(),"Music"), + IsPredefined=true + }, + new Category + { + Name="CAT_VIDEOS", + DisplayName="Video", + FileExtensions=new HashSet + { + ".MP4", ".WEBM", ".OGG", ".FLV", ".MKV", ".DIVX", + ".MOV", ".MPG", ".MPEG",".OPUS",".AVI",".WMV" + }, + DefaultFolder=Path.Combine(Helpers.GetOsDefaultDownloadFolder(),"Video"), + IsPredefined=true + }, + new Category + { + Name="CAT_COMPRESSED", + DisplayName="Compressed", + FileExtensions=new HashSet + { + ".7Z", ".ZIP", ".RAR", ".BZ2", ".GZ",".XZ", ".TAR" + }, + DefaultFolder=Path.Combine(Helpers.GetOsDefaultDownloadFolder(),"Compressed"), + IsPredefined=true + }, + new Category + { + Name="CAT_PROGRAMS", + DisplayName="Application", + FileExtensions=new HashSet + { + ".EXE", ".DEB", ".RPM", ".MSI" + }, + DefaultFolder=Path.Combine(Helpers.GetOsDefaultDownloadFolder(),"Programs"), + IsPredefined=true + }, + //new Category + //{ + // Name="Other", + // DisplayName="Other", + // FileExtensions=new HashSet + // { + // } + //} + }; + + public IEnumerable Categories = DefaultCategories; + + public IEnumerable UserCredentials { get; set; } = new List(); + + public static void LoadConfig(string? path = null) + { + DataDir = path ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".xdman"); + instance = new Config + { + TempDir = Path.Combine(DataDir, "temp") + }; + try + { + if (!Directory.Exists(DataDir)) + { + Directory.CreateDirectory(DataDir); + } + + var bytes = TransactedIO.ReadBytes("settings.dat", DataDir); + if (bytes != null) + { + using var ms = new MemoryStream(bytes); + using var reader = new BinaryReader(ms); + SerializationHelper.DeserializeConfig(instance, reader); + } + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + + + //var json = TransactedIO.Read("settings.json", Config.DataDir); + //Config? instance = null; + //if (json != null) + //{ + // instance = JsonConvert.DeserializeObject( + // json, new JsonSerializerSettings + // { + // MissingMemberHandling = MissingMemberHandling.Ignore, + // ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor + // }); + //} + //if (instance == null) + //{ + // Instance = new Config + // { + // TempDir = Path.Combine(Config.DataDir, "temp") + // }; + //} + //else + //{ + // Instance = instance; + //} + + //var path = Path.Combine(Config.DataDir, "settings.json"); + //if (File.Exists(path)) + //{ + // try + // { + // var instance = JsonConvert.DeserializeObject( + // File.ReadAllText(path), new JsonSerializerSettings + // { + // MissingMemberHandling = MissingMemberHandling.Ignore, + // ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor + // }); + // if (instance != null) + // { + // Instance = instance; + // return; + // } + // } + // catch (Exception exx) + // { + // Log.Debug(exx, "Error loading config"); + // } + //} + //Instance = new Config + //{ + // TempDir = Path.Combine(Config.DataDir, "temp") + //}; + } + + //private static void PopulateConfig32(Config instance, BinaryReader r) + //{ + // instance.AfterCompletionCommand = Helpers.ReadString(r); + // instance.AntiVirusArgs = Helpers.ReadString(r); + // instance.AntiVirusExecutable = Helpers.ReadString(r); + // var count = r.ReadInt32(); + // instance.BlockedHosts = new string[count]; + // for (int i = 0; i < count; i++) + // { + // instance.BlockedHosts[i] = r.ReadString(); + // } + // count = r.ReadInt32(); + // var list = new List(count); + // for (int i = 0; i < count; i++) + // { + // var category = new Category + // { + // DefaultFolder = Helpers.ReadString(r), + // DisplayName = Helpers.ReadString(r), + // FileExtensions = new HashSet(), + // }; + // var c2 = r.ReadInt32(); + // for (int j = 0; j < c2; j++) + // { + // category.FileExtensions.Add(r.ReadString()); + // } + // category.IsPredefined = r.ReadBoolean(); + // category.Name = r.ReadString(); + // list.Add(category); + // } + // instance.Categories = list; + // instance.DefaultDownloadFolder = Helpers.ReadString(r); + // instance.EnableSpeedLimit = r.ReadBoolean(); + // instance.FetchServerTimeStamp = r.ReadBoolean(); + // instance.FileConflictResolution = (FileConflictResolution)r.ReadInt32(); + // count = r.ReadInt32(); + // instance.FileExtensions = new string[count]; + // for (int i = 0; i < count; i++) + // { + // instance.FileExtensions[i] = r.ReadString(); + // } + // instance.FolderSelectionMode = (FolderSelectionMode)r.ReadInt32(); + // instance.DefaltDownloadSpeed = r.ReadInt32(); + // instance.IsBrowserMonitoringEnabled = r.ReadBoolean(); + // instance.KeepPCAwake = r.ReadBoolean(); + // instance.Language = r.ReadString(); + // instance.MaxParallelDownloads = r.ReadInt32(); + // instance.MaxRetry = r.ReadInt32(); + // instance.MaxSegments = r.ReadInt32(); + // instance.MinVideoSize = r.ReadInt32(); + // instance.MonitorClipboard = r.ReadBoolean(); + // instance.NetworkTimeout = r.ReadInt32(); + // count = r.ReadInt32(); + // instance.RecentFolders = new List(count); + // for (int i = 0; i < count; i++) + // { + // instance.RecentFolders.Add(r.ReadString()); + // } + // instance.RetryDelay = r.ReadInt32(); + // instance.RunCommandAfterCompletion = r.ReadBoolean(); + // instance.RunOnLogon = r.ReadBoolean(); + // instance.ScanWithAntiVirus = r.ReadBoolean(); + // instance.ShowDownloadCompleteWindow = r.ReadBoolean(); + // instance.ShowProgressWindow = r.ReadBoolean(); + // instance.ShutdownAfterAllFinished = r.ReadBoolean(); + // instance.StartDownloadAutomatically = r.ReadBoolean(); + // instance.TempDir = Helpers.ReadString(r); + // count = r.ReadInt32(); + // var list2 = new List(count); + // for (int i = 0; i < count; i++) + // { + // var passwordEntry = new PasswordEntry + // { + // Host = Helpers.ReadString(r), + // User = Helpers.ReadString(r), + // Password = Helpers.ReadString(r) + // }; + // list2.Add(passwordEntry); + // } + // instance.UserCredentials = list2; + // count = r.ReadInt32(); + // instance.VideoExtensions = new string[count]; + // for (int i = 0; i < count; i++) + // { + // instance.VideoExtensions[i] = r.ReadString(); + // } + // instance.Proxy = ProxyInfoSerializer.Deserialize(r); + // instance.AllowSystemDarkTheme = r.ReadBoolean(); + //} + + public static void SaveConfig() + { + SerializationHelper.SerializeConfig(); + } + + //public static void SaveConfig3() + //{ + // using var ms = new MemoryStream(); + // using var writer = new BinaryWriter(ms); + // writer.Write(Instance.AfterCompletionCommand ?? string.Empty); + // writer.Write(Instance.AntiVirusArgs ?? string.Empty); + // writer.Write(Instance.AntiVirusExecutable ?? string.Empty); + // var count = Instance.BlockedHosts?.Length ?? 0; + // writer.Write(count); + // for (int i = 0; i < count; i++) + // { + // writer.Write(Instance.BlockedHosts![i]); + // } + // count = Instance.Categories.Count(); + // writer.Write(count); + // foreach (var category in Instance.Categories) + // { + // writer.Write(category.DefaultFolder); + // writer.Write(category.DisplayName ?? string.Empty); + // count = category.FileExtensions.Count(); + // writer.Write(count); + // foreach (var ext in category.FileExtensions) + // { + // writer.Write(ext); + // } + // writer.Write(category.IsPredefined); + // writer.Write(category.Name); + // } + // writer.Write(Instance.DefaultDownloadFolder ?? string.Empty); + // writer.Write(Instance.EnableSpeedLimit); + // writer.Write(Instance.FetchServerTimeStamp); + // writer.Write((int)Instance.FileConflictResolution); + // count = Instance.FileExtensions.Length; + // writer.Write(count); + // foreach (var ext in Instance.FileExtensions) + // { + // writer.Write(ext); + // } + // writer.Write((int)Instance.FolderSelectionMode); + // writer.Write(Instance.DefaltDownloadSpeed); + // writer.Write(Instance.IsBrowserMonitoringEnabled); + // writer.Write(Instance.KeepPCAwake); + // writer.Write(Instance.Language); + // writer.Write(Instance.MaxParallelDownloads); + // writer.Write(Instance.MaxRetry); + // writer.Write(Instance.MaxSegments); + // writer.Write(Instance.MinVideoSize); + // writer.Write(Instance.MonitorClipboard); + // writer.Write(Instance.NetworkTimeout); + // count = Instance.RecentFolders.Count; + // writer.Write(count); + // foreach (var recentFolder in Instance.RecentFolders) + // { + // writer.Write(recentFolder); + // } + // writer.Write(Instance.RetryDelay); + // writer.Write(Instance.RunCommandAfterCompletion); + // writer.Write(Instance.RunOnLogon); + // writer.Write(Instance.ScanWithAntiVirus); + // writer.Write(Instance.ShowDownloadCompleteWindow); + // writer.Write(Instance.ShowProgressWindow); + // writer.Write(Instance.ShutdownAfterAllFinished); + // writer.Write(Instance.StartDownloadAutomatically); + // writer.Write(Instance.TempDir); + // count = Instance.UserCredentials.Count(); + // writer.Write(count); + // foreach (var pe in Instance.UserCredentials) + // { + // writer.Write(pe.Host ?? string.Empty); + // writer.Write(pe.User ?? string.Empty); + // writer.Write(pe.Password ?? string.Empty); + // } + // count = Instance.VideoExtensions.Length; + // writer.Write(count); + // foreach (var ext in Instance.VideoExtensions) + // { + // writer.Write(ext); + // } + // //ProxyInfoSerializer.Serialize(Instance.Proxy, writer); + // //writer.Write(Instance.AllowSystemDarkTheme); + // writer.Close(); + // ms.Close(); + // TransactedIO.WriteBytes(ms.ToArray(), "settings.db", Config.DataDir); + // //TransactedIO.Write(JsonConvert.SerializeObject(Config.Instance), "settings.json", Config.DataDir); + // //File.WriteAllText(Path.Combine(Config.DataDir, "settings.json"), JsonConvert.SerializeObject(Config.Instance)); + //} + } + + public enum FolderSelectionMode + { + Auto, Manual + } + + public enum FileConflictResolution + { + AutoRename, + Overwrite + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/Common/DownloadEntries.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadEntries.cs similarity index 96% rename from app/XDM/XDM_CoreFx/Lib/Common/DownloadEntries.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadEntries.cs index 3861f61..5ca7ac9 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/DownloadEntries.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadEntries.cs @@ -38,9 +38,9 @@ namespace XDM.Core.Lib.Common { public int Progress { get; set; } public DownloadStatus Status { get; set; } - [JsonIgnore] + //[JsonIgnore] public string? DownloadSpeed { get; set; } - [JsonIgnore] + //[JsonIgnore] public string? ETA { get; set; } //public static InProgressDownloadEntry Deserialize(int version, BinaryReader reader) @@ -77,7 +77,7 @@ namespace XDM.Core.Lib.Common public enum DownloadStatus { - Downloading, Stopped, Finished + Downloading, Stopped, Finished, Waiting } //internal static class FinishedDownloadEntrySerializerV1 diff --git a/app/XDM/XDM_CoreFx/Lib/Common/DownloadQueue.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadQueue.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/DownloadQueue.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadQueue.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/DownloadSchedule.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadSchedule.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/DownloadSchedule.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/DownloadSchedule.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/ErrorCode.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ErrorCode.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/ErrorCode.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ErrorCode.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/Exceptions.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Exceptions.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/Exceptions.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Exceptions.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/GenericEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/GenericEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/GenericEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/GenericEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IApp.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IApp.cs similarity index 85% rename from app/XDM/XDM_CoreFx/Lib/Common/IApp.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IApp.cs index eccb541..c9d5d78 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/IApp.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IApp.cs @@ -25,6 +25,7 @@ namespace XDM.Core.Lib.Common public IList? Updates { get; } public bool ComponentsInstalled { get; } public bool IsAppUpdateAvailable { get; } + public bool IsComponentUpdateAvailable { get; } public string ComponentUpdateText { get; } string[] Args { get; set; } @@ -43,7 +44,8 @@ namespace XDM.Core.Lib.Common bool startImmediately, AuthenticationInfo? authentication, ProxyInfo? proxyInfo, - int maxSpeedLimit, string? queueId); + int maxSpeedLimit, string? queueId, + bool convertToMp3); public string StartDownload(DualSourceHTTPDownloadInfo info, string fileName, @@ -72,6 +74,18 @@ namespace XDM.Core.Lib.Common ProxyInfo? proxyInfo, int maxSpeedLimit, string? queueId); + public void SubmitDownload(object downloadInfo, + string fileName, + FileNameFetchMode fileNameFetchMode, + string? targetFolder, + bool startImmediately, + AuthenticationInfo? authentication, + ProxyInfo? proxyInfo, + bool enableSpeedLimit, + int speedLimit, + string? queueId, + bool convertToMp3); + public void SaveState(); public void SetUI(IListUI listUI); public void StopDownloads(IEnumerable list, bool closeProgressWindow = false); @@ -86,7 +100,7 @@ namespace XDM.Core.Lib.Common public void AddVideoNotifications(IEnumerable<(SingleSourceHTTPDownloadInfo Info, StreamingVideoDisplayInfo DisplayInfo)> notifications); public void AddVideoNotifications(IEnumerable<(MultiSourceHLSDownloadInfo Info, StreamingVideoDisplayInfo DisplayInfo)> notifications); public void AddVideoNotifications(IEnumerable<(MultiSourceDASHDownloadInfo Info, StreamingVideoDisplayInfo DisplayInfo)> notifications); - public List<(string ID, string File, string DisplayName)> GetVideoList(bool encode = true); + public List<(string ID, string File, string DisplayName, DateTime Time)> GetVideoList(bool encode = true); public void AddVideoDownload(string videoId); //public void LoadDownloadList(); public void StartVideoDownload(string videoId, @@ -96,7 +110,9 @@ namespace XDM.Core.Lib.Common AuthenticationInfo? authentication, ProxyInfo? proxyInfo, int maxSpeedLimit, - string? queueId); + string? queueId, + bool convertToMp3 = false //only applicable for dual source http downloads + ); //public void SaveInProgressList(IEnumerable list); //public void SaveFinishedList(IEnumerable list); public void ClearVideoList(); @@ -120,5 +136,6 @@ namespace XDM.Core.Lib.Common bool IsFFmpegRequiredForDownload(string id); void UpdateSpeedLimit(string id, bool enable, int limit); bool GetLiveDownloadSpeedLimit(string id, out bool enabled, out int limit); + void AddBatchLinks(List messages); } } diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IAppUI.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IAppUI.cs similarity index 90% rename from app/XDM/XDM_CoreFx/Lib/Common/IAppUI.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IAppUI.cs index 217df67..ce52c41 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/IAppUI.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IAppUI.cs @@ -5,7 +5,6 @@ using System.Text; using XDM.Common.UI; using XDM.Core.Lib.Common; -using XDM.Core.Lib.Common; using XDM.Core.Lib.Downloader; namespace XDM.Core.Lib.Common @@ -80,7 +79,7 @@ namespace XDM.Core.Lib.Common /// /// /// - public void ShowVideoDownloadDialog(string videoId, string name, long size); + public void ShowVideoDownloadDialog(string videoId, string name, long size, string? contentType); /// /// /// @@ -125,7 +124,7 @@ namespace XDM.Core.Lib.Common /// /// /// - string GetUrlFromClipboard(); + string? GetUrlFromClipboard(); /// /// @@ -192,9 +191,17 @@ namespace XDM.Core.Lib.Common public void InstallLatestYoutubeDL(); - public void MoveToQueue(string[] selectedIds, bool prompt = false, Action? callback = null); + // public void MoveToQueue(string[] selectedIds, bool prompt = false, Action? callback = null); void ShowQueueWindow(object window); + + void ShowDownloadSelectionWindow(FileNameFetchMode mode, IEnumerable downloads); + + IClipboardMonitor GetClipboardMonitor(); + + void ShowFloatingVideoWidget(); + + event EventHandler WindowLoaded; } public enum DownloadStartType diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IClipboardMonitor.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IClipboardMonitor.cs similarity index 82% rename from app/XDM/XDM_CoreFx/Lib/Common/IClipboardMonitor.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IClipboardMonitor.cs index 6035a63..e6c9ac9 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/IClipboardMonitor.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IClipboardMonitor.cs @@ -12,7 +12,7 @@ namespace XDM.Core.Lib.Common void StopClipboardMonitoring(); - event EventHandler ClipboardChanged; + event EventHandler? ClipboardChanged; string GetClipboardText(); } } diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IDownloadCompleteDialog.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IDownloadCompleteDialog.cs similarity index 68% rename from app/XDM/XDM_CoreFx/Lib/Common/IDownloadCompleteDialog.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IDownloadCompleteDialog.cs index 1c01f0a..13ab832 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/IDownloadCompleteDialog.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IDownloadCompleteDialog.cs @@ -8,20 +8,19 @@ namespace XDM.Core.Lib.Common { public interface IDownloadCompleteDialog { - public IApp App { get; set; } - public event EventHandler FileOpenClicked; - public event EventHandler FolderOpenClicked; + public IApp? App { set; } + public event EventHandler? FileOpenClicked; + public event EventHandler? FolderOpenClicked; + public event EventHandler? DontShowAgainClickd; public string FileNameText { get; set; } - public string FolderText { get; set; } - public void ShowDownloadCompleteDialog(); } public class DownloadCompleteDialogEventArgs : EventArgs { - public string Path { get; set; } - public string FileName { get; set; } + public string? Path { get; set; } + public string? FileName { get; set; } } } diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IFileSelectable.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IFileSelectable.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/IFileSelectable.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IFileSelectable.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IListUI.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IListUI.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/IListUI.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IListUI.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/INewDownloadDialogSkeleton.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/INewDownloadDialogSkeleton.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/INewDownloadDialogSkeleton.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/INewDownloadDialogSkeleton.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/INewVideoDownloadDialog.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/INewVideoDownloadDialog.cs similarity index 80% rename from app/XDM/XDM_CoreFx/Lib/Common/INewVideoDownloadDialog.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/INewVideoDownloadDialog.cs index fdc2572..2a02af8 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/INewVideoDownloadDialog.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/INewVideoDownloadDialog.cs @@ -17,8 +17,10 @@ namespace XDM.Core.Lib.Common public ProxyInfo? Proxy { get; set; } public int SpeedLimit { get; set; } public bool EnableSpeedLimit { get; set; } + public bool ShowMp3Checkbox { get; set; } + public bool IsMp3CheckboxChecked { get; set; } - event EventHandler DownloadClicked, CancelClicked, DestroyEvent, QueueSchedulerClicked; + event EventHandler DownloadClicked, CancelClicked, DestroyEvent, QueueSchedulerClicked, Mp3CheckChanged; event EventHandler DownloadLaterClicked; } } diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IProgressWindow.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IProgressWindow.cs similarity index 91% rename from app/XDM/XDM_CoreFx/Lib/Common/IProgressWindow.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IProgressWindow.cs index 6b872e3..499999f 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/IProgressWindow.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IProgressWindow.cs @@ -30,7 +30,7 @@ namespace XDM.Common.UI public void DownloadStarted(); - public void Destroy(); + public void DestroyWindow(); } public struct ErrorDetails diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IRefreshLinkDialogSkeleton.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IRefreshLinkDialogSkeleton.cs similarity index 79% rename from app/XDM/XDM_CoreFx/Lib/Common/IRefreshLinkDialogSkeleton.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IRefreshLinkDialogSkeleton.cs index ee3877f..933fe21 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/IRefreshLinkDialogSkeleton.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IRefreshLinkDialogSkeleton.cs @@ -8,7 +8,7 @@ namespace XDM.Core.Lib.Common { public interface IRefreshLinkDialogSkeleton { - event EventHandler WatchingStopped; + event EventHandler? WatchingStopped; void ShowWindow(); diff --git a/app/XDM/XDM_CoreFx/Lib/Common/ITextResource.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ITextResource.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/ITextResource.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ITextResource.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IUpdater.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IUpdater.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/IUpdater.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IUpdater.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/IUpdaterUI.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IUpdaterUI.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/IUpdaterUI.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/IUpdaterUI.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/Message.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Message.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/Message.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/Message.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/PasswordEntry.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/PasswordEntry.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/PasswordEntry.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/PasswordEntry.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/ProxyInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ProxyInfo.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/ProxyInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ProxyInfo.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/ProxyInfoSerializer.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ProxyInfoSerializer.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/ProxyInfoSerializer.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ProxyInfoSerializer.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/ShortState.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ShortState.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Common/ShortState.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/ShortState.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Common/StreamingVideoDisplayInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/StreamingVideoDisplayInfo.cs similarity index 82% rename from app/XDM/XDM_CoreFx/Lib/Common/StreamingVideoDisplayInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/StreamingVideoDisplayInfo.cs index 2c2b2fc..615fa60 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/StreamingVideoDisplayInfo.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/StreamingVideoDisplayInfo.cs @@ -11,5 +11,6 @@ namespace XDM.Core.Lib.Common public string Quality { get; set; } public long Size { get; set; } public long Duration { get; set; } + public DateTime CreationTime { get; set; } } } diff --git a/app/XDM/XDM_CoreFx/Lib/Common/TransactedIO.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/TransactedIO.cs similarity index 69% rename from app/XDM/XDM_CoreFx/Lib/Common/TransactedIO.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Common/TransactedIO.cs index 095572c..952a551 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/TransactedIO.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/TransactedIO.cs @@ -8,8 +8,8 @@ using XDM.Core.Lib.Util; namespace XDM.Core.Lib.Common { public static class TransactedIO - { + private static readonly byte[] marker = new[] { (byte)'E', (byte)'N', (byte)'D', (byte)'.' }; public static List ReadFinishedList(string fileName, string folder) { try @@ -240,6 +240,104 @@ namespace XDM.Core.Lib.Common return false; } + public delegate void StreamCallback(Stream stream); + + public static bool ReadStream(string fileName, string folder, StreamCallback callback) + { + var name1 = Path.Combine(folder, $"{fileName}.1"); + var name2 = Path.Combine(folder, $"{fileName}.2"); + //var name3 = Path.Combine(folder, $"{fileName}.3"); + + if (File.Exists(name1) && ReadStream(name1, callback)) + { + return true; + } + if (File.Exists(name2) && ReadStream(name2, callback)) + { + return true; + } + //if (File.Exists(name3) && ReadStream(name3, callback)) + //{ + // return true; + //} + return false; + } + + private static bool ReadStream(string file, StreamCallback callback) + { + try + { + using var fs = new FileStream(file, FileMode.Open, FileAccess.Read); + var b4 = new byte[4]; + if (fs.Read(b4, 0, 4) != 4) + { + return false; + } + var pos = BitConverter.ToInt32(b4, 0); + if (pos > fs.Length || pos < 0) + { + return false; + } + fs.Seek(pos, SeekOrigin.Begin); + if (fs.Read(b4, 0, 4) != 4) + { + return false; + } + if (b4[0] == marker[0] && b4[1] == marker[1] && b4[2] == marker[2] && b4[3] == marker[3]) + { + fs.Seek(4, SeekOrigin.Begin); + callback(fs); + return true; + } + } + catch (Exception ex) + { + Log.Debug(ex, "TransactedWriter.Write"); + } + return false; + } + + private static void WriteStream(string file, StreamCallback callback) + { + using var fs = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite); + fs.Seek(4, SeekOrigin.Begin); + callback(fs); + var pos = fs.Position; + fs.Write(marker, 0, 4); + fs.Seek(0, SeekOrigin.Begin); + fs.Write(BitConverter.GetBytes((int)pos), 0, 4); + fs.Close(); + } + + public static bool WriteStream(string fileName, string folder, StreamCallback callback) + { + try + { + var name1 = Path.Combine(folder, $"{fileName}.1"); + var name2 = Path.Combine(folder, $"{fileName}.2"); + var name3 = Path.Combine(folder, $"{fileName}.3.{Guid.NewGuid()}"); + + if (!File.Exists(name1)) + { + WriteStream(name1, callback); + return true; + } + else + { + WriteStream(name2, callback); + File.Move(name1, name3); + File.Move(name2, name1); + File.Move(name3, name2); + } + return false; + } + catch (Exception ex) + { + Log.Debug(ex, "TransactedWriter.Write"); + } + return false; + } + public static byte[]? ReadBytes(string fileName, string folder) { try diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/UrlConstants.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/UrlConstants.cs new file mode 100644 index 0000000..f47342b --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Common/UrlConstants.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace XDM.Core.Lib.Common +{ + public class UrlConstants + { + public const string SupportUrl = "https://subhra74.github.io/xdm/redirect-support.html"; + public const string ErrorReportUrl = "https://subhra74.github.io/xdm/redirect-support.html"; + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/AppDB.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/AppDB.cs new file mode 100644 index 0000000..dc603b9 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/AppDB.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Data.SQLite; +using System.IO; +using System.Linq; +using System.Text; +using TraceLog; +using XDM.App.Core.XDM.Core.Lib.DataAccess; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; + +namespace XDM.Core.Lib.DataAccess +{ + public class AppDB + { + private static object lockObj = new(); + private bool init = false; + private SQLiteConnection db; + private AppDB() { } + private DownloadList downloadsDB; + public DownloadList Downloads => downloadsDB; + private static AppDB instance; + public static AppDB Instance + { + get + { + lock (lockObj) + { + if (instance == null) + { + instance = new AppDB(); + } + } + return instance; + } + } + + public bool Init(string file) + { + lock (this) + { + try + { + string cs = $"URI=file:{file}"; + if (!File.Exists(file)) + { + SQLiteConnection.CreateFile(file); + } + db = new SQLiteConnection(cs); + db.Open(); + SchemaInitializer.Init(db); + this.downloadsDB = new DownloadList(db); + init = true; + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool Export(string file) + { + try + { + DataImportExport.CopyToFile(db, file); + return true; + } + catch (Exception e) + { + Log.Debug(e, e.Message); + return false; + throw; + } + } + + public bool Import(string file) + { + try + { + DataImportExport.CopyFromFile(db, file); + return true; + } + catch (Exception e) + { + Log.Debug(e, e.Message); + return false; + throw; + } + } + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/DataImportExport.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/DataImportExport.cs new file mode 100644 index 0000000..9ad24ea --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/DataImportExport.cs @@ -0,0 +1,91 @@ +using System; +using System.Data.SQLite; +using System.IO; +using TraceLog; + +namespace XDM.App.Core.XDM.Core.Lib.DataAccess +{ + public static class DataImportExport + { + public static bool CopyToFile(SQLiteConnection sql, string file) + { + try + { + var cs = $"URI=file:{file}"; + if (!File.Exists(file)) + { + SQLiteConnection.CreateFile(file); + } + using var dest = new SQLiteConnection(cs); + dest.Open(); + sql.BackupDatabase(dest, "main", "main", -1, null, 0); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + + public static bool CopyFromFile(SQLiteConnection sql, string file) + { + try + { + using var attachCmd = new SQLiteCommand($"ATTACH '{file}' as db", sql); + attachCmd.ExecuteNonQuery(); + var tx = sql.BeginTransaction(); + try + { + using var mergeCmd = new SQLiteCommand($"INSERT OR IGNORE INTO downloads SELECT * FROM db.downloads", sql); + mergeCmd.ExecuteNonQuery(); + tx.Commit(); + } + catch (Exception ex) + { + tx.Rollback(); + Log.Debug("Error during merge insert, performing rollback!!"); + Log.Debug(ex, ex.Message); + } + using var detachCmd = new SQLiteCommand($"DETACH db", sql); + detachCmd.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + + //public bool CopyDB(SQLiteConnection sourceDB, SQLiteConnection targetDB, ) + //{ + // try + // { + // using var attachCmd = new SQLiteCommand($"ATTACH '{file}' as db", db); + // attachCmd.ExecuteNonQuery(); + // var tx = db.BeginTransaction(); + // try + // { + // using var mergeCmd = new SQLiteCommand($"INSERT OR IGNORE INTO downloads SELECT * FROM db.downloads", db); + // mergeCmd.ExecuteNonQuery(); + // tx.Commit(); + // } + // catch (Exception ex) + // { + // tx.Rollback(); + // Log.Debug("Error during merge insert, performing rollback!!"); + // Log.Debug(ex, ex.Message); + // } + // using var detachCmd = new SQLiteCommand($"DETACH db", db); + // detachCmd.ExecuteNonQuery(); + // return true; + // } + // catch (Exception ex) + // { + // Log.Debug(ex, ex.Message); + // return false; + // } + //} + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/DownloadList.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/DownloadList.cs new file mode 100644 index 0000000..fcf7c67 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/DownloadList.cs @@ -0,0 +1,477 @@ +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Data.SQLite; +using System.IO; +using System.Linq; +using System.Text; +using TraceLog; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.DataAccess.Extensions; +using XDM.Core.Lib.Downloader; + +namespace XDM.Core.Lib.DataAccess +{ + public class DownloadList + { + private SQLiteConnection db; + + public DownloadList(SQLiteConnection db) + { + this.db = db; + } + + private SQLiteCommand cmdFetchAll, cmdFetchConditional, cmdFetchOne, cmdUpdateProgress, cmdUpdateTargetDir, + cmdInsertOne, cmdMarkFinished, cmdUpdateStatus, cmdUpdateNameAndSize, cmdUpdateNameAndFolder, cmdUpdateOne, cmdDelete; + + public bool LoadDownloads( + out List inProgressDownloads, + out List finishedDownloads, QueryMode queryMode = QueryMode.All) + { + lock (db) + { + inProgressDownloads = new List(); + finishedDownloads = new List(); + try + { + SQLiteCommand sqlCommand; + if (queryMode == QueryMode.All) + { + if (cmdFetchAll == null) + { + cmdFetchAll = new SQLiteCommand("SELECT * FROM downloads", db); + } + sqlCommand = cmdFetchAll; + } + else + { + if (cmdFetchConditional == null) + { + cmdFetchConditional = new SQLiteCommand("SELECT * FROM downloads WHERE completed=@completed", db); + } + SetParam("@completed", queryMode == QueryMode.InProgress ? 0 : 1, cmdFetchConditional.Parameters); + sqlCommand = cmdFetchConditional; + } + using SQLiteDataReader r = sqlCommand.ExecuteReader(); + while (r.Read()) + { + var id = r.GetSafeString(0); + var inProgress = r.GetInt32(1) == 0; + BaseDownloadEntry entry = r.GetInt32(1) == 0 ? new InProgressDownloadEntry() : new FinishedDownloadEntry(); + entry.Id = id; + entry.Name = r.GetSafeString(2); + entry.DateAdded = DateTime.FromBinary(r.GetInt64(3)); + entry.Size = r.GetInt64(4); + entry.DownloadType = r.GetSafeString(7); + entry.FileNameFetchMode = (FileNameFetchMode)r.GetInt32(8); + entry.MaxSpeedLimitInKiB = r.GetInt32(9); + entry.TargetDir = r.GetSafeString(10); + entry.PrimaryUrl = r.GetSafeString(11); + entry.RefererUrl = r.GetSafeString(12); + if (r.GetInt32(13) == 1) + { + var user = r.GetSafeString(14); + var pass = r.GetSafeString(15); + if (user != null) + { + entry.Authentication = new AuthenticationInfo + { + UserName = user, + Password = pass + }; + } + } + var proxy = new ProxyInfo { }; + proxy.ProxyType = (ProxyType)r.GetInt32(16); + proxy.Host = r.GetSafeString(17); + proxy.Port = r.GetInt32(18); + proxy.UserName = r.GetSafeString(19); + proxy.Password = r.GetSafeString(20); + entry.Proxy = proxy; + + if (inProgress) + { + var inp = (InProgressDownloadEntry)entry; + inp.Status = DownloadStatus.Stopped; + inp.Progress = r.GetInt32(6); + inProgressDownloads.Add(inp); + } + else + { + finishedDownloads.Add((FinishedDownloadEntry)entry); + } + } + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + return false; + } + } + + public BaseDownloadEntry? GetDownloadById(string id) + { + lock (db) + { + try + { + if (cmdFetchOne == null) + { + cmdFetchOne = new SQLiteCommand("SELECT * FROM downloads WHERE id=@id", db); + } + SetParam("@id", id, cmdFetchOne.Parameters); + //cmdFetchOne.Parameters["@id"].Value = id; + using SQLiteDataReader r = cmdFetchOne.ExecuteReader(); + if (r.Read()) + { + var inProgress = r.GetInt32(1) == 0; + BaseDownloadEntry entry = r.GetInt32(1) == 0 ? new InProgressDownloadEntry() : new FinishedDownloadEntry(); + entry.Id = id; + entry.Name = r.GetSafeString(2); + entry.DateAdded = DateTime.FromBinary(r.GetInt64(3)); + entry.Size = r.GetInt64(4); + entry.DownloadType = r.GetSafeString(7); + entry.FileNameFetchMode = (FileNameFetchMode)r.GetInt32(8); + entry.MaxSpeedLimitInKiB = r.GetInt32(9); + entry.TargetDir = r.GetSafeString(10); + entry.PrimaryUrl = r.GetSafeString(11); + entry.RefererUrl = r.GetSafeString(12); + if (r.GetInt32(13) == 1) + { + var user = r.GetSafeString(14); + var pass = r.GetSafeString(15); + if (user != null) + { + entry.Authentication = new AuthenticationInfo + { + UserName = user, + Password = pass + }; + } + } + var proxy = new ProxyInfo { }; + proxy.ProxyType = (ProxyType)r.GetInt32(16); + proxy.Host = r.GetSafeString(17); + proxy.Port = r.GetInt32(18); + proxy.UserName = r.GetSafeString(19); + proxy.Password = r.GetSafeString(20); + entry.Proxy = proxy; + + if (inProgress) + { + var inp = (InProgressDownloadEntry)entry; + inp.Status = DownloadStatus.Stopped; + inp.Progress = r.GetInt32(6); + } + return entry; + } + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } + return null; + } + } + + public bool AddNewDownload(InProgressDownloadEntry entry) + { + lock (db) + { + try + { + if (cmdInsertOne == null) + { + cmdInsertOne = new SQLiteCommand(@"INSERT INTO downloads( + id, completed, name, date_added, size, status, + progress, download_type, filenamefetchmode, maxspeedlimitinkib, targetdir, primary_url, + referer_url, auth, user, pass, proxy, proxy_host, + proxy_port, proxy_user, proxy_pass, proxy_type) + VALUES( + @id, @completed, @name, @date_added, @size, @status, + @progress, @download_type, @filenamefetchmode, @maxspeedlimitinkib, @targetdir, @primary_url, + @referer_url, @auth, @user, @pass, @proxy, @proxy_host, + @proxy_port, @proxy_user, @proxy_pass, @proxy_type)", db); + } + SetParam("@id", entry.Id, cmdInsertOne.Parameters); + SetParam("@completed", 0, cmdInsertOne.Parameters); + SetParam("@name", entry.Name, cmdInsertOne.Parameters); + SetParam("@date_added", entry.DateAdded.ToBinary(), cmdInsertOne.Parameters); + SetParam("@size", entry.Size, cmdInsertOne.Parameters); + SetParam("@status", (int)entry.Status, cmdInsertOne.Parameters); + SetParam("@progress", entry.Progress, cmdInsertOne.Parameters); + SetParam("@download_type", entry.DownloadType, cmdInsertOne.Parameters); + SetParam("@filenamefetchmode", (int)entry.FileNameFetchMode, cmdInsertOne.Parameters); + SetParam("@maxspeedlimitinkib", entry.MaxSpeedLimitInKiB, cmdInsertOne.Parameters); + SetParam("@targetdir", entry.TargetDir, cmdInsertOne.Parameters); + SetParam("@primary_url", entry.PrimaryUrl, cmdInsertOne.Parameters); + SetParam("@referer_url", entry.RefererUrl, cmdInsertOne.Parameters); + SetParam("@auth", entry.Authentication.HasValue ? 1 : 0, cmdInsertOne.Parameters); + SetParam("@user", entry.Authentication?.UserName ?? null, cmdInsertOne.Parameters); + SetParam("@pass", entry.Authentication?.Password ?? null, cmdInsertOne.Parameters); + SetParam("@proxy", (int)(entry.Proxy?.ProxyType ?? 0), cmdInsertOne.Parameters); + SetParam("@proxy_host", entry.Proxy?.Host ?? null, cmdInsertOne.Parameters); + SetParam("@proxy_port", (int)(entry.Proxy?.Port ?? 0), cmdInsertOne.Parameters); + SetParam("@proxy_user", entry.Proxy?.UserName ?? null, cmdInsertOne.Parameters); + SetParam("@proxy_pass", entry.Proxy?.Password ?? null, cmdInsertOne.Parameters); + SetParam("@proxy_type", 1, cmdInsertOne.Parameters); + cmdInsertOne.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool UpdateDownloadEntry(FinishedDownloadEntry entry) + { + lock (db) + { + try + { + if (cmdUpdateOne == null) + { + cmdUpdateOne = new SQLiteCommand(@"UPDATE downloads SET name=@name, date_added=@date_added, size=@size, + download_type=@download_type, targetdir=@targetdir, primary_url=@primary_url, + auth=@auth, user=@user, pass=@pass, proxy=@proxy, proxy_host=@proxy_host, + proxy_port=@proxy_port, proxy_user=@proxy_user, proxy_pass=@proxy_pass, + proxy_type=@proxy_type WHERE id=@id", db); + } + SetParam("@id", entry.Id, cmdUpdateOne.Parameters); + SetParam("@name", entry.Name, cmdUpdateOne.Parameters); + SetParam("@date_added", entry.DateAdded.ToBinary(), cmdUpdateOne.Parameters); + SetParam("@size", entry.Size, cmdUpdateOne.Parameters); + SetParam("@download_type", entry.DownloadType, cmdUpdateOne.Parameters); + SetParam("@primary_url", entry.PrimaryUrl, cmdUpdateOne.Parameters); + SetParam("@auth", entry.Authentication.HasValue ? 1 : 0, cmdUpdateOne.Parameters); + SetParam("@user", entry.Authentication?.UserName ?? null, cmdUpdateOne.Parameters); + SetParam("@pass", entry.Authentication?.Password ?? null, cmdUpdateOne.Parameters); + SetParam("@proxy", (int)(entry.Proxy?.ProxyType ?? 0), cmdUpdateOne.Parameters); + SetParam("@proxy_host", entry.Proxy?.Host ?? null, cmdUpdateOne.Parameters); + SetParam("@proxy_port", (int)(entry.Proxy?.Port ?? 0), cmdUpdateOne.Parameters); + SetParam("@proxy_user", entry.Proxy?.UserName ?? null, cmdUpdateOne.Parameters); + SetParam("@proxy_pass", entry.Proxy?.Password ?? null, cmdUpdateOne.Parameters); + SetParam("@proxy_type", 1, cmdUpdateOne.Parameters); + SetParam("@targetdir", entry.TargetDir, cmdUpdateOne.Parameters); + cmdUpdateOne.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool UpdateDownloadProgress(string id, int progress) + { + lock (db) + { + try + { + if (cmdUpdateProgress == null) + { + cmdUpdateProgress = new SQLiteCommand("UPDATE downloads SET progress=@progress WHERE id=@id", db); + } + SetParam("@progress", progress, cmdUpdateProgress.Parameters); + SetParam("@id", id, cmdUpdateProgress.Parameters); + //cmdUpdateProgress.Parameters["@progress"].Value = progress; + //cmdUpdateProgress.Parameters["@id"].Value = id; + cmdUpdateProgress.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool UpdateDownloadFolder(string id, string folder) + { + lock (db) + { + try + { + if (cmdUpdateTargetDir == null) + { + cmdUpdateTargetDir = new SQLiteCommand("UPDATE downloads SET targetdir=@targetdir WHERE id=@id", db); + } + SetParam("@targetdir", folder, cmdUpdateTargetDir.Parameters); + SetParam("@id", id, cmdUpdateTargetDir.Parameters); + //cmdUpdateProgress.Parameters["@targetdir"].Value = folder; + //cmdUpdateProgress.Parameters["@id"].Value = id; + cmdUpdateProgress.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + private void SetParam(string name, T value, SQLiteParameterCollection param) + { + if (!param.Contains(name)) + { + param.AddWithValue(name, value); + return; + } + param[name].Value = value; + } + + public bool MarkAsFinished(string id, long finalFileSize, string file, string folder) + { + lock (db) + { + try + { + if (cmdMarkFinished == null) + { + cmdMarkFinished = new SQLiteCommand("UPDATE downloads SET targetdir=@targetdir, name=@name, " + + "size=@finalFileSize, completed=@completed WHERE id=@id", db); + } + SetParam("@targetdir", folder, cmdMarkFinished.Parameters); + SetParam("@name", file, cmdMarkFinished.Parameters); + SetParam("@finalFileSize", finalFileSize, cmdMarkFinished.Parameters); + SetParam("@id", id, cmdMarkFinished.Parameters); + SetParam("@completed", 1, cmdMarkFinished.Parameters); + cmdMarkFinished.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool UpdateDownloadStatus(string id, DownloadStatus status) + { + lock (db) + { + try + { + if (cmdUpdateStatus == null) + { + cmdUpdateStatus = new SQLiteCommand("UPDATE downloads SET status=@status WHERE id=@id", db); + } + SetParam("@status", (int)status, cmdUpdateStatus.Parameters); + SetParam("@id", id, cmdUpdateStatus.Parameters); + cmdUpdateStatus.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool UpdateNameAndSize(string id, long size, string name) + { + lock (db) + { + try + { + if (cmdUpdateNameAndSize == null) + { + cmdUpdateNameAndSize = new SQLiteCommand("UPDATE downloads SET name=@name, size=@size WHERE id=@id", db); + } + SetParam("@id", id, cmdUpdateNameAndSize.Parameters); + SetParam("@name", name, cmdUpdateNameAndSize.Parameters); + SetParam("@size", size, cmdUpdateNameAndSize.Parameters); + cmdUpdateNameAndSize.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool UpdateNameAndFolder(string id, string name, string folder) + { + lock (db) + { + try + { + if (cmdUpdateNameAndFolder == null) + { + cmdUpdateNameAndFolder = new SQLiteCommand("UPDATE downloads SET name=@name, targetdir=@targetdir WHERE id=@id", db); + } + SetParam("@name", name, cmdUpdateNameAndFolder.Parameters); + SetParam("@targetdir", folder, cmdUpdateNameAndFolder.Parameters); + SetParam("@id", id, cmdUpdateNameAndFolder.Parameters); + cmdUpdateNameAndFolder.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool RemoveAllFinished() + { + lock (db) + { + try + { + using var cmdClearAllFinished = new SQLiteCommand("DELETE FROM downloads WHERE completed=1", db); + cmdClearAllFinished.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + + public bool RemoveDownloadById(string id) + { + lock (db) + { + try + { + if (cmdDelete == null) + { + cmdDelete = new SQLiteCommand("DELETE FROM downloads WHERE id=@id", db); + } + SetParam("@id", id, cmdDelete.Parameters); + cmdDelete.ExecuteNonQuery(); + return true; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + return false; + } + } + } + } + + public enum QueryMode + { + Finished, + InProgress, + All + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/Extensions/DataReaderExtensions.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/Extensions/DataReaderExtensions.cs new file mode 100644 index 0000000..e29afc5 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/Extensions/DataReaderExtensions.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Data.SQLite; +using System.Linq; +using System.Text; + +namespace XDM.Core.Lib.DataAccess.Extensions +{ + public static class DataReaderExtensions + { + public static string GetSafeString(this SQLiteDataReader r, int index) + { + if (!r.IsDBNull(index)) + { + return r.GetString(index); + } +#pragma warning disable CS8603 // Possible null reference return. + return null; +#pragma warning restore CS8603 // Possible null reference return. + } + } +} diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/SchemaInitializer.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/SchemaInitializer.cs new file mode 100644 index 0000000..72325e0 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/DataAccess/SchemaInitializer.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Data.SQLite; +using System.Linq; +using System.Text; + +namespace XDM.Core.Lib.DataAccess +{ + public static class SchemaInitializer + { + private static void CreateTablesIfNotExists(SQLiteConnection c) + { + var query = @"CREATE TABLE IF NOT EXISTS downloads( + id TEXT PRIMARY KEY, + completed INT, + name TEXT, + date_added INT, + size INT, + status INT, + progress INT, + download_type TEXT, + filenamefetchmode INT, + maxspeedlimitinkib INT, + targetdir TEXT, + primary_url TEXT, + referer_url TEXT, + auth INT, + user TEXT, + pass TEXT, + proxy INT, + proxy_host TEXT, + proxy_port INT, + proxy_user TEXT, + proxy_pass TEXT, + proxy_type INT + ) WITHOUT ROWID"; + using var cmd = new SQLiteCommand(c); + cmd.CommandText = query; + cmd.ExecuteNonQuery(); + } + + public static void Init(SQLiteConnection c) + { + CreateTablesIfNotExists(c); + } + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/CancelRequestor.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/CancelRequestor.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/CancelRequestor.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/CancelRequestor.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloadInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloadInfo.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloadInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloadInfo.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloader.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloader.cs similarity index 88% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloader.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloader.cs index db8aa8a..ab8ab51 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloader.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Dash/MultiSourceDASHDownloader.cs @@ -157,15 +157,18 @@ namespace XDM.Core.Lib.Downloader.Adaptive.Dash protected override void RestoreState() { - var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); - if (bytes == null) - { - throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); - } - - var state = DownloadStateStore.MultiSourceDASHDownloadStateFromBytes(bytes); + var state = DownloadStateStore.LoadMultiSourceDASHDownloadState(Id!); this._state = state; + //var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); + //if (bytes == null) + //{ + // throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); + //} + + //var state = DownloadStateStore.MultiSourceDASHDownloadStateFromBytes(bytes); + //this._state = state; + //var text = TransactedIO.Read(Id + ".state", Config.DataDir); //if (text == null) //{ @@ -178,15 +181,23 @@ namespace XDM.Core.Lib.Downloader.Adaptive.Dash try { - Log.Debug("Restoring chunks from: " + Path.Combine(_state.TempDirectory, "chunks.json")); + Log.Debug("Restoring chunks from: " + Path.Combine(_state.TempDirectory, "chunks.db")); - var bytes2 = TransactedIO.ReadBytes("chunks.db", _state.TempDirectory); - if (bytes2 == null) + if (!TransactedIO.ReadStream("chunks.db", state.TempDirectory, s => { - throw new FileNotFoundException(Path.Combine(_state.TempDirectory, "chunks.json")); + _chunks = ChunkStateFromBytes(s);// pieces = ChunkStateFromBytes(s); + })) + { + throw new FileNotFoundException(Path.Combine(state.TempDirectory, "chunks.db")); } - _chunks = ChunkStateFromBytes(bytes2); + //var bytes2 = TransactedIO.ReadBytes("chunks.db", _state.TempDirectory); + //if (bytes2 == null) + //{ + // throw new FileNotFoundException(Path.Combine(_state.TempDirectory, "chunks.json")); + //} + + //_chunks = ChunkStateFromBytes(bytes2); var dashDir = _state.TempDirectory; var streamMap = _chunks.Select(c => new @@ -229,7 +240,8 @@ namespace XDM.Core.Lib.Downloader.Adaptive.Dash protected override void SaveState() { - TransactedIO.WriteBytes(DownloadStateStore.StateToBytes((MultiSourceDASHDownloadState)_state), Id + ".state", Config.DataDir); + DownloadStateStore.Save((MultiSourceDASHDownloadState)_state); + //TransactedIO.WriteBytes(DownloadStateStore.Save((MultiSourceDASHDownloadState)_state), Id + ".state", Config.DataDir); //TransactedIO.Write(JsonConvert.SerializeObject(_state as MultiSourceDASHDownloadState), // Id + ".state", Config.DataDir); diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloadInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloadInfo.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloadInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloadInfo.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloader.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloader.cs similarity index 92% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloader.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloader.cs index d1ea610..fa42910 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloader.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/Hls/MultiSourceHLSDownloader.cs @@ -359,15 +359,18 @@ namespace XDM.Core.Lib.Downloader.Adaptive.Hls protected override void RestoreState() { - var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); - if (bytes == null) - { - throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); - } - - var state = DownloadStateStore.MultiSourceHLSDownloadStateFromBytes(bytes); + var state = DownloadStateStore.LoadMultiSourceHLSDownloadState(Id!); this._state = state; + //var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); + //if (bytes == null) + //{ + // throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); + //} + + //var state = DownloadStateStore.MultiSourceHLSDownloadStateFromBytes(bytes); + //this._state = state; + //var text = TransactedIO.Read(Id + ".state", Config.DataDir); //if (text == null) @@ -381,15 +384,23 @@ namespace XDM.Core.Lib.Downloader.Adaptive.Hls try { - Log.Debug("Restoring chunks from: " + Path.Combine(state.TempDirectory, "chunks.json")); + Log.Debug("Restoring chunks from: " + Path.Combine(state.TempDirectory, "chunks.db")); - var bytes2 = TransactedIO.ReadBytes("chunks.db", _state.TempDirectory); - if (bytes2 == null) + if (!TransactedIO.ReadStream("chunks.db", state.TempDirectory, s => { - throw new FileNotFoundException(Path.Combine(_state.TempDirectory, "chunks.json")); + _chunks = ChunkStateFromBytes(s);// pieces = ChunkStateFromBytes(s); + })) + { + throw new FileNotFoundException(Path.Combine(state.TempDirectory, "chunks.db")); } - _chunks = ChunkStateFromBytes(bytes2); + //var bytes2 = TransactedIO.ReadBytes("chunks.db", _state.TempDirectory); + //if (bytes2 == null) + //{ + // throw new FileNotFoundException(Path.Combine(_state.TempDirectory, "chunks.json")); + //} + + //_chunks = ChunkStateFromBytes(bytes2); var hlsDir = state.TempDirectory; @@ -422,7 +433,8 @@ namespace XDM.Core.Lib.Downloader.Adaptive.Hls protected override void SaveState() { - TransactedIO.WriteBytes(DownloadStateStore.StateToBytes((MultiSourceHLSDownloadState)this._state), Id + ".state", Config.DataDir); + DownloadStateStore.Save((MultiSourceHLSDownloadState)this._state); + //TransactedIO.WriteBytes(DownloadStateStore.Save((MultiSourceHLSDownloadState)this._state), Id + ".state", Config.DataDir); //((TransactedIO.Write(JsonConvert.SerializeObject(_state as MultiSourceHLSDownloadState), Id + ".state", Config.DataDir); //File.WriteAllText(Path.Combine(Config.DataDir, Id + ".state"), JsonConvert.SerializeObject(_state as MultiSourceHLSDownloadState)); } diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/HttpChunkDownloader.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/HttpChunkDownloader.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/HttpChunkDownloader.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/HttpChunkDownloader.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/ICancelRequster.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/ICancelRequster.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/ICancelRequster.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/ICancelRequster.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/IChunkStreamMap.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/IChunkStreamMap.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/IChunkStreamMap.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/IChunkStreamMap.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/MultiSourceDownloaderBase.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/MultiSourceDownloaderBase.cs similarity index 93% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/MultiSourceDownloaderBase.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/MultiSourceDownloaderBase.cs index a239834..5f64a88 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/MultiSourceDownloaderBase.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/MultiSourceDownloaderBase.cs @@ -8,6 +8,10 @@ using XDM.Core.Lib.Common; using XDM.Core.Lib.Common.MediaProcessor; using XDM.Core.Lib.Util; using XDM.Core.Lib.Clients.Http; +#if NET35 +using NetFX.Polyfill; +#endif +using System.Text; namespace XDM.Core.Lib.Downloader.Adaptive { @@ -223,7 +227,8 @@ namespace XDM.Core.Lib.Downloader.Adaptive if (_chunks == null) return; lock (this) { - TransactedIO.WriteBytes(ChunkStateToBytes(), "chunks.db", _state.TempDirectory); + TransactedIO.WriteStream("chunks.db", _state.TempDirectory, ChunkStateToBytes); + //TransactedIO.WriteBytes(ChunkStateToBytes(), "chunks.db", _state.TempDirectory); //TransactedIO.Write(JsonConvert.SerializeObject(_chunks), "chunks.json", _state.TempDirectory); //File.WriteAllText(Path.Combine(_state.TempDirectory, "chunks.json"), @@ -553,6 +558,7 @@ namespace XDM.Core.Lib.Downloader.Adaptive protected virtual void Assemble() { SaveChunkState(); + if (this._cancellationTokenSource.IsCancellationRequested) return; if (string.IsNullOrEmpty(this.TargetDir)) { this.TargetDir = Helpers.GetDownloadFolderByFileName(this.TargetFileName); @@ -571,6 +577,7 @@ namespace XDM.Core.Lib.Downloader.Adaptive if (!_state.Demuxed) { ConcatSegments(this._chunks.Select(c => this._chunkStreamMap.GetStream(c.Id)), TargetFile); + if (this._cancellationTokenSource.IsCancellationRequested) return; DeleteFileParts(); return; } @@ -589,9 +596,11 @@ namespace XDM.Core.Lib.Downloader.Adaptive videoFile); ConcatSegments(this._chunks.Where(c => c.StreamIndex == 1).Select(c => this._chunkStreamMap.GetStream(c.Id)), audioFile); + if (this._cancellationTokenSource.IsCancellationRequested) return; var res = mediaProcessor.MergeAudioVideStream(videoFile, audioFile, TargetFile, this._cancellationTokenSource, out long totalSize); + if (this._cancellationTokenSource.IsCancellationRequested) return; if (res != MediaProcessingResult.Success) { //try with matroska container @@ -608,6 +617,7 @@ namespace XDM.Core.Lib.Downloader.Adaptive } } + if (this._cancellationTokenSource.IsCancellationRequested) return; DeleteFileParts(); this._state.FileSize = totalSize; @@ -615,6 +625,7 @@ namespace XDM.Core.Lib.Downloader.Adaptive private void DeleteFileParts() { + Log.Debug("DeleteFileParts..."); try { Directory.Delete(_state.TempDirectory, true); @@ -768,19 +779,30 @@ namespace XDM.Core.Lib.Downloader.Adaptive } } - protected List ChunkStateFromBytes(byte[] bytes) + protected List ChunkStateFromBytes(Stream stream) { - var r = new BinaryReader(new MemoryStream(bytes)); +#if NET35 + var ms = new MemoryStream(); + stream.CopyTo(ms); + using var r = new BinaryReader(ms); +#else + using var r = new BinaryReader(stream, Encoding.UTF8, true); +#endif ReadChunkState(r, out List chunks); return chunks; } - protected byte[] ChunkStateToBytes() + protected void ChunkStateToBytes(Stream stream) { +#if NET35 using var ms = new MemoryStream(); - using var w = new BinaryWriter(ms); + using var w = new BinaryWriter(ms, Encoding.UTF8); WriteChunkState(_chunks, w); - return ms.ToArray(); + ms.CopyTo(stream); +#else + using var w = new BinaryWriter(stream, Encoding.UTF8, true); + WriteChunkState(_chunks, w); +#endif } public void UpdateSpeedLimit(bool enable, int limit) @@ -813,6 +835,7 @@ namespace XDM.Core.Lib.Downloader.Adaptive public Dictionary Cookies { get; set; } public Dictionary> Headers { get; set; } public string File { get; set; } + public string ContentType { get; set; } } public abstract class MultiSourceDownloadState diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/SimpleStreamMap.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/SimpleStreamMap.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Adaptive/SimpleStreamMap.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Adaptive/SimpleStreamMap.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Chunk.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Chunk.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Chunk.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Chunk.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/CountdownLatch.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/CountdownLatch.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/CountdownLatch.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/CountdownLatch.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/DownloadFailedEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadFailedEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/DownloadFailedEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadFailedEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/DownloadStateStore.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadStateStore.cs similarity index 70% rename from app/XDM/XDM_CoreFx/Lib/Downloader/DownloadStateStore.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadStateStore.cs index 3137461..0ce28d9 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/DownloadStateStore.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadStateStore.cs @@ -9,14 +9,72 @@ using XDM.Core.Lib.Downloader.Adaptive.Hls; using XDM.Core.Lib.Downloader.Progressive.DualHttp; using XDM.Core.Lib.Downloader.Progressive.SingleHttp; using XDM.Core.Lib.Util; +#if NET35 +using NetFX.Polyfill; +#endif namespace XDM.Core.Lib.Downloader { + delegate void BinaryReaderStreamConsumer(BinaryReader r); + delegate void BinaryWriterStreamConsumer(BinaryWriter w); + + internal static class TransactedBinaryDataReader + { + public static void Read(string file, string folder, BinaryReaderStreamConsumer callback) + { + if (!TransactedIO.ReadStream(file, folder, stream => + { +#if NET35 + using var ms = new MemoryStream(); + stream.CopyTo(ms); + using var r = new BinaryReader(ms); + callback(r); +#else + using var r = new BinaryReader(stream, Encoding.UTF8, true); + callback(r); +#endif + })) + { + throw new IOException(Path.Combine(Config.DataDir, file)); + } + } + + public static void Write(string file, string folder, BinaryWriterStreamConsumer callback) + { + TransactedIO.WriteStream(file, folder, stream => + { +#if NET35 + using var ms = new MemoryStream(); + using var w = new BinaryWriter(ms); +#else + using var w = new BinaryWriter(stream, Encoding.UTF8, true); +#endif + callback(w); +#if NET35 + ms.CopyTo(stream); +#endif + }); + } + } + public static class DownloadStateStore { - public static SingleSourceHTTPDownloaderState SingleSourceHTTPDownloaderStateFromBytes(byte[] bytes) + public static SingleSourceHTTPDownloaderState LoadSingleSourceHTTPDownloaderState(string id) + { + SingleSourceHTTPDownloaderState? state = null; + TransactedBinaryDataReader.Read($"{id}.state", Config.DataDir, r => + { + state = SingleSourceHTTPDownloaderStateFromBytes(r); + }); + if (state == null) + { + throw new IOException("Unable to read state: " + id); + } + return state; + } + + private static SingleSourceHTTPDownloaderState SingleSourceHTTPDownloaderStateFromBytes(BinaryReader r) { - var r = new BinaryReader(new MemoryStream(bytes)); var state = new SingleSourceHTTPDownloaderState { Id = r.ReadString(), @@ -48,14 +106,18 @@ namespace XDM.Core.Lib.Downloader Password = Helpers.ReadString(r), }; } + state.ConvertToMp3 = r.ReadBoolean(); return state; } - public static byte[] StateToBytes(SingleSourceHTTPDownloaderState state) + public static void Save(SingleSourceHTTPDownloaderState state) { - using var ms = new MemoryStream(); - using var w = new BinaryWriter(ms); - w.Write(state.Id); + TransactedBinaryDataReader.Write($"{state.Id}.state", Config.DataDir, w => StateToBytes(state, w)); + } + + private static void StateToBytes(SingleSourceHTTPDownloaderState state, BinaryWriter w) + { + w.Write(state!.Id!); w.Write(state.TempDir ?? string.Empty); w.Write(state.FileSize); w.Write(state.LastModified.ToBinary()); @@ -83,12 +145,25 @@ namespace XDM.Core.Lib.Downloader w.Write(state.Proxy!.Value.UserName ?? string.Empty); w.Write(state.Proxy!.Value.Password ?? string.Empty); } - return ms.ToArray(); + w.Write(state.ConvertToMp3); } - public static DualSourceHTTPDownloaderState DualSourceHTTPDownloaderStateFromBytes(byte[] bytes) + public static DualSourceHTTPDownloaderState LoadDualSourceHTTPDownloaderState(string id) + { + DualSourceHTTPDownloaderState? state = null; + TransactedBinaryDataReader.Read($"{id}.state", Config.DataDir, r => + { + state = DualSourceHTTPDownloaderStateFromBytes(r); + }); + if (state == null) + { + throw new IOException("Unable to read state: " + id); + } + return state; + } + + private static DualSourceHTTPDownloaderState DualSourceHTTPDownloaderStateFromBytes(BinaryReader r) { - var r = new BinaryReader(new MemoryStream(bytes)); var state = new DualSourceHTTPDownloaderState { Id = r.ReadString(), @@ -134,11 +209,15 @@ namespace XDM.Core.Lib.Downloader } return state; } - public static byte[] StateToBytes(DualSourceHTTPDownloaderState state) + + public static void Save(DualSourceHTTPDownloaderState state) { - using var ms = new MemoryStream(); - using var w = new BinaryWriter(ms); - w.Write(state.Id); + TransactedBinaryDataReader.Write($"{state.Id}.state", Config.DataDir, w => StateToBytes(state, w)); + } + + private static void StateToBytes(DualSourceHTTPDownloaderState state, BinaryWriter w) + { + w.Write(state.Id!); w.Write(state.TempDir ?? string.Empty); w.Write(state.FileSize); w.Write(state.LastModified.ToBinary()); @@ -181,13 +260,15 @@ namespace XDM.Core.Lib.Downloader w.Write(state.Proxy!.Value.UserName ?? string.Empty); w.Write(state.Proxy!.Value.Password ?? string.Empty); } - return ms.ToArray(); } - public static byte[] StateToBytes(MultiSourceDASHDownloadState state) + public static void Save(MultiSourceDASHDownloadState state) + { + TransactedBinaryDataReader.Write($"{state.Id}.state", Config.DataDir, w => StateToBytes(state, w)); + } + + private static void StateToBytes(MultiSourceDASHDownloadState state, BinaryWriter w) { - using var ms = new MemoryStream(); - using var w = new BinaryWriter(ms); w.Write(state.Id); w.Write(state.TempDirectory ?? string.Empty); w.Write(state.FileSize); @@ -231,12 +312,24 @@ namespace XDM.Core.Lib.Downloader w.Write(state.Proxy!.Value.UserName ?? string.Empty); w.Write(state.Proxy!.Value.Password ?? string.Empty); } - return ms.ToArray(); } - public static MultiSourceDASHDownloadState MultiSourceDASHDownloadStateFromBytes(byte[] bytes) + public static MultiSourceDASHDownloadState LoadMultiSourceDASHDownloadState(string id) + { + MultiSourceDASHDownloadState? state = null; + TransactedBinaryDataReader.Read($"{id}.state", Config.DataDir, r => + { + state = MultiSourceDASHDownloadStateFromBytes(r); + }); + if (state == null) + { + throw new IOException("Unable to read state: " + id); + } + return state; + } + + private static MultiSourceDASHDownloadState MultiSourceDASHDownloadStateFromBytes(BinaryReader r) { - var r = new BinaryReader(new MemoryStream(bytes)); var state = new MultiSourceDASHDownloadState { Id = r.ReadString(), @@ -296,10 +389,13 @@ namespace XDM.Core.Lib.Downloader return state; } - public static byte[] StateToBytes(MultiSourceHLSDownloadState state) + public static void Save(MultiSourceHLSDownloadState state) + { + TransactedBinaryDataReader.Write($"{state.Id}.state", Config.DataDir, w => StateToBytes(state, w)); + } + + private static void StateToBytes(MultiSourceHLSDownloadState state, BinaryWriter w) { - using var ms = new MemoryStream(); - using var w = new BinaryWriter(ms); w.Write(state.Id); w.Write(state.TempDirectory ?? string.Empty); w.Write(state.FileSize); @@ -335,12 +431,24 @@ namespace XDM.Core.Lib.Downloader w.Write(state.Proxy!.Value.UserName ?? string.Empty); w.Write(state.Proxy!.Value.Password ?? string.Empty); } - return ms.ToArray(); } - public static MultiSourceHLSDownloadState MultiSourceHLSDownloadStateFromBytes(byte[] bytes) + public static MultiSourceHLSDownloadState LoadMultiSourceHLSDownloadState(string id) + { + MultiSourceHLSDownloadState? state = null; + TransactedBinaryDataReader.Read($"{id}.state", Config.DataDir, r => + { + state = MultiSourceHLSDownloadStateFromBytes(r); + }); + if (state == null) + { + throw new IOException("Unable to read state: " + id); + } + return state; + } + + private static MultiSourceHLSDownloadState MultiSourceHLSDownloadStateFromBytes(BinaryReader r) { - var r = new BinaryReader(new MemoryStream(bytes)); var state = new MultiSourceHLSDownloadState { Id = r.ReadString(), diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadTypes.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadTypes.cs new file mode 100644 index 0000000..edb20f6 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/DownloadTypes.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace XDM.Core.Lib.Downloader +{ + public static class DownloadTypes + { + public const string Http = "Http", Dash = "Dash", Hls = "Hls", MpdDash = "Mpd-Dash"; + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/FileNameFetchMode.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/FileNameFetchMode.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/FileNameFetchMode.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/FileNameFetchMode.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/IBaseDownloader.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/IBaseDownloader.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/IBaseDownloader.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/IBaseDownloader.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/MediaProcessor/BaseMediaProcessor.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/MediaProcessor/BaseMediaProcessor.cs similarity index 84% rename from app/XDM/XDM_CoreFx/Lib/Downloader/MediaProcessor/BaseMediaProcessor.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/MediaProcessor/BaseMediaProcessor.cs index 7c48c1b..f4db22b 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/MediaProcessor/BaseMediaProcessor.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/MediaProcessor/BaseMediaProcessor.cs @@ -9,6 +9,7 @@ namespace XDM.Core.Lib.Common.MediaProcessor protected readonly ProgressResultEventArgs progressResult = new ProgressResultEventArgs(); public abstract MediaProcessingResult MergeAudioVideStream(string file1, string file2, string outfile, CancelFlag cancellationToken, out long outFileSize); public abstract MediaProcessingResult MergeHLSAudioVideStream(string segmentListFile, string outfile, CancelFlag cancellationToken, out long outFileSize); + public abstract MediaProcessingResult ConvertToMp3Audio(string segmentListFile, string outfile, CancelFlag cancellationToken, out long outFileSize); public virtual event EventHandler ProgressChanged; diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/MediaProcessor/FFmpegMediaProcessor.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/MediaProcessor/FFmpegMediaProcessor.cs similarity index 69% rename from app/XDM/XDM_CoreFx/Lib/Downloader/MediaProcessor/FFmpegMediaProcessor.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/MediaProcessor/FFmpegMediaProcessor.cs index b7b4d82..f8b9857 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/MediaProcessor/FFmpegMediaProcessor.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/MediaProcessor/FFmpegMediaProcessor.cs @@ -41,6 +41,19 @@ namespace XDM.Core.Lib.Common.MediaProcessor return ret; } + public override MediaProcessingResult ConvertToMp3Audio(string infile, string outfile, + CancelFlag cancellationToken, out long outFileSize) + { + var args = CreateMP3MergeArgs(infile, outfile); + var ret = this.ProcessMedia(args, cancellationToken); + try + { + outFileSize = new FileInfo(outfile).Length; + } + catch { outFileSize = -1; } + return ret; + } + private static string[] CreateMergeArgs(string file1, string file2, string outfile) { var args = new string[] { "-i", file1, "-i", file2, "-acodec", "copy", "-vcodec", "copy", @@ -54,6 +67,12 @@ namespace XDM.Core.Lib.Common.MediaProcessor return args; } + private string[] CreateMP3MergeArgs(string file, string outfile) + { + var args = new string[] { "-i", file, "-acodec", "libmp3lame", outfile, "-y" }; + return args; + } + private MediaProcessingResult ProcessMedia(string[] args, CancelFlag cancellationToken) { try @@ -105,33 +124,64 @@ namespace XDM.Core.Lib.Common.MediaProcessor proc.OutputDataReceived += (a, b) => { - var line = b.Data; - if (line != null) + try { - if (duration == 0.0) + var line = b.Data; + if (line != null) { - var md = Helpers.RxDuration.Match(line); - var ret = Helpers.ParseTime(md); - if (ret > 0) duration = ret; - } - var mt = Helpers.RxTime.Match(line); - var ret2 = Helpers.ParseTime(mt); - if (ret2 > 0) - { - time += ret2; - - var tick = Helpers.TickCount(); - - if (duration > 0 && tick - lastTick > 1000) + Log.Debug(line); + if (duration == 0.0) { - UpdateProgress((int)((time * 100) / duration)); + var md = Helpers.RxDuration.Match(line); + var ret = Helpers.ParseTime(md); + if (ret > 0) duration = ret; + } + var mt = Helpers.RxTime.Match(line); + var ret2 = Helpers.ParseTime(mt); + if (ret2 > 0) + { + time += ret2; + + var tick = Helpers.TickCount(); + + if (duration > 0 && tick - lastTick > 1000) + { + UpdateProgress((int)((time * 100) / duration)); + } } } } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } }; + + proc.ErrorDataReceived += (a, b) => + { + var line = b.Data; + if (line != null) + { + Log.Debug(line); + } + }; + proc.BeginOutputReadLine(); - proc.WaitForExit(); + while (true) + { + if (cancellationToken.IsCancellationRequested) + { + proc.Kill(); + break; + } + if (proc.WaitForExit(100)) + { + proc.WaitForExit(); //see remarks section https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.waitforexit?view=net-6.0 + break; + } + } + if (proc.ExitCode == 0) { return MediaProcessingResult.Success; diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/ProbeResult.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/ProbeResult.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/ProbeResult.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/ProbeResult.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/ProgressResultEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/ProgressResultEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/ProgressResultEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/ProgressResultEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloadInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloadInfo.cs similarity index 73% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloadInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloadInfo.cs index 9e767e0..f9b36b6 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloadInfo.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloadInfo.cs @@ -13,5 +13,9 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp public Dictionary> Headers2 { get; set; } public string File { get; set; } public long ContentLength { get; set; } + public long ContentLength1 { get; set; } + public long ContentLength2 { get; set; } + public string ContentType1 { get; set; } + public string ContentType2 { get; set; } } } diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloader.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloader.cs similarity index 82% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloader.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloader.cs index a53b0c4..ba796a9 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloader.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/DualHttp/DualSourceHTTPDownloader.cs @@ -14,15 +14,14 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp public class DualSourceHTTPDownloader : HTTPDownloaderBase { private DualSourceHTTPDownloaderState state; - private BaseMediaProcessor mediaProcessor; public override string Type => "Dash"; - public override Uri PrimaryUrl => this.state?.Url1; + public override Uri PrimaryUrl => this.state?.Url1 ?? this.state?.Url2; public override int SpeedLimit => this.state?.SpeedLimit ?? 0; public override bool EnableSpeedLimit => this.state?.SpeedLimit > 0; public DualSourceHTTPDownloader(DualSourceHTTPDownloadInfo info, IHttpClient hc = null, - BaseMediaProcessor mediaProcessor = null, - AuthenticationInfo? authentication = null, ProxyInfo? proxy = null, int speedLimit = 0) + AuthenticationInfo? authentication = null, ProxyInfo? proxy = null, int speedLimit = 0, + BaseMediaProcessor mediaProcessor = null) { Id = Guid.NewGuid().ToString(); @@ -140,11 +139,11 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp if (pieces.Count != 0) { OnStarted(); - Console.WriteLine("Chunks found: " + pieces.Count); + Log.Debug("Chunks found: " + pieces.Count); if (this.AllFinished()) { this.AssemblePieces(); - Console.WriteLine("Download finished"); + Log.Debug("Download finished"); base.OnFinished(); return; } @@ -157,13 +156,13 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp } else { - Console.WriteLine("Starting new download"); + Log.Debug("Starting new download"); Start(); } } catch (Exception e) { - Console.WriteLine(e); + Log.Debug(e, e.Message); base.OnFailed(e is DownloadException ex ? ex.ErrorCode : ErrorCode.Generic); } }).Start(); @@ -205,29 +204,33 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp case FileNameFetchMode.ExtensionOnly: if (state.Init1 || state.Init2) { - var name = Helpers.AddFileExtension(this.TargetFileName, result.ContentType); + Helpers.AddFileExtension(this.TargetFileName, result.ContentType, out string name); var ext1 = Path.GetExtension(this.TargetFileName); var ext2 = Path.GetExtension(name); if (ext1 == ".mkv" || ext2 == ".mkv") { - this.TargetFileName = name + ".mkv"; + this.TargetFileName = Path.GetFileNameWithoutExtension(name) + ".mkv"; } } else { - this.TargetFileName = Helpers.AddFileExtension(this.TargetFileName, result.ContentType); + var name = string.Empty; + if (Helpers.AddFileExtension(this.TargetFileName, result.ContentType, out name)) + { + this.TargetFileName = name; + } } break; } if (piece.StreamType == StreamType.Primary) { - Console.WriteLine("Primary initiated - length: " + piece.Length); + Log.Debug("Primary initiated - length: " + piece.Length); state.Init1 = true; } else { - Console.WriteLine("Secondary initiated - length: " + piece.Length); + Log.Debug("Secondary initiated - length: " + piece.Length); state.Init2 = true; } @@ -301,43 +304,51 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp lock (this) { if (pieces.Count == 0) return; - TransactedIO.WriteBytes(ChunkStateToBytes(), "chunks.db", state.TempDir); + TransactedIO.WriteStream("chunks.db", state!.TempDir!, base.ChunkStateToBytes); } } protected override void SaveState() { - TransactedIO.WriteBytes(DownloadStateStore.StateToBytes(state), Id + ".state", Config.DataDir); + DownloadStateStore.Save(state);// TransactedIO.WriteBytes(DownloadStateStore.Save(state), Id + ".state", Config.DataDir); } public override void RestoreState() { - var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); - if (bytes == null) - { - throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); - } - state = DownloadStateStore.DualSourceHTTPDownloaderStateFromBytes(bytes); + state = DownloadStateStore.LoadDualSourceHTTPDownloaderState(Id!); + //var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); + //if (bytes == null) + //{ + // throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); + //} + //state = DownloadStateStore.DualSourceHTTPDownloaderStateFromBytes(bytes); try { - var chunkBytes = TransactedIO.ReadBytes("chunks.db", state.TempDir); - if (chunkBytes == null) + if (!TransactedIO.ReadStream("chunks.db", state!.TempDir!, s => + { + pieces = ChunkStateFromBytes(s); + })) { - throw new FileNotFoundException(Path.Combine(state.TempDir, "chunks.json")); + throw new FileNotFoundException(Path.Combine(state.TempDir, "chunks.db")); } - pieces = ChunkStateFromBytes(chunkBytes); + //var chunkBytes = TransactedIO.ReadBytes("chunks.db", state.TempDir); + //if (chunkBytes == null) + //{ + // throw new FileNotFoundException(Path.Combine(state.TempDir, "chunks.json")); + //} + //pieces = ChunkStateFromBytes(chunkBytes); } catch { // ignored - Console.WriteLine("Chunk restore failed"); + Log.Debug("Chunk restore failed"); } TicksAndSizeAtResume(); } protected override void AssemblePieces() { - Log.Debug("Assembling..."); + Log.Debug("Assembling..." + this.Id); lock (this) { @@ -372,7 +383,7 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp } } - Console.WriteLine("Assembling..."); + Log.Debug("Assembling..."); var pieces = this.pieces.Select(p => p.Value).ToList(); pieces.Sort((a, b) => { @@ -396,11 +407,20 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp outfs1.Close(); outfs2.Close(); + if (this.cancelFlag.IsCancellationRequested) return; + if (mediaProcessor != null) { - mediaProcessor.ProgressChanged += (s, e) => this.OnAssembleProgressChanged(e.Progress); + mediaProcessor.ProgressChanged += (s, e) => + { + var basePrg = 60; + var prg = basePrg + e.Progress / 3; + if (prg > 100) prg = 100; + this.OnAssembleProgressChanged(prg); + }; var res = mediaProcessor.MergeAudioVideStream(file1, file2, TargetFile, this.cancelFlag, out totalBytes); + if (this.cancelFlag.IsCancellationRequested) return; if (res != MediaProcessingResult.Success) { throw new AssembleFailedException( @@ -423,11 +443,14 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp throw new AssembleFailedException(ErrorCode.Generic); //TODO: Add more info about error } + if (this.cancelFlag.IsCancellationRequested) return; + if (this.totalSize < 1) { this.totalSize = totalBytes; } - + if (this.cancelFlag.IsCancellationRequested) return; + Log.Debug("Deleting file parts"); DeleteFileParts(); } catch (Exception ex) @@ -448,6 +471,14 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp private void AssemblePieces(IList pieces, FileStream outfs, ref byte[] buf, ref long totalBytes) { var bytes = 0L; + var streamSize = 0L; + if (this.FileSize > 0) + { + foreach (var pc in pieces) + { + streamSize += pc.Length; + } + } foreach (var pc in pieces) { if (this.cancelFlag.IsCancellationRequested) return; @@ -496,6 +527,12 @@ namespace XDM.Core.Lib.Downloader.Progressive.DualHttp len -= x; totalBytes += x; bytes += x; + if (streamSize > 0) + { + var progress = (int)Math.Ceiling(totalBytes * 100 / (double)streamSize * 3); + if (progress > 100) progress = 100; + this.OnAssembleProgressChanged(progress); + } } } } diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/HTTPDownloaderBase.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/HTTPDownloaderBase.cs similarity index 93% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/HTTPDownloaderBase.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/HTTPDownloaderBase.cs index 1604df5..b8320d3 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/HTTPDownloaderBase.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/HTTPDownloaderBase.cs @@ -6,6 +6,8 @@ using TraceLog; using XDM.Core.Lib.Common; using XDM.Core.Lib.Util; using XDM.Core.Lib.Clients.Http; +using XDM.Core.Lib.Common.MediaProcessor; +using System.Text; #if !NET5_0_OR_GREATER using NetFX.Polyfill; @@ -32,6 +34,7 @@ namespace XDM.Core.Lib.Downloader.Progressive protected long lastDownloadedBytes = 0L; protected long ticksAtDownloadStartOrResume = 0L; protected SpeedLimiter speedLimiter = new(); + protected BaseMediaProcessor? mediaProcessor; public FileNameFetchMode FileNameFetchMode { @@ -547,19 +550,32 @@ namespace XDM.Core.Lib.Downloader.Progressive } } - protected Dictionary ChunkStateFromBytes(byte[] bytes) + protected Dictionary ChunkStateFromBytes(Stream stream) { - var r = new BinaryReader(new MemoryStream(bytes)); +#if NET35 + var ms = new MemoryStream(); + stream.CopyTo(ms); + using var r = new BinaryReader(ms); ReadChunkState(r, out Dictionary chunks); return chunks; +#else + using var r = new BinaryReader(stream, Encoding.UTF8, true); + ReadChunkState(r, out Dictionary chunks); + return chunks; +#endif } - protected byte[] ChunkStateToBytes() + protected void ChunkStateToBytes(Stream stream) { +#if NET35 using var ms = new MemoryStream(); - using var w = new BinaryWriter(ms); + using var w = new BinaryWriter(ms, Encoding.UTF8); WriteChunkState(pieces, w); - return ms.ToArray(); + ms.CopyTo(stream); +#else + using var w = new BinaryWriter(stream, Encoding.UTF8, true); + WriteChunkState(pieces, w); +#endif } protected void UpdateSpeedLimit(BaseHTTPDownloaderState? state, bool enable, int limit) diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/IPieceCallback.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/IPieceCallback.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/IPieceCallback.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/IPieceCallback.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/Piece.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/Piece.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/Piece.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/Piece.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/PieceGrabber.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/PieceGrabber.cs similarity index 94% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/PieceGrabber.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/PieceGrabber.cs index 5a17675..a4d3112 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/PieceGrabber.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/PieceGrabber.cs @@ -353,16 +353,16 @@ namespace XDM.Core.Lib.Downloader.Progressive if (this.callback == null || this.pieceId == null) throw new OperationCanceledException(); var headerCookieUrl = this.callback.GetHeaderUrlAndCookies(this.pieceId); if (headerCookieUrl == null) throw new OperationCanceledException(); - if (headerCookieUrl.Value.Headers != null) - { - foreach (var item in headerCookieUrl.Value.Headers.Keys) - { - Log.Debug(item + ": " + headerCookieUrl.Value.Headers[item].First()); - } - } - Log.Debug("Create request with " + headerCookieUrl.Value.Headers?.Count + - " headers and " + - headerCookieUrl.Value.Cookies?.Count + " cookies"); + //if (headerCookieUrl.Value.Headers != null) + //{ + // foreach (var item in headerCookieUrl.Value.Headers.Keys) + // { + // Log.Debug(item + ": " + headerCookieUrl.Value.Headers[item].First()); + // } + //} + //Log.Debug("Create request with " + headerCookieUrl.Value.Headers?.Count + + // " headers and " + + // headerCookieUrl.Value.Cookies?.Count + " cookies"); var req = hc.CreateGetRequest(this.redirectUri ?? headerCookieUrl.Value.Url, headerCookieUrl.Value.Headers, headerCookieUrl.Value.Cookies, diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SegmentState.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SegmentState.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SegmentState.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SegmentState.cs diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloadInfo.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloadInfo.cs similarity index 79% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloadInfo.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloadInfo.cs index c64068a..8062c01 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloadInfo.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloadInfo.cs @@ -10,5 +10,7 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp public Dictionary> Headers { get; set; } public string File { get; set; } public long ContentLength { get; set; } + public bool ConvertToMp3 { get; set; } + public string ContentType { get; set; } } } diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloader.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloader.cs similarity index 54% rename from app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloader.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloader.cs index d939150..afbb81e 100644 --- a/app/XDM/XDM_CoreFx/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloader.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/Progressive/SingleHttp/SingleSourceHTTPDownloader.cs @@ -7,6 +7,7 @@ using XDM.Core.Lib.Util; using XDM.Core.Lib.Common; using TraceLog; using XDM.Core.Lib.Clients.Http; +using XDM.Core.Lib.Common.MediaProcessor; namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp { @@ -21,7 +22,8 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp public override bool EnableSpeedLimit => this.state?.SpeedLimit > 0; public SingleSourceHTTPDownloader(SingleSourceHTTPDownloadInfo info, IHttpClient? hc = null, - AuthenticationInfo? authentication = null, ProxyInfo? proxy = null, int speedLimit = 0) + AuthenticationInfo? authentication = null, ProxyInfo? proxy = null, int speedLimit = 0, + BaseMediaProcessor mediaProcessor = null, bool convertToMp3 = false) { Id = Guid.NewGuid().ToString(); @@ -34,9 +36,15 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp TempDir = Path.Combine(Config.Instance.TempDir, Id), Authentication = authentication, Proxy = proxy, - SpeedLimit = speedLimit + SpeedLimit = speedLimit, + ConvertToMp3 = convertToMp3 }; + if (this.state.Headers == null) + { + this.CreateDefaultHeaders(); + } + if (this.state.Authentication == null) { this.state.Authentication = Helpers.GetAuthenticationInfoFromConfig(this.state.Url); @@ -44,13 +52,16 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp this.TargetFileName = Helpers.SanitizeFileName(info.File); this.http = hc; + this.mediaProcessor = mediaProcessor; } - public SingleSourceHTTPDownloader(string id, IHttpClient? http = null) + public SingleSourceHTTPDownloader(string id, IHttpClient? http = null, + BaseMediaProcessor mediaProcessor = null) { Id = id; cancelFlag = new(); this.http = http; + this.mediaProcessor = mediaProcessor; } public void SetDownloadInfo(SingleSourceHTTPDownloadInfo info) @@ -149,37 +160,57 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp lock (this) { if (pieces.Count == 0) return; - TransactedIO.WriteBytes(ChunkStateToBytes(), "chunks.db", state.TempDir); + TransactedIO.WriteStream("chunks.db", state!.TempDir!, base.ChunkStateToBytes); + //TransactedIO.WriteBytes(ChunkStateToBytes(), "chunks.db", state.TempDir); } } protected override void SaveState() { - TransactedIO.WriteBytes(DownloadStateStore.StateToBytes(state), Id + ".state", Config.DataDir); + DownloadStateStore.Save(state!); + //TransactedIO.WriteStream(Id + ".state", Config.DataDir, s => DownloadStateStore.StateToBytes(state!, s)); + //TransactedIO.WriteBytes(DownloadStateStore.StateToBytes(state), Id + ".state", Config.DataDir); } public override void RestoreState() { - var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); - if (bytes == null) - { - throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); - } - state = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes(bytes); + state = DownloadStateStore.LoadSingleSourceHTTPDownloaderState(Id!); + //if (!TransactedIO.ReadStream(Id + ".state", Config.DataDir, s => + //{ + // state = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes(s); + //})) + //{ + // throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); + //} + + //var bytes = TransactedIO.ReadBytes(Id + ".state", Config.DataDir); + //if (bytes == null) + //{ + // throw new FileNotFoundException(Path.Combine(Config.DataDir, Id + ".state")); + //} + + //state = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes(bytes); try { - var chunkBytes = TransactedIO.ReadBytes("chunks.db", state.TempDir); - if (chunkBytes == null) + //var chunkBytes = TransactedIO.ReadBytes("chunks.db", state.TempDir); + //if (chunkBytes == null) + //{ + // throw new FileNotFoundException(Path.Combine(state.TempDir, "chunks.json")); + //} + //pieces = ChunkStateFromBytes(chunkBytes); + if (!TransactedIO.ReadStream("chunks.db", state!.TempDir!, s => { - throw new FileNotFoundException(Path.Combine(state.TempDir, "chunks.json")); + pieces = ChunkStateFromBytes(s); + })) + { + throw new FileNotFoundException(Path.Combine(state.TempDir, "chunks.db")); } - pieces = ChunkStateFromBytes(chunkBytes); Log.Debug("Total size: " + state.FileSize); - foreach (var item in pieces.Keys) - { - Log.Debug("Chunk id: " + item + " offset: " + pieces[item].Offset + " downloaded: " + - pieces[item].Downloaded + " length: " + pieces[item].Length + " state: " + pieces[item].State); - } + //foreach (var item in pieces.Keys) + //{ + // Log.Debug("Chunk id: " + item + " offset: " + pieces[item].Offset + " downloaded: " + + // pieces[item].Downloaded + " length: " + pieces[item].Length + " state: " + pieces[item].State); + //} } catch { @@ -229,7 +260,11 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp } break; case FileNameFetchMode.ExtensionOnly: - this.TargetFileName = Helpers.AddFileExtension(this.TargetFileName, result.ContentType); + var name = string.Empty; + if (Helpers.AddFileExtension(this.TargetFileName, result.ContentType, out name)) + { + this.TargetFileName = name; + } break; } @@ -252,102 +287,167 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp } } + private List SortAndValidatePieces() + { + var pieces = this.pieces.Select(p => p.Value).ToList(); + pieces.Sort((a, b) => + { + var diff = a.Offset - b.Offset; + if (diff == 0) return 0; + return diff > 0 ? 1 : -1; + }); + if (this.cancelFlag.IsCancellationRequested) return null; + if (string.IsNullOrEmpty(this.TargetDir)) + { + this.TargetDir = Helpers.GetDownloadFolderByFileName(this.TargetFileName); + } + if (!Directory.Exists(this.TargetDir)) + { + Directory.CreateDirectory(this.TargetDir); + } + if (Config.Instance.FileConflictResolution == FileConflictResolution.AutoRename) + { + this.TargetFileName = Helpers.GetUniqueFileName(this.TargetFileName, this.TargetDir); + } + + //check if required disk space is available + if (Helpers.GetFreeSpace(this.TargetDir, out long freespace)) + { + if (freespace < FileSize) + { + throw new AssembleFailedException(ErrorCode.DiskError); + } + } + + return pieces; + } + protected override void AssemblePieces() { Log.Debug("Assembling..."); lock (this) { -#if NET35 - var buf = new byte[5 * 1024 * 1024]; -#else - var buf = System.Buffers.ArrayPool.Shared.Rent(5 * 1024 * 1024); -#endif + try { - var pieces = this.pieces.Select(p => p.Value).ToList(); - pieces.Sort((a, b) => - { - var diff = a.Offset - b.Offset; - if (diff == 0) return 0; - return diff > 0 ? 1 : -1; - }); + var pieces = SortAndValidatePieces(); if (this.cancelFlag.IsCancellationRequested) return; - if (string.IsNullOrEmpty(this.TargetDir)) - { - this.TargetDir = Helpers.GetDownloadFolderByFileName(this.TargetFileName); - } - if (!Directory.Exists(this.TargetDir)) - { - Directory.CreateDirectory(this.TargetDir); - } - if (Config.Instance.FileConflictResolution == FileConflictResolution.AutoRename) - { - this.TargetFileName = Helpers.GetUniqueFileName(this.TargetFileName, this.TargetDir); - } - //check if required disk space is available - if (Helpers.GetFreeSpace(this.TargetDir, out long freespace)) - { - if (freespace < FileSize) - { - throw new AssembleFailedException(ErrorCode.DiskError); - } - } - - using var outfs = new FileStream(this.TargetFile, FileMode.Create, FileAccess.Write); var totalBytes = 0L; - foreach (var pc in pieces) + +#if NET35 + var buf = new byte[5 * 1024 * 1024]; +#else + var buf = System.Buffers.ArrayPool.Shared.Rent(5 * 1024 * 1024); +#endif + + + var outFile = state!.ConvertToMp3 ? Path.Combine(this.GetState().TempDir!, Guid.NewGuid().ToString()) + : this.TargetFile; + using var outfs = new FileStream(outFile!, FileMode.Create, FileAccess.Write); + try { - if (this.cancelFlag.IsCancellationRequested) return; - using var infs = new FileStream(GetPieceFile(pc.Id), FileMode.Open, FileAccess.Read); - var len = pc.Length; - if (this.FileSize < 1) + foreach (var pc in pieces) { - while (!this.cancelFlag.IsCancellationRequested) + if (this.cancelFlag.IsCancellationRequested) return; + using var infs = new FileStream(GetPieceFile(pc.Id), FileMode.Open, FileAccess.Read); + var len = pc.Length; + if (this.FileSize < 1) { - var x = infs.Read(buf, 0, buf.Length); - if (x == 0) + while (!this.cancelFlag.IsCancellationRequested) { - break; + var x = infs.Read(buf, 0, buf.Length); + if (x == 0) + { + break; + } + try + { + outfs.Write(buf, 0, x); + } + catch (IOException ioe) + { + Log.Debug(ioe, "AssemblePieces"); + throw new AssembleFailedException(ErrorCode.DiskError, ioe); + } + totalBytes += x; } - try + } + else + { + while (len > 0) { - outfs.Write(buf, 0, x); + if (this.cancelFlag.IsCancellationRequested) return; + var x = infs.Read(buf, 0, (int)Math.Min(buf.Length, len)); + if (x == 0) + { + Log.Debug("EOF :: File corrupted"); + throw new Exception("EOF :: File corrupted"); + } + try + { + outfs.Write(buf, 0, x); + } + catch (IOException ioe) + { + Log.Debug(ioe, "AssemblePieces"); + throw new AssembleFailedException(ErrorCode.DiskError, ioe); + } + len -= x; + totalBytes += x; + var prg = (int)(totalBytes * 100 / FileSize); + if (state!.ConvertToMp3) prg /= 2; + this.OnAssembleProgressChanged(prg); } - catch (IOException ioe) - { - Log.Debug(ioe, "AssemblePieces"); - throw new AssembleFailedException(ErrorCode.DiskError, ioe); - } - totalBytes += x; } } - else + + if (this.cancelFlag.IsCancellationRequested) return; + + if (state!.ConvertToMp3) { - while (len > 0) + if (mediaProcessor != null) { - if (this.cancelFlag.IsCancellationRequested) return; - var x = infs.Read(buf, 0, (int)Math.Min(buf.Length, len)); - if (x == 0) + mediaProcessor.ProgressChanged += (s, e) => { - Log.Debug("EOF :: File corrupted"); - throw new Exception("EOF :: File corrupted"); - } - try + var prg = 50 + e.Progress / 2; + if (prg > 100) prg = 100; + this.OnAssembleProgressChanged(prg); + }; + var res = mediaProcessor.ConvertToMp3Audio(outFile!, TargetFile!, + this.cancelFlag, out totalBytes); + if (res != MediaProcessingResult.Success) { - outfs.Write(buf, 0, x); + throw new AssembleFailedException( + res == MediaProcessingResult.AppNotFound ? ErrorCode.FFmpegNotFound : + ErrorCode.FFmpegError); //TODO: Add more info about error } - catch (IOException ioe) + + if (Config.Instance.FetchServerTimeStamp) { - Log.Debug(ioe, "AssemblePieces"); - throw new AssembleFailedException(ErrorCode.DiskError, ioe); + try + { + File.SetLastWriteTime(TargetFile, state.LastModified); + } + catch { } } - len -= x; - totalBytes += x; - if (FileSize > 0) this.OnAssembleProgressChanged((int)(totalBytes * 100 / FileSize)); + this.totalSize = totalBytes; + } + else + { + throw new AssembleFailedException(ErrorCode.Generic); //TODO: Add more info about error } } } + finally + { +#if !NET35 + System.Buffers.ArrayPool.Shared.Return(buf); +#endif + } + + if (this.cancelFlag.IsCancellationRequested) return; + //Console.WriteLine("Total bytes written: {0} total size: {1}", totalBytes, this.totalSize); if (this.totalSize < 1) { @@ -361,7 +461,8 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp } catch { } } - + if (this.cancelFlag.IsCancellationRequested) return; + Log.Debug("Deleting file parts"); DeleteFileParts(); } catch (Exception ex) @@ -369,12 +470,6 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp Log.Debug(ex, "Error in AssemblePieces"); throw new AssembleFailedException(ex is DownloadException de ? de.ErrorCode : ErrorCode.Generic); } - finally - { -#if !NET35 - System.Buffers.ArrayPool.Shared.Return(buf); -#endif - } } } @@ -418,6 +513,19 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp { base.UpdateSpeedLimit(this.state, enable, limit); } + + private void CreateDefaultHeaders() + { + this.state!.Headers = new Dictionary> + { + ["User-Agent"] = new() { Config.Instance.FallbackUserAgent }, + ["Accept"] = new() { "*/*", }, + ["Accept-Encoding"] = new() { "identity", }, + ["Accept-Language"] = new() { "en-US", }, + ["Accept-Charset"] = new() { "*", }, + ["Referer"] = new() { new Uri(this.state.Url, ".").ToString() } + }; + } } public class SingleSourceHTTPDownloaderState : BaseHTTPDownloaderState @@ -425,5 +533,6 @@ namespace XDM.Core.Lib.Downloader.Progressive.SingleHttp public Uri Url; public Dictionary> Headers; public Dictionary Cookies; + public bool ConvertToMp3; } } diff --git a/app/XDM/XDM_CoreFx/Lib/Downloader/SpeedLimiter.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/SpeedLimiter.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Downloader/SpeedLimiter.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Downloader/SpeedLimiter.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/DownloadLaterEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/DownloadLaterEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/DownloadLaterEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/DownloadLaterEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/DownloadListEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/DownloadListEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/DownloadListEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/DownloadListEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/FileBrowsedEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/FileBrowsedEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/FileBrowsedEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/FileBrowsedEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IAppWinPeer.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IAppWinPeer.cs similarity index 86% rename from app/XDM/XDM_CoreFx/Lib/UI/IAppWinPeer.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IAppWinPeer.cs index c700007..7119d4d 100644 --- a/app/XDM/XDM_CoreFx/Lib/UI/IAppWinPeer.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IAppWinPeer.cs @@ -5,6 +5,7 @@ using System.Text; using XDM.Common.UI; using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; namespace XDM.Core.Lib.UI { @@ -88,7 +89,9 @@ namespace XDM.Core.Lib.UI Dictionary MenuItemMap { get; } - string? SaveFileDialog(string? initialPath); + string? SaveFileDialog(string? initialPath, string? defaultExt, string? filter); + + string? OpenFileDialog(string? initialPath, string? defaultExt, string? filter); void ShowRefreshLinkDialog(InProgressDownloadEntry entry, IApp app); @@ -100,16 +103,10 @@ namespace XDM.Core.Lib.UI void ShowYoutubeDLDialog(IAppUI appUI, IApp app); - DownloadSchedule? ShowSchedulerDialog(DownloadSchedule schedule); - void ShowBatchDownloadWindow(IApp app, IAppUI appUi); void ShowSettingsDialog(IApp app, int page = 0); - void ImportDownloads(IApp app); - - void ExportDownloads(IApp app); - void UpdateBrowserMonitorButton(); void ShowBrowserMonitoringDialog(IApp app); @@ -124,6 +121,12 @@ namespace XDM.Core.Lib.UI IQueueSelectionDialog CreateQueueSelectionDialog(); + void ShowDownloadSelectionWindow(IApp app, IAppUI appUI, FileNameFetchMode mode, IEnumerable downloads); + + IClipboardMonitor GetClipboardMonitor(); + + void ShowFloatingWidget(); + //void RunOnNewThread(Action action); event EventHandler CategoryChanged; @@ -165,6 +168,10 @@ namespace XDM.Core.Lib.UI event EventHandler SchedulerClicked; event EventHandler MoveToQueueClicked; + + event EventHandler DownloadListDoubleClicked; + + event EventHandler WindowCreated; } public class CategoryChangedEventArgs : EventArgs diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IBatchDownloadView.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IBatchDownloadView.cs new file mode 100644 index 0000000..b372603 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IBatchDownloadView.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace XDM.Core.Lib.UI +{ + public interface IBatchDownloadView + { + void SetStartLetterRange(string[] range); + void SetEndLetterRange(string[] range); + void ShowWindow(); + void DestroyWindow(); + + bool IsLetterMode { get; set; } + bool IsUsingLeadingZero { get; set; } + string Url { get; set; } + char? StartLetter { get; } + char? EndLetter { get; } + int StartNumber { get; } + int EndNumber { get; } + int LeadingZeroCount { get; } + string BatchAddress1 { get; set; } + string BatchAddress2 { get; set; } + string BatchAddressN { get; set; } + bool IsBatchMode { get; } + + event EventHandler? PatternChanged; + event EventHandler? OkClicked; + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IButton.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IButton.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/IButton.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IButton.cs diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IDownloadSelectionView.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IDownloadSelectionView.cs new file mode 100644 index 0000000..c776349 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IDownloadSelectionView.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Downloader; + +namespace XDM.Core.Lib.UI +{ + public interface IDownloadSelectionView + { + event EventHandler? BrowseClicked; + event EventHandler? DownloadClicked; + event EventHandler? QueueSchedulerClicked; + event EventHandler? DownloadLaterClicked; + + string? SelectFolder(); + void CloseWindow(); + void ShowWindow(); + void SetData(FileNameFetchMode mode, IEnumerable downloads, + Func populateEntryWrapper); + + string DownloadLocation { get; set; } + AuthenticationInfo? Authentication { get; set; } + ProxyInfo? Proxy { get; set; } + int SpeedLimit { get; set; } + bool EnableSpeedLimit { get; set; } + int SelectedRowCount { get; } + IEnumerable SelectedItems { get; } + } + + public interface IDownloadEntryWrapper + { + public string Name { get; set; } + public bool IsSelected { get; set; } + public object DownloadEntry { get; set; } + public string EntryType { get; set; } + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IFinishedDownloadRow.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IFinishedDownloadRow.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/IFinishedDownloadRow.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IFinishedDownloadRow.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IInProgressDownloadRow.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IInProgressDownloadRow.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/IInProgressDownloadRow.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IInProgressDownloadRow.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IMenuItem.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IMenuItem.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/IMenuItem.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IMenuItem.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IQueueSelectionDialog.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IQueueSelectionDialog.cs similarity index 56% rename from app/XDM/XDM_CoreFx/Lib/UI/IQueueSelectionDialog.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IQueueSelectionDialog.cs index 90d784d..8ea1c2e 100644 --- a/app/XDM/XDM_CoreFx/Lib/UI/IQueueSelectionDialog.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IQueueSelectionDialog.cs @@ -6,13 +6,15 @@ using System.Text; namespace XDM.Core.Lib.UI { - public interface IQueueSelectionDialog + public interface IQueueSelectionDialog : IDisposable { event EventHandler? QueueSelected; event EventHandler? ManageQueuesClicked; - void SetData(IEnumerable items, string[] downloadIds); - + void SetData( + IEnumerable queueNames, + IEnumerable queueIds, + IEnumerable downloadIds); void ShowWindow(IAppWinPeer peer); } } diff --git a/app/XDM/XDM_CoreFx/Lib/UI/IQueuesWindow.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IQueuesWindow.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/IQueuesWindow.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IQueuesWindow.cs diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/ISettingsPage.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/ISettingsPage.cs similarity index 62% rename from app/XDM/XDM.WinForm.UI/SettingsPages/ISettingsPage.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/ISettingsPage.cs index 0b3ed85..28adb3b 100644 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/ISettingsPage.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/ISettingsPage.cs @@ -2,14 +2,15 @@ using System.Collections.Generic; using System.Linq; using System.Text; - using XDM.Core.Lib.Common; -namespace XDM.WinForm.UI.SettingsPages +namespace XDM.Core.Lib.UI { - internal interface ISettingsPage + public interface ISettingsPage { void PopulateUI(); void UpdateConfig(); + + public IApp App { get; set; } } } diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IVideoDownloadView.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IVideoDownloadView.cs new file mode 100644 index 0000000..30bfeab --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/IVideoDownloadView.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using XDM.Core.Lib.Common; + +namespace XDM.Core.Lib.UI +{ + public interface IVideoDownloadView + { + string DownloadLocation { get; set; } + string Url { get; set; } + string? SelectedBrowser { get; } + List AllowedBrowsers { set; } + event EventHandler? CancelClicked; + event EventHandler? WindowClosed; + event EventHandler? BrowseClicked; + event EventHandler? SearchClicked; + event EventHandler? DownloadClicked; + event EventHandler? QueueSchedulerClicked; + event EventHandler? DownloadLaterClicked; + void SwitchToInitialPage(); + void SwitchToProcessingPage(); + void SwitchToFinalPage(); + void SwitchToErrorPage(); + string? SelectFolder(); + public void SetVideoResultList(IEnumerable items, IEnumerable formats); + public int SelectedFormat { get; set; } + public IEnumerable SelectedRows { get; } + public int SelectedItemCount { get; } + public void CloseWindow(); + public void ShowWindow(); + AuthenticationInfo? Authentication { get; set; } + ProxyInfo? Proxy { get; set; } + int SpeedLimit { get; set; } + bool EnableSpeedLimit { get; set; } + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/UI/QueueListEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/QueueListEventArgs.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/UI/QueueListEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/QueueListEventArgs.cs diff --git a/app/XDM/XDM_CoreFx/Lib/UI/QueueSelectionEventArgs.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/QueueSelectionEventArgs.cs similarity index 50% rename from app/XDM/XDM_CoreFx/Lib/UI/QueueSelectionEventArgs.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/UI/QueueSelectionEventArgs.cs index 87dd8f4..0246307 100644 --- a/app/XDM/XDM_CoreFx/Lib/UI/QueueSelectionEventArgs.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/UI/QueueSelectionEventArgs.cs @@ -8,11 +8,11 @@ namespace XDM.Core.Lib.UI { public class QueueSelectionEventArgs : EventArgs { - public int SelectedQueueIndex { get; } - public string[] DownloadIds { get; } - public QueueSelectionEventArgs(int index, string[] downloadIds) + public string SelectedQueueId { get; } + public IEnumerable DownloadIds { get; } + public QueueSelectionEventArgs(string id, IEnumerable downloadIds) { - this.SelectedQueueIndex = index; + this.SelectedQueueId = id; this.DownloadIds = downloadIds; } } diff --git a/app/XDM/XDM_CoreFx/Lib/Common/UpdateChecker.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Updater/UpdateChecker.cs similarity index 86% rename from app/XDM/XDM_CoreFx/Lib/Common/UpdateChecker.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Updater/UpdateChecker.cs index 3a37a58..17e4194 100644 --- a/app/XDM/XDM_CoreFx/Lib/Common/UpdateChecker.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Updater/UpdateChecker.cs @@ -36,7 +36,7 @@ namespace XDM.Core.Lib.Common firstUpdate = false; } - using var hc = HttpClientFactory.NewHttpClient(null); + using var hc = HttpClientFactory.NewHttpClient(null); hc.Timeout = TimeSpan.FromSeconds(Config.Instance.NetworkTimeout); if ((updateMode & UpdateMode.AppUpdateOnly) == UpdateMode.AppUpdateOnly) @@ -89,13 +89,16 @@ namespace XDM.Core.Lib.Common ["User-Agent"] = new List { UserAgent } }); using var response = hc.Send(request); - var content = response.ReadAsString(CancelFlag.None); - if (content == null) return null; - var release = JsonConvert.DeserializeObject(content); - if (condition.Invoke(release)) + using var stream = response.GetResponseStream(); + using var streamReader = new StreamReader(stream); + using var r = new JsonTextReader(streamReader); + var serializer = new JsonSerializer(); + var release = serializer.Deserialize(r); + if (!release.HasValue) return null; + if (condition.Invoke(release.Value)) { - if (release.Assets == null) return null; - foreach (var asset in release.Assets) + if (release.Value.Assets == null) return null; + foreach (var asset in release.Value.Assets) { if (asset.Name == assetName || assetName == null) { @@ -104,8 +107,7 @@ namespace XDM.Core.Lib.Common Url = asset.Url, Name = asset.Name, Size = asset.Size, - Description = release.Body, - TagName = release.TagName, + TagName = release.Value.TagName, IsExternal = true }; } @@ -135,7 +137,7 @@ namespace XDM.Core.Lib.Common //TODO: Handle MacOS private static string GetYoutubeDLExecutableNameForCurrentOS() => - Environment.OSVersion.Platform == PlatformID.Win32NT ? "youtube-dl.exe" : "youtube-dl"; + Environment.OSVersion.Platform == PlatformID.Win32NT ? "yt-dlp_x86.exe" : "yt-dlp"; //TODO: Handle MacOS private static string GetFFmpegExecutableNameForCurrentOS() => @@ -146,7 +148,7 @@ namespace XDM.Core.Lib.Common Environment.OSVersion.Platform == PlatformID.Win32NT ? "xdmsetup.exe" : "xdmsetup"; private static UpdateInfo? FindNewYoutubeDLVersion(IHttpClient hc, DateTime lastUpdated) => - FindNewRelease(hc, "https://api.github.com/repos/ytdl-org/youtube-dl/releases/latest", + FindNewRelease(hc, "https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest", GetYoutubeDLExecutableNameForCurrentOS(), r => r.PublishedAt > lastUpdated); private static UpdateInfo? FindNewFFmpegVersion(IHttpClient hc, DateTime lastUpdated) => @@ -183,7 +185,6 @@ namespace XDM.Core.Lib.Common public string Name { get; set; } public string Url { get; set; } public long Size { get; set; } - public string Description { get; set; } public string TagName { get; set; } public bool IsExternal { get; set; } } diff --git a/app/XDM/XDM_CoreFx/Lib/Util/BrowserLauncher.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/BrowserLauncher.cs similarity index 97% rename from app/XDM/XDM_CoreFx/Lib/Util/BrowserLauncher.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Util/BrowserLauncher.cs index 0083f49..8c3b1d4 100644 --- a/app/XDM/XDM_CoreFx/Lib/Util/BrowserLauncher.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/BrowserLauncher.cs @@ -25,7 +25,7 @@ namespace XDM.Core.Lib.Util else if (Environment.OSVersion.Platform == PlatformID.Unix) { paths = new string[]{ - "/usr/bin/chrome" + "/usr/bin/google-chrome" }; } else if (Environment.OSVersion.Platform == PlatformID.MacOSX) diff --git a/app/XDM/XDM_CoreFx/Lib/Util/Helpers.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/Helpers.cs similarity index 74% rename from app/XDM/XDM_CoreFx/Lib/Util/Helpers.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Util/Helpers.cs index 07873d6..c424fbc 100644 --- a/app/XDM/XDM_CoreFx/Lib/Util/Helpers.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/Helpers.cs @@ -18,6 +18,7 @@ using XDM.Core.Lib.Downloader.Progressive.DualHttp; using XDM.Core.Lib.Downloader.Adaptive.Hls; using XDM.Core.Lib.Downloader.Progressive.SingleHttp; using XDM.Core.Lib.Downloader; +using XDM.Messaging; #if !NET5_0_OR_GREATER using NetFX.Polyfill; @@ -54,7 +55,7 @@ namespace XDM.Core.Lib.Util hrs = sec / 3600; min = (sec % 3600) / 60; sec = sec % 60; - String str = hrs.ToString().PadLeft(2, '0') + ":" + min.ToString().PadLeft(2, '0') + ":" + sec.ToString().PadLeft(2, '0'); + var str = hrs.ToString().PadLeft(2, '0') + ":" + min.ToString().PadLeft(2, '0') + ":" + sec.ToString().PadLeft(2, '0'); return str; } @@ -141,56 +142,64 @@ namespace XDM.Core.Lib.Util return Config.Instance.DefaultDownloadFolder; } - public static string GetFileNameFromProbeResult(ProbeResult probeResult, bool keepOriginalName = false, - string originalName = null) - { - if (keepOriginalName && string.IsNullOrEmpty(originalName)) - { - throw new InvalidOperationException("keepOriginalName is set with no original file name"); - } - var fileName = ""; - if (probeResult.AttachmentName != null) - { - fileName = probeResult.AttachmentName; - } - else - { - if (keepOriginalName) - { - fileName = Helpers.AddFileExtension(originalName, probeResult.ContentType); - } - else - { - fileName = Helpers.GetFileName( - probeResult.FinalUri, probeResult.ContentType); - } - } - return fileName; - } + //public static string GetFileNameFromProbeResult(ProbeResult probeResult, bool keepOriginalName = false, + // string originalName = null) + //{ + // if (keepOriginalName && string.IsNullOrEmpty(originalName)) + // { + // throw new InvalidOperationException("keepOriginalName is set with no original file name"); + // } + // var fileName = ""; + // if (probeResult.AttachmentName != null) + // { + // fileName = probeResult.AttachmentName; + // } + // else + // { + // if (keepOriginalName) + // { + // fileName = Helpers.AddFileExtension(originalName, probeResult.ContentType); + // } + // else + // { + // fileName = Helpers.GetFileName( + // probeResult.FinalUri, probeResult.ContentType); + // } + // } + // return fileName; + //} - public static string AddFileExtension(string name, string contentType) + public static bool AddFileExtension(string name, string contentType, out string nameWithExt) { name = SanitizeFileName(name); + if (name.EndsWith(".")) + { + name = name.TrimEnd('.'); + } if (string.IsNullOrEmpty(contentType)) { - return name; + nameWithExt = name; + return false; } if (contentType == "text/html") { - return name + ".html"; + nameWithExt = name + ".html"; + return true; } else { try { - if (contentType == null) return name; var ext = MimeTypes.GetValueOrDefault(contentType.ToLowerInvariant()); if (!string.IsNullOrEmpty(ext)) { var prevExt = Path.GetExtension(name); var nameWithoutExt = Path.GetFileNameWithoutExtension(name); if (!("." + ext).Equals(prevExt, StringComparison.InvariantCultureIgnoreCase)) - name = nameWithoutExt + "." + ext; + { + nameWithExt = nameWithoutExt + "." + ext; + return true; + } } } catch (Exception ex) @@ -198,7 +207,8 @@ namespace XDM.Core.Lib.Util Log.Debug(ex, "Error in AddFileExtension"); } - return name; + nameWithExt = name; + return true; } } @@ -362,7 +372,7 @@ namespace XDM.Core.Lib.Util case PlatformID.Unix: var psi = new ProcessStartInfo { - FileName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "xdg-open" : "open" + FileName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "open" : "xdg-open" }; psi.Arguments = "\"" + path + "\""; Process.Start(psi); @@ -400,7 +410,7 @@ namespace XDM.Core.Lib.Util case PlatformID.Unix: var psi = new ProcessStartInfo { - FileName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "xdg-open" : "open" + FileName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "open" : "xdg-open" }; psi.Arguments = $"\"{path}\""; Process.Start(psi); @@ -435,7 +445,7 @@ namespace XDM.Core.Lib.Util case PlatformID.Unix: var psi = new ProcessStartInfo { - FileName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "xdg-open" : "open" + FileName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "open" : "xdg-open" }; psi.Arguments = "\"" + url + "\""; Process.Start(psi); @@ -578,7 +588,7 @@ namespace XDM.Core.Lib.Util break; #endif } - + Log.Debug("Chrome executable not found!"); return null; } @@ -622,7 +632,7 @@ namespace XDM.Core.Lib.Util break; #endif } - + Log.Debug("Firefox executable not found!"); return null; } @@ -650,96 +660,6 @@ namespace XDM.Core.Lib.Util return null; } - private static string CreateNativeMessagingHostManifest(NativeHostBrowser browser, string name) - { - if (browser == NativeHostBrowser.Firefox) - { - var json = JsonConvert.SerializeObject(new - { - name = name, - description = "Native messaging host for Xtreme Download Manager", - path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NativeMessagingHost.exe"), - type = "stdio", - allowed_extensions = new[] { - "browser-mon@xdman.sourceforge.net" - } - }); - return json; - //var manifestPath = Path.Combine(Config.DataDir, "xdmff.native_host.json"); - //File.WriteAllText(manifestPath, json); - //return manifestPath; - } - else - { - var json = JsonConvert.SerializeObject(new - { - name = name, - description = "Native messaging host for Xtreme Download Manager", - path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NativeMessagingHost.exe"), - type = "stdio", - allowed_origins = new[] { - "chrome-extension://danmljfachfhpbfikjgedlfifabhofcj/", - "chrome-extension://dkckaoghoiffdbomfbbodbbgmhjblecj/", - "chrome-extension://ejpbcmllmliidhlpkcgbphhmaodjihnc/" - } - }); - return json; - //var manifestPath = Path.Combine(Config.DataDir, "xdm_chrome.native_host.json"); - //File.WriteAllText(manifestPath, json); - //return manifestPath; - } - } - - public static void InstallNativeMessagingHost(NativeHostBrowser browser) - { - var name = browser == NativeHostBrowser.Firefox ? "xdmff.native_host" : - "xdm_chrome.native_host"; - var manifestJSON = CreateNativeMessagingHostManifest(browser, name); - - var os = Environment.OSVersion.Platform; - if (os == PlatformID.Win32NT) - { - var manifestPath = Path.Combine(Config.DataDir, $"{name}.json"); - File.WriteAllText(manifestPath, manifestJSON); - var regPath = (browser == NativeHostBrowser.Firefox ? - @"Software\Mozilla\NativeMessagingHosts\" : - @"SOFTWARE\Google\Chrome\NativeMessagingHosts"); - using var regKey = Registry.CurrentUser.CreateSubKey(regPath); - using var key = regKey.CreateSubKey(name, RegistryKeyPermissionCheck.ReadWriteSubTree); - key.SetValue(null, manifestPath); - } - else - { -#if NET5_0_OR_GREATER - string manifestPath; - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - if (browser == NativeHostBrowser.Firefox) - { - manifestPath = $"~/Library/Application Support/Mozilla/NativeMessagingHosts/{name}.json"; - } - else - { - manifestPath = $"~/Library/Application Support/Google/Chrome/NativeMessagingHosts/{name}.json"; - } - } - else - { - if (browser == NativeHostBrowser.Firefox) - { - manifestPath = $"~/.mozilla/native-messaging-hosts/{name}.json"; - } - else - { - manifestPath = $"~/.config/google-chrome/NativeMessagingHosts/{name}.json"; - } - } - - File.WriteAllText(manifestPath, manifestJSON); -#endif - } - } - public static void RunGC() { #if NET35 @@ -792,7 +712,7 @@ namespace XDM.Core.Lib.Util { if (enable) { - var xdmExe = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XDM.WinForm.UI.exe"); + var xdmExe = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xdm-app.exe"); hkcuRun.SetValue("XDM", $"\"{xdmExe}\" -m"); } else @@ -800,14 +720,130 @@ namespace XDM.Core.Lib.Util hkcuRun.DeleteValue("XDM", false); } } + return true; } +#if NET5_0_OR_GREATER + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return true; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + var autoStartDir = GetLinuxDesktopAutoStartDir(); + if (!Directory.Exists(autoStartDir)) + { + Directory.CreateDirectory(autoStartDir); + } + File.WriteAllText(Path.Combine(autoStartDir, "xdm-app.desktop"), GetLinuxDesktopFile()); + return true; + } +#endif } catch (Exception ex) { - Log.Debug(ex, "Error setting registry key"); + Log.Debug(ex, ex.Message); } return false; } +#if NET5_0_OR_GREATER + public static string GetLinuxDesktopAutoStartDir() + { + var configDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + if (string.IsNullOrEmpty(configDir)) + { + configDir = Path.Combine(Environment.GetEnvironmentVariable("HOME") ?? "~", ".config"); + } + return Path.Combine(configDir, "autostart"); + } + + public static string GetLinuxDesktopFile() + { + var appPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xdm-app"); + var iconPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "svg-icons", "xdm-logo.svg"); + + return "[Desktop Entry]\r\n" + + "Encoding=UTF-8\r\n" + + "Version=1.0\r\n" + + "Type=Application\r\n" + + "Terminal=false\r\n" + + $"Exec=\"{appPath}\" -m\r\n" + + "Name=Xtreme Download Manager\r\n" + + "Comment=Xtreme Download Manager\r\n" + + "Categories=Network;\r\n" + + $"Icon=\"{iconPath}\""; + } + + // public static void addToStartup() + // { + // File dir = new File(System.getProperty("user.home"), "Library/LaunchAgents"); + // dir.mkdirs(); + // File f = new File(dir, "org.sdg.xdman.plist"); + // FileOutputStream fs = null; + // try + // { + // fs = new FileOutputStream(f); + // fs.write(getStartupPlist().getBytes()); + // } + // catch (Exception e) + // { + // Logger.log(e); + // } + // finally + // { + // try + // { + // if (fs != null) + // fs.close(); + // } + // catch (Exception e2) + // { + // } + // } + // f.setExecutable(true); + // } + + // public static boolean isAlreadyAutoStart() + // { + // File f = new File(System.getProperty("user.home"), "Library/LaunchAgents/org.sdg.xdman.plist"); + // if (!f.exists()) + // return false; + // FileInputStream in = null; + // byte[] buf = new byte[(int)f.length()]; + // try + // { + //in = new FileInputStream(f); + // if (in.read(buf) != f.length()) { + // return false; + // } + // } + // catch (Exception e) + // { + // Logger.log(e); + // } + // finally + // { + // try + // { + // if (in != null) + // in.close(); + // } + // catch (Exception e2) + // { + // } + // } + // String str = new String(buf); + // String s1 = getProperPath(System.getProperty("java.home")); + // String s2 = XDMUtils.getJarFile().getAbsolutePath(); + // return str.contains(s1) && str.contains(s2); + // } + + // public static void removeFromStartup() + // { + // File f = new File(System.getProperty("user.home"), "Library/LaunchAgents/org.sdg.xdman.plist"); + // f.delete(); + // } + +#endif public static bool IsAutoStartEnabled() { @@ -822,13 +858,30 @@ namespace XDM.Core.Lib.Util var command = (string)hkcuRun.GetValue("XDM"); var path = GetFileNameFromQuote(command); return !string.IsNullOrEmpty(path) && - path == Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XDM.WinForm.UI.exe"); + path == Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xdm-app.exe"); } } +#if NET5_0_OR_GREATER + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + var autoStartDir = GetLinuxDesktopAutoStartDir(); + if (!Directory.Exists(autoStartDir)) + { + return false; + } + var file = Path.Combine(autoStartDir, "xdm-app.desktop"); + if (!File.Exists(file)) + { + return false; + } + var text = File.ReadAllText(file); + return text.Contains(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xdm-app")); + } +#endif } catch (Exception ex) { - Log.Debug(ex, "Error setting registry key"); + Log.Debug(ex, ex.Message); } return false; @@ -857,24 +910,104 @@ namespace XDM.Core.Lib.Util return false; } + public static void SpawnSubProcess(string executable, + string[]? args = null, + bool useShellExecute = false, + bool createNoWindow = true) + { + var psi = new ProcessStartInfo + { + FileName = executable, + UseShellExecute = useShellExecute, + CreateNoWindow = createNoWindow + }; + if (args != null && args.Length > 0) + { + psi.Arguments = string.Join(" ", args); + } + Process.Start(psi); + } + public static void ShutDownPC() { - Log.Debug("Issuing shutdown command"); + //dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true + //https://gitlab.xfce.org/xfce/xfce4-power-manager/-/blob/master/src/xfpm-systemd.c + //https://askubuntu.com/questions/454039/what-command-is-executed-when-shutdown-from-the-graphical-menu-in-14-04 + Log.Debug("Issuing shutdown command..."); + switch (Environment.OSVersion.Platform) + { + case PlatformID.Win32NT: + SpawnSubProcess("shutdown", new string[] { "/t", "30", "/s" }); + break; +#if NET5_0_OR_GREATER + case PlatformID.Unix: + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + var cmd = "org.freedesktop.login1.Manager.PowerOff"; + SpawnSubProcess("dbus-send", new string[] { "--system", "--print-reply", + "--dest=org.freedesktop.login1", "/org/freedesktop/login1", $"\"{cmd}\"","boolean:true"}); + return; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + var cmd = "tell app \"System Events\" to shut down"; + SpawnSubProcess("osascript", new string[] { "-e", $"\"{cmd}\"" }); + } + break; +#endif + default: + Log.Debug("Operating system not supported"); + break; + } } public static void SendKeepAlivePing() { Log.Debug("Keep alive ping..."); + switch (Environment.OSVersion.Platform) + { + case PlatformID.Win32NT: + SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED); + break; +#if NET5_0_OR_GREATER + case PlatformID.Unix: + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + SpawnSubProcess("dbus-send", new string[] { "--print-reply --type=method_call", + "--dest=org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.SimulateUserActivity"}); + return; + } + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + SpawnSubProcess("caffeinate", new string[] { "-i -t 3" }); + } + break; +#endif + default: + Log.Debug("Operating system not supported"); + break; + } } public static void RunCommand(string cmd) { Log.Debug("Running command: " + cmd); + SpawnSubProcess(QuoteFilePathIfNeeded(cmd)); } public static void RunAntivirus(string cmd, string options, string file) { Log.Debug("Running antivirus: " + cmd + " " + options + " " + file); + SpawnSubProcess(QuoteFilePathIfNeeded(cmd), new string[] { options, QuoteFilePathIfNeeded(file) }); + } + + public static string QuoteFilePathIfNeeded(string file) + { + if (file.Contains(" ")) + { + return Environment.OSVersion.Platform == PlatformID.Win32NT ? $"\"{file}\"" : $"\"{file}\""; + } + return file; } public static AuthenticationInfo? GetAuthenticationInfoFromConfig(Uri url) @@ -1158,6 +1291,8 @@ namespace XDM.Core.Lib.Util return TextResource.GetText("STAT_STOPPED"); case DownloadStatus.Finished: return TextResource.GetText("STAT_FINISHED"); + case DownloadStatus.Waiting: + return TextResource.GetText("STAT_WAITING"); default: return status.ToString(); } @@ -1213,77 +1348,49 @@ namespace XDM.Core.Lib.Util [DllImport("kernel32.dll")] public static extern UInt64 GetTickCount64(); + [FlagsAttribute] + public enum EXECUTION_STATE : uint + { + ES_AWAYMODE_REQUIRED = 0x00000040, + ES_CONTINUOUS = 0x80000000, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_SYSTEM_REQUIRED = 0x00000001 + // Legacy flag, should not be used. + // ES_USER_PRESENT = 0x00000004 + } + + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); + public static string? ReadString(BinaryReader r) { - var str = r.ReadString(); - if (!string.IsNullOrEmpty(str)) - { - return str; - } - return null; + return StreamHelper.ReadString(r); } public static void WriteStateHeaders(Dictionary>? headers, BinaryWriter w) { - w.Write(headers == null ? 0 : headers.Count); - if (headers != null && headers.Count > 0) - { - foreach (var key in headers.Keys) - { - w.Write(key); - var list = headers[key]; - w.Write(list.Count); - foreach (var item in list) - { - w.Write(item); - } - } - } + StreamHelper.WriteStateHeaders(headers, w); } public static void ReadStateHeaders(BinaryReader r, out Dictionary> headers) { - headers = new Dictionary>(); - var count = r.ReadInt32(); - for (var i = 0; i < count; i++) - { - var key = r.ReadString(); - var c = r.ReadInt32(); - var list = new List(c); - for (var k = 0; k < c; k++) - { - list.Add(r.ReadString()); - } - headers[key] = list; - } + StreamHelper.ReadStateHeaders(r, out headers); } public static void WriteStateCookies(Dictionary? cookies, BinaryWriter w) { - w.Write(cookies == null ? 0 : cookies.Count); - if (cookies != null && cookies.Count > 0) - { - foreach (var key in cookies.Keys) - { - w.Write(key); - w.Write(cookies[key]); - } - } + StreamHelper.WriteStateCookies(cookies, w); } public static void ReadStateCookies(BinaryReader r, out Dictionary cookies) { - cookies = new Dictionary(); - var count = r.ReadInt32(); - for (var i = 0; i < count; i++) - { - cookies[r.ReadString()] = r.ReadString(); - } + StreamHelper.ReadStateCookies(r, out cookies); } public static string FindYDLBinary() { - var executableName = Environment.OSVersion.Platform == PlatformID.Win32NT ? "youtube-dl.exe" : "youtube-dl"; + //var executableName = Environment.OSVersion.Platform == PlatformID.Win32NT ? "youtube-dl.exe" : "youtube-dl"; + var executableName = Environment.OSVersion.Platform == PlatformID.Win32NT ? "yt-dlp_x86.exe" : "yt-dlp"; var path = Path.Combine(Config.DataDir, executableName); if (File.Exists(path)) { @@ -1359,10 +1466,49 @@ namespace XDM.Core.Lib.Util Process.Start(psi); } } - } - public enum NativeHostBrowser - { - Chrome, Firefox, MSEdge + public static void UpdateRecentFolderList(string folder) + { + if (string.IsNullOrEmpty(folder)) + { + return; + } + if (!Config.Instance.RecentFolders.Contains(folder)) + { + Config.Instance.RecentFolders.Insert(0, folder); + } + Config.Instance.FolderSelectionMode = FolderSelectionMode.Manual; + Config.SaveConfig(); + } + + public static string? GetManualDownloadFolder() + { + if (Config.Instance.FolderSelectionMode == FolderSelectionMode.Manual) + { + if (Config.Instance.RecentFolders != null && Config.Instance.RecentFolders.Count > 0) + { + if (!string.IsNullOrEmpty(Config.Instance.UserSelectedDownloadFolder) && + Config.Instance.RecentFolders.Contains(Config.Instance.UserSelectedDownloadFolder)) + { + return Config.Instance.UserSelectedDownloadFolder; + } + return Config.Instance.RecentFolders[0]; + } + return Config.Instance.DefaultDownloadFolder; + } + return null; + } + + public static string GetVideoDownloadFolder() + { + var folder = GetManualDownloadFolder(); + if (string.IsNullOrEmpty(folder)) + { + folder = Helpers.GetDownloadFolderByFileName("video.mp4"); + } + return folder!; + } + + public static int ParseIntSafe(string text) { return Int32.TryParse(text, out int n) ? n : 0; } } } diff --git a/app/XDM/XDM_CoreFx/Lib/Util/SerializationHelper.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/SerializationHelper.cs similarity index 95% rename from app/XDM/XDM_CoreFx/Lib/Util/SerializationHelper.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Util/SerializationHelper.cs index fdba885..fc5cc84 100644 --- a/app/XDM/XDM_CoreFx/Lib/Util/SerializationHelper.cs +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/SerializationHelper.cs @@ -83,6 +83,9 @@ namespace XDM.Core.Lib.Util case "AfterCompletionCommand": instance.AfterCompletionCommand = r.ReadString(); break; + case "UserSelectedDownloadFolder": + instance.UserSelectedDownloadFolder = r.ReadString(); + break; case "AntiVirusArgs": instance.AntiVirusArgs = r.ReadString(); break; @@ -190,9 +193,9 @@ namespace XDM.Core.Lib.Util case "RunCommandAfterCompletion": instance.RunCommandAfterCompletion = r.ReadBoolean(); break; - case "RunOnLogon": - instance.RunOnLogon = r.ReadBoolean(); - break; + //case "RunOnLogon": + // instance.RunOnLogon = r.ReadBoolean(); + // break; case "ScanWithAntiVirus": instance.ScanWithAntiVirus = r.ReadBoolean(); break; @@ -214,6 +217,9 @@ namespace XDM.Core.Lib.Util case "AllowSystemDarkTheme": instance.AllowSystemDarkTheme = r.ReadBoolean(); break; + case "DoubleClickOpenFile": + instance.DoubleClickOpenFile = r.ReadBoolean(); + break; case "FileExtensions": var fileExtensionsLength = r.ReadInt16(); instance.FileExtensions = new string[fileExtensionsLength]; @@ -324,9 +330,10 @@ namespace XDM.Core.Lib.Util using var ms = new MemoryStream(); using var w = new BinaryWriter(ms); - w.Write((short)(instance.Proxy.HasValue ? 35 : 34)); //total fields + w.Write((short)(instance.Proxy.HasValue ? 36 : 35)); //total fields WriteString(w, instance.AfterCompletionCommand, "AfterCompletionCommand"); + WriteString(w, instance.UserSelectedDownloadFolder, "UserSelectedDownloadFolder"); WriteString(w, instance.AntiVirusArgs, "AntiVirusArgs"); WriteString(w, instance.AntiVirusExecutable, "AntiVirusExecutable"); WriteString(w, instance.DefaultDownloadFolder, "DefaultDownloadFolder"); @@ -339,13 +346,14 @@ namespace XDM.Core.Lib.Util WriteBoolean(w, instance.KeepPCAwake, "KeepPCAwake"); WriteBoolean(w, instance.MonitorClipboard, "MonitorClipboard"); WriteBoolean(w, instance.RunCommandAfterCompletion, "RunCommandAfterCompletion"); - WriteBoolean(w, instance.RunOnLogon, "RunOnLogon"); + //WriteBoolean(w, instance.RunOnLogon, "RunOnLogon"); WriteBoolean(w, instance.ScanWithAntiVirus, "ScanWithAntiVirus"); WriteBoolean(w, instance.ShowDownloadCompleteWindow, "ShowDownloadCompleteWindow"); WriteBoolean(w, instance.ShowProgressWindow, "ShowProgressWindow"); WriteBoolean(w, instance.ShutdownAfterAllFinished, "ShutdownAfterAllFinished"); WriteBoolean(w, instance.StartDownloadAutomatically, "StartDownloadAutomatically"); WriteBoolean(w, instance.AllowSystemDarkTheme, "AllowSystemDarkTheme"); + WriteBoolean(w, instance.DoubleClickOpenFile, "DoubleClickOpenFile"); WriteInt32(w, (int)instance.FileConflictResolution, "FileConflictResolution"); WriteInt32(w, (int)instance.FolderSelectionMode, "FolderSelectionMode"); diff --git a/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/TimeHelper.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/TimeHelper.cs new file mode 100644 index 0000000..bfe9c32 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/TimeHelper.cs @@ -0,0 +1,37 @@ +using System; + +namespace XDM.Core.Lib.Util +{ + public static class TimeHelper + { + public static void ConvertH24ToH12(TimeSpan time, out int hrs, out int min, out bool am) + { + var hour = time.Hours; + if (hour < 12) + { + am = true; + hrs = hour == 0 ? 12 : hour; + } + else + { + am = false; + hrs = hour > 12 ? hour - 12 : hour; + } + min = time.Minutes; + } + + public static TimeSpan ConvertH12ToH24(int hrs, int min, bool am) + { + var hour = 0; + if (am) + { + hour = hrs == 12 ? 0 : hrs; + } + else + { + hour = hrs < 12 ? hrs + 12 : hrs; + } + return new TimeSpan(hour, min, 0); + } + } +} diff --git a/app/XDM/XDM_CoreFx/Lib/Util/Win32NativeMethods.cs b/app/XDM/XDM.App.Core/XDM.Core/Lib/Util/Win32NativeMethods.cs similarity index 100% rename from app/XDM/XDM_CoreFx/Lib/Util/Win32NativeMethods.cs rename to app/XDM/XDM.App.Core/XDM.Core/Lib/Util/Win32NativeMethods.cs diff --git a/app/XDM/XDMApp/AppWin.cs b/app/XDM/XDM.App.Core/XDMApp/AppWin.cs similarity index 61% rename from app/XDM/XDMApp/AppWin.cs rename to app/XDM/XDM.App.Core/XDMApp/AppWin.cs index e0a7dd2..125a7de 100644 --- a/app/XDM/XDMApp/AppWin.cs +++ b/app/XDM/XDM.App.Core/XDMApp/AppWin.cs @@ -4,8 +4,10 @@ using System.Collections.Generic; using System.IO; using System.Linq; using TraceLog; +using Translations; using XDM.Common.UI; using XDM.Core.Lib.Common; +using XDM.Core.Lib.DataAccess; using XDM.Core.Lib.Downloader; using XDM.Core.Lib.UI; using XDM.Core.Lib.Util; @@ -19,6 +21,7 @@ namespace XDMApp private delegate void UpdateItemCallBack(string id, string targetFileName, long size); private Action updateProgressAction; private long lastProgressUpdate = 0; + public event EventHandler WindowLoaded; public AppWin(IAppWinPeer peer, IApp app) { @@ -48,29 +51,46 @@ namespace XDMApp ProxyInfo? proxyInfo, int maxSpeedLimit) { + var downloadEntry = new InProgressDownloadEntry + { + Name = targetFileName, + DateAdded = date, + DownloadType = type, + Id = id, + Progress = 0, + Size = fileSize, + Status = startType == DownloadStartType.Waiting ? DownloadStatus.Waiting : DownloadStatus.Stopped, + TargetDir = "", + PrimaryUrl = primaryUrl, + Authentication = authentication, + Proxy = proxyInfo, + MaxSpeedLimitInKiB = maxSpeedLimit, + }; + AppDB.Instance.Downloads.AddNewDownload(downloadEntry); + RunOnUiThread(() => { - var downloadEntry = new InProgressDownloadEntry - { - Name = targetFileName, - DateAdded = date, - DownloadType = type, - Id = id, - Progress = 0, - Size = fileSize, - Status = DownloadStatus.Stopped, - TargetDir = "", - PrimaryUrl = primaryUrl, - Authentication = authentication, - Proxy = proxyInfo, - MaxSpeedLimitInKiB = maxSpeedLimit, - }; + //var downloadEntry = new InProgressDownloadEntry + //{ + // Name = targetFileName, + // DateAdded = date, + // DownloadType = type, + // Id = id, + // Progress = 0, + // Size = fileSize, + // Status = startType == DownloadStartType.Waiting ? DownloadStatus.Waiting : DownloadStatus.Stopped, + // TargetDir = "", + // PrimaryUrl = primaryUrl, + // Authentication = authentication, + // Proxy = proxyInfo, + // MaxSpeedLimitInKiB = maxSpeedLimit, + //}; this.peer.AddToTop(downloadEntry); this.peer.SwitchToInProgressView(); this.peer.ClearInProgressViewSelection(); - this.SaveInProgressList(); + //this.SaveInProgressList(); UpdateToolbarButtonState(); }); } @@ -107,24 +127,87 @@ namespace XDMApp public void DownloadFailed(string id) { + AppDB.Instance.Downloads.UpdateDownloadStatus(id, DownloadStatus.Stopped); RunOnUiThread(() => { CallbackActions.DownloadFailed(id, peer); - SaveInProgressList(); + //SaveInProgressList(); UpdateToolbarButtonState(); }); } public void DownloadFinished(string id, long finalFileSize, string filePath) { - RunOnUiThread(() => + if (!string.IsNullOrEmpty(filePath)) { - CallbackActions.DownloadFinished(id, finalFileSize, filePath, peer, app); - this.SaveFinishedList(); - this.SaveInProgressList(); - UpdateToolbarButtonState(); - QueueWindowManager.RefreshView(); - }); + var name = Path.GetFileName(filePath); + var folder = Path.GetDirectoryName(filePath); + AppDB.Instance.Downloads.MarkAsFinished(id, finalFileSize, name, folder); + } + + Log.Debug("Final file name: " + filePath); + var downloadEntry = AppDB.Instance.Downloads.GetDownloadById(id); + if (downloadEntry != null) + { + var finishedEntry = new FinishedDownloadEntry + { + Name = Path.GetFileName(filePath), + Id = downloadEntry.Id, + DateAdded = downloadEntry.DateAdded, + Size = downloadEntry.Size > 0 ? downloadEntry.Size : finalFileSize, + DownloadType = downloadEntry.DownloadType, + TargetDir = Path.GetDirectoryName(filePath)!, + PrimaryUrl = downloadEntry.PrimaryUrl, + Authentication = downloadEntry.Authentication, + Proxy = downloadEntry.Proxy + }; + AppDB.Instance.Downloads.UpdateDownloadEntry(finishedEntry); + + RunOnUiThread(() => + { + var download = peer.FindInProgressItem(id); + if (download == null) return; + + peer.AddToTop(finishedEntry); + peer.Delete(download); + + QueueManager.RemoveFinishedDownload(download.DownloadEntry.Id); + + if (app.ActiveDownloadCount == 0 && peer.IsInProgressViewSelected) + { + Log.Debug("switching to finished listview"); + peer.SwitchToFinishedView(); + } + }); + } + + //var download = peer.FindInProgressItem(id); + //if (download == null) return; + + //peer.AddToTop(finishedEntry); + //peer.Delete(download); + + //QueueManager.RemoveFinishedDownload(download.DownloadEntry.Id); + + //if (app.ActiveDownloadCount == 0 && peer.IsInProgressViewSelected) + //{ + // Log.Debug("switching to finished listview"); + // peer.SwitchToFinishedView(); + //} + + //RunOnUiThread(() => + //{ + // CallbackActions.DownloadFinished(id, finalFileSize, filePath, peer, app, () => + // { + // UpdateToolbarButtonState(); + // QueueWindowManager.RefreshView(); + // }); + + // //this.SaveFinishedList(); + // //this.SaveInProgressList(); + // //UpdateToolbarButtonState(); + // //QueueWindowManager.RefreshView(); + //}); } public void DownloadStarted(string id) @@ -138,6 +221,12 @@ namespace XDMApp public IEnumerable GetAllInProgressDownloads() { + //var downloads = new List(); + //if (!AppDB.Instance.DownloadsDB.LoadDownloads(out downloads, out _, QueryMode.InProgress)) + //{ + // Log.Debug("GetAllInProgressDownloads::failed"); + //} + //return downloads; return peer.InProgressDownloads; } @@ -146,9 +235,14 @@ namespace XDMApp return peer.FindInProgressItem(downloadId)?.DownloadEntry; } - public string GetUrlFromClipboard() + public string? GetUrlFromClipboard() { - return peer.GetUrlFromClipboard(); + var text = peer.GetUrlFromClipboard(); + if (Helpers.IsUriValid(text)) + { + return text; + } + return null; } public AuthenticationInfo? PromtForCredentials(string message) @@ -158,6 +252,10 @@ namespace XDMApp public void RenameFileOnUI(string id, string folder, string file) { + if (!AppDB.Instance.Downloads.UpdateNameAndFolder(id, file, folder)) + { + Log.Debug("RenameFileOnUI::failed"); + } RunOnUiThread(() => { var downloadEntry = this.peer.FindInProgressItem(id); @@ -170,7 +268,7 @@ namespace XDMApp { downloadEntry.DownloadEntry.TargetDir = folder; } - this.SaveInProgressList(); + //this.SaveInProgressList(); }); } @@ -194,7 +292,7 @@ namespace XDMApp { var download = this.peer.FindInProgressItem(id); if (download == null) return; - download.Status = DownloadStatus.Stopped; + download.Status = DownloadStatus.Waiting; UpdateToolbarButtonState(); }); } @@ -235,23 +333,28 @@ namespace XDMApp }); } - public void ShowVideoDownloadDialog(string videoId, string name, long size) + public void ShowVideoDownloadDialog(string videoId, string name, long size, string? contentType) { RunOnUiThread(() => { - NewVideoDownloadDialogHelper.ShowVideoDownloadDialog(this.App, this, this.CreateNewVideoDialog(), videoId, name, size); + NewVideoDownloadDialogHelper.ShowVideoDownloadDialog(this.App, this, this.CreateNewVideoDialog(), + videoId, name, size, contentType); }); } public void UpdateItem(string id, string targetFileName, long size) { + if (!AppDB.Instance.Downloads.UpdateNameAndSize(id, size, targetFileName)) + { + Log.Debug("UpdateItem::failed"); + } RunOnUiThread(() => { var download = peer.FindInProgressItem(id); if (download == null) return; download.Name = targetFileName; download.Size = size; - this.SaveInProgressList(); + //this.SaveInProgressList(); }); } @@ -263,17 +366,15 @@ namespace XDMApp downloadEntry.Progress = progress; downloadEntry.DownloadSpeed = Helpers.FormatSize(speed) + "/s"; downloadEntry.ETA = Helpers.ToHMS(eta); - var time = DateTime.Now.Ticks; - if (time - lastProgressUpdate > 3000) - { - lastProgressUpdate = time; - this.SaveInProgressList(); - } } } public void UpdateProgress(string id, int progress, double speed, long eta) { + if (!AppDB.Instance.Downloads.UpdateDownloadProgress(id, progress)) + { + Log.Debug("UpdateProgress::failed"); + } peer.RunOnUIThread(this.updateProgressAction, id, progress, speed, eta); } @@ -281,8 +382,18 @@ namespace XDMApp { try { - peer.InProgressDownloads = TransactedIO.ReadInProgressList("inprogress-downloads.dat", Config.DataDir); - peer.FinishedDownloads = TransactedIO.ReadFinishedList("finished-downloads.dat", Config.DataDir); + if (AppDB.Instance.Downloads.LoadDownloads(out var inProgressDownloads, out var finishedDownloads)) + { + peer.InProgressDownloads = inProgressDownloads; + peer.FinishedDownloads = finishedDownloads; + return; + } + else + { + Log.Debug("Could not load download list"); + } + //peer.InProgressDownloads = TransactedIO.ReadInProgressList("inprogress-downloads.dat", Config.DataDir); + //peer.FinishedDownloads = TransactedIO.ReadFinishedList("finished-downloads.dat", Config.DataDir); } catch (Exception ex) { @@ -290,21 +401,21 @@ namespace XDMApp } } - private void SaveInProgressList() - { - lock (this) - { - TransactedIO.WriteInProgressList(peer.InProgressDownloads, "inprogress-downloads.dat", Config.DataDir); - } - } + //private void SaveInProgressList() + //{ + // lock (this) + // { + // TransactedIO.WriteInProgressList(peer.InProgressDownloads, "inprogress-downloads.dat", Config.DataDir); + // } + //} - private void SaveFinishedList() - { - lock (this) - { - TransactedIO.WriteFinishedList(peer.FinishedDownloads, "finished-downloads.dat", Config.DataDir); - } - } + //private void SaveFinishedList() + //{ + // lock (this) + // { + // TransactedIO.WriteFinishedList(peer.FinishedDownloads, "finished-downloads.dat", Config.DataDir); + // } + //} private void DisableButton(IButton button) { @@ -372,17 +483,18 @@ namespace XDMApp private void DeleteDownloads() { UIActions.DeleteDownloads(peer.IsInProgressViewSelected, - peer, App, inProgress => - { - if (inProgress) - { - SaveInProgressList(); - } - else - { - SaveFinishedList(); - } - }); + peer, App, null); + //inProgress => + //{ + // if (inProgress) + // { + // SaveInProgressList(); + // } + // else + // { + // SaveFinishedList(); + // } + //}); } private void AttachedEventHandler() @@ -425,10 +537,9 @@ namespace XDMApp DeleteDownloads(); }; - peer.OpenFolderButton.Clicked += (a, b) => - { - UIActions.OpenSelectedFolder(peer); - }; + peer.DownloadListDoubleClicked += (a, b) => UIActions.OnDblClick(peer, App); + + peer.OpenFolderButton.Clicked += (a, b) => UIActions.OpenSelectedFolder(peer); peer.OpenFileButton.Clicked += (a, b) => { @@ -466,18 +577,29 @@ namespace XDMApp peer.ClearAllFinishedClicked += (s, e) => { peer.DeleteAllFinishedDownloads(); - SaveFinishedList(); + AppDB.Instance.Downloads.RemoveAllFinished(); + //SaveFinishedList(); }; peer.ImportClicked += (s, e) => { - peer.ImportDownloads(app); + var file = peer.OpenFileDialog(null, "zip", null); + if (!string.IsNullOrEmpty(file) && File.Exists(file)) + { + Log.Debug("Exporting to: " + file); + app.Import(file!); + } LoadDownloadList(); }; peer.ExportClicked += (s, e) => { - peer.ExportDownloads(app); + var file = peer.SaveFileDialog("xdm-download-list.zip", "zip", "All files (*.*)|*.*"); + if (!string.IsNullOrEmpty(file)) + { + Log.Debug("Exporting to: " + file); + app.Export(file!); + } }; peer.HelpClicked += (s, e) => @@ -490,14 +612,21 @@ namespace XDMApp if (App.IsAppUpdateAvailable) { Helpers.OpenBrowser(App.UpdatePage); + return; } - else + if (App.IsComponentUpdateAvailable) { if (peer.Confirm(peer, App.ComponentUpdateText)) { LaunchUpdater(UpdateMode.FFmpegUpdateOnly | UpdateMode.YoutubeDLUpdateOnly); + return; + } + else + { + return; } } + peer.ShowMessageBox(peer, TextResource.GetText("MSG_NO_UPDATE")); }; peer.BrowserMonitoringButtonClicked += (s, e) => @@ -535,24 +664,9 @@ namespace XDMApp ShowQueueWindow(peer); }; - peer.MoveToQueueClicked += (s, e) => + peer.WindowCreated += (s, e) => { - var selectedIds = peer.SelectedInProgressRows?.Select(x => x.DownloadEntry.Id)?.ToArray() ?? new string[0]; - MoveToQueue(selectedIds); - //var queueSelectionDialog = peer.CreateQueueSelectionDialog(); - //queueSelectionDialog.SetData(QueueManager.Queues.Select(q => q.Name), selectedIds); - //queueSelectionDialog.ManageQueuesClicked += (_, _) => - //{ - // ShowQueueWindow(); - //}; - //queueSelectionDialog.QueueSelected += (s, e) => - //{ - // var index = e.SelectedQueueIndex; - // var queueId = QueueManager.Queues[index].ID; - // var downloadIds = e.DownloadIds; - // QueueManager.AddDownloadsToQueue(queueId, downloadIds); - //}; - //queueSelectionDialog.ShowWindow(peer); + this.WindowLoaded?.Invoke(this, EventArgs.Empty); }; AttachContextMenuEvents(); @@ -585,23 +699,30 @@ namespace XDMApp private void AttachContextMenuEvents() { - peer.MenuItemMap["pause"].Clicked += (_, _) => UIActions.StopSelectedDownloads(peer, App); - peer.MenuItemMap["resume"].Clicked += (_, _) => UIActions.ResumeDownloads(peer, App); - peer.MenuItemMap["delete"].Clicked += (_, _) => DeleteDownloads(); - peer.MenuItemMap["saveAs"].Clicked += (_, _) => UIActions.SaveAs(peer, App); - peer.MenuItemMap["refresh"].Clicked += (_, _) => UIActions.RefreshLink(peer, App); - peer.MenuItemMap["showProgress"].Clicked += (_, _) => UIActions.ShowProgressWindow(peer, App); - peer.MenuItemMap["copyURL"].Clicked += (_, _) => UIActions.CopyURL1(peer, App); - peer.MenuItemMap["copyURL1"].Clicked += (_, _) => UIActions.CopyURL2(peer, App); - peer.MenuItemMap["properties"].Clicked += (_, _) => UIActions.ShowSeletectedItemProperties(peer, App); - peer.MenuItemMap["open"].Clicked += (_, _) => UIActions.OpenSelectedFile(peer); - peer.MenuItemMap["openFolder"].Clicked += (_, _) => UIActions.OpenSelectedFolder(peer); - peer.MenuItemMap["deleteDownloads"].Clicked += (_, _) => DeleteDownloads(); - peer.MenuItemMap["copyFile"].Clicked += (_, _) => UIActions.CopyFile(peer); - peer.MenuItemMap["properties1"].Clicked += (_, _) => UIActions.ShowSeletectedItemProperties(peer, App); - peer.MenuItemMap["downloadAgain"].Clicked += (_, _) => UIActions.RestartDownload(peer, App); - peer.MenuItemMap["restart"].Clicked += (_, _) => UIActions.RestartDownload(peer, App); - //peer.MenuItemMap["schedule"].Clicked += (_, _) => UIActions.ScheduleDownload(peer, App); + try + { + peer.MenuItemMap["pause"].Clicked += (_, _) => UIActions.StopSelectedDownloads(peer, App); + peer.MenuItemMap["resume"].Clicked += (_, _) => UIActions.ResumeDownloads(peer, App); + peer.MenuItemMap["delete"].Clicked += (_, _) => DeleteDownloads(); + peer.MenuItemMap["saveAs"].Clicked += (_, _) => UIActions.SaveAs(peer, App); + peer.MenuItemMap["refresh"].Clicked += (_, _) => UIActions.RefreshLink(peer, App); + peer.MenuItemMap["moveToQueue"].Clicked += (_, _) => UIActions.MoveToQueue(peer, this); + peer.MenuItemMap["showProgress"].Clicked += (_, _) => UIActions.ShowProgressWindow(peer, App); + peer.MenuItemMap["copyURL"].Clicked += (_, _) => UIActions.CopyURL1(peer, App); + peer.MenuItemMap["copyURL1"].Clicked += (_, _) => UIActions.CopyURL2(peer, App); + peer.MenuItemMap["properties"].Clicked += (_, _) => UIActions.ShowSeletectedItemProperties(peer, App); + peer.MenuItemMap["open"].Clicked += (_, _) => UIActions.OpenSelectedFile(peer); + peer.MenuItemMap["openFolder"].Clicked += (_, _) => UIActions.OpenSelectedFolder(peer); + peer.MenuItemMap["deleteDownloads"].Clicked += (_, _) => DeleteDownloads(); + peer.MenuItemMap["copyFile"].Clicked += (_, _) => UIActions.CopyFile(peer); + peer.MenuItemMap["properties1"].Clicked += (_, _) => UIActions.ShowSeletectedItemProperties(peer, App); + peer.MenuItemMap["downloadAgain"].Clicked += (_, _) => UIActions.RestartDownload(peer, App); + peer.MenuItemMap["restart"].Clicked += (_, _) => UIActions.RestartDownload(peer, App); + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } } private void InProgressContextMenuOpening() @@ -676,26 +797,22 @@ namespace XDMApp LaunchUpdater(UpdateMode.YoutubeDLUpdateOnly); } - public void MoveToQueue(string[] selectedIds, bool prompt = false, Action? callback = null) + public void ShowDownloadSelectionWindow(FileNameFetchMode mode, IEnumerable downloads) { - if (prompt && !peer.Confirm(peer, "Add to queue?")) + RunOnUiThread(() => { - return; - } - var queueSelectionDialog = peer.CreateQueueSelectionDialog(); - queueSelectionDialog.SetData(QueueManager.Queues.Select(q => q.Name), selectedIds); - queueSelectionDialog.ManageQueuesClicked += (_, _) => - { - ShowQueueWindow(peer); - }; - queueSelectionDialog.QueueSelected += (s, e) => - { - var index = e.SelectedQueueIndex; - var queueId = QueueManager.Queues[index].ID; - var downloadIds = e.DownloadIds; - QueueManager.AddDownloadsToQueue(queueId, downloadIds); - }; - queueSelectionDialog.ShowWindow(peer); + peer.ShowDownloadSelectionWindow(this.App, this, mode, downloads); + }); + } + + public IClipboardMonitor GetClipboardMonitor() + { + return peer.GetClipboardMonitor(); + } + + public void ShowFloatingVideoWidget() + { + peer.ShowFloatingWidget(); } } } diff --git a/app/XDM/XDMApp/CallbackActions.cs b/app/XDM/XDM.App.Core/XDMApp/CallbackActions.cs similarity index 90% rename from app/XDM/XDMApp/CallbackActions.cs rename to app/XDM/XDM.App.Core/XDMApp/CallbackActions.cs index 6ae01c6..930d378 100644 --- a/app/XDM/XDMApp/CallbackActions.cs +++ b/app/XDM/XDM.App.Core/XDMApp/CallbackActions.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using TraceLog; using XDM.Core.Lib.Common; using XDM.Core.Lib.UI; @@ -21,7 +22,8 @@ namespace XDMApp download.Status = DownloadStatus.Stopped; } - public static void DownloadFinished(string id, long finalFileSize, string filePath, IAppWinPeer peer, IApp app) + public static void DownloadFinished(string id, long finalFileSize, string filePath, + IAppWinPeer peer, IApp app, Action callback) { Log.Debug("Final file name: " + filePath); var download = peer.FindInProgressItem(id); @@ -52,6 +54,8 @@ namespace XDMApp Log.Debug("switching to finished listview"); peer.SwitchToFinishedView(); } + + callback.Invoke(); } } } diff --git a/app/XDM/XDMApp/ErrorMessages.cs b/app/XDM/XDM.App.Core/XDMApp/ErrorMessages.cs similarity index 100% rename from app/XDM/XDMApp/ErrorMessages.cs rename to app/XDM/XDM.App.Core/XDMApp/ErrorMessages.cs diff --git a/app/XDM/XDMApp/IconResource.cs b/app/XDM/XDM.App.Core/XDMApp/IconResource.cs similarity index 100% rename from app/XDM/XDMApp/IconResource.cs rename to app/XDM/XDM.App.Core/XDMApp/IconResource.cs diff --git a/app/XDM/XDM.App.Core/XDMApp/ImportExport.cs b/app/XDM/XDM.App.Core/XDMApp/ImportExport.cs new file mode 100644 index 0000000..282e140 --- /dev/null +++ b/app/XDM/XDM.App.Core/XDMApp/ImportExport.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.IO; +#if NET35 +using Ionic.Zip; +#else +using System.IO.Compression; +#endif +using System.Linq; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.DataAccess; + +namespace XDMApp +{ + internal class ImportExport + { + internal static void Import(string path) + { + var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempDir); + +#if NET35 + ZipFile.Read(path).ExtractAll(tempDir); +#else + using FileStream zipToOpen = new(path, FileMode.Open); + using ZipArchive archive = new(zipToOpen, ZipArchiveMode.Read); + archive.ExtractToDirectory(tempDir); +#endif + + AppDB.Instance.Import(Path.Combine(tempDir, "downloads-export.db")); + + foreach (var file in Directory.GetFiles(tempDir, "*.state")) + { + File.Copy(file, Path.Combine(Config.DataDir, Path.GetFileName(file))); + } + + foreach (var file in Directory.GetFiles(tempDir, "*.info")) + { + File.Copy(file, Path.Combine(Config.DataDir, Path.GetFileName(file))); + } + } + + internal static void Export(string path) + { + if (!path.EndsWith(".zip")) + { + path = $"{path}.zip"; + } + var dir = new DirectoryInfo(Config.DataDir); + var filesToAdd = new List(); + var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempDir); + var dbFile = Path.Combine(tempDir, "downloads-export.db"); + AppDB.Instance.Export(dbFile); + filesToAdd.Add(dbFile); + filesToAdd.AddRange(dir.GetFiles("*.state").Select(x => x.FullName)); + filesToAdd.AddRange(dir.GetFiles("*.info").Select(x => x.FullName)); + +#if NET35 + using var zip = new ZipFile(path); + foreach (var file in filesToAdd) + { + zip.AddFile(file); + } + zip.Save(); +#else + using FileStream zipToCreate = new(path, FileMode.Create); + using ZipArchive archive = new(zipToCreate, ZipArchiveMode.Create); + foreach (var file in filesToAdd) + { + archive.CreateEntryFromFile(file, Path.GetFileName(file)); + } +#endif + } + } +} diff --git a/app/XDM/XDMApp/NewDownloadPromptTracker.cs b/app/XDM/XDM.App.Core/XDMApp/NewDownloadPromptTracker.cs similarity index 100% rename from app/XDM/XDMApp/NewDownloadPromptTracker.cs rename to app/XDM/XDM.App.Core/XDMApp/NewDownloadPromptTracker.cs diff --git a/app/XDM/XDMApp/QueueManager.cs b/app/XDM/XDM.App.Core/XDMApp/QueueManager.cs similarity index 100% rename from app/XDM/XDMApp/QueueManager.cs rename to app/XDM/XDM.App.Core/XDMApp/QueueManager.cs diff --git a/app/XDM/XDMApp/QueueWindowManager.cs b/app/XDM/XDM.App.Core/XDMApp/QueueWindowManager.cs similarity index 87% rename from app/XDM/XDMApp/QueueWindowManager.cs rename to app/XDM/XDM.App.Core/XDMApp/QueueWindowManager.cs index e8ba21d..c03beee 100644 --- a/app/XDM/XDMApp/QueueWindowManager.cs +++ b/app/XDM/XDM.App.Core/XDMApp/QueueWindowManager.cs @@ -1,11 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using TraceLog; using XDM.Core.Lib.Common; using XDM.Core.Lib.UI; -using XDMApp; namespace XDMApp { @@ -30,7 +27,6 @@ namespace XDMApp { if (queueWindow != null) { - queueWindow.ShowWindow(window); return; } @@ -51,7 +47,7 @@ namespace XDMApp queueWindow.ShowWindow(window); } - private static void QueueWindow_WindowClosing(object sender, EventArgs e) + private static void QueueWindow_WindowClosing(object? sender, EventArgs e) { queueWindow!.QueuesModified -= QueueWindow_QueuesModified; queueWindow!.QueueStartRequested -= QueueWindow_QueueStartRequested; @@ -59,20 +55,19 @@ namespace XDMApp queueWindow!.WindowClosing -= QueueWindow_WindowClosing; queueWindow = null; app = null; - Log.Debug("QueueWindow_WindowClosing"); } - private static void QueueWindow_QueueStopRequested(object sender, DownloadListEventArgs e) + private static void QueueWindow_QueueStopRequested(object? sender, DownloadListEventArgs e) { app?.StopDownloads(e.Downloads, true); } - private static void QueueWindow_QueueStartRequested(object sender, DownloadListEventArgs e) + private static void QueueWindow_QueueStartRequested(object? sender, DownloadListEventArgs e) { app?.ResumeNonInteractiveDownloads(e.Downloads); } - private static void QueueWindow_QueuesModified(object sender, QueueListEventArgs e) + private static void QueueWindow_QueuesModified(object? sender, QueueListEventArgs e) { OnQueueModified(e.Queues); } diff --git a/app/XDM/XDMApp/RemixIcon.cs b/app/XDM/XDM.App.Core/XDMApp/RemixIcon.cs similarity index 100% rename from app/XDM/XDMApp/RemixIcon.cs rename to app/XDM/XDM.App.Core/XDMApp/RemixIcon.cs diff --git a/app/XDM/XDMApp/Scheduler.cs b/app/XDM/XDM.App.Core/XDMApp/Scheduler.cs similarity index 64% rename from app/XDM/XDMApp/Scheduler.cs rename to app/XDM/XDM.App.Core/XDMApp/Scheduler.cs index b092bdb..ab544b7 100644 --- a/app/XDM/XDMApp/Scheduler.cs +++ b/app/XDM/XDM.App.Core/XDMApp/Scheduler.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading; using TraceLog; using XDM.Core.Lib.Common; +using XDM.Core.Lib.DataAccess; namespace XDMApp { @@ -11,19 +12,19 @@ namespace XDMApp private Timer? timer; private readonly IApp app; private HashSet activeSchedules; - private Action callback; + //private Action callback; public Scheduler(IApp app) { this.app = app; this.activeSchedules = new HashSet(); - this.callback = new Action(() => - { - foreach (var queue in QueueManager.Queues) - { - ProcessScheduledItem(queue); - } - }); + //this.callback = new Action(() => + //{ + // foreach (var queue in QueueManager.Queues) + // { + // ProcessScheduledItem(queue); + // } + //}); } public void Start() @@ -43,14 +44,27 @@ namespace XDMApp private void StartOrStopItem(DownloadQueue item) { - if (item.Schedule!.Value.EndTime == DateTime.Now.TimeOfDay) + var h1 = DateTime.Now.TimeOfDay.Hours; + var m1 = DateTime.Now.TimeOfDay.Minutes; + var h2 = item.Schedule!.Value.EndTime.Hours; + var m2 = item.Schedule!.Value.EndTime.Minutes; + var h3 = item.Schedule!.Value.StartTime.Hours; + var m3 = item.Schedule!.Value.StartTime.Minutes; + + //Log.Debug("DateTime.Now.TimeOfDay: " + DateTime.Now.TimeOfDay + // + "\nitem.Schedule!.Value.StartTime: " + // + item.Schedule!.Value.StartTime + // + "\nitem.Schedule!.Value.EndTime: " + // + item.Schedule!.Value.EndTime); + + if (h1 == h2 && m1 == m2) { app.StopDownloads(new List(item.DownloadIds), true); this.activeSchedules.Remove(item.ID); return; } - if (item.Schedule.Value.StartTime == DateTime.Now.TimeOfDay) + if (h1 == h3 && m1 == m3) { if (this.activeSchedules.Contains(item.ID)) { @@ -60,7 +74,7 @@ namespace XDMApp var dict = new Dictionary(); foreach (var id in item.DownloadIds) { - var ent = app.AppUI.GetInProgressDownloadEntry(id); + var ent = AppDB.Instance.Downloads.GetDownloadById(id);// app.AppUI.GetInProgressDownloadEntry(id); if (ent != null) { dict[id] = ent; @@ -74,7 +88,7 @@ namespace XDMApp { if (queue.Schedule != null) { - Log.Debug("Queue " + queue + " has schedule: " + queue.Schedule.HasValue); + //Log.Debug("Queue " + queue + " has schedule: " + queue.Schedule.HasValue); var day = queue.Schedule.Value.Days; if ((DateTime.Now.DayOfWeek == DayOfWeek.Sunday && HasFlag(day, WeekDays.Sun)) || @@ -97,7 +111,11 @@ namespace XDMApp private void OnTimer(object? state) { - app.AppUI.RunOnUiThread(callback); + foreach (var queue in QueueManager.Queues) + { + ProcessScheduledItem(queue); + } + //app.AppUI.RunOnUiThread(callback); } } } diff --git a/app/XDM/XDMApp/UIActions.cs b/app/XDM/XDM.App.Core/XDMApp/UIActions.cs similarity index 76% rename from app/XDM/XDMApp/UIActions.cs rename to app/XDM/XDM.App.Core/XDMApp/UIActions.cs index 14d4032..d3b0519 100644 --- a/app/XDM/XDMApp/UIActions.cs +++ b/app/XDM/XDM.App.Core/XDMApp/UIActions.cs @@ -6,6 +6,7 @@ using System.Linq; using TraceLog; using Translations; using XDM.Core.Lib.Common; +using XDM.Core.Lib.DataAccess; using XDM.Core.Lib.Downloader; using XDM.Core.Lib.UI; using XDM.Core.Lib.Util; @@ -14,7 +15,7 @@ namespace XDMApp { internal static class UIActions { - public static void DeleteDownloads(bool inProgressOnly, IAppWinPeer peer, IApp app, Action callback) + public static void DeleteDownloads(bool inProgressOnly, IAppWinPeer peer, IApp app, Action? callback) { if (inProgressOnly) { @@ -28,9 +29,11 @@ namespace XDMApp { peer.Delete(item); app.RemoveDownload(item.DownloadEntry, false); + AppDB.Instance.Downloads.RemoveDownloadById(item.DownloadEntry.Id); + } } - callback.Invoke(true); + callback?.Invoke(true); } } else @@ -44,8 +47,28 @@ namespace XDMApp { app.RemoveDownload(selectedRow.DownloadEntry, deleteFiles); peer.Delete(selectedRow); + AppDB.Instance.Downloads.RemoveDownloadById(selectedRow.DownloadEntry.Id); } - callback.Invoke(false); + callback?.Invoke(false); + } + } + } + + public static void OnDblClick(IAppWinPeer peer, IApp app) + { + if (peer.IsInProgressViewSelected) + { + ShowSeletectedItemProperties(peer, app); + } + else + { + if (Config.Instance.DoubleClickOpenFile) + { + OpenSelectedFile(peer); + } + else + { + OpenSelectedFolder(peer); } } } @@ -108,12 +131,40 @@ namespace XDMApp app.ResumeDownload(idDict); } + public static void MoveToQueue(IAppWinPeer peer, IAppUI appUI) + { + var selectedIds = peer.SelectedInProgressRows?.Select(x => x.DownloadEntry.Id)?.ToArray() ?? new string[0]; + MoveToQueue(peer, appUI, selectedIds); + } + + public static void MoveToQueue(IAppWinPeer peer, IAppUI appUI, string[] selectedIds, bool prompt = false, Action? callback = null) + { + if (prompt && !peer.Confirm(peer, "Add to queue?")) + { + return; + } + using var queueSelectionDialog = peer.CreateQueueSelectionDialog(); + queueSelectionDialog.SetData(QueueManager.Queues.Select(q => q.Name), QueueManager.Queues.Select(q => q.ID), selectedIds); + queueSelectionDialog.ManageQueuesClicked += (_, _) => + { + appUI.ShowQueueWindow(peer); + }; + queueSelectionDialog.QueueSelected += (s, e) => + { + //var index = e.SelectedQueueIndex; + //var queueId = QueueManager.Queues[index].ID; + var downloadIds = e.DownloadIds; + QueueManager.AddDownloadsToQueue(e.SelectedQueueId, downloadIds.ToArray()); + }; + queueSelectionDialog.ShowWindow(peer); + } + public static void SaveAs(IAppWinPeer peer, IApp app) { var rows = peer.SelectedInProgressRows; if (rows == null || rows.Count < 1) return; var item = rows[0].DownloadEntry; - var file = peer.SaveFileDialog(Path.Combine(item.TargetDir ?? Helpers.GetDownloadFolderByFileName(item.Name), item.Name)); + var file = peer.SaveFileDialog(Path.Combine(item.TargetDir ?? Helpers.GetDownloadFolderByFileName(item.Name), item.Name), null, null); if (file == null) { return; @@ -182,12 +233,10 @@ namespace XDMApp ShortState? state = null; try { - var stateFile = Path.Combine(Config.DataDir, ent.Id + ".state"); - var bytes = File.ReadAllBytes(stateFile); switch (ent.DownloadType) { case "Http": - var s = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes(bytes); + var s = DownloadStateStore.LoadSingleSourceHTTPDownloaderState(ent.Id); state = new() { Headers = s.Headers, @@ -195,7 +244,7 @@ namespace XDMApp }; break; case "Dash": - var d = DownloadStateStore.DualSourceHTTPDownloaderStateFromBytes(bytes); + var d = DownloadStateStore.LoadDualSourceHTTPDownloaderState(ent.Id); state = new() { Headers1 = d.Headers1, @@ -205,7 +254,7 @@ namespace XDMApp }; break; case "Hls": - var h = DownloadStateStore.MultiSourceHLSDownloadStateFromBytes(bytes); + var h = DownloadStateStore.LoadMultiSourceHLSDownloadState(ent.Id); state = new() { Headers = h.Headers, @@ -213,7 +262,7 @@ namespace XDMApp }; break; case "Mpd-Dash": - var m = DownloadStateStore.MultiSourceDASHDownloadStateFromBytes(bytes); + var m = DownloadStateStore.LoadMultiSourceDASHDownloadState(ent.Id); state = new() { Headers = m.Headers, @@ -221,13 +270,6 @@ namespace XDMApp }; break; } - - state = JsonConvert.DeserializeObject( - File.ReadAllText(stateFile), - new JsonSerializerSettings - { - MissingMemberHandling = MissingMemberHandling.Ignore, - }); } catch { } peer.ShowPropertiesDialog(ent, state); diff --git a/app/XDM/XDMApp/XDMApp.cs b/app/XDM/XDM.App.Core/XDMApp/XDMApp.cs similarity index 71% rename from app/XDM/XDMApp/XDMApp.cs rename to app/XDM/XDM.App.Core/XDMApp/XDMApp.cs index 5cafcd2..8d7a0d9 100644 --- a/app/XDM/XDMApp/XDMApp.cs +++ b/app/XDM/XDM.App.Core/XDMApp/XDMApp.cs @@ -18,6 +18,7 @@ using XDM.Core.Lib.Downloader.Progressive.SingleHttp; using XDM.Core.Lib.Downloader.Adaptive.Hls; using XDM.Core.Lib.Downloader.Adaptive.Dash; using XDM.Core.Lib.Downloader.Progressive; +using XDM.Core.Lib.DataAccess; #if !NET5_0_OR_GREATER using NetFX.Polyfill; @@ -44,12 +45,13 @@ namespace XDMApp private bool isClipboardMonitorActive = false; private string lastClipboardText; private Timer awakePingTimer; - private System.Threading.Timer UpdateCheckTimer; + private readonly System.Threading.Timer UpdateCheckTimer; public IList? Updates { get; private set; } public bool ComponentsInstalled { get; private set; } - public bool IsAppUpdateAvailable { get => Updates?.Any(u => !u.IsExternal) ?? false; } - public string ComponentUpdateText { get => GetUpdateText(); } + public bool IsAppUpdateAvailable => Updates?.Any(u => !u.IsExternal) ?? false; + public bool IsComponentUpdateAvailable => Updates?.Any(u => u.IsExternal) ?? false; + public string ComponentUpdateText => GetUpdateText(); public int ActiveDownloadCount { get => liveDownloads.Count + queuedDownloads.Count; } @@ -67,10 +69,11 @@ namespace XDMApp public XDMApp() { - var configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".xdman"); - Directory.CreateDirectory(configPath); - Config.DataDir = configPath; - Config.LoadConfig(); + //var configPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".xdman"); + //Directory.CreateDirectory(configPath); + //Config.DataDir = configPath; + //Config.LoadConfig(); + //TextResource.Load(Config.Instance.Language); awakePingTimer = new Timer(60000) { @@ -78,21 +81,30 @@ namespace XDMApp }; awakePingTimer.Elapsed += (a, b) => Helpers.SendKeepAlivePing(); - //UpdateCheckTimer = new System.Threading.Timer( - // callback: a => CheckForUpdate(), - // state: null, - // dueTime: TimeSpan.FromSeconds(5), - // period: TimeSpan.FromHours(3)); + UpdateCheckTimer = new System.Threading.Timer( + callback: a => CheckForUpdate(), + state: null, + dueTime: TimeSpan.FromSeconds(5), + period: TimeSpan.FromHours(3)); - QueueManager.Load(); + try + { + QueueManager.Load(); + } + catch (Exception ex) + { + Log.Debug(ex, ex.ToString()); + } } public void StartClipboardMonitor() { + Log.Debug("StartClipboardMonitor"); if (isClipboardMonitorActive) return; - if (Config.Instance.MonitorClipboard && AppUI is IClipboardMonitor cm) + var cm = AppUI.GetClipboardMonitor(); + if (Config.Instance.MonitorClipboard) { - cm?.StartClipboardMonitoring(); + cm.StartClipboardMonitoring(); isClipboardMonitorActive = true; cm.ClipboardChanged += Cm_ClipboardChanged; } @@ -101,12 +113,10 @@ namespace XDMApp public void StopClipboardMonitor() { if (!isClipboardMonitorActive) return; - if (AppUI is IClipboardMonitor cm) - { - cm?.StopClipboardMonitoring(); - isClipboardMonitorActive = false; - cm.ClipboardChanged -= Cm_ClipboardChanged; - } + var cm = AppUI.GetClipboardMonitor(); + cm.StopClipboardMonitoring(); + isClipboardMonitorActive = false; + cm.ClipboardChanged -= Cm_ClipboardChanged; } public void StartNativeMessagingHost() @@ -115,6 +125,68 @@ namespace XDMApp BrowserMonitor.RunHttpIpcHandler(this); } + public void SubmitDownload(object downloadInfo, + string fileName, + FileNameFetchMode fileNameFetchMode, + string? targetFolder, + bool startImmediately, + AuthenticationInfo? authentication, + ProxyInfo? proxyInfo, + bool enableSpeedLimit, + int speedLimit, + string? queueId, + bool convertToMp3) + { + + switch (downloadInfo) + { + case SingleSourceHTTPDownloadInfo info: + this.StartDownload( + info, + fileName, + fileNameFetchMode, + targetFolder, + startImmediately, + authentication, proxyInfo ?? Config.Instance.Proxy, + enableSpeedLimit ? speedLimit : 0, queueId, convertToMp3 + ); + break; + case DualSourceHTTPDownloadInfo info: + this.StartDownload( + info, + fileName, + fileNameFetchMode, + targetFolder, + startImmediately, + authentication, proxyInfo ?? Config.Instance.Proxy, + enableSpeedLimit ? speedLimit : 0, queueId + ); + break; + case MultiSourceHLSDownloadInfo info: + this.StartDownload( + info, + fileName, + fileNameFetchMode, + targetFolder, + startImmediately, + authentication, proxyInfo ?? Config.Instance.Proxy, + enableSpeedLimit ? speedLimit : 0, queueId + ); + break; + case MultiSourceDASHDownloadInfo info: + this.StartDownload( + info, + fileName, + fileNameFetchMode, + targetFolder, + startImmediately, + authentication, proxyInfo ?? Config.Instance.Proxy, + enableSpeedLimit ? speedLimit : 0, queueId + ); + break; + } + } + public string StartDownload(SingleSourceHTTPDownloadInfo info, string fileName, FileNameFetchMode fileNameFetchMode, @@ -123,10 +195,13 @@ namespace XDMApp AuthenticationInfo? authentication, ProxyInfo? proxyInfo, int maxSpeedLimit, - string? queueId) + string? queueId, + bool convertToMp3) { + Log.Debug($"Starting download: {fileName} {fileNameFetchMode} {convertToMp3}"); var http = new SingleSourceHTTPDownloader(info, authentication: authentication, - proxy: proxyInfo, speedLimit: maxSpeedLimit); + proxy: proxyInfo, speedLimit: maxSpeedLimit, mediaProcessor: new FFmpegMediaProcessor(), + convertToMp3: convertToMp3); if (!string.IsNullOrEmpty(queueId)) { QueueManager.AddDownloadsToQueue(queueId!, new string[] { http.Id }); @@ -243,6 +318,7 @@ namespace XDMApp download.Probed += HandleProbeResult; download.Finished += DownloadFinished; download.ProgressChanged += DownloadProgressChanged; + download.AssembingProgressChanged += AssembleProgressChanged; download.Cancelled += DownloadCancelled; download.Failed += DownloadFailed; @@ -252,8 +328,8 @@ namespace XDMApp var prgWin = CreateProgressWindow(download); activeProgressWindows[download.Id] = prgWin; prgWin.FileNameText = download.TargetFileName; - prgWin.FileSizeText = string.Empty; - activeProgressWindows[download.Id] = prgWin; + prgWin.FileSizeText = $"{TextResource.GetText("STAT_DOWNLOADING")} ..."; + prgWin.UrlText = download.PrimaryUrl?.ToString() ?? string.Empty; prgWin.ShowProgressWindow(); } @@ -265,6 +341,26 @@ namespace XDMApp } } + public void AddBatchLinks(List messages) + { + var list = new List(messages.Count); + foreach (var message in messages) + { + var url = message.Url; + if (string.IsNullOrEmpty(url)) continue; + var file = Helpers.SanitizeFileName(message.File ?? Helpers.GetFileName(new Uri(message.Url))); + var si = new SingleSourceHTTPDownloadInfo + { + Uri = url, + File = file, + Headers = message?.RequestHeaders, + Cookies = message?.Cookies + }; + list.Add(si); + } + AppUI.ShowDownloadSelectionWindow(FileNameFetchMode.FileNameAndExtension, list); + } + public void AddDownload(Message message) { if (refreshLinkCandidate != null && IsMatchingSingleSourceLink(message)) @@ -290,7 +386,7 @@ namespace XDMApp true, null, Config.Instance.Proxy, - GetSpeedLimit(), null); + GetSpeedLimit(), null, false); } else { @@ -307,6 +403,7 @@ namespace XDMApp { var name = string.Empty; var size = 0L; + var contentType = string.Empty; var valid = false; if (ytVideoList.ContainsKey(videoId)) { @@ -318,6 +415,7 @@ namespace XDMApp } name = ytVideoList[videoId].Info.File; size = ytVideoList[videoId].DisplayInfo.Size; + contentType = ytVideoList[videoId].Info.ContentType1; valid = true; } else if (videoList.ContainsKey(videoId)) @@ -329,6 +427,7 @@ namespace XDMApp } name = videoList[videoId].Info.File; size = videoList[videoId].DisplayInfo.Size; + contentType = videoList[videoId].Info.ContentType; valid = true; } else if (hlsVideoList.ContainsKey(videoId)) @@ -336,11 +435,20 @@ namespace XDMApp Log.Debug("Download HLS video added with id: " + videoId); name = hlsVideoList[videoId].Info.File; valid = true; + try + { + contentType = hlsVideoList[videoId].Info.ContentType; + } + catch (Exception ex) + { + Log.Debug(ex, ex.Message); + } } else if (dashVideoList.ContainsKey(videoId)) { Log.Debug("Download DASH video added with id: " + videoId); name = dashVideoList[videoId].Info.File; + contentType = dashVideoList[videoId].Info.ContentType; valid = true; } if (valid) @@ -354,7 +462,7 @@ namespace XDMApp } else { - AppUI.ShowVideoDownloadDialog(videoId, name, size); + AppUI.ShowVideoDownloadDialog(videoId, name, size, contentType); } } } @@ -409,30 +517,42 @@ namespace XDMApp public void AddVideoNotification(StreamingVideoDisplayInfo displayInfo, DualSourceHTTPDownloadInfo info) { - ytVideoList.Add(Guid.NewGuid().ToString(), (info, displayInfo)); - nativeMessaging.BroadcastConfig(); + lock (this) + { + ytVideoList.Add(Guid.NewGuid().ToString(), (info, displayInfo)); + nativeMessaging.BroadcastConfig(); + } } public void AddVideoNotification(StreamingVideoDisplayInfo displayInfo, SingleSourceHTTPDownloadInfo info) { - videoList.Add(Guid.NewGuid().ToString(), (info, displayInfo)); - nativeMessaging.BroadcastConfig(); + lock (this) + { + videoList.Add(Guid.NewGuid().ToString(), (info, displayInfo)); + nativeMessaging.BroadcastConfig(); + } } public void AddVideoNotification(StreamingVideoDisplayInfo displayInfo, MultiSourceHLSDownloadInfo info) { - var id = Guid.NewGuid().ToString(); - Log.Debug("HLS video added with id: " + id); - hlsVideoList.Add(id, (info, displayInfo)); - nativeMessaging.BroadcastConfig(); + lock (this) + { + var id = Guid.NewGuid().ToString(); + Log.Debug("HLS video added with id: " + id); + hlsVideoList.Add(id, (info, displayInfo)); + nativeMessaging.BroadcastConfig(); + } } public void AddVideoNotification(StreamingVideoDisplayInfo displayInfo, MultiSourceDASHDownloadInfo info) { - var id = Guid.NewGuid().ToString(); - Log.Debug("DASH video added with id: " + id); - dashVideoList.Add(id, (info, displayInfo)); - nativeMessaging.BroadcastConfig(); + lock (this) + { + var id = Guid.NewGuid().ToString(); + Log.Debug("DASH video added with id: " + id); + dashVideoList.Add(id, (info, displayInfo)); + nativeMessaging.BroadcastConfig(); + } } //public void DeleteDownloads(List list) @@ -467,40 +587,41 @@ namespace XDMApp // } //} - public List<(string ID, string File, string DisplayName)> GetVideoList(bool encode = true) + public List<(string ID, string File, string DisplayName, DateTime Time)> GetVideoList(bool encode = true) { - var list = new List<(string ID, string File, string DisplayName)>(); - foreach (var e in ytVideoList) + lock (this) { - list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality)); + var list = new List<(string ID, string File, string DisplayName, DateTime Time)>(); + foreach (var e in ytVideoList) + { + list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality, e.Value.DisplayInfo.CreationTime)); + } + foreach (var e in videoList) + { + list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality, e.Value.DisplayInfo.CreationTime)); + } + foreach (var e in hlsVideoList) + { + list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality, e.Value.DisplayInfo.CreationTime)); + } + foreach (var e in dashVideoList) + { + list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality, e.Value.DisplayInfo.CreationTime)); + } + list.Sort((a, b) => a.Time.CompareTo(b.Time)); + return list; } - foreach (var e in videoList) - { - list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality)); - } - foreach (var e in hlsVideoList) - { - list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality)); - } - foreach (var e in dashVideoList) - { - list.Add((e.Key, encode ? EncodeToCharCode(e.Value.Info.File) : e.Value.Info.File, e.Value.DisplayInfo.Quality)); - } - return list; } public void ResumeNonInteractiveDownloads(IEnumerable idList) { foreach (var id in idList) { - AppUI.RunOnUiThread(() => + var entry = AppDB.Instance.Downloads.GetDownloadById(id);// AppUI.GetInProgressDownloadEntry(id); + if (entry != null) { - var entry = AppUI.GetInProgressDownloadEntry(id); - if (entry != null) - { - ResumeDownload(new Dictionary { [id] = entry }, true); - } - }); + ResumeDownload(new Dictionary { [id] = entry }, true); + } } } @@ -513,59 +634,69 @@ namespace XDMApp awakePingTimer.Start(); } - AppUI.RunOnUiThread((Action)(() => + foreach (var item in list) { - foreach (var item in list) + if (liveDownloads.ContainsKey(item.Key) || queuedDownloads.ContainsKey(item.Key)) return; + if (liveDownloads.Count >= Config.Instance.MaxParallelDownloads) { - if (liveDownloads.ContainsKey(item.Key) || queuedDownloads.ContainsKey(item.Key)) return; - if (liveDownloads.Count >= Config.Instance.MaxParallelDownloads) + queuedDownloads.Add(item.Key, nonInteractive); + AppUI.RunOnUiThread(() => { - queuedDownloads.Add(item.Key, nonInteractive); AppUI.SetDownloadStatusWaiting(item.Key); Log.Debug("Setting status waiting..."); - continue; - } - IBaseDownloader download = null; - switch (item.Value.DownloadType) - { - case "Http": - download = new SingleSourceHTTPDownloader((string)item.Key); - break; - case "Dash": - download = new DualSourceHTTPDownloader((string)item.Key, - mediaProcessor: new FFmpegMediaProcessor()); - break; - case "Hls": - download = new MultiSourceHLSDownloader(item.Key, - mediaProcessor: new FFmpegMediaProcessor()); - break; - case "Mpd-Dash": - download = new MultiSourceDASHDownloader(item.Key, - mediaProcessor: new FFmpegMediaProcessor()); - break; - } - download.Started += HandleDownloadStart; - download.Probed += HandleProbeResult; - download.Finished += DownloadFinished; - download.ProgressChanged += DownloadProgressChanged; - download.Cancelled += DownloadCancelled; - download.Failed += DownloadFailed; - download.SetTargetDirectory(item.Value.TargetDir); - download.SetFileName(item.Value.Name, item.Value.FileNameFetchMode); - liveDownloads[item.Key] = (Downloader: download, NonInteractive: nonInteractive); - liveDownloads[item.Key].Downloader.Resume(); + }); + continue; + } + IBaseDownloader download = null; + switch (item.Value.DownloadType) + { + case "Http": + download = new SingleSourceHTTPDownloader((string)item.Key, + mediaProcessor: new FFmpegMediaProcessor()); + break; + case "Dash": + download = new DualSourceHTTPDownloader((string)item.Key, + mediaProcessor: new FFmpegMediaProcessor()); + break; + case "Hls": + download = new MultiSourceHLSDownloader(item.Key, + mediaProcessor: new FFmpegMediaProcessor()); + break; + case "Mpd-Dash": + download = new MultiSourceDASHDownloader(item.Key, + mediaProcessor: new FFmpegMediaProcessor()); + break; + } + download.Started += HandleDownloadStart; + download.Probed += HandleProbeResult; + download.Finished += DownloadFinished; + download.ProgressChanged += DownloadProgressChanged; + download.AssembingProgressChanged += AssembleProgressChanged; + download.Cancelled += DownloadCancelled; + download.Failed += DownloadFailed; + download.SetTargetDirectory(item.Value.TargetDir); + download.SetFileName(item.Value.Name, item.Value.FileNameFetchMode); + liveDownloads[item.Key] = (Downloader: download, NonInteractive: nonInteractive); - var showProgressWindow = Config.Instance.ShowProgressWindow; - if (showProgressWindow && !nonInteractive) + var showProgressWindow = Config.Instance.ShowProgressWindow; + if (showProgressWindow && !nonInteractive) + { + var prgWin = GetProgressWindow(download);// CreateOrGetProgressWindow(download); + AppUI.RunOnUiThread(() => { - var prgWin = CreateOrGetProgressWindow(download); + if (prgWin == null) + { + prgWin = CreateProgressWindow(download); + activeProgressWindows[download.Id] = prgWin; + } prgWin.FileNameText = download.TargetFileName; prgWin.FileSizeText = $"{TextResource.GetText("STAT_DOWNLOADING")} ..."; prgWin.DownloadStarted(); prgWin.ShowProgressWindow(); - } + }); } - })); + liveDownloads[item.Key].Downloader.Resume(); + } } public void ShowProgressWindow(string downloadId) @@ -599,26 +730,46 @@ namespace XDMApp public void StartVideoDownload(string videoId, string name, - string folder, + string? folder, bool startImmediately, AuthenticationInfo? authentication, ProxyInfo? proxyInfo, int maxSpeedLimit, - string? queueId) + string? queueId, + bool convertToMp3 = false //only applicable for dual source http downloads + ) { //IBaseDownloader downloader = null; if (ytVideoList.ContainsKey(videoId)) { StartDownload(ytVideoList[videoId].Info, name, FileNameFetchMode.ExtensionOnly, - folder, startImmediately, authentication, proxyInfo, GetSpeedLimit(), queueId); + folder, startImmediately, authentication, proxyInfo, GetSpeedLimit(), queueId); + //if (convertToMp3) + //{ + // var info = new SingleSourceHTTPDownloadInfo + // { + // Uri = ytVideoList[videoId].Info.Uri2, + // Headers = ytVideoList[videoId].Info.Headers2, + // Cookies = ytVideoList[videoId].Info.Cookies2, + // ContentLength = ytVideoList[videoId].Info.ContentLength2, + // File = name + // }; + // StartDownload(info, name, FileNameFetchMode.None, + // folder, startImmediately, authentication, proxyInfo, GetSpeedLimit(), queueId); + //} + //else + //{ + // StartDownload(ytVideoList[videoId].Info, name, FileNameFetchMode.ExtensionOnly, + // folder, startImmediately, authentication, proxyInfo, GetSpeedLimit(), queueId); + //} //downloader = // new DualSourceHTTPDownloader(ytVideoList[videoId].Info, // mediaProcessor: new FFmpegMediaProcessor()); } else if (videoList.ContainsKey(videoId)) { - StartDownload(videoList[videoId].Info, name, FileNameFetchMode.ExtensionOnly, - folder, startImmediately, authentication, proxyInfo, GetSpeedLimit(), queueId); + StartDownload(videoList[videoId].Info, name, convertToMp3 ? FileNameFetchMode.None : FileNameFetchMode.ExtensionOnly, + folder, startImmediately, authentication, proxyInfo, GetSpeedLimit(), queueId, convertToMp3); //downloader = new SingleSourceHTTPDownloader(videoList[videoId].Info); } else if (hlsVideoList.ContainsKey(videoId)) @@ -648,33 +799,31 @@ namespace XDMApp public void StopDownloads(IEnumerable list, bool closeProgressWindow = false) { - AppUI.RunOnUiThread(() => + var ids = new List(list); + foreach (var id in ids) { - foreach (var id in list) + (var http, _) = liveDownloads.GetValueOrDefault(id); + if (http != null) { - (var http, var nonInteractive) = liveDownloads.GetValueOrDefault(id); - if (http != null) + http.Stop(); + liveDownloads.Remove(id); + } + else + { + if (queuedDownloads.ContainsKey(id)) { - http.Stop(); - liveDownloads.Remove(id); - } - else - { - if (queuedDownloads.ContainsKey(id)) - { - queuedDownloads.Remove(id); - } + queuedDownloads.Remove(id); } + } - if (activeProgressWindows.ContainsKey(id) && closeProgressWindow) - { - var prgWin = activeProgressWindows[id]; - activeProgressWindows.Remove(id); - prgWin.Destroy(); - Log.Debug("Progress window removed"); - } - }; - }); + if (activeProgressWindows.ContainsKey(id) && closeProgressWindow) + { + var prgWin = activeProgressWindows[id]; + activeProgressWindows.Remove(id); + prgWin.DestroyWindow(); + Log.Debug("Progress window removed"); + } + }; } void DownloadProgressChanged(object source, ProgressResultEventArgs args) @@ -694,6 +843,23 @@ namespace XDMApp } } + void AssembleProgressChanged(object source, ProgressResultEventArgs args) + { + lock (this) + { + var http = source as IBaseDownloader; + //AppUI.UpdateProgress(http.Id, args.Progress, args.DownloadSpeed, args.Eta); + if (activeProgressWindows.ContainsKey(http.Id)) + { + var prgWin = activeProgressWindows[http.Id]; + prgWin.DownloadProgress = args.Progress; + prgWin.FileSizeText = $"{TextResource.GetText("STAT_ASSEMBLING")} {Helpers.FormatSize(args.Downloaded)} / {Helpers.FormatSize(http.FileSize)}"; + prgWin.DownloadSpeedText = "---"; + prgWin.DownloadETAText = "---"; + } + } + } + void DownloadFinished(object source, EventArgs args) { lock (this) @@ -702,17 +868,27 @@ namespace XDMApp DetachEventHandlers(http); AppUI.DownloadFinished(http.Id, http.FileSize < 0 ? new FileInfo(http.TargetFile).Length : http.FileSize, http.TargetFile); + var showCompleteDialog = false; + if (liveDownloads.ContainsKey(http.Id)) + { + (_, bool nonInteractive) = liveDownloads[http.Id]; + liveDownloads.Remove(http.Id); + + if (!nonInteractive && Config.Instance.ShowDownloadCompleteWindow) + { + showCompleteDialog = true; + } + } + if (activeProgressWindows.ContainsKey(http.Id)) { var prgWin = activeProgressWindows[http.Id]; activeProgressWindows.Remove(http.Id); - prgWin.Destroy(); + prgWin.DownloadId = null; + prgWin.DestroyWindow(); } - (_, bool nonInteractive) = liveDownloads[http.Id]; - liveDownloads.Remove(http.Id); - - if (!nonInteractive && Config.Instance.ShowDownloadCompleteWindow) + if (showCompleteDialog) { AppUI.ShowDownloadCompleteDialog(http.TargetFileName, Path.GetDirectoryName(http.TargetFile)); } @@ -732,6 +908,7 @@ namespace XDMApp { lock (this) { + Log.Debug("Download failed: " + args.ErrorCode); var http = source as IBaseDownloader; DetachEventHandlers(http); liveDownloads.Remove(http.Id); @@ -755,6 +932,7 @@ namespace XDMApp { lock (this) { + Log.Debug("Download cancelled"); var http = source as IBaseDownloader; DetachEventHandlers(http); liveDownloads.Remove(http.Id); @@ -850,6 +1028,18 @@ namespace XDMApp return sb.ToString(); } + private IProgressWindow? GetProgressWindow(IBaseDownloader downloader) + { + IProgressWindow? prgWin = null; +#pragma warning disable CS8604 // Possible null reference argument. + if (activeProgressWindows.ContainsKey(downloader.Id)) +#pragma warning restore CS8604 // Possible null reference argument. + { + prgWin = activeProgressWindows[downloader.Id]; + } + return prgWin; + } + private IProgressWindow CreateOrGetProgressWindow(IBaseDownloader downloader) { IProgressWindow prgWin = null; @@ -860,7 +1050,7 @@ namespace XDMApp else { prgWin = CreateProgressWindow(downloader); - prgWin.UrlText = AppUI.GetInProgressDownloadEntry(downloader.Id)?.PrimaryUrl; + //prgWin.UrlText = AppUI.GetInProgressDownloadEntry(downloader.Id)?.PrimaryUrl; activeProgressWindows[downloader.Id] = prgWin; } //var prgWin = activeProgressWindows.ContainsKey(item.Key) ? activeProgressWindows[item.Key] @@ -874,6 +1064,9 @@ namespace XDMApp { var prgWin = AppUI.CreateProgressWindow(downloader.Id); prgWin.UrlText = AppUI.GetInProgressDownloadEntry(downloader.Id)?.PrimaryUrl; + prgWin.DownloadSpeedText = "---"; + prgWin.DownloadETAText = "---"; + prgWin.FileSizeText = "---"; return prgWin; } @@ -897,14 +1090,11 @@ namespace XDMApp { var kv = queuedDownloads.First(); queuedDownloads.Remove(kv.Key); - AppUI.RunOnUiThread(() => + var entry = AppDB.Instance.Downloads.GetDownloadById(kv.Key);// AppUI.GetInProgressDownloadEntry(kv.Key); + if (entry != null) { - var entry = AppUI.GetInProgressDownloadEntry(kv.Key); - if (entry != null) - { - ResumeDownload(new Dictionary { [kv.Key] = entry }, kv.Value); - } - }); + ResumeDownload(new Dictionary { [kv.Key] = entry }, kv.Value); + } } else { @@ -1023,6 +1213,7 @@ namespace XDMApp download.Probed -= HandleProbeResult; download.Finished -= DownloadFinished; download.ProgressChanged -= DownloadProgressChanged; + download.AssembingProgressChanged += AssembleProgressChanged; download.Cancelled -= DownloadCancelled; download.Failed -= DownloadFailed; } @@ -1042,9 +1233,9 @@ namespace XDMApp nativeMessaging.BroadcastConfig(); } - private void Cm_ClipboardChanged(object sender, EventArgs e) + private void Cm_ClipboardChanged(object? sender, EventArgs e) { - var text = ((IClipboardMonitor)AppUI).GetClipboardText(); + var text = AppUI.GetClipboardMonitor().GetClipboardText(); if (!string.IsNullOrEmpty(text) && Helpers.IsUriValid(text) && text != lastClipboardText) { lastClipboardText = text; @@ -1070,7 +1261,9 @@ namespace XDMApp { if (activeProgressWindows.ContainsKey(id)) { + var prgWin = activeProgressWindows[id]; activeProgressWindows.Remove(id); + prgWin.DestroyWindow(); } } @@ -1119,12 +1312,10 @@ namespace XDMApp if (entry == null) return; string? tempDir = null; var validEntry = false; - var stateFile = Path.Combine(Config.DataDir, entry.Id + ".state"); - var bytes = File.ReadAllBytes(stateFile); switch (entry.DownloadType) { case "Http": - var h1 = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes(bytes); + var h1 = DownloadStateStore.LoadSingleSourceHTTPDownloaderState(entry.Id); if (h1 != null) { tempDir = h1.TempDir; @@ -1132,7 +1323,7 @@ namespace XDMApp } break; case "Dash": - var h2 = DownloadStateStore.DualSourceHTTPDownloaderStateFromBytes(bytes); + var h2 = DownloadStateStore.LoadDualSourceHTTPDownloaderState(entry.Id); if (h2 != null) { tempDir = h2.TempDir; @@ -1140,7 +1331,7 @@ namespace XDMApp } break; case "Hls": - var hls = DownloadStateStore.MultiSourceHLSDownloadStateFromBytes(bytes); + var hls = DownloadStateStore.LoadMultiSourceHLSDownloadState(entry.Id); if (hls != null) { tempDir = hls.TempDirectory; @@ -1148,7 +1339,7 @@ namespace XDMApp } break; case "Mpd-Dash": - var dash = DownloadStateStore.MultiSourceDASHDownloadStateFromBytes(bytes); + var dash = DownloadStateStore.LoadMultiSourceDASHDownloadState(entry.Id); if (dash != null) { tempDir = dash.TempDirectory; @@ -1160,7 +1351,7 @@ namespace XDMApp if (validEntry) { var infoFile = Path.Combine(Config.DataDir, entry.Id + ".info"); - + var stateFile = Path.Combine(Config.DataDir, entry.Id + ".state"); if (Directory.Exists(tempDir) && !string.IsNullOrEmpty(tempDir)) { Directory.Delete(tempDir, true); @@ -1204,7 +1395,8 @@ namespace XDMApp { this.StartDownload(h1, entry.Name, FileNameFetchMode.FileNameAndExtension, - entry.TargetDir, true, entry.Authentication, entry.Proxy, GetSpeedLimit(), null); + entry.TargetDir, true, entry.Authentication, entry.Proxy, GetSpeedLimit(), null, + h1.ConvertToMp3); } break; case "Dash": @@ -1291,6 +1483,7 @@ namespace XDMApp { try { + Log.Debug("Checking for updates..."); if (UpdateChecker.GetAppUpdates(AppVerion, out IList updates, out bool firstUpdate)) { this.Updates = updates; @@ -1306,7 +1499,7 @@ namespace XDMApp private string GetUpdateText() { - if (Updates == null) return string.Empty; + if (Updates == null || Updates.Count < 1) return TextResource.GetText("MSG_NO_UPDATE"); var text = new StringBuilder(); var size = 0L; text.Append((ComponentsInstalled ? "Update available: " : "XDM require FFmpeg and YoutubeDL to download streaming videos") + Environment.NewLine); @@ -1328,6 +1521,7 @@ namespace XDMApp public void Import(string path) { ImportExport.Import(path); + AppUI.ShowMessageBox(null, TextResource.GetText("MSG_IMPORT_DONE")); } public bool IsFFmpegRequiredForDownload(string id) diff --git a/app/XDM/YoutubeDLHandler/Structs.cs b/app/XDM/XDM.App.Core/YDLWrapper/Structs.cs similarity index 100% rename from app/XDM/YoutubeDLHandler/Structs.cs rename to app/XDM/XDM.App.Core/YDLWrapper/Structs.cs diff --git a/app/XDM/YoutubeDLHandler/YDLOutputParser.cs b/app/XDM/XDM.App.Core/YDLWrapper/YDLOutputParser.cs similarity index 100% rename from app/XDM/YoutubeDLHandler/YDLOutputParser.cs rename to app/XDM/XDM.App.Core/YDLWrapper/YDLOutputParser.cs diff --git a/app/XDM/YoutubeDLHandler/YDLProcess.cs b/app/XDM/XDM.App.Core/YDLWrapper/YDLProcess.cs similarity index 90% rename from app/XDM/YoutubeDLHandler/YDLProcess.cs rename to app/XDM/XDM.App.Core/YDLWrapper/YDLProcess.cs index 07bf9e8..c8e64c2 100644 --- a/app/XDM/YoutubeDLHandler/YDLProcess.cs +++ b/app/XDM/XDM.App.Core/YDLWrapper/YDLProcess.cs @@ -14,6 +14,7 @@ namespace YDLWrapper public string? UserName { get; set; } public string? Password { get; set; } public string? JsonOutputFile { get; set; } + public string? BrowserName { get; set; } //Fetch cookies from browser private Process? ydlProc; @@ -40,7 +41,9 @@ namespace YDLWrapper }; var sb = new StringBuilder(); - foreach (var arg in new string[] { "--no-warnings", "-q", "-i", "-J", Uri!.ToString() }) + foreach (var arg in new string[] { "--no-warnings", "-q", "-i", "-J", + string.IsNullOrEmpty(BrowserName)?string.Empty:$"--cookies-from-browser {BrowserName}", + Uri!.ToString() }) { sb.Append(" " + arg); } diff --git a/app/XDM/XDM.Common.UI/LinkRefreshDialogHelper.cs b/app/XDM/XDM.Common.UI/LinkRefreshDialogHelper.cs deleted file mode 100644 index 46f46b3..0000000 --- a/app/XDM/XDM.Common.UI/LinkRefreshDialogHelper.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using System.Linq; -using TraceLog; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Downloader; -using XDM.Core.Lib.Downloader.Progressive.DualHttp; -using XDM.Core.Lib.Downloader.Progressive.SingleHttp; -using XDM.Core.Lib.Util; - -namespace XDM.Common.UI -{ - public static class LinkRefreshDialogHelper - { - public static void RefreshLink(BaseDownloadEntry item, IApp app, IRefreshLinkDialogSkeleton dialog) - { - string referer = null; - if (item.DownloadType == "Http") - { - var state = DownloadStateStore.SingleSourceHTTPDownloaderStateFromBytes( - File.ReadAllBytes(Path.Combine(Config.DataDir, item.Id + ".state"))); - //JsonConvert.DeserializeObject( - // File.ReadAllText(Path.Combine(Config.DataDir, item.Id + ".state"))); - referer = GetReferer(state.Headers); - } - else if (item.DownloadType == "Dash") - { - var state = DownloadStateStore.DualSourceHTTPDownloaderStateFromBytes( - File.ReadAllBytes(Path.Combine(Config.DataDir, item.Id + ".state"))); - //JsonConvert.DeserializeObject( - // File.ReadAllText(Path.Combine(Config.DataDir, item.Id + ".state"))); - referer = GetReferer(state.Headers1); - } - Log.Debug("Referer: " + referer); - if (referer != null) - { - OpenBrowser(referer); - if (item.DownloadType == "Http") - { - var downloader = new SingleSourceHTTPDownloader(item.Id); - downloader.RestoreState(); - app.RefreshedLinkReceived += (_, _) => dialog.LinkReceived(); - app.WaitFromRefreshedLink(downloader); - } - else if (item.DownloadType == "Dash") - { - var downloader = new DualSourceHTTPDownloader(item.Id); - downloader.RestoreState(); - app.RefreshedLinkReceived += (_, _) => dialog.LinkReceived(); - app.WaitFromRefreshedLink(downloader); - } - - dialog.ShowWindow(); - } - - dialog.WatchingStopped += (a, b) => - { - app.ClearRefreshLinkCandidate(); - }; - } - - private static string GetReferer(Dictionary> headers) - { - return headers?.Where( - header => header.Key.ToLowerInvariant() == "referer") - .FirstOrDefault().Value?.FirstOrDefault(); - } - - private static void OpenBrowser(string url) - { - Helpers.OpenBrowser(url); - } - } -} diff --git a/app/XDM/XDM.Common.UI/XDM.Common.UI.csproj b/app/XDM/XDM.Common.UI/XDM.Common.UI.csproj deleted file mode 100644 index bc2a36d..0000000 --- a/app/XDM/XDM.Common.UI/XDM.Common.UI.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - net3.5;net4.5;net4.7.2;net5.0 - AnyCPU;x86 - 9.0 - enable - - - - - - - - - - - - - - - diff --git a/app/XDM/XDM.Gtk.UI/AppWin2.cs b/app/XDM/XDM.Gtk.UI/AppWin2.cs index c484c63..23522d8 100644 --- a/app/XDM/XDM.Gtk.UI/AppWin2.cs +++ b/app/XDM/XDM.Gtk.UI/AppWin2.cs @@ -1,1357 +1,1357 @@ -using Gtk; -using System; -using System.Collections.Generic; -using System.IO; -using Gdk; -using GLib; -using XDM.Core.Lib.Util; -using XDMApp; -using Application = Gtk.Application; -using DateTime = System.DateTime; -using Menu = Gtk.Menu; -using MenuItem = Gtk.MenuItem; -using Range = System.Range; -using Window = Gtk.Window; -using IoPath = System.IO.Path; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Common.Segmented; -using System.Threading.Tasks; -using XDM.Core.Lib.Common.Segmented; -using System.Runtime.InteropServices; -using System.Linq; - -namespace XDM.GtkUI -{ - class AppWin2 : Window, IListUI - { - private ListStore store; - private TreeModelFilter filter; - string path = AppDomain.CurrentDomain.BaseDirectory; - private IApp app; - private const int FILE_NAME = 0, DATE_MODIFIED = 1, - PROGRESS = 2, SIZE = 3, FILE_ICON_ID = 4, STATUS = 5, - DOWNLOAD_ID = 6, DATE_IN_MILLIS = 7, - SIZE_REAL = 8, DOWNLOAD_TYPE = 9; - private const int FINISHED_ICON = 0, FINISHED_FILENAME = 1, - FINISHED_DATE = 2, FINISHED_SIZE = 3, FINISHED_TYPE = 4, - FINISHED_EPOCH = 5, FINISHED_SIZE_LONG = 6, - FINISHED_ID = 7, FINISHED_FILE_FULL = 8; - private TreeView inProgressTreeView; - private TreeView completedTreeView; - private Clipboard clipboard; - private ListBox lbDownload, lbGalary, lbQueue; - private ScrolledWindow swMainScrollView; - private Dictionary fileIconsSmall; - private Pixbuf pixOtherSmall; - private bool isShowingUnfinishedOnly = true; - private StatusIcon StatusIcon; - - public AppWin2(IApp app) : base("Xtreme Download Manager") - { - this.app = app; - this.app.SetUI(this); - Console.WriteLine(path); - SetDefaultSize(800, 600); - SetPosition(WindowPosition.Center); - DeleteEvent += AppWin1_DeleteEvent; - StatusIcon = new StatusIcon( - new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 16, 16, true)); - - LoadFileIcons(); - CreateTreeView(); - CreateCompletedTreeView(); - - //this.Titlebar = new HeaderBar() { ShowCloseButton=true,Title="Xtreme Download Manager" }; - - - //Gtk.CssProvider provider = new CssProvider(); - //provider.LoadFromData(@"entry{min-height: 0px; height: 20px;}"); - //Gtk.StyleContext.AddProviderForScreen(Gdk.Screen.Default, provider, 800); - - //Pango.FontDescription fontdesc = new Pango.FontDescription(); - //fontdesc.Size = System.Convert.ToInt32(12 * Pango.Scale.PangoScale); - //this.ModifyFont(fontdesc); - - //Console.WriteLine(Pango.Scale.PangoScale); - - bool showHeaderBar = true; - - HeaderBar header = new HeaderBar(); - header.ShowCloseButton = showHeaderBar; - - - - - - //var menuModel = new GLib.Menu(); - //menuModel.Append("Add download link", "app.new"); - //menuModel.Append("Add video download", "app.vid"); - - //Variant v=new Variant(true); - - //var action = new GLib.SimpleAction("new",new VariantType("int")); - //action.AddSignalHandler("connect", null); - //action.Activated += (a, b) => { }; - - - - //Button btn1234 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "delete-bin-line.svg"), 16, 16, true)) }; - //header.PackStart(btn1234); - - //HBox hb23=new HBox(true,0); - //hb23.StyleContext.AddClass("linked"); - - HBox toolbar = null; - - - - if (showHeaderBar) - { - header.Title = "XDM 2021"; - this.Titlebar = header; - - Button btn = new Button { Label = "New Download" }; - btn.Clicked += (a, b) => { ShowNewDownload1Dialog(); }; - //btn.StyleContext.AddClass("suggested-action"); - - header.PackStart(btn); - - Button btn123 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 16, 16, true)) }; - header.PackStart(btn123); - - HBox hb231 = new HBox(true, 0); - hb231.StyleContext.AddClass("linked"); - - foreach (var text in new string[] { "play-line.svg", "pause-line.svg" }) - { - Button btn1 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 16, 16, true)) }; - hb231.Add(btn1); - } - - header.PackStart(hb231); - foreach (var text in new string[] { "menu-line.svg"/*, "delete-bin-line.svg", "search-line.svg"*/ }) - { - Button btn1 = new Button - { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 16, 16, true)) }; - header.PackEnd(btn1); - } - - HBox hb2315 = new HBox(true, 0); - hb2315.StyleContext.AddClass("linked"); - foreach (var text in new string[] { "delete-bin-line.svg", "search-line.svg" }) - { - Button btn1 = new Button - { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 16, 16, true)) }; - hb2315.Add(btn1); - } - header.PackEnd(hb2315); - } - else - { - - var toolbar1 = new Toolbar(); - - var actionMap = new Dictionary - { - ["file-add-line.svg"] = (a, b) => - { - ShowNewDownload1Dialog(); - }, - ["video-download-line.svg"] = (a, b) => - { - - }, - ["play-line.svg"] = (a, b) => - { - var idList = new Dictionary(); - foreach (var row in inProgressTreeView.Selection.GetSelectedRows()) - { - filter.GetIter(out TreeIter iter, row); - Value v1 = new Value(); - filter.GetValue(iter, DOWNLOAD_ID, ref v1); - var id = (string)v1.Val; - Value v2 = new Value(); - filter.GetValue(iter, DOWNLOAD_TYPE, ref v2); - var type = (string)v2.Val; - idList[id] = type; - } - //app.ResumeDownload(idList); - }, - ["pause-line.svg"] = (a, b) => - { - var idList = new List(); - foreach (var row in inProgressTreeView.Selection.GetSelectedRows()) - { - filter.GetIter(out TreeIter iter, row); - Value v = new Value(); - filter.GetValue(iter, DOWNLOAD_ID, ref v); - idList.Add((string)v.Val); - } - app.StopDownloads(idList); - }, - ["delete-bin-line.svg"] = (a, b) => - { - var idList = new List(); - foreach (var row in inProgressTreeView.Selection.GetSelectedRows()) - { - filter.GetIter(out TreeIter iter, row); - Value v = new Value(); - filter.GetValue(iter, DOWNLOAD_ID, ref v); - idList.Add((string)v.Val); - } - //app.DeleteDownloads(idList); - } - }; - - foreach (var ent in actionMap) - { - var img = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", ent.Key), 20, 20, true)); - var btn = new ToolButton(img, ""); - btn.Clicked += ent.Value; - toolbar1.Add(btn); - img.Show(); - btn.Show(); - } - - toolbar1.Show(); - - var toolbar2 = new Toolbar(); - foreach (var text in new string[] { "search-line.svg", "menu-line.svg" }) - { - ToolButton btn1 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 20, 20, true)), ""); - toolbar2.Add(btn1); - } - toolbar2.ShowAll(); - - toolbar = new HBox() { }; - toolbar.PackStart(toolbar1, false, false, 0); - toolbar.PackEnd(toolbar2, false, false, 0); - if (Environment.OSVersion.Platform == PlatformID.Win32NT) - { - if (Gtk.Settings.Default.ApplicationPreferDarkTheme) - { - toolbar.StyleContext.AddClass("toolbar-border-dark"); - toolbar.StyleContext.AddClass("dark2"); - toolbar1.StyleContext.AddClass("dark2"); - toolbar2.StyleContext.AddClass("dark2"); - } - else - { - toolbar.StyleContext.AddClass("toolbar-border-light"); - } - } - toolbar.Show(); - } - - - +//using Gtk; +//using System; +//using System.Collections.Generic; +//using System.IO; +//using Gdk; +//using GLib; +//using XDM.Core.Lib.Util; +//using XDMApp; +//using Application = Gtk.Application; +//using DateTime = System.DateTime; +//using Menu = Gtk.Menu; +//using MenuItem = Gtk.MenuItem; +//using Range = System.Range; +//using Window = Gtk.Window; +//using IoPath = System.IO.Path; +//using XDM.Core.Lib.Common; +//using XDM.Core.Lib.Common.Segmented; +//using System.Threading.Tasks; +//using XDM.Core.Lib.Common.Segmented; +//using System.Runtime.InteropServices; +//using System.Linq; + +//namespace XDM.GtkUI +//{ +// class AppWin2 : Window, IListUI +// { +// private ListStore store; +// private TreeModelFilter filter; +// string path = AppDomain.CurrentDomain.BaseDirectory; +// private IApp app; +// private const int FILE_NAME = 0, DATE_MODIFIED = 1, +// PROGRESS = 2, SIZE = 3, FILE_ICON_ID = 4, STATUS = 5, +// DOWNLOAD_ID = 6, DATE_IN_MILLIS = 7, +// SIZE_REAL = 8, DOWNLOAD_TYPE = 9; +// private const int FINISHED_ICON = 0, FINISHED_FILENAME = 1, +// FINISHED_DATE = 2, FINISHED_SIZE = 3, FINISHED_TYPE = 4, +// FINISHED_EPOCH = 5, FINISHED_SIZE_LONG = 6, +// FINISHED_ID = 7, FINISHED_FILE_FULL = 8; +// private TreeView inProgressTreeView; +// private TreeView completedTreeView; +// private Clipboard clipboard; +// private ListBox lbDownload, lbGalary, lbQueue; +// private ScrolledWindow swMainScrollView; +// private Dictionary fileIconsSmall; +// private Pixbuf pixOtherSmall; +// private bool isShowingUnfinishedOnly = true; +// private StatusIcon StatusIcon; + +// public AppWin2(IApp app) : base("Xtreme Download Manager") +// { +// this.app = app; +// this.app.SetUI(this); +// Console.WriteLine(path); +// SetDefaultSize(800, 600); +// SetPosition(WindowPosition.Center); +// DeleteEvent += AppWin1_DeleteEvent; +// StatusIcon = new StatusIcon( +// new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 16, 16, true)); + +// LoadFileIcons(); +// CreateTreeView(); +// CreateCompletedTreeView(); + +// //this.Titlebar = new HeaderBar() { ShowCloseButton=true,Title="Xtreme Download Manager" }; + + +// //Gtk.CssProvider provider = new CssProvider(); +// //provider.LoadFromData(@"entry{min-height: 0px; height: 20px;}"); +// //Gtk.StyleContext.AddProviderForScreen(Gdk.Screen.Default, provider, 800); + +// //Pango.FontDescription fontdesc = new Pango.FontDescription(); +// //fontdesc.Size = System.Convert.ToInt32(12 * Pango.Scale.PangoScale); +// //this.ModifyFont(fontdesc); + +// //Console.WriteLine(Pango.Scale.PangoScale); + +// bool showHeaderBar = true; + +// HeaderBar header = new HeaderBar(); +// header.ShowCloseButton = showHeaderBar; + + + + + +// //var menuModel = new GLib.Menu(); +// //menuModel.Append("Add download link", "app.new"); +// //menuModel.Append("Add video download", "app.vid"); + +// //Variant v=new Variant(true); + +// //var action = new GLib.SimpleAction("new",new VariantType("int")); +// //action.AddSignalHandler("connect", null); +// //action.Activated += (a, b) => { }; + + + +// //Button btn1234 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "delete-bin-line.svg"), 16, 16, true)) }; +// //header.PackStart(btn1234); + +// //HBox hb23=new HBox(true,0); +// //hb23.StyleContext.AddClass("linked"); + +// HBox toolbar = null; + + + +// if (showHeaderBar) +// { +// header.Title = "XDM 2021"; +// this.Titlebar = header; + +// Button btn = new Button { Label = "New Download" }; +// btn.Clicked += (a, b) => { ShowNewDownload1Dialog(); }; +// //btn.StyleContext.AddClass("suggested-action"); + +// header.PackStart(btn); + +// Button btn123 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 16, 16, true)) }; +// header.PackStart(btn123); + +// HBox hb231 = new HBox(true, 0); +// hb231.StyleContext.AddClass("linked"); + +// foreach (var text in new string[] { "play-line.svg", "pause-line.svg" }) +// { +// Button btn1 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 16, 16, true)) }; +// hb231.Add(btn1); +// } + +// header.PackStart(hb231); +// foreach (var text in new string[] { "menu-line.svg"/*, "delete-bin-line.svg", "search-line.svg"*/ }) +// { +// Button btn1 = new Button +// { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 16, 16, true)) }; +// header.PackEnd(btn1); +// } + +// HBox hb2315 = new HBox(true, 0); +// hb2315.StyleContext.AddClass("linked"); +// foreach (var text in new string[] { "delete-bin-line.svg", "search-line.svg" }) +// { +// Button btn1 = new Button +// { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 16, 16, true)) }; +// hb2315.Add(btn1); +// } +// header.PackEnd(hb2315); +// } +// else +// { + +// var toolbar1 = new Toolbar(); + +// var actionMap = new Dictionary +// { +// ["file-add-line.svg"] = (a, b) => +// { +// ShowNewDownload1Dialog(); +// }, +// ["video-download-line.svg"] = (a, b) => +// { + +// }, +// ["play-line.svg"] = (a, b) => +// { +// var idList = new Dictionary(); +// foreach (var row in inProgressTreeView.Selection.GetSelectedRows()) +// { +// filter.GetIter(out TreeIter iter, row); +// Value v1 = new Value(); +// filter.GetValue(iter, DOWNLOAD_ID, ref v1); +// var id = (string)v1.Val; +// Value v2 = new Value(); +// filter.GetValue(iter, DOWNLOAD_TYPE, ref v2); +// var type = (string)v2.Val; +// idList[id] = type; +// } +// //app.ResumeDownload(idList); +// }, +// ["pause-line.svg"] = (a, b) => +// { +// var idList = new List(); +// foreach (var row in inProgressTreeView.Selection.GetSelectedRows()) +// { +// filter.GetIter(out TreeIter iter, row); +// Value v = new Value(); +// filter.GetValue(iter, DOWNLOAD_ID, ref v); +// idList.Add((string)v.Val); +// } +// app.StopDownloads(idList); +// }, +// ["delete-bin-line.svg"] = (a, b) => +// { +// var idList = new List(); +// foreach (var row in inProgressTreeView.Selection.GetSelectedRows()) +// { +// filter.GetIter(out TreeIter iter, row); +// Value v = new Value(); +// filter.GetValue(iter, DOWNLOAD_ID, ref v); +// idList.Add((string)v.Val); +// } +// //app.DeleteDownloads(idList); +// } +// }; + +// foreach (var ent in actionMap) +// { +// var img = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", ent.Key), 20, 20, true)); +// var btn = new ToolButton(img, ""); +// btn.Clicked += ent.Value; +// toolbar1.Add(btn); +// img.Show(); +// btn.Show(); +// } + +// toolbar1.Show(); + +// var toolbar2 = new Toolbar(); +// foreach (var text in new string[] { "search-line.svg", "menu-line.svg" }) +// { +// ToolButton btn1 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", text), 20, 20, true)), ""); +// toolbar2.Add(btn1); +// } +// toolbar2.ShowAll(); + +// toolbar = new HBox() { }; +// toolbar.PackStart(toolbar1, false, false, 0); +// toolbar.PackEnd(toolbar2, false, false, 0); +// if (Environment.OSVersion.Platform == PlatformID.Win32NT) +// { +// if (Gtk.Settings.Default.ApplicationPreferDarkTheme) +// { +// toolbar.StyleContext.AddClass("toolbar-border-dark"); +// toolbar.StyleContext.AddClass("dark2"); +// toolbar1.StyleContext.AddClass("dark2"); +// toolbar2.StyleContext.AddClass("dark2"); +// } +// else +// { +// toolbar.StyleContext.AddClass("toolbar-border-light"); +// } +// } +// toolbar.Show(); +// } + + + - //Button btn12 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "pause-white-48dp.svg"), 16, 16, true)) }; - //header.PackEnd(btn12); +// //Button btn12 = new Button { Image = new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "pause-white-48dp.svg"), 16, 16, true)) }; +// //header.PackEnd(btn12); - //Button btn12 = new Button { Label = "Delete" }; - //header.PackEnd(btn12); +// //Button btn12 = new Button { Label = "Delete" }; +// //header.PackEnd(btn12); - //header.PackEnd(hb23); +// //header.PackEnd(hb23); - //MenuBar mb = null; +// //MenuBar mb = null; - //if (!showHeaderBar) - //{ - // mb = new MenuBar(); +// //if (!showHeaderBar) +// //{ +// // mb = new MenuBar(); - // Menu filemenu = new Menu(); - // MenuItem file = new MenuItem("File"); - // file.Submenu = filemenu; +// // Menu filemenu = new Menu(); +// // MenuItem file = new MenuItem("File"); +// // file.Submenu = filemenu; - // MenuItem exit = new MenuItem("Exit"); - // filemenu.Append(exit); +// // MenuItem exit = new MenuItem("Exit"); +// // filemenu.Append(exit); - // MenuItem file1 = new MenuItem("Downloads"); +// // MenuItem file1 = new MenuItem("Downloads"); - // mb.Append(file); - // mb.Append(file1); - // mb.Append(new MenuItem("Tools")); - // mb.Append(new MenuItem("Help")); +// // mb.Append(file); +// // mb.Append(file1); +// // mb.Append(new MenuItem("Tools")); +// // mb.Append(new MenuItem("Help")); - // mb.ShowAll(); - //} +// // mb.ShowAll(); +// //} - //Toolbar toolbar = new Toolbar(); - //toolbar.ToolbarStyle = ToolbarStyle.Both; +// //Toolbar toolbar = new Toolbar(); +// //toolbar.ToolbarStyle = ToolbarStyle.Both; - //MenuToolButton newtb = new MenuToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "note_add-white-48dp - Copy.svg"), 20, 20, true)), "Add"); +// //MenuToolButton newtb = new MenuToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "note_add-white-48dp - Copy.svg"), 20, 20, true)), "Add"); - //ToolButton opentb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "delete_outline-white-48dp.svg"), 20, 20, true)), "Delete"); +// //ToolButton opentb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "delete_outline-white-48dp.svg"), 20, 20, true)), "Delete"); - //ToolButton resumetb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "play_arrow-white-48dp.svg"), 20, 20, true)), "Resume"); - //ToolButton savetb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "pause-white-48dp.svg"), 20, 20, true)), "Pause"); - //ToolButton savetb2 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "videocam-white-48dp.svg"), 20, 20, true)), "Media download"); - //ToolButton savetb3 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "theaters-white-48dp.svg"), 20, 20, true)), "Pause"); - //ToolButton savetb4 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "settings-white-48dp.svg"), 20, 20, true)), "Settings"); +// //ToolButton resumetb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "play_arrow-white-48dp.svg"), 20, 20, true)), "Resume"); +// //ToolButton savetb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "pause-white-48dp.svg"), 20, 20, true)), "Pause"); +// //ToolButton savetb2 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "videocam-white-48dp.svg"), 20, 20, true)), "Media download"); +// //ToolButton savetb3 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "theaters-white-48dp.svg"), 20, 20, true)), "Pause"); +// //ToolButton savetb4 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "settings-white-48dp.svg"), 20, 20, true)), "Settings"); - ////SeparatorToolItem sep = new SeparatorToolItem(); - //ToolButton quittb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "more_vert-white-48dp.svg"), 20, 20, true)), "Menu"); - //ToolButton quittb2 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "search-white-48dp.svg"), 20, 20, true)), "Search"); +// ////SeparatorToolItem sep = new SeparatorToolItem(); +// //ToolButton quittb = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "more_vert-white-48dp.svg"), 20, 20, true)), "Menu"); +// //ToolButton quittb2 = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "search-white-48dp.svg"), 20, 20, true)), "Search"); - ////ToolButton newtb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\add_circle_outline-white-48dp.svg", 24,24, true)),"Add"); - ////ToolButton opentb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\remove_circle_outline-white-48dp.svg", 32, 32, true)), "Delete"); +// ////ToolButton newtb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\add_circle_outline-white-48dp.svg", 24,24, true)),"Add"); +// ////ToolButton opentb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\remove_circle_outline-white-48dp.svg", 32, 32, true)), "Delete"); - ////ToolButton resumetb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\play_circle_outline-white-48dp.svg", 32, 32, true)), "Resume"); - ////ToolButton savetb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\pause_circle_outline-white-48dp.svg", 32, 32, true)), "Pause"); - ////SeparatorToolItem sep = new SeparatorToolItem(); - ////ToolButton quittb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\more_vert-white-48dp.svg", 32, 32, true)),"Menu"); - ////ToolButton quittb2 = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\tune-white-48dp.svg", 32, 32, true)), "Menu"); +// ////ToolButton resumetb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\play_circle_outline-white-48dp.svg", 32, 32, true)), "Resume"); +// ////ToolButton savetb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\pause_circle_outline-white-48dp.svg", 32, 32, true)), "Pause"); +// ////SeparatorToolItem sep = new SeparatorToolItem(); +// ////ToolButton quittb = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\more_vert-white-48dp.svg", 32, 32, true)),"Menu"); +// ////ToolButton quittb2 = new ToolButton(new Image(Gdk.Pixbuf.NewFromFileAtScaleUtf8(@"D:\Downloads\tune-white-48dp.svg", 32, 32, true)), "Menu"); - ////quittb.Toggled += Quittb_Toggled; +// ////quittb.Toggled += Quittb_Toggled; - //newtb.Clicked += Newtb_Clicked; +// //newtb.Clicked += Newtb_Clicked; - //toolbar.Insert(newtb, 0); - //toolbar.Insert(opentb, 1); - //toolbar.Insert(new SeparatorToolItem(), 2); - //toolbar.Insert(savetb, 3); - //toolbar.Insert(resumetb, 4); - //toolbar.Insert(new SeparatorToolItem(), 5); - ////toolbar.Insert(savetb2, 6); - ////toolbar.Insert(savetb3, 7); - //toolbar.Insert(savetb4, 8); - ////toolbar.Insert(sep, 4); +// //toolbar.Insert(newtb, 0); +// //toolbar.Insert(opentb, 1); +// //toolbar.Insert(new SeparatorToolItem(), 2); +// //toolbar.Insert(savetb, 3); +// //toolbar.Insert(resumetb, 4); +// //toolbar.Insert(new SeparatorToolItem(), 5); +// ////toolbar.Insert(savetb2, 6); +// ////toolbar.Insert(savetb3, 7); +// //toolbar.Insert(savetb4, 8); +// ////toolbar.Insert(sep, 4); - //Toolbar toolbar2 = new Toolbar(); - //toolbar2.ToolbarStyle = ToolbarStyle.Icons; - //toolbar.Insert(quittb2, 9); - //toolbar2.Insert(quittb, 2); +// //Toolbar toolbar2 = new Toolbar(); +// //toolbar2.ToolbarStyle = ToolbarStyle.Icons; +// //toolbar.Insert(quittb2, 9); +// //toolbar2.Insert(quittb, 2); - //HBox hBox = new HBox(); +// //HBox hBox = new HBox(); - //hBox.PackStart(toolbar, false, false, 0); - ////hBox.PackEnd(toolbar2, false, false, 0); +// //hBox.PackStart(toolbar, false, false, 0); +// ////hBox.PackEnd(toolbar2, false, false, 0); - //vbox.PackStart(mb, false, false, 0); - //vbox.PackStart(hBox, false, false, 0); +// //vbox.PackStart(mb, false, false, 0); +// //vbox.PackStart(hBox, false, false, 0); - //HBox hBox = new HBox(); +// //HBox hBox = new HBox(); - Paned paned = new Paned(Orientation.Horizontal); - paned.Position = 200; +// Paned paned = new Paned(Orientation.Horizontal); +// paned.Position = 200; - VBox vb12 = new VBox(); - vb12.StyleContext.AddClass("dark"); - //var hbDownloadLabel = new HBox { Margin = 10, MarginStart = 5, Visible = true}; - //hbDownloadLabel.PackStart(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "folder-download-line.svg"), 16, 16, true)){Visible = true}, false, false, 10); - //hbDownloadLabel.PackStart(new Label { Text = "Downloads", Halign = Align.Start, Visible = true}, false, false, 0); +// VBox vb12 = new VBox(); +// vb12.StyleContext.AddClass("dark"); +// //var hbDownloadLabel = new HBox { Margin = 10, MarginStart = 5, Visible = true}; +// //hbDownloadLabel.PackStart(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "folder-download-line.svg"), 16, 16, true)){Visible = true}, false, false, 10); +// //hbDownloadLabel.PackStart(new Label { Text = "Downloads", Halign = Align.Start, Visible = true}, false, false, 0); - //vb12.PackStart(hbDownloadLabel, false, true, 0); +// //vb12.PackStart(hbDownloadLabel, false, true, 0); - if (!showHeaderBar) - { - //var header2 = new HeaderBar(); - //header2.Title = "X T R E M E"; - //header2.Subtitle = "DOWNLOAD MANAGER"; - //header2.HasSubtitle = true; - //header2.Visible = true; - //vb12.PackStart(header2, false, true, 0); - } +// if (!showHeaderBar) +// { +// //var header2 = new HeaderBar(); +// //header2.Title = "X T R E M E"; +// //header2.Subtitle = "DOWNLOAD MANAGER"; +// //header2.HasSubtitle = true; +// //header2.Visible = true; +// //vb12.PackStart(header2, false, true, 0); +// } - //this.lbDownload = CreateListBox(new Dictionary() - //{ - // //["All Incomplete"] = "download-line.svg", - // ["Incomplete"] = "download-line.svg",/*"time-line.svg",*/ - // //["Paused/Stopped"] = "pause-line.svg"/*"task-line.svg"*/, - // ["Completed"] = "check-line.svg" - //}, 5); +// //this.lbDownload = CreateListBox(new Dictionary() +// //{ +// // //["All Incomplete"] = "download-line.svg", +// // ["Incomplete"] = "download-line.svg",/*"time-line.svg",*/ +// // //["Paused/Stopped"] = "pause-line.svg"/*"task-line.svg"*/, +// // ["Completed"] = "check-line.svg" +// //}, 5); - //this.lbDownload.RowSelected += (a, b) => - //{ - // if (b.Row.Index == 0) - // { - // isShowingUnfinishedOnly = true; - // RefereshListView(); - // swMainScrollView.Remove(this.completedTreeView); - // swMainScrollView.Add(this.inProgressTreeView); - // } - // else - // { - // isShowingUnfinishedOnly = false; - // RefereshListView(); - // swMainScrollView.Remove(this.inProgressTreeView); - // swMainScrollView.Add(this.completedTreeView); - // } - //}; +// //this.lbDownload.RowSelected += (a, b) => +// //{ +// // if (b.Row.Index == 0) +// // { +// // isShowingUnfinishedOnly = true; +// // RefereshListView(); +// // swMainScrollView.Remove(this.completedTreeView); +// // swMainScrollView.Add(this.inProgressTreeView); +// // } +// // else +// // { +// // isShowingUnfinishedOnly = false; +// // RefereshListView(); +// // swMainScrollView.Remove(this.inProgressTreeView); +// // swMainScrollView.Add(this.completedTreeView); +// // } +// //}; - //this.lbGalary = CreateListBox( - // new Dictionary() - // { - // //["All Files"] = "file-line.svg", - // ["Documents"] = "file-text-line.svg"/*"task-line.svg"*/, - // ["Music"] = "music-2-line.svg", - // ["Video"] = "film-line.svg", - // ["Compressed"] = "file-zip-line.svg", - // ["Images"] = "image-line.svg", - // ["Applications"] = "apps-line.svg", - // ["Other"] = "file-4-line.svg" - // }, 20); +// //this.lbGalary = CreateListBox( +// // new Dictionary() +// // { +// // //["All Files"] = "file-line.svg", +// // ["Documents"] = "file-text-line.svg"/*"task-line.svg"*/, +// // ["Music"] = "music-2-line.svg", +// // ["Video"] = "film-line.svg", +// // ["Compressed"] = "file-zip-line.svg", +// // ["Images"] = "image-line.svg", +// // ["Applications"] = "apps-line.svg", +// // ["Other"] = "file-4-line.svg" +// // }, 20); - //this.lbQueue = CreateQueueListBox(); +// //this.lbQueue = CreateQueueListBox(); - //vb12.PackStart(new Label { Text = "Downloads", Margin = 10, MarginStart = 15, Halign = Align.Start, Visible = true }, false, true, 0); - vb12.PackStart(this.CreateTree1(), true, true, 0); - //vb12.PackStart(new Label { Text = "Completed Downloads", Margin = 10, MarginStart = 15, Halign = Align.Start, Visible = true }, false, true, 0); - //vb12.PackStart(this.lbGalary, false, true, 0); //vb12.PackStart(CreateCategoryListBox(), false, true, 0); - //vb12.PackStart(new Label { Text = "Queues", Margin = 10, MarginStart = 15, Halign = Align.Start, Visible = true }, false, true, 0); - //vb12.PackStart(this.lbQueue, true, true, 0); +// //vb12.PackStart(new Label { Text = "Downloads", Margin = 10, MarginStart = 15, Halign = Align.Start, Visible = true }, false, true, 0); +// vb12.PackStart(this.CreateTree1(), true, true, 0); +// //vb12.PackStart(new Label { Text = "Completed Downloads", Margin = 10, MarginStart = 15, Halign = Align.Start, Visible = true }, false, true, 0); +// //vb12.PackStart(this.lbGalary, false, true, 0); //vb12.PackStart(CreateCategoryListBox(), false, true, 0); +// //vb12.PackStart(new Label { Text = "Queues", Margin = 10, MarginStart = 15, Halign = Align.Start, Visible = true }, false, true, 0); +// //vb12.PackStart(this.lbQueue, true, true, 0); - var sw2 = new ScrolledWindow { OverlayScrolling = true }; - sw2.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); +// var sw2 = new ScrolledWindow { OverlayScrolling = true }; +// sw2.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); - sw2.Add(vb12); +// sw2.Add(vb12); - //sw2.Add(CreateTreeView2()); +// //sw2.Add(CreateTreeView2()); - paned.Add1(sw2); +// paned.Add1(sw2); - swMainScrollView = new ScrolledWindow - { - OverlayScrolling = true - }; - swMainScrollView.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); - swMainScrollView.Add(inProgressTreeView); - swMainScrollView.Show(); - - VBox vb32 = new VBox(); - if (!showHeaderBar) - vb32.PackStart(toolbar, false, false, 0); - vb32.PackStart(swMainScrollView, true, true, 0); - vb32.Show(); - - paned.Add2(vb32); - - //hBox.PackStart(sw2, true, true, 0); - //hBox.PackStart(sw, true, true, 0); - VBox vbox = new VBox(false, 2); - - vbox.PackStart(paned, true, true, 0); - - Add(vbox); - - if (showHeaderBar) - header.ShowAll(); - vb12.Show(); - sw2.Show(); - paned.Show(); - vbox.Show(); - - for (int i = 0; i < 10000; i++) - { - store.AppendValues("不能下载为自动选择清晰度模式下的视频", "sample date", 30, "aaaaa"); - } - clipboard = Clipboard.Get(Gdk.Selection.Clipboard); - - - var items = new Dictionary(); - foreach (var ent in Enumerable.Range(1,100)) - { - items[Guid.NewGuid().ToString()] = new RowRef - { - TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ - @"বেস্বাধীনভাবে সমান মর্যাদা" /*ent.Name*/, "10/10/20", 20, "123 gb", "", - "Finished" , - "121312323", 0, 0, "") - // TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ - //"hello"/*@"স্বাধীনভাবে সমান মর্যাদা"*/ /*ent.Name*/, ent.DateAdded.ToShortDateString(), ent.Progress, Helpers.FormatSize(ent.Size), "", - // ent.Status == DownloadStatus.Finished ? "Finished" : "Stopped", - // ent.Id, ent.DateAdded.Ticks, ent.Size, ent.DownloadType) - }; - } - - - //app.LoadDownloadList(); - - //Realized += (a, b) => - //{ - // var hwnd= FindWindowEx() - //}; - - //Shown += (a, b) => - // { - // var hwnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, "XDM 2021"); - // if (hwnd != IntPtr.Zero) - // { - // var wl = GetWindowLong(hwnd, -16); - // SetWindowLong(hwnd, -16, wl | 0x00020000); - // } - // }; - } - - - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle); - - [DllImport("user32.dll")] - static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong); - - [DllImport("user32.dll", EntryPoint = "GetWindowLong")] - static extern uint GetWindowLong(IntPtr hWnd, int nIndex); - - private void CreateTreeView() - { - - - - store = new ListStore(typeof(string), // file name - typeof(string), // date modified - typeof(int), // progress - typeof(string), // size - typeof(string), // file icon id - typeof(string), // status - typeof(string), // id - typeof(long), // date in epoch - typeof(long), // size in long - typeof(string) // download type - ); - - //store.SetSortFunc(DATE_MODIFIED, (model, iter1, iter2) => - //{ - // var t1 = (long)store.GetValue(iter1, DATE_IN_MILLIS); - // var t2 = (long)store.GetValue(iter2, DATE_IN_MILLIS); - // if (t1 > t2) return 1; - // if (t2 > t1) return -1; - // return 0; - //}); - - //store.SetSortFunc(SIZE, (model, iter1, iter2) => - //{ - // var s1 = (long)store.GetValue(iter1, SIZE_REAL); - // var s2 = (long)store.GetValue(iter2, SIZE_REAL); - // if (s1 > s2) return 1; - // if (s2 > s1) return -1; - // return 0; - //}); - - this.filter = new TreeModelFilter(store, null); - filter.VisibleFunc = (model, iter) => - { - var status = (string)model.GetValue(iter, STATUS);//"Finished" - return this.isShowingUnfinishedOnly ? "Finished" != status : "Finished" == status; - }; - - inProgressTreeView = new TreeView(filter); - inProgressTreeView.Selection.Mode = SelectionMode.Multiple; - - //File name column - var fileNameColumn = new TreeViewColumn - { - Resizable = true, - Reorderable = true, - Title = "Name", - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 200 - }; - - fileNameColumn.SortColumnId = FILE_NAME; - - var fileIconRenderer = new CellRendererPixbuf { }; - - fileIconRenderer.SetPadding(5, 8); - - fileNameColumn.PackStart(fileIconRenderer, false); - - fileNameColumn.SetCellDataFunc(fileIconRenderer, new CellLayoutDataFunc(GetFileIcon)); - //TODO: get icon from model - - var fileNameRendererText = new CellRendererText(); - fileNameRendererText.SetPadding(5, 8); - fileNameColumn.PackStart(fileNameRendererText, false); - fileNameColumn.SetAttributes(fileNameRendererText, "text", FILE_NAME); - inProgressTreeView.AppendColumn(fileNameColumn); - - //File size column - var fileSizeRendererText = new CellRendererText(); - fileSizeRendererText.Xalign = 1.0f; - fileSizeRendererText.SetPadding(5, 8); - var fileSizeColumn = new TreeViewColumn - { - Resizable = true, - Reorderable = true, - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 80, - Title = "Size", - }; - fileSizeColumn.PackEnd(fileSizeRendererText, false); - fileSizeColumn.SetAttributes(fileSizeRendererText, "text", SIZE); - fileSizeColumn.SortColumnId = SIZE_REAL; - inProgressTreeView.AppendColumn(fileSizeColumn); - - //File progress column - var fileRendererProgress = new CellRendererProgress() - { - //Text = "Downloading", - }; - - fileRendererProgress.SetPadding(5, 10); - var progressColumn = new TreeViewColumn("Progress", fileRendererProgress, "value", PROGRESS) - { - Resizable = true, - Reorderable = true, - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 80 - }; - progressColumn.SetAttributes(fileRendererProgress, "value", PROGRESS); - inProgressTreeView.AppendColumn(progressColumn); - - //Last modified column - var lastModifiedRendererText = new CellRendererText(); - lastModifiedRendererText.SetPadding(5, 8); - var lastModifiedColumn = new TreeViewColumn("Date added", lastModifiedRendererText, "text", DATE_MODIFIED) - { - Resizable = true, - Reorderable = true, - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 100 - }; - lastModifiedColumn.SortColumnId = DATE_IN_MILLIS; - lastModifiedColumn.SetAttributes(lastModifiedRendererText, "text", DATE_MODIFIED); - inProgressTreeView.AppendColumn(lastModifiedColumn); - - //Download status column - var statusRendererText = new CellRendererText(); - statusRendererText.SetPadding(5, 8); - var statusColumn = new TreeViewColumn("Status", statusRendererText, "text", STATUS) - { - Resizable = true, - Reorderable = true, - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 80 - }; - statusColumn.SortColumnId = STATUS; - statusColumn.SetAttributes(statusRendererText, "text", STATUS); - inProgressTreeView.AppendColumn(statusColumn); - - inProgressTreeView.StyleContext.AddClass("listt"); - - inProgressTreeView.Show(); - } - - private void CreateCompletedTreeView() - { - completedTreeView = new TreeView(filter); - completedTreeView.Selection.Mode = SelectionMode.Multiple; - - //File name column - var fileNameColumn = new TreeViewColumn - { - Resizable = true, - Reorderable = true, - Title = "Name", - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 400 - }; - - fileNameColumn.SortColumnId = FILE_NAME; - - var fileIconRenderer = new CellRendererPixbuf { }; - - fileIconRenderer.SetPadding(5, 8); - fileNameColumn.PackStart(fileIconRenderer, false); - - fileNameColumn.SetCellDataFunc(fileIconRenderer, new CellLayoutDataFunc(GetFileIcon)); - //TODO: get icon from model - - var fileNameRendererText = new CellRendererText(); - fileNameRendererText.SetPadding(5, 8); - fileNameColumn.PackStart(fileNameRendererText, false); - fileNameColumn.SetAttributes(fileNameRendererText, "text", FILE_NAME); - completedTreeView.AppendColumn(fileNameColumn); - - //File size column - var fileSizeRendererText = new CellRendererText(); - fileSizeRendererText.Xalign = 1.0f; - fileSizeRendererText.SetPadding(5, 8); - var fileSizeColumn = new TreeViewColumn - { - Resizable = true, - Reorderable = true, - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 80, - Title = "Size", - }; - fileSizeColumn.PackEnd(fileSizeRendererText, false); - fileSizeColumn.SetAttributes(fileSizeRendererText, "text", SIZE); - fileSizeColumn.SortColumnId = SIZE_REAL; - completedTreeView.AppendColumn(fileSizeColumn); - - - //Last modified column - var lastModifiedRendererText = new CellRendererText(); - lastModifiedRendererText.SetPadding(5, 8); - var lastModifiedColumn = new TreeViewColumn("Date added", lastModifiedRendererText, "text", DATE_MODIFIED) - { - Resizable = true, - Reorderable = true, - Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 100 - }; - lastModifiedColumn.SortColumnId = DATE_IN_MILLIS; - lastModifiedColumn.SetAttributes(lastModifiedRendererText, "text", DATE_MODIFIED); - completedTreeView.AppendColumn(lastModifiedColumn); - - completedTreeView.StyleContext.AddClass("listt"); - completedTreeView.Show(); - - } - - public RowItem AddItem(string file, string date, int progress, string size, string id, - long realSize, DateTime dateAdded, string type) - { - return new RowRef { TreeIter = store.AppendValues(file, date, progress, size, "", "Downloading", id, dateAdded.Ticks, realSize, type) }; - } - - public RowItem AddItemToTop(string file, string date, int progress, string size, string id, - long realSize, DateTime dateAdded, string type) - { - var treeIter = store.InsertWithValues(0, file, date, progress, size, "", "Downloading", id, dateAdded.Ticks, realSize, type); - inProgressTreeView.SetCursor(store.GetPath(treeIter), inProgressTreeView.GetColumn(0), false); - app.SaveState(); - RefereshListView(); - return new RowRef { TreeIter = treeIter }; - } - - public void UpdateItem(RowItem item, string name, string size, long realSize) - { - Gtk.Application.Invoke((a, b) => - { - store.SetValue(((RowRef)item).TreeIter, FILE_NAME, name); - store.SetValue(((RowRef)item).TreeIter, SIZE, size); - store.SetValue(((RowRef)item).TreeIter, SIZE_REAL, realSize); - app.SaveState(); - RefereshListView(); - }); - } - - public void UpdateProgress(RowItem item, int progress) - { - if (progress <= 100 && progress >= 0) - { - Gtk.Application.Invoke((a, b) => - { - try - { - store.SetValue(((RowRef)item).TreeIter, PROGRESS, progress); - app.SaveState(); - RefereshListView(); - } - catch (Exception e) - { - Console.WriteLine(e); - } - }); - } - } - - public void DownloadFinished(RowItem item, long size = -1) - { - Gtk.Application.Invoke((a, b) => - { - var iter = ((RowRef)item).TreeIter; - store.SetValue(iter, PROGRESS, 100); - store.SetValue(iter, STATUS, "Finished"); - if ((long)store.GetValue(iter, SIZE_REAL) < 0 && size >= 0) - { - store.SetValue(iter, SIZE, Helpers.FormatSize(size)); - store.SetValue(iter, SIZE_REAL, size); - } - app.SaveState(); - RefereshListView(); - }); - - } - - public void DownloadFailed(RowItem item) - { - Gtk.Application.Invoke((a, b) => - { - store.SetValue(((RowRef)item).TreeIter, STATUS, "Failed"); - app.SaveState(); - RefereshListView(); - }); - - } - - public void DownloadCanelled(RowItem item) - { - Gtk.Application.Invoke((a, b) => - { - store.SetValue(((RowRef)item).TreeIter, STATUS, "Stopped"); - app.SaveState(); - RefereshListView(); - }); - - } - - public void DeleteDownload(List items) - { - if (items != null) - { - foreach (var item in items) - { - var iter = ((RowRef)item).TreeIter; - store.Remove(ref iter); - } - } - RefereshListView(); - } - - private void AppWin1_DeleteEvent(object o, DeleteEventArgs args) - { - Application.Quit(); - } - - private ListBox CreateListBox(Dictionary labels, int startMargin = 15) - { - ListBox lb = new ListBox(); - lb.StyleContext.AddClass("dark"); - //lb.OverrideBackgroundColor(StateFlags.Normal, new Label().StyleContext.GetBackgroundColor(StateFlags.Normal)); - lb.Visible = true; - - //foreach (var text in new string[] { "All Downloads", "Finished/Completed", "Downloading", "Paused/Stopped" }) - foreach (var ent in labels) - { - var r1 = new ListBoxRow(); - r1.Visible = true; - var hBox = new HBox(); - hBox.Margin = 5; - hBox.Visible = true; - hBox.MarginStart = startMargin; - var lbl = new Label { Text = ent.Key, Halign = Align.Start, Visible = true }; - hBox.PackStart(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", ent.Value/*"folder-download-line.svg"*/), 16, 16, true)) { Visible = true }, false, false, 10); - hBox.PackStart(lbl, true, true, 0); - r1.Add(hBox); - lb.Add(r1); - } - - //lb.SelectRow(lb.GetRowAtIndex(0)); - return lb; - } - - private ListBox CreateQueueListBox() - { - ListBox lb = new ListBox(); - lb.StyleContext.AddClass("dark"); - lb.Visible = true; - foreach (var text in new string[] { "Default Queue" }) - { - var r1 = new ListBoxRow(); - r1.Visible = true; - var hBox = new HBox(); - hBox.Visible = true; - var lbl = new Label { Text = text, Halign = Align.Start, Visible = true }; - lbl.Margin = 5; - hBox.PackStart(lbl, true, true, 20); - r1.Add(hBox); - lb.Add(r1); - } - - //lb.SelectRow(lb.GetRowAtIndex(0)); - return lb; - } - - private Widget CreateTree1() - { - TreeView tree = new TreeView(); - tree.HeadersVisible = false; - - TreeViewColumn languages = new TreeViewColumn(); - languages.Title = "Programming languages"; - - CellRendererText cell = new CellRendererText(); - cell.SetPadding(5, 5); - languages.PackStart(cell, true); - languages.AddAttribute(cell, "text", 0); - - TreeStore treestore = new TreeStore(typeof(string), typeof(string)); - - TreeIter iter = treestore.AppendValues("Scripting languages"); - treestore.AppendValues(iter, "Python"); - treestore.AppendValues(iter, "PHP"); - treestore.AppendValues(iter, "Perl"); - treestore.AppendValues(iter, "Ruby"); - - //iter = treestore.AppendValues("Compiling languages"); - //treestore.AppendValues(iter, "C#"); - //treestore.AppendValues(iter, "C++"); - //treestore.AppendValues(iter, "C"); - //treestore.AppendValues(iter, "Java"); - - tree.AppendColumn(languages); - tree.Model = treestore; - - tree.Selection.Mode = SelectionMode.Browse; - - ScrolledWindow sw2 = new ScrolledWindow(); - sw2.OverlayScrolling = true; - sw2.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); - sw2.Add(tree); - sw2.ShowAll(); - return sw2; - } - - public void ShowNewDownloadDialog(Message message, string providedFileName = null) - { - var builder = new Builder(); - builder.AddFromFile(System.IO.Path.Combine(path, "glade", "new-download.glade")); - var window = (Window)builder.GetObject("new-download-dialog"); - var txtUrl = (Entry)builder.GetObject("txt-url"); - var txtFile = (Entry)builder.GetObject("txt-file"); - - var lblFileSize = (Label)builder.GetObject("lbl-file-size"); - lblFileSize.Text = ""; - txtUrl.Text = message.Url; - - var fileName = providedFileName ?? Helpers.SanitizeFileName(IoPath.GetFileName(new Uri(message.Url).LocalPath)); - string downloadFolder = Helpers.GetDownloadFolderByFileName(fileName); - Console.WriteLine(downloadFolder); - - txtFile.Text = fileName; - - var http = new SingleSourceHTTPDownloader(new SingleSourceHTTPDownloadInfo - { - Uri = message.Url, - Headers = message.RequestHeaders, - Cookies = message.Cookies - }); - if (!string.IsNullOrWhiteSpace(providedFileName)) - { - //http.SetFileName(providedFileName, true); - } - - var btnBrowse = (Button)builder.GetObject("btn-browse"); - var btnCancel = (Button)builder.GetObject("btn-cancel"); - var btnDownload = (Button)builder.GetObject("btn-download"); - - btnBrowse.Clicked += (a, b) => - { - Directory.CreateDirectory(downloadFolder); - var fc = new FileChooserNative("Save", window, FileChooserAction.Save, "Save", "Cancel") - { - CurrentName = fileName, - DoOverwriteConfirmation = true - }; - var filter = new FileFilter() { Name = "All files" }; - filter.AddPattern("*"); - fc.AddFilter(filter); - fc.SetCurrentFolder(downloadFolder); - if (fc.Run() == (int)Gtk.ResponseType.Accept) - { - var file = IoPath.GetFileName(fc.Filename); - var folder = IoPath.GetDirectoryName(fc.Filename); - - if (!fileName.Equals(file, StringComparison.InvariantCultureIgnoreCase)) - { - txtFile.Text = file; - //http.SetFileName(txtFile.Text, false); - } - http.SetTargetDirectory(folder); - } - fc.Dispose(); - }; - - btnDownload.Clicked += (a, b) => - { - //app.StartDownload(http, true); - //http.Start(); - //window.Dispose(); - }; - - btnCancel.Clicked += (a, b) => - { - http.Stop(); - window.Dispose(); - }; - - //void HandleProbeResult(object source, EventArgs args) - //{ - // Console.WriteLine("File name: " + http.TargetFileName); - // Application.Invoke((a, b) => - // { - // txtFile.Text = http.TargetFileName; - // downloadFolder = IoPath.GetDirectoryName(http.TargetFile); - // if (http.FileSize > 0) - // { - // lblFileSize.Text = Helpers.FormatSize(http.FileSize); - // } - // else - // { - // lblFileSize.Text = "---"; - // } - // }); - //} - //http.Probed += HandleProbeResult; - //window.DestroyEvent += (a, b) => - //{ - // http.Probed -= HandleProbeResult; - //}; - - Application.Invoke((a, b) => - { - window.Show(); - //http.ProbeTargetAsync(); - }); - } - - void ShowNewDownload1Dialog() - { - var builder = new Builder(); - builder.AddFromFile(System.IO.Path.Combine(path, "glade", "url-capture.glade")); - var window = (Window)builder.GetObject("url-capture"); - window.Show(); - var btnDownload = (Button)builder.GetObject("download-btn"); - var textField = (Entry)builder.GetObject("url-text"); - var btnCancel = (Button)builder.GetObject("cancel-btn"); - - btnCancel.Clicked += (a, b) => window.Dispose(); - - var urlText = clipboard.WaitForText(); - if (urlText != null && Helpers.IsUriValid(urlText)) - { - textField.Text = urlText; - } - - btnDownload.Clicked += (a, b) => - { - var text = textField.Text; - var validUrl = true; - if (!string.IsNullOrWhiteSpace(text)) - { - try - { - new Uri(text); - } - catch - { - validUrl = false; - } - } - else - { - validUrl = false; - } - - if (!validUrl) - { - var msgDlg = new MessageDialog(window, - DialogFlags.UseHeaderBar | DialogFlags.Modal | DialogFlags.DestroyWithParent, - MessageType.Error, ButtonsType.Ok, false, "Address Invalid") - { - SecondaryText = "Please enter valid address for download" - }; - msgDlg.Run(); - msgDlg.Dispose(); - return; - } - - window.Dispose(); - ShowNewDownloadDialog(new Message { Url = text }); - }; - } - - public List GetListData() - { - var list = new List(); - store.Foreach((model, treePath, iter) => - { - var ent = new InProgressDownloadEntry - { - Name = (string)store.GetValue(iter, FILE_NAME), - Size = (long)store.GetValue(iter, SIZE_REAL), - DateAdded = new DateTime((long)store.GetValue(iter, DATE_IN_MILLIS)), - Category = "Other", - Id = (string)store.GetValue(iter, DOWNLOAD_ID), - Progress = (int)store.GetValue(iter, PROGRESS), - Status = ((string)store.GetValue(iter, STATUS)) == "Finished" ? DownloadStatus.Finished : DownloadStatus.Stopped, - DownloadType = (string)store.GetValue(iter, DOWNLOAD_TYPE) - }; - list.Add(ent); - return false; - }); - return list; - } - - public Dictionary SetListData(List list) - { - - var items = new Dictionary(); - foreach (var ent in list) - { - items[ent.Id] = new RowRef - { - TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ - @"বেস্বাধীনভাবে সমান মর্যাদা" /*ent.Name*/, "10/10/20", 20, "123 gb", "", - ent.Status == DownloadStatus.Finished ? "Finished" : "Stopped", - "121312323", 0, 0, "") - // TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ - //"hello"/*@"স্বাধীনভাবে সমান মর্যাদা"*/ /*ent.Name*/, ent.DateAdded.ToShortDateString(), ent.Progress, Helpers.FormatSize(ent.Size), "", - // ent.Status == DownloadStatus.Finished ? "Finished" : "Stopped", - // ent.Id, ent.DateAdded.Ticks, ent.Size, ent.DownloadType) - }; - } - - - - //var pixDocLarge = new Pixbuf(IoPath.Combine(path, "images", "file-text-line.svg"), 64, 64, true); - //var pixMusicLarge = new Pixbuf(IoPath.Combine(path, "images", "music-2-line.svg"), 64, 64, true); - //var pixVideoLarge = new Pixbuf(IoPath.Combine(path, "images", "film-line.svg"), 64, 64, true); - //var pixZipLarge = new Pixbuf(IoPath.Combine(path, "images", "file-zip-line.svg"), 64, 64, true); - //var pixAppsLarge = new Pixbuf(IoPath.Combine(path, "images", "apps-line.svg"), 64, 64, true); - //var pixImgLarge = new Pixbuf(IoPath.Combine(path, "images", "image-line.svg"), 64, 64, true); - //var pixOtherLarge = new Pixbuf(IoPath.Combine(path, "images", "file-line.svg"), 64, 64, true); - - //var fileIconsLarge = new Dictionary - //{ - // ["MP4"] = pixVideoLarge, - // ["MKV"] = pixVideoLarge, - // ["WEBM"] = pixVideoLarge, - // ["TS"] = pixVideoLarge, - // ["MOV"] = pixVideoLarge, - // ["MP3"] = pixMusicLarge, - // ["M4A"] = pixMusicLarge, - // ["AAC"] = pixMusicLarge, - // ["OGG"] = pixMusicLarge, - // ["ZIP"] = pixZipLarge, - // ["BZ2"] = pixZipLarge, - // ["TBZ"] = pixZipLarge, - // ["XZ"] = pixZipLarge, - // ["TAR"] = pixZipLarge, - // ["7Z"] = pixZipLarge, - // ["EXE"] = pixAppsLarge, - // ["JAR"] = pixAppsLarge, - // ["MSI"] = pixAppsLarge, - // ["JPG"] = pixVideoLarge, - // ["JPEG"] = pixVideoLarge, - // ["GIF"] = pixVideoLarge, - // ["PNG"] = pixVideoLarge, - // ["DOCX"] = pixDocLarge, - // ["DOC"] = pixDocLarge, - // ["PDF"] = pixDocLarge, - // ["ODT"] = pixDocLarge - //}; - - - - return items; - } - - public bool ConfirmDelete(string message) - { - var messageBox = new MessageDialog(this, DialogFlags.Modal, MessageType.Other, ButtonsType.YesNo, message); - messageBox.ContentArea.Margin = 10; - var ret = messageBox.Run() == (int)Gtk.ResponseType.Yes; - messageBox.Dispose(); - return ret; - } - - public void ShowVideoDownloadDialog(string id, string name) - { - var builder = new Builder(); - builder.AddFromFile(System.IO.Path.Combine(path, "glade", "vid-capture.glade")); - var window = (Window)builder.GetObject("vid-win"); - var imgbox = (Image)builder.GetObject("imgbox"); - var txtFile = (Entry)builder.GetObject("txt-file"); - - imgbox.Pixbuf = new Gdk.Pixbuf(IoPath.Combine(path, "images", "film-line.svg"), 48, 48, true); - - txtFile.Text = Helpers.SanitizeFileName(name); - - var btnBrowse = (Button)builder.GetObject("btn-browse"); - var btnCancel = (Button)builder.GetObject("btn-cancel"); - var btnDownload = (Button)builder.GetObject("btn-download"); - - string folder = Helpers.GetDownloadFolderByFileName(name); - - btnBrowse.Clicked += (a, b) => - { - Directory.CreateDirectory(folder); - var fc = new FileChooserNative("Save", window, FileChooserAction.Save, "Save", "Cancel") - { - CurrentName = name, - DoOverwriteConfirmation = true - }; - var filter = new FileFilter() { Name = "All files" }; - filter.AddPattern("*"); - fc.AddFilter(filter); - fc.SetCurrentFolder(folder); - if (fc.Run() == (int)Gtk.ResponseType.Accept) - { - name = IoPath.GetFileName(fc.Filename); - folder = IoPath.GetDirectoryName(fc.Filename); - } - fc.Dispose(); - }; - - btnDownload.Clicked += (a, b) => - { - app.StartVideoDownload(id, name, folder, true, null, null, null, 0); - window.Dispose(); - }; - - btnCancel.Clicked += (a, b) => - { - window.Dispose(); - }; - Application.Invoke((a, b) => - { - window.Show(); - }); - } - - //private Toolbar CreateAppToolbar() - //{ - // var toolbar = new Toolbar(); - // toolbar.BorderWidth = 2; - // toolbar.ToolbarStyle = ToolbarStyle.Icons; - - // ToolButton newDownloadButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "add-line.svg"), 20, 20, true)) { Margin = 5 }, "Delete"); - // ToolButton newVideoDwnButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 20, 20, true)) { Margin = 5 }, "Resume"); - // ToolButton pauseButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "pause-line.svg"), 20, 20, true)) { Margin = 5 }, "Pause"); - // ToolButton resumeButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "play-line.svg"), 20, 20, true)) { Margin = 5 }, "Media download"); - // ToolButton deleteButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 20, 20, true)) { Margin = 5 }, "Pause"); - - // toolbar.Add(newDownloadButton); - // toolbar.Add(newVideoDwnButton); - // toolbar.Add(pauseButton); - // toolbar.Add(resumeButton); - // toolbar.Add(deleteButton); - // toolbar.ShowAll(); - - // newDownloadButton.Clicked += (a, b) => { ShowNewDownload1Dialog(); }; - - // return toolbar; - //} - - //private TreeView CreateTreeView2() - //{ - // TreeView tree = new TreeView(); - // tree.StyleContext.AddClass("dark-tree"); - // tree.HeadersVisible = false; - - // TreeViewColumn languages = new TreeViewColumn(); - // languages.Title = "Downloading"; - - // var fileIconRenderer = new CellRendererPixbuf { Pixbuf = new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "file-line.svg"), 16, 16, true) /*StockId = Stock.File*/ }; - // fileIconRenderer.SetPadding(5,8); - // languages.PackStart(fileIconRenderer, false); - - // CellRendererText cell = new CellRendererText(); - // cell.SetPadding(5,8); - // languages.PackStart(cell, true); - // languages.AddAttribute(cell, "text", 0); - - // TreeStore treestore = new TreeStore(typeof(string)); - - // TreeIter iter = treestore.AppendValues("Incomplete"); - // //treestore.AppendValues(iter, "Python"); - // //treestore.AppendValues(iter, "PHP"); - // //treestore.AppendValues(iter, "Perl"); - // //treestore.AppendValues(iter, "Ruby"); - - // iter = treestore.AppendValues("Complete"); - // treestore.AppendValues(iter, "C#"); - // treestore.AppendValues(iter, "C++"); - // treestore.AppendValues(iter, "C"); - // treestore.AppendValues(iter, "Java"); - - // tree.AppendColumn(languages); - // tree.Model = treestore; - - // tree.ShowAll(); - - // return tree; - //} - - private void LoadFileIcons() - { - var pixDocSmall = new Pixbuf(IoPath.Combine(path, "images", "file-text-line.svg"), 24, 24, true); - var pixMusicSmall = new Pixbuf(IoPath.Combine(path, "images", "music-2-line.svg"), 24, 24, true); - var pixVideoSmall = new Pixbuf(IoPath.Combine(path, "images", "film-line.svg"), 24, 24, true); - var pixZipSmall = new Pixbuf(IoPath.Combine(path, "images", "file-zip-line.svg"), 24, 24, true); - var pixAppsSmall = new Pixbuf(IoPath.Combine(path, "images", "apps-line.svg"), 24, 24, true); - var pixImgSmall = new Pixbuf(IoPath.Combine(path, "images", "image-line.svg"), 24, 24, true); - pixOtherSmall = new Pixbuf(IoPath.Combine(path, "images", "file-line.svg"), 16, 16, true); - fileIconsSmall = new Dictionary - { - ["MP4"] = pixVideoSmall, - ["MKV"] = pixVideoSmall, - ["WEBM"] = pixVideoSmall, - ["TS"] = pixVideoSmall, - ["MOV"] = pixVideoSmall, - ["MP3"] = pixMusicSmall, - ["M4A"] = pixMusicSmall, - ["AAC"] = pixMusicSmall, - ["OGG"] = pixMusicSmall, - ["ZIP"] = pixZipSmall, - ["BZ2"] = pixZipSmall, - ["TBZ"] = pixZipSmall, - ["XZ"] = pixZipSmall, - ["TAR"] = pixZipSmall, - ["7Z"] = pixZipSmall, - ["EXE"] = pixAppsSmall, - ["JAR"] = pixAppsSmall, - ["MSI"] = pixAppsSmall, - ["JPG"] = pixVideoSmall, - ["JPEG"] = pixVideoSmall, - ["GIF"] = pixVideoSmall, - ["PNG"] = pixVideoSmall, - ["DOCX"] = pixDocSmall, - ["DOC"] = pixDocSmall, - ["PDF"] = pixDocSmall, - ["ODT"] = pixDocSmall - }; - - - - } - - void GetFileIcon(ICellLayout cell_layout, - CellRenderer cell, ITreeModel tree_model, TreeIter iter) - { - var name = (string)tree_model.GetValue(iter, FILE_NAME); - var ext = IoPath.GetExtension(name)?.ToUpperInvariant(); - var pix = ext == null ? pixOtherSmall : fileIconsSmall.GetValueOrDefault(ext.Length > 0 ? ext.Substring(1) : string.Empty, pixOtherSmall); - (cell as CellRendererPixbuf).Pixbuf = pix; - } - - public void RefereshListView() - { - filter?.Refilter(); - } - - public class RowRef : RowItem - { - public TreeIter TreeIter { get; set; } - } - } - - -} +// swMainScrollView = new ScrolledWindow +// { +// OverlayScrolling = true +// }; +// swMainScrollView.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); +// swMainScrollView.Add(inProgressTreeView); +// swMainScrollView.Show(); + +// VBox vb32 = new VBox(); +// if (!showHeaderBar) +// vb32.PackStart(toolbar, false, false, 0); +// vb32.PackStart(swMainScrollView, true, true, 0); +// vb32.Show(); + +// paned.Add2(vb32); + +// //hBox.PackStart(sw2, true, true, 0); +// //hBox.PackStart(sw, true, true, 0); +// VBox vbox = new VBox(false, 2); + +// vbox.PackStart(paned, true, true, 0); + +// Add(vbox); + +// if (showHeaderBar) +// header.ShowAll(); +// vb12.Show(); +// sw2.Show(); +// paned.Show(); +// vbox.Show(); + +// for (int i = 0; i < 10000; i++) +// { +// store.AppendValues("不能下载为自动选择清晰度模式下的视频", "sample date", 30, "aaaaa"); +// } +// clipboard = Clipboard.Get(Gdk.Selection.Clipboard); + + +// var items = new Dictionary(); +// foreach (var ent in Enumerable.Range(1,100)) +// { +// items[Guid.NewGuid().ToString()] = new RowRef +// { +// TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ +// @"বেস্বাধীনভাবে সমান মর্যাদা" /*ent.Name*/, "10/10/20", 20, "123 gb", "", +// "Finished" , +// "121312323", 0, 0, "") +// // TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ +// //"hello"/*@"স্বাধীনভাবে সমান মর্যাদা"*/ /*ent.Name*/, ent.DateAdded.ToShortDateString(), ent.Progress, Helpers.FormatSize(ent.Size), "", +// // ent.Status == DownloadStatus.Finished ? "Finished" : "Stopped", +// // ent.Id, ent.DateAdded.Ticks, ent.Size, ent.DownloadType) +// }; +// } + + +// //app.LoadDownloadList(); + +// //Realized += (a, b) => +// //{ +// // var hwnd= FindWindowEx() +// //}; + +// //Shown += (a, b) => +// // { +// // var hwnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, null, "XDM 2021"); +// // if (hwnd != IntPtr.Zero) +// // { +// // var wl = GetWindowLong(hwnd, -16); +// // SetWindowLong(hwnd, -16, wl | 0x00020000); +// // } +// // }; +// } + + +// [DllImport("user32.dll", CharSet = CharSet.Unicode)] +// static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle); + +// [DllImport("user32.dll")] +// static extern int SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong); + +// [DllImport("user32.dll", EntryPoint = "GetWindowLong")] +// static extern uint GetWindowLong(IntPtr hWnd, int nIndex); + +// private void CreateTreeView() +// { + + + +// store = new ListStore(typeof(string), // file name +// typeof(string), // date modified +// typeof(int), // progress +// typeof(string), // size +// typeof(string), // file icon id +// typeof(string), // status +// typeof(string), // id +// typeof(long), // date in epoch +// typeof(long), // size in long +// typeof(string) // download type +// ); + +// //store.SetSortFunc(DATE_MODIFIED, (model, iter1, iter2) => +// //{ +// // var t1 = (long)store.GetValue(iter1, DATE_IN_MILLIS); +// // var t2 = (long)store.GetValue(iter2, DATE_IN_MILLIS); +// // if (t1 > t2) return 1; +// // if (t2 > t1) return -1; +// // return 0; +// //}); + +// //store.SetSortFunc(SIZE, (model, iter1, iter2) => +// //{ +// // var s1 = (long)store.GetValue(iter1, SIZE_REAL); +// // var s2 = (long)store.GetValue(iter2, SIZE_REAL); +// // if (s1 > s2) return 1; +// // if (s2 > s1) return -1; +// // return 0; +// //}); + +// this.filter = new TreeModelFilter(store, null); +// filter.VisibleFunc = (model, iter) => +// { +// var status = (string)model.GetValue(iter, STATUS);//"Finished" +// return this.isShowingUnfinishedOnly ? "Finished" != status : "Finished" == status; +// }; + +// inProgressTreeView = new TreeView(filter); +// inProgressTreeView.Selection.Mode = SelectionMode.Multiple; + +// //File name column +// var fileNameColumn = new TreeViewColumn +// { +// Resizable = true, +// Reorderable = true, +// Title = "Name", +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 200 +// }; + +// fileNameColumn.SortColumnId = FILE_NAME; + +// var fileIconRenderer = new CellRendererPixbuf { }; + +// fileIconRenderer.SetPadding(5, 8); + +// fileNameColumn.PackStart(fileIconRenderer, false); + +// fileNameColumn.SetCellDataFunc(fileIconRenderer, new CellLayoutDataFunc(GetFileIcon)); +// //TODO: get icon from model + +// var fileNameRendererText = new CellRendererText(); +// fileNameRendererText.SetPadding(5, 8); +// fileNameColumn.PackStart(fileNameRendererText, false); +// fileNameColumn.SetAttributes(fileNameRendererText, "text", FILE_NAME); +// inProgressTreeView.AppendColumn(fileNameColumn); + +// //File size column +// var fileSizeRendererText = new CellRendererText(); +// fileSizeRendererText.Xalign = 1.0f; +// fileSizeRendererText.SetPadding(5, 8); +// var fileSizeColumn = new TreeViewColumn +// { +// Resizable = true, +// Reorderable = true, +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 80, +// Title = "Size", +// }; +// fileSizeColumn.PackEnd(fileSizeRendererText, false); +// fileSizeColumn.SetAttributes(fileSizeRendererText, "text", SIZE); +// fileSizeColumn.SortColumnId = SIZE_REAL; +// inProgressTreeView.AppendColumn(fileSizeColumn); + +// //File progress column +// var fileRendererProgress = new CellRendererProgress() +// { +// //Text = "Downloading", +// }; + +// fileRendererProgress.SetPadding(5, 10); +// var progressColumn = new TreeViewColumn("Progress", fileRendererProgress, "value", PROGRESS) +// { +// Resizable = true, +// Reorderable = true, +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 80 +// }; +// progressColumn.SetAttributes(fileRendererProgress, "value", PROGRESS); +// inProgressTreeView.AppendColumn(progressColumn); + +// //Last modified column +// var lastModifiedRendererText = new CellRendererText(); +// lastModifiedRendererText.SetPadding(5, 8); +// var lastModifiedColumn = new TreeViewColumn("Date added", lastModifiedRendererText, "text", DATE_MODIFIED) +// { +// Resizable = true, +// Reorderable = true, +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 100 +// }; +// lastModifiedColumn.SortColumnId = DATE_IN_MILLIS; +// lastModifiedColumn.SetAttributes(lastModifiedRendererText, "text", DATE_MODIFIED); +// inProgressTreeView.AppendColumn(lastModifiedColumn); + +// //Download status column +// var statusRendererText = new CellRendererText(); +// statusRendererText.SetPadding(5, 8); +// var statusColumn = new TreeViewColumn("Status", statusRendererText, "text", STATUS) +// { +// Resizable = true, +// Reorderable = true, +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 80 +// }; +// statusColumn.SortColumnId = STATUS; +// statusColumn.SetAttributes(statusRendererText, "text", STATUS); +// inProgressTreeView.AppendColumn(statusColumn); + +// inProgressTreeView.StyleContext.AddClass("listt"); + +// inProgressTreeView.Show(); +// } + +// private void CreateCompletedTreeView() +// { +// completedTreeView = new TreeView(filter); +// completedTreeView.Selection.Mode = SelectionMode.Multiple; + +// //File name column +// var fileNameColumn = new TreeViewColumn +// { +// Resizable = true, +// Reorderable = true, +// Title = "Name", +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 400 +// }; + +// fileNameColumn.SortColumnId = FILE_NAME; + +// var fileIconRenderer = new CellRendererPixbuf { }; + +// fileIconRenderer.SetPadding(5, 8); +// fileNameColumn.PackStart(fileIconRenderer, false); + +// fileNameColumn.SetCellDataFunc(fileIconRenderer, new CellLayoutDataFunc(GetFileIcon)); +// //TODO: get icon from model + +// var fileNameRendererText = new CellRendererText(); +// fileNameRendererText.SetPadding(5, 8); +// fileNameColumn.PackStart(fileNameRendererText, false); +// fileNameColumn.SetAttributes(fileNameRendererText, "text", FILE_NAME); +// completedTreeView.AppendColumn(fileNameColumn); + +// //File size column +// var fileSizeRendererText = new CellRendererText(); +// fileSizeRendererText.Xalign = 1.0f; +// fileSizeRendererText.SetPadding(5, 8); +// var fileSizeColumn = new TreeViewColumn +// { +// Resizable = true, +// Reorderable = true, +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 80, +// Title = "Size", +// }; +// fileSizeColumn.PackEnd(fileSizeRendererText, false); +// fileSizeColumn.SetAttributes(fileSizeRendererText, "text", SIZE); +// fileSizeColumn.SortColumnId = SIZE_REAL; +// completedTreeView.AppendColumn(fileSizeColumn); + + +// //Last modified column +// var lastModifiedRendererText = new CellRendererText(); +// lastModifiedRendererText.SetPadding(5, 8); +// var lastModifiedColumn = new TreeViewColumn("Date added", lastModifiedRendererText, "text", DATE_MODIFIED) +// { +// Resizable = true, +// Reorderable = true, +// Sizing = TreeViewColumnSizing.Fixed, +// FixedWidth = 100 +// }; +// lastModifiedColumn.SortColumnId = DATE_IN_MILLIS; +// lastModifiedColumn.SetAttributes(lastModifiedRendererText, "text", DATE_MODIFIED); +// completedTreeView.AppendColumn(lastModifiedColumn); + +// completedTreeView.StyleContext.AddClass("listt"); +// completedTreeView.Show(); + +// } + +// public RowItem AddItem(string file, string date, int progress, string size, string id, +// long realSize, DateTime dateAdded, string type) +// { +// return new RowRef { TreeIter = store.AppendValues(file, date, progress, size, "", "Downloading", id, dateAdded.Ticks, realSize, type) }; +// } + +// public RowItem AddItemToTop(string file, string date, int progress, string size, string id, +// long realSize, DateTime dateAdded, string type) +// { +// var treeIter = store.InsertWithValues(0, file, date, progress, size, "", "Downloading", id, dateAdded.Ticks, realSize, type); +// inProgressTreeView.SetCursor(store.GetPath(treeIter), inProgressTreeView.GetColumn(0), false); +// app.SaveState(); +// RefereshListView(); +// return new RowRef { TreeIter = treeIter }; +// } + +// public void UpdateItem(RowItem item, string name, string size, long realSize) +// { +// Gtk.Application.Invoke((a, b) => +// { +// store.SetValue(((RowRef)item).TreeIter, FILE_NAME, name); +// store.SetValue(((RowRef)item).TreeIter, SIZE, size); +// store.SetValue(((RowRef)item).TreeIter, SIZE_REAL, realSize); +// app.SaveState(); +// RefereshListView(); +// }); +// } + +// public void UpdateProgress(RowItem item, int progress) +// { +// if (progress <= 100 && progress >= 0) +// { +// Gtk.Application.Invoke((a, b) => +// { +// try +// { +// store.SetValue(((RowRef)item).TreeIter, PROGRESS, progress); +// app.SaveState(); +// RefereshListView(); +// } +// catch (Exception e) +// { +// Console.WriteLine(e); +// } +// }); +// } +// } + +// public void DownloadFinished(RowItem item, long size = -1) +// { +// Gtk.Application.Invoke((a, b) => +// { +// var iter = ((RowRef)item).TreeIter; +// store.SetValue(iter, PROGRESS, 100); +// store.SetValue(iter, STATUS, "Finished"); +// if ((long)store.GetValue(iter, SIZE_REAL) < 0 && size >= 0) +// { +// store.SetValue(iter, SIZE, Helpers.FormatSize(size)); +// store.SetValue(iter, SIZE_REAL, size); +// } +// app.SaveState(); +// RefereshListView(); +// }); + +// } + +// public void DownloadFailed(RowItem item) +// { +// Gtk.Application.Invoke((a, b) => +// { +// store.SetValue(((RowRef)item).TreeIter, STATUS, "Failed"); +// app.SaveState(); +// RefereshListView(); +// }); + +// } + +// public void DownloadCanelled(RowItem item) +// { +// Gtk.Application.Invoke((a, b) => +// { +// store.SetValue(((RowRef)item).TreeIter, STATUS, "Stopped"); +// app.SaveState(); +// RefereshListView(); +// }); + +// } + +// public void DeleteDownload(List items) +// { +// if (items != null) +// { +// foreach (var item in items) +// { +// var iter = ((RowRef)item).TreeIter; +// store.Remove(ref iter); +// } +// } +// RefereshListView(); +// } + +// private void AppWin1_DeleteEvent(object o, DeleteEventArgs args) +// { +// Application.Quit(); +// } + +// private ListBox CreateListBox(Dictionary labels, int startMargin = 15) +// { +// ListBox lb = new ListBox(); +// lb.StyleContext.AddClass("dark"); +// //lb.OverrideBackgroundColor(StateFlags.Normal, new Label().StyleContext.GetBackgroundColor(StateFlags.Normal)); +// lb.Visible = true; + +// //foreach (var text in new string[] { "All Downloads", "Finished/Completed", "Downloading", "Paused/Stopped" }) +// foreach (var ent in labels) +// { +// var r1 = new ListBoxRow(); +// r1.Visible = true; +// var hBox = new HBox(); +// hBox.Margin = 5; +// hBox.Visible = true; +// hBox.MarginStart = startMargin; +// var lbl = new Label { Text = ent.Key, Halign = Align.Start, Visible = true }; +// hBox.PackStart(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", ent.Value/*"folder-download-line.svg"*/), 16, 16, true)) { Visible = true }, false, false, 10); +// hBox.PackStart(lbl, true, true, 0); +// r1.Add(hBox); +// lb.Add(r1); +// } + +// //lb.SelectRow(lb.GetRowAtIndex(0)); +// return lb; +// } + +// private ListBox CreateQueueListBox() +// { +// ListBox lb = new ListBox(); +// lb.StyleContext.AddClass("dark"); +// lb.Visible = true; +// foreach (var text in new string[] { "Default Queue" }) +// { +// var r1 = new ListBoxRow(); +// r1.Visible = true; +// var hBox = new HBox(); +// hBox.Visible = true; +// var lbl = new Label { Text = text, Halign = Align.Start, Visible = true }; +// lbl.Margin = 5; +// hBox.PackStart(lbl, true, true, 20); +// r1.Add(hBox); +// lb.Add(r1); +// } + +// //lb.SelectRow(lb.GetRowAtIndex(0)); +// return lb; +// } + +// private Widget CreateTree1() +// { +// TreeView tree = new TreeView(); +// tree.HeadersVisible = false; + +// TreeViewColumn languages = new TreeViewColumn(); +// languages.Title = "Programming languages"; + +// CellRendererText cell = new CellRendererText(); +// cell.SetPadding(5, 5); +// languages.PackStart(cell, true); +// languages.AddAttribute(cell, "text", 0); + +// TreeStore treestore = new TreeStore(typeof(string), typeof(string)); + +// TreeIter iter = treestore.AppendValues("Scripting languages"); +// treestore.AppendValues(iter, "Python"); +// treestore.AppendValues(iter, "PHP"); +// treestore.AppendValues(iter, "Perl"); +// treestore.AppendValues(iter, "Ruby"); + +// //iter = treestore.AppendValues("Compiling languages"); +// //treestore.AppendValues(iter, "C#"); +// //treestore.AppendValues(iter, "C++"); +// //treestore.AppendValues(iter, "C"); +// //treestore.AppendValues(iter, "Java"); + +// tree.AppendColumn(languages); +// tree.Model = treestore; + +// tree.Selection.Mode = SelectionMode.Browse; + +// ScrolledWindow sw2 = new ScrolledWindow(); +// sw2.OverlayScrolling = true; +// sw2.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); +// sw2.Add(tree); +// sw2.ShowAll(); +// return sw2; +// } + +// public void ShowNewDownloadDialog(Message message, string providedFileName = null) +// { +// var builder = new Builder(); +// builder.AddFromFile(System.IO.Path.Combine(path, "glade", "new-download.glade")); +// var window = (Window)builder.GetObject("new-download-dialog"); +// var txtUrl = (Entry)builder.GetObject("txt-url"); +// var txtFile = (Entry)builder.GetObject("txt-file"); + +// var lblFileSize = (Label)builder.GetObject("lbl-file-size"); +// lblFileSize.Text = ""; +// txtUrl.Text = message.Url; + +// var fileName = providedFileName ?? Helpers.SanitizeFileName(IoPath.GetFileName(new Uri(message.Url).LocalPath)); +// string downloadFolder = Helpers.GetDownloadFolderByFileName(fileName); +// Console.WriteLine(downloadFolder); + +// txtFile.Text = fileName; + +// var http = new SingleSourceHTTPDownloader(new SingleSourceHTTPDownloadInfo +// { +// Uri = message.Url, +// Headers = message.RequestHeaders, +// Cookies = message.Cookies +// }); +// if (!string.IsNullOrWhiteSpace(providedFileName)) +// { +// //http.SetFileName(providedFileName, true); +// } + +// var btnBrowse = (Button)builder.GetObject("btn-browse"); +// var btnCancel = (Button)builder.GetObject("btn-cancel"); +// var btnDownload = (Button)builder.GetObject("btn-download"); + +// btnBrowse.Clicked += (a, b) => +// { +// Directory.CreateDirectory(downloadFolder); +// var fc = new FileChooserNative("Save", window, FileChooserAction.Save, "Save", "Cancel") +// { +// CurrentName = fileName, +// DoOverwriteConfirmation = true +// }; +// var filter = new FileFilter() { Name = "All files" }; +// filter.AddPattern("*"); +// fc.AddFilter(filter); +// fc.SetCurrentFolder(downloadFolder); +// if (fc.Run() == (int)Gtk.ResponseType.Accept) +// { +// var file = IoPath.GetFileName(fc.Filename); +// var folder = IoPath.GetDirectoryName(fc.Filename); + +// if (!fileName.Equals(file, StringComparison.InvariantCultureIgnoreCase)) +// { +// txtFile.Text = file; +// //http.SetFileName(txtFile.Text, false); +// } +// http.SetTargetDirectory(folder); +// } +// fc.Dispose(); +// }; + +// btnDownload.Clicked += (a, b) => +// { +// //app.StartDownload(http, true); +// //http.Start(); +// //window.Dispose(); +// }; + +// btnCancel.Clicked += (a, b) => +// { +// http.Stop(); +// window.Dispose(); +// }; + +// //void HandleProbeResult(object source, EventArgs args) +// //{ +// // Console.WriteLine("File name: " + http.TargetFileName); +// // Application.Invoke((a, b) => +// // { +// // txtFile.Text = http.TargetFileName; +// // downloadFolder = IoPath.GetDirectoryName(http.TargetFile); +// // if (http.FileSize > 0) +// // { +// // lblFileSize.Text = Helpers.FormatSize(http.FileSize); +// // } +// // else +// // { +// // lblFileSize.Text = "---"; +// // } +// // }); +// //} +// //http.Probed += HandleProbeResult; +// //window.DestroyEvent += (a, b) => +// //{ +// // http.Probed -= HandleProbeResult; +// //}; + +// Application.Invoke((a, b) => +// { +// window.Show(); +// //http.ProbeTargetAsync(); +// }); +// } + +// void ShowNewDownload1Dialog() +// { +// var builder = new Builder(); +// builder.AddFromFile(System.IO.Path.Combine(path, "glade", "url-capture.glade")); +// var window = (Window)builder.GetObject("url-capture"); +// window.Show(); +// var btnDownload = (Button)builder.GetObject("download-btn"); +// var textField = (Entry)builder.GetObject("url-text"); +// var btnCancel = (Button)builder.GetObject("cancel-btn"); + +// btnCancel.Clicked += (a, b) => window.Dispose(); + +// var urlText = clipboard.WaitForText(); +// if (urlText != null && Helpers.IsUriValid(urlText)) +// { +// textField.Text = urlText; +// } + +// btnDownload.Clicked += (a, b) => +// { +// var text = textField.Text; +// var validUrl = true; +// if (!string.IsNullOrWhiteSpace(text)) +// { +// try +// { +// new Uri(text); +// } +// catch +// { +// validUrl = false; +// } +// } +// else +// { +// validUrl = false; +// } + +// if (!validUrl) +// { +// var msgDlg = new MessageDialog(window, +// DialogFlags.UseHeaderBar | DialogFlags.Modal | DialogFlags.DestroyWithParent, +// MessageType.Error, ButtonsType.Ok, false, "Address Invalid") +// { +// SecondaryText = "Please enter valid address for download" +// }; +// msgDlg.Run(); +// msgDlg.Dispose(); +// return; +// } + +// window.Dispose(); +// ShowNewDownloadDialog(new Message { Url = text }); +// }; +// } + +// public List GetListData() +// { +// var list = new List(); +// store.Foreach((model, treePath, iter) => +// { +// var ent = new InProgressDownloadEntry +// { +// Name = (string)store.GetValue(iter, FILE_NAME), +// Size = (long)store.GetValue(iter, SIZE_REAL), +// DateAdded = new DateTime((long)store.GetValue(iter, DATE_IN_MILLIS)), +// Category = "Other", +// Id = (string)store.GetValue(iter, DOWNLOAD_ID), +// Progress = (int)store.GetValue(iter, PROGRESS), +// Status = ((string)store.GetValue(iter, STATUS)) == "Finished" ? DownloadStatus.Finished : DownloadStatus.Stopped, +// DownloadType = (string)store.GetValue(iter, DOWNLOAD_TYPE) +// }; +// list.Add(ent); +// return false; +// }); +// return list; +// } + +// public Dictionary SetListData(List list) +// { + +// var items = new Dictionary(); +// foreach (var ent in list) +// { +// items[ent.Id] = new RowRef +// { +// TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ +// @"বেস্বাধীনভাবে সমান মর্যাদা" /*ent.Name*/, "10/10/20", 20, "123 gb", "", +// ent.Status == DownloadStatus.Finished ? "Finished" : "Stopped", +// "121312323", 0, 0, "") +// // TreeIter = store.AppendValues(/*"不能下载为自动选择清晰度模式下的视频"*/ +// //"hello"/*@"স্বাধীনভাবে সমান মর্যাদা"*/ /*ent.Name*/, ent.DateAdded.ToShortDateString(), ent.Progress, Helpers.FormatSize(ent.Size), "", +// // ent.Status == DownloadStatus.Finished ? "Finished" : "Stopped", +// // ent.Id, ent.DateAdded.Ticks, ent.Size, ent.DownloadType) +// }; +// } + + + +// //var pixDocLarge = new Pixbuf(IoPath.Combine(path, "images", "file-text-line.svg"), 64, 64, true); +// //var pixMusicLarge = new Pixbuf(IoPath.Combine(path, "images", "music-2-line.svg"), 64, 64, true); +// //var pixVideoLarge = new Pixbuf(IoPath.Combine(path, "images", "film-line.svg"), 64, 64, true); +// //var pixZipLarge = new Pixbuf(IoPath.Combine(path, "images", "file-zip-line.svg"), 64, 64, true); +// //var pixAppsLarge = new Pixbuf(IoPath.Combine(path, "images", "apps-line.svg"), 64, 64, true); +// //var pixImgLarge = new Pixbuf(IoPath.Combine(path, "images", "image-line.svg"), 64, 64, true); +// //var pixOtherLarge = new Pixbuf(IoPath.Combine(path, "images", "file-line.svg"), 64, 64, true); + +// //var fileIconsLarge = new Dictionary +// //{ +// // ["MP4"] = pixVideoLarge, +// // ["MKV"] = pixVideoLarge, +// // ["WEBM"] = pixVideoLarge, +// // ["TS"] = pixVideoLarge, +// // ["MOV"] = pixVideoLarge, +// // ["MP3"] = pixMusicLarge, +// // ["M4A"] = pixMusicLarge, +// // ["AAC"] = pixMusicLarge, +// // ["OGG"] = pixMusicLarge, +// // ["ZIP"] = pixZipLarge, +// // ["BZ2"] = pixZipLarge, +// // ["TBZ"] = pixZipLarge, +// // ["XZ"] = pixZipLarge, +// // ["TAR"] = pixZipLarge, +// // ["7Z"] = pixZipLarge, +// // ["EXE"] = pixAppsLarge, +// // ["JAR"] = pixAppsLarge, +// // ["MSI"] = pixAppsLarge, +// // ["JPG"] = pixVideoLarge, +// // ["JPEG"] = pixVideoLarge, +// // ["GIF"] = pixVideoLarge, +// // ["PNG"] = pixVideoLarge, +// // ["DOCX"] = pixDocLarge, +// // ["DOC"] = pixDocLarge, +// // ["PDF"] = pixDocLarge, +// // ["ODT"] = pixDocLarge +// //}; + + + +// return items; +// } + +// public bool ConfirmDelete(string message) +// { +// var messageBox = new MessageDialog(this, DialogFlags.Modal, MessageType.Other, ButtonsType.YesNo, message); +// messageBox.ContentArea.Margin = 10; +// var ret = messageBox.Run() == (int)Gtk.ResponseType.Yes; +// messageBox.Dispose(); +// return ret; +// } + +// public void ShowVideoDownloadDialog(string id, string name) +// { +// var builder = new Builder(); +// builder.AddFromFile(System.IO.Path.Combine(path, "glade", "vid-capture.glade")); +// var window = (Window)builder.GetObject("vid-win"); +// var imgbox = (Image)builder.GetObject("imgbox"); +// var txtFile = (Entry)builder.GetObject("txt-file"); + +// imgbox.Pixbuf = new Gdk.Pixbuf(IoPath.Combine(path, "images", "film-line.svg"), 48, 48, true); + +// txtFile.Text = Helpers.SanitizeFileName(name); + +// var btnBrowse = (Button)builder.GetObject("btn-browse"); +// var btnCancel = (Button)builder.GetObject("btn-cancel"); +// var btnDownload = (Button)builder.GetObject("btn-download"); + +// string folder = Helpers.GetDownloadFolderByFileName(name); + +// btnBrowse.Clicked += (a, b) => +// { +// Directory.CreateDirectory(folder); +// var fc = new FileChooserNative("Save", window, FileChooserAction.Save, "Save", "Cancel") +// { +// CurrentName = name, +// DoOverwriteConfirmation = true +// }; +// var filter = new FileFilter() { Name = "All files" }; +// filter.AddPattern("*"); +// fc.AddFilter(filter); +// fc.SetCurrentFolder(folder); +// if (fc.Run() == (int)Gtk.ResponseType.Accept) +// { +// name = IoPath.GetFileName(fc.Filename); +// folder = IoPath.GetDirectoryName(fc.Filename); +// } +// fc.Dispose(); +// }; + +// btnDownload.Clicked += (a, b) => +// { +// app.StartVideoDownload(id, name, folder, true, null, null, null, 0); +// window.Dispose(); +// }; + +// btnCancel.Clicked += (a, b) => +// { +// window.Dispose(); +// }; +// Application.Invoke((a, b) => +// { +// window.Show(); +// }); +// } + +// //private Toolbar CreateAppToolbar() +// //{ +// // var toolbar = new Toolbar(); +// // toolbar.BorderWidth = 2; +// // toolbar.ToolbarStyle = ToolbarStyle.Icons; + +// // ToolButton newDownloadButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "add-line.svg"), 20, 20, true)) { Margin = 5 }, "Delete"); +// // ToolButton newVideoDwnButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 20, 20, true)) { Margin = 5 }, "Resume"); +// // ToolButton pauseButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "pause-line.svg"), 20, 20, true)) { Margin = 5 }, "Pause"); +// // ToolButton resumeButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "play-line.svg"), 20, 20, true)) { Margin = 5 }, "Media download"); +// // ToolButton deleteButton = new ToolButton(new Image(new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "video-download-line.svg"), 20, 20, true)) { Margin = 5 }, "Pause"); + +// // toolbar.Add(newDownloadButton); +// // toolbar.Add(newVideoDwnButton); +// // toolbar.Add(pauseButton); +// // toolbar.Add(resumeButton); +// // toolbar.Add(deleteButton); +// // toolbar.ShowAll(); + +// // newDownloadButton.Clicked += (a, b) => { ShowNewDownload1Dialog(); }; + +// // return toolbar; +// //} + +// //private TreeView CreateTreeView2() +// //{ +// // TreeView tree = new TreeView(); +// // tree.StyleContext.AddClass("dark-tree"); +// // tree.HeadersVisible = false; + +// // TreeViewColumn languages = new TreeViewColumn(); +// // languages.Title = "Downloading"; + +// // var fileIconRenderer = new CellRendererPixbuf { Pixbuf = new Gdk.Pixbuf(System.IO.Path.Combine(path, "images", "file-line.svg"), 16, 16, true) /*StockId = Stock.File*/ }; +// // fileIconRenderer.SetPadding(5,8); +// // languages.PackStart(fileIconRenderer, false); + +// // CellRendererText cell = new CellRendererText(); +// // cell.SetPadding(5,8); +// // languages.PackStart(cell, true); +// // languages.AddAttribute(cell, "text", 0); + +// // TreeStore treestore = new TreeStore(typeof(string)); + +// // TreeIter iter = treestore.AppendValues("Incomplete"); +// // //treestore.AppendValues(iter, "Python"); +// // //treestore.AppendValues(iter, "PHP"); +// // //treestore.AppendValues(iter, "Perl"); +// // //treestore.AppendValues(iter, "Ruby"); + +// // iter = treestore.AppendValues("Complete"); +// // treestore.AppendValues(iter, "C#"); +// // treestore.AppendValues(iter, "C++"); +// // treestore.AppendValues(iter, "C"); +// // treestore.AppendValues(iter, "Java"); + +// // tree.AppendColumn(languages); +// // tree.Model = treestore; + +// // tree.ShowAll(); + +// // return tree; +// //} + +// private void LoadFileIcons() +// { +// var pixDocSmall = new Pixbuf(IoPath.Combine(path, "images", "file-text-line.svg"), 24, 24, true); +// var pixMusicSmall = new Pixbuf(IoPath.Combine(path, "images", "music-2-line.svg"), 24, 24, true); +// var pixVideoSmall = new Pixbuf(IoPath.Combine(path, "images", "film-line.svg"), 24, 24, true); +// var pixZipSmall = new Pixbuf(IoPath.Combine(path, "images", "file-zip-line.svg"), 24, 24, true); +// var pixAppsSmall = new Pixbuf(IoPath.Combine(path, "images", "apps-line.svg"), 24, 24, true); +// var pixImgSmall = new Pixbuf(IoPath.Combine(path, "images", "image-line.svg"), 24, 24, true); +// pixOtherSmall = new Pixbuf(IoPath.Combine(path, "images", "file-line.svg"), 16, 16, true); +// fileIconsSmall = new Dictionary +// { +// ["MP4"] = pixVideoSmall, +// ["MKV"] = pixVideoSmall, +// ["WEBM"] = pixVideoSmall, +// ["TS"] = pixVideoSmall, +// ["MOV"] = pixVideoSmall, +// ["MP3"] = pixMusicSmall, +// ["M4A"] = pixMusicSmall, +// ["AAC"] = pixMusicSmall, +// ["OGG"] = pixMusicSmall, +// ["ZIP"] = pixZipSmall, +// ["BZ2"] = pixZipSmall, +// ["TBZ"] = pixZipSmall, +// ["XZ"] = pixZipSmall, +// ["TAR"] = pixZipSmall, +// ["7Z"] = pixZipSmall, +// ["EXE"] = pixAppsSmall, +// ["JAR"] = pixAppsSmall, +// ["MSI"] = pixAppsSmall, +// ["JPG"] = pixVideoSmall, +// ["JPEG"] = pixVideoSmall, +// ["GIF"] = pixVideoSmall, +// ["PNG"] = pixVideoSmall, +// ["DOCX"] = pixDocSmall, +// ["DOC"] = pixDocSmall, +// ["PDF"] = pixDocSmall, +// ["ODT"] = pixDocSmall +// }; + + + +// } + +// void GetFileIcon(ICellLayout cell_layout, +// CellRenderer cell, ITreeModel tree_model, TreeIter iter) +// { +// var name = (string)tree_model.GetValue(iter, FILE_NAME); +// var ext = IoPath.GetExtension(name)?.ToUpperInvariant(); +// var pix = ext == null ? pixOtherSmall : fileIconsSmall.GetValueOrDefault(ext.Length > 0 ? ext.Substring(1) : string.Empty, pixOtherSmall); +// (cell as CellRendererPixbuf).Pixbuf = pix; +// } + +// public void RefereshListView() +// { +// filter?.Refilter(); +// } + +// public class RowRef : RowItem +// { +// public TreeIter TreeIter { get; set; } +// } +// } + + +//} diff --git a/app/XDM/XDM.Gtk.UI/AppWinPeer.cs b/app/XDM/XDM.Gtk.UI/AppWinPeer.cs index 0a7c06d..98eb006 100644 --- a/app/XDM/XDM.Gtk.UI/AppWinPeer.cs +++ b/app/XDM/XDM.Gtk.UI/AppWinPeer.cs @@ -1,24 +1,33 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Gtk; -using System.IO; -using GLib; using Application = Gtk.Application; using IoPath = System.IO.Path; using XDM.Core.Lib.Common; using XDMApp; using XDM.Core.Lib.Util; -using XDM.Core.Lib.Common; using XDM.Common.UI; -using Newtonsoft.Json; -using Log = Serilog.Log; using Translations; using XDM.Core.Lib.UI; using Menu = Gtk.Menu; using MenuItem = Gtk.MenuItem; +using XDM.Core.Lib.Downloader; +using XDM.GtkUI.Dialogs.NewDownload; +using XDM.GtkUI.Dialogs.ProgressWindow; +using XDM.GtkUI.Utils; +using XDM.GtkUI.Dialogs.DownloadComplete; +using XDM.GtkUI.Dialogs.NewVideoDownload; +using XDM.GtkUI.Dialogs.VideoDownloader; +using XDM.GtkUI.Dialogs; +using XDM.GtkUI.Dialogs.DeleteConfirm; +using XDM.GtkUI.Dialogs.QueueScheduler; +using XDM.GtkUI.Dialogs.BatchWindow; +using XDM.GtkUI.Dialogs.DownloadSelection; +using XDM.GtkUI.Dialogs.LinkRefresh; +using XDM.GtkUI.Dialogs.Properties; +using XDM.GtkUI.Dialogs.Settings; +using XDM.GtkUI.Dialogs.Language; +using XDM.GtkUI.Dialogs.Updater; namespace XDM.GtkUI { @@ -29,12 +38,22 @@ namespace XDM.GtkUI private ListStore inprogressDownloadsStore, finishedDownloadsStore; private TreeView lvInprogress, lvFinished; private ScrolledWindow swInProgress, swFinished; - private TreeModelFilter filter; + private TreeModelFilter finishedDownloadFilter; + private TreeModelFilter inprogressDownloadFilter; + private TreeModelSort inprogressDownloadsStoreSorted; + private TreeModelSort finishedDownloadsStoreSorted; private string? searchKeyword; private Category? category; - private ToolButton btnNew, btnDel, btnOpenFile, btnOpenFolder, btnResume, btnPause; + private Button btnNew, btnDel, btnOpenFile, btnOpenFolder, btnResume, btnPause, btnMenu, btnHelp, btnScheduler; private IButton newButton, deleteButton, pauseButton, resumeButton, openFileButton, openFolderButton; private IMenuItem[] menuItems; + private Menu newDownloadMenu; + private Menu mainMenu; + private WindowGroup windowGroup; + private CheckButton btnMonitoring; + private bool isUpdateAvailable; + private Image helpImage; + private Label helpLabel; public IEnumerable FinishedDownloads { @@ -91,52 +110,63 @@ namespace XDM.GtkUI public event EventHandler CategoryChanged; public event EventHandler SchedulerClicked; public event EventHandler MoveToQueueClicked; + public event EventHandler DownloadListDoubleClicked; + public event EventHandler WindowCreated; private const int FINISHED_DATA_INDEX = 3; private const int INPROGRESS_DATA_INDEX = 5; private Menu menuInProgress, menuFinished; + private IClipboardMonitor clipboarMonitor; public AppWinPeer() : base("Xtreme Download Manager") { - SetDefaultSize(800, 500); - SetPosition(WindowPosition.Center); + SetDefaultIconFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "svg-icons", "xdm-logo.svg")); + SetPosition(WindowPosition.CenterAlways); DeleteEvent += AppWin1_DeleteEvent; + this.windowGroup = new WindowGroup(); + this.windowGroup.AddWindow(this); var hbMain = new HBox(); + hbMain.PackStart(CreateCategoryTree(), false, true, 0); + hbMain.PackStart(CreateMainPanel(), true, true, 0); Add(hbMain); - - hbMain.PackStart(CreateCategoryTree(), false, true, 2); - hbMain.PackStart(CreateMainPanel(), true, true, 1); + hbMain.Show(); categoryTreeStore!.GetIterFirst(out TreeIter iter); categoryTreeStore.IterNext(ref iter); categoryTree!.Selection.SelectIter(iter); - + UpdateBrowserMonitorButton(); CreateMenu(); + SetDefaultSize(800, 500); + + clipboarMonitor = new PollingClipboardMonitor(); + clipboarMonitor.ClipboardChanged += (_, _) => this.ClipboardChanged?.Invoke(this, EventArgs.Empty); } private void CreateMenu() { menuItems = new IMenuItem[] { - new MenuItemWrapper("pause",new MenuItem("Pause")), - new MenuItemWrapper("resume",new MenuItem("Resume") ), - new MenuItemWrapper("delete",new MenuItem("Delete")), - new MenuItemWrapper("saveAs",new MenuItem("Save As")), - new MenuItemWrapper("refresh",new MenuItem("Refresh link")), - new MenuItemWrapper("showProgress",new MenuItem("Show progress")), - new MenuItemWrapper("copyURL",new MenuItem("Copy URL")), - new MenuItemWrapper("properties",new MenuItem("Properties")), - new MenuItemWrapper("open",new MenuItem("Open")), - new MenuItemWrapper("openFolder",new MenuItem("Open folder")), - new MenuItemWrapper("deleteDownloads",new MenuItem("Delete downloads")), - new MenuItemWrapper("copyURL1",new MenuItem("Copy URL")), - new MenuItemWrapper("copyFile",new MenuItem("Copy file")), - new MenuItemWrapper("properties1",new MenuItem("Properties")), - new MenuItemWrapper("restart",new MenuItem("Restart")), - new MenuItemWrapper("schedule",new MenuItem("Schedule")), - new MenuItemWrapper("downloadAgain",new MenuItem("Download again")) + new MenuItemWrapper("pause",TextResource.GetText("MENU_PAUSE")), + new MenuItemWrapper("resume",TextResource.GetText("MENU_RESUME")), + new MenuItemWrapper("delete",TextResource.GetText("DESC_DEL")), + new MenuItemWrapper("saveAs",TextResource.GetText("CTX_SAVE_AS")), + new MenuItemWrapper("refresh",TextResource.GetText("MENU_REFRESH_LINK")), + new MenuItemWrapper("showProgress",TextResource.GetText("LBL_SHOW_PROGRESS")), + new MenuItemWrapper("copyURL",TextResource.GetText("CTX_COPY_URL")), + new MenuItemWrapper("restart",TextResource.GetText("MENU_RESTART")), + new MenuItemWrapper("moveToQueue",TextResource.GetText("Q_MOVE_TO")), + new MenuItemWrapper("properties",TextResource.GetText("MENU_PROPERTIES")), + + new MenuItemWrapper("open",TextResource.GetText("CTX_OPEN_FILE")), + new MenuItemWrapper("openFolder",TextResource.GetText("CTX_OPEN_FOLDER")), + new MenuItemWrapper("deleteDownloads",TextResource.GetText("MENU_DELETE_DWN")), + new MenuItemWrapper("copyURL1",TextResource.GetText("CTX_COPY_URL")), + new MenuItemWrapper("copyFile",TextResource.GetText("CTX_COPY_FILE")), + new MenuItemWrapper("downloadAgain",TextResource.GetText("MENU_RESTART")), + new MenuItemWrapper("properties1",TextResource.GetText("MENU_PROPERTIES")), + new MenuItemWrapper("schedule",TextResource.GetText("Q_SCHEDULE_TXT"),false) }; var dict = new Dictionary(); @@ -167,56 +197,293 @@ namespace XDM.GtkUI menuInProgress.Append(((MenuItemWrapper)dict["schedule"]).MenuItem); menuInProgress.Append(((MenuItemWrapper)dict["showProgress"]).MenuItem); menuInProgress.Append(((MenuItemWrapper)dict["copyURL"]).MenuItem); + menuInProgress.Append(((MenuItemWrapper)dict["moveToQueue"]).MenuItem); menuInProgress.Append(((MenuItemWrapper)dict["properties"]).MenuItem); menuInProgress.ShowAll(); + + newDownloadMenu = new Menu(); + var menuNewDownload = new MenuItem(TextResource.GetText("LBL_NEW_DOWNLOAD")); + menuNewDownload.Activated += MenuNewDownload_Click; + var menuVideoDownload = new MenuItem(TextResource.GetText("LBL_VIDEO_DOWNLOAD")); + menuVideoDownload.Activated += MenuVideoDownload_Click; + var menuBatchDownload = new MenuItem(TextResource.GetText("MENU_BATCH_DOWNLOAD")); + menuBatchDownload.Activated += MenuBatchDownload_Click; + newDownloadMenu.Append(menuNewDownload); + newDownloadMenu.Append(menuVideoDownload); + newDownloadMenu.Append(menuBatchDownload); + newDownloadMenu.ShowAll(); + + mainMenu = new Menu(); + var menuSettings = new MenuItem(TextResource.GetText("TITLE_SETTINGS")); + var menuClearFinished = new MenuItem(TextResource.GetText("MENU_DELETE_COMPLETED")); + var menuExport = new MenuItem(TextResource.GetText("MENU_EXPORT")); + var menuImport = new MenuItem(TextResource.GetText("MENU_IMPORT")); + var menuLanguage = new MenuItem(TextResource.GetText("MENU_LANG")); + var menuBrowserMonitor = new MenuItem(TextResource.GetText("SETTINGS_MONITORING")); + var menuHelpAndSupport = new MenuItem(TextResource.GetText("LBL_SUPPORT_PAGE")); + var menuReportProblem = new MenuItem(TextResource.GetText("LBL_REPORT_PROBLEM")); + var menuCheckForUpdate = new MenuItem(TextResource.GetText("MENU_UPDATE")); + var menuAbout = new MenuItem(TextResource.GetText("MENU_ABOUT")); + var menuExit = new MenuItem(TextResource.GetText("MENU_EXIT")); + menuSettings.Activated += MenuSettings_Activated; + menuClearFinished.Activated += MenuClearFinished_Activated; + menuExport.Activated += MenuExport_Activated; + menuImport.Activated += MenuImport_Activated; + menuLanguage.Activated += MenuLanguage_Activated; + menuBrowserMonitor.Activated += MenuBrowserMonitor_Activated; + menuHelpAndSupport.Activated += MenuHelpAndSupport_Activated; + menuReportProblem.Activated += MenuReportProblem_Activated; + menuCheckForUpdate.Activated += MenuCheckForUpdate_Activated; + menuAbout.Activated += MenuAbout_Activated; + menuExit.Activated += MenuExit_Activated; + mainMenu.Append(menuSettings); + mainMenu.Append(menuClearFinished); + mainMenu.Append(menuExport); + mainMenu.Append(menuImport); + mainMenu.Append(menuLanguage); + mainMenu.Append(menuBrowserMonitor); + mainMenu.Append(menuHelpAndSupport); + mainMenu.Append(menuReportProblem); + mainMenu.Append(menuCheckForUpdate); + mainMenu.Append(menuAbout); + mainMenu.Append(menuExit); + mainMenu.ShowAll(); + } + + private void MenuExit_Activated(object? sender, EventArgs e) + { + Application.Quit(); + Environment.Exit(0); + } + + private void MenuAbout_Activated(object? sender, EventArgs e) + { + using var win = XDM.GtkUI.Dialogs.About.AboutDialog.CreateFromGladeFile(this, windowGroup); + win.Run(); + win.Destroy(); + } + + private void MenuCheckForUpdate_Activated(object? sender, EventArgs e) + { + UpdateClicked?.Invoke(sender, e); + } + + private void MenuReportProblem_Activated(object? sender, EventArgs e) + { + BugReportClicked?.Invoke(sender, e); + } + + private void MenuHelpAndSupport_Activated(object? sender, EventArgs e) + { + SupportPageClicked?.Invoke(sender, e); + } + + private void MenuBrowserMonitor_Activated(object? sender, EventArgs e) + { + this.BrowserMonitoringSettingsClicked?.Invoke(this, e); + } + + private void MenuLanguage_Activated(object? sender, EventArgs e) + { + using var win = LanguageDialog.CreateFromGladeFile(this, windowGroup); + win.Run(); + win.Destroy(); + } + + private void MenuImport_Activated(object? sender, EventArgs e) + { + ImportClicked?.Invoke(sender, e); + } + + private void MenuExport_Activated(object? sender, EventArgs e) + { + ExportClicked?.Invoke(sender, e); + } + + private void MenuClearFinished_Activated(object? sender, EventArgs e) + { + this.ClearAllFinishedClicked?.Invoke(sender, e); + } + + private void MenuSettings_Activated(object? sender, EventArgs e) + { + this.SettingsClicked?.Invoke(this, e); + } + + private void MenuBatchDownload_Click(object? sender, EventArgs e) + { + this.BatchDownloadClicked?.Invoke(sender, e); + } + + private void MenuVideoDownload_Click(object? sender, EventArgs e) + { + this.YoutubeDLDownloadClicked?.Invoke(sender, e); + } + + private void MenuNewDownload_Click(object? sender, EventArgs e) + { + this.NewDownloadClicked?.Invoke(sender, e); } private Widget CreateMainPanel() { var vbMain = new VBox(); - vbMain.PackStart(CreateToolbar(), false, false, 1); - vbMain.PackStart(CreateInProgressListView(), true, true, 1); - vbMain.PackStart(CreateFinishedListView(), true, true, 1); + vbMain.PackStart(CreateToolbar(), false, false, 0); + vbMain.PackStart(CreateInProgressListView(), true, true, 0); + vbMain.PackStart(CreateFinishedListView(), true, true, 0); + vbMain.PackStart(CreateBottombar(), false, false, 0); + vbMain.Show(); return vbMain; } + private Button CreateButtonWithContent(string icon, string? text = null) + { + Label? lbl = null; + if (!string.IsNullOrEmpty(text)) + { + lbl = new Label { Text = text }; + } + return CreateButtonWithContent(new Image(LoadSvg(icon, 16)), lbl); + } + + private Button CreateButtonWithContent(Image image, Label? label) + { + var hbox = new HBox(false, 10) + { + MarginStart = 2, + MarginEnd = 2 + }; + + hbox.PackStart(image, false, false, 0); + if (label != null) + { + hbox.PackStart(label, false, false, 0); + } + + var button = new Button + { + Relief = ReliefStyle.None, + Valign = Align.Center, + + }; + button.Add(hbox); + return button; + } + + private Widget CreateBottombar() + { + var hbox = new HBox(false, 10); + hbox.Margin = 2; + hbox.MarginStart = 5; + hbox.MarginEnd = 5; + //var lblMonitoring = new Label { Text = TextResource.GetText("SETTINGS_MONITORING"), MarginBottom = 5 }; + //hbox.PackStart(lblMonitoring, false, false, 0); + btnMonitoring = new CheckButton { MarginStart = 5 }; + btnMonitoring.Clicked += BtnMonitoring_Clicked; + hbox.PackStart(btnMonitoring, false, false, 0); + + var lblMonitoring = new Label { Text = TextResource.GetText("SETTINGS_MONITORING") }; + hbox.PackStart(lblMonitoring, false, false, 0); + + //var h1 = new HBox(); + //h1.PackStart(new Image(LoadSvg("links-line", 14)), false, false, 0); + //h1.PackStart(new Label { Text = TextResource.GetText("DESC_Q_TITLE") }, false, false, 10); + + btnScheduler = CreateButtonWithContent("list-settings-fill", TextResource.GetText("DESC_Q_TITLE")); + btnScheduler.Clicked += BtnScheduler_Clicked; + //new Button + //{ + // Label = TextResource.GetText("DESC_Q_TITLE"), + // MarginBottom = 0, + // Relief = ReliefStyle.None, + // Valign = Align.Start, + // Image = new Image(LoadSvg("list-settings-fill", 16)), + // AlwaysShowImage = true, + + //}; + //btnScheduler.Add(h1); + //btnScheduler.Margin = 1; + hbox.PackStart(btnScheduler, false, false, 0); + + helpImage = new Image(LoadSvg("question-line", 16)); + helpLabel = new Label { Text = TextResource.GetText("LBL_SUPPORT_PAGE") }; + btnHelp = CreateButtonWithContent(helpImage, helpLabel); + btnHelp.Clicked += BtnHelp_Clicked; + //btnHelp.Margin = 1; + //btnHelp.MarginEnd = 5; + //new Button + //{ + // Label = TextResource.GetText("LBL_SUPPORT_PAGE"), + // MarginBottom = 0, + // Relief = ReliefStyle.None, + // Valign = Align.Start, + // Image = new Image(LoadSvg("question-line", 16)), + // AlwaysShowImage = true, + //}; + hbox.PackEnd(btnHelp, false, false, 0); + + hbox.ShowAll(); + return hbox; + } + + private void BtnHelp_Clicked(object? sender, EventArgs e) + { + if (isUpdateAvailable) + { + UpdateClicked?.Invoke(sender, e); + } + else + { + HelpClicked?.Invoke(sender, e); + } + } + + private void BtnScheduler_Clicked(object? sender, EventArgs e) + { + //using var dlg = QueueSchedulerDialog.CreateFromGladeFile(this, this.windowGroup); + //dlg.Run(); + //dlg.Destroy(); + this.SchedulerClicked?.Invoke(sender, e); + } + + private void BtnMonitoring_Clicked(object? sender, EventArgs e) + { + BrowserMonitoringButtonClicked?.Invoke(sender, e); + } + private Widget CreateToolbar() { + var toolbar = new HBox(false, 5); + btnNew = CreateButtonWithContent("links-line", TextResource.GetText("DESC_NEW")); + toolbar.PackStart(btnNew, false, false, 0); + btnDel = CreateButtonWithContent("delete-bin-7-line", TextResource.GetText("DESC_DEL")); + toolbar.PackStart(btnDel, false, false, 0); + btnOpenFile = CreateButtonWithContent("external-link-line", TextResource.GetText("CTX_OPEN_FILE")); + toolbar.PackStart(btnOpenFile, false, false, 0); + btnOpenFolder = CreateButtonWithContent("folder-shared-line", TextResource.GetText("CTX_OPEN_FOLDER")); + toolbar.PackStart(btnOpenFolder, false, false, 0); + btnResume = CreateButtonWithContent("play-line", TextResource.GetText("MENU_RESUME")); + toolbar.PackStart(btnResume, false, false, 0); + btnPause = CreateButtonWithContent("pause-line", TextResource.GetText("MENU_PAUSE")); + toolbar.PackStart(btnPause, false, false, 0); - var toolbar = new Toolbar - { - Style = ToolbarStyle.BothHoriz - }; + btnMenu = CreateButtonWithContent("menu-line"); + toolbar.PackEnd(btnMenu, false, false, 0); - btnNew = new ToolButton(new Image(LoadSvg("links-line", 14)), TextResource.GetText("DESC_NEW")) { IsImportant = true, MarginStart = 0, MarginEnd = 0 }; - toolbar.Add(btnNew); - btnDel = new ToolButton(new Image(LoadSvg("delete-bin-7-line", 14)), TextResource.GetText("DESC_DEL")) { IsImportant = true, MarginStart = 0, MarginEnd = 0 }; - toolbar.Add(btnDel); - btnOpenFile = new ToolButton(new Image(LoadSvg("external-link-line", 14)), TextResource.GetText("CTX_OPEN_FILE")) { IsImportant = true, MarginStart = 0, MarginEnd = 0 }; - toolbar.Add(btnOpenFile); - btnOpenFolder = new ToolButton(new Image(LoadSvg("folder-shared-line", 14)), TextResource.GetText("CTX_OPEN_FOLDER")) { IsImportant = true, MarginStart = 0, MarginEnd = 0 }; - toolbar.Add(btnOpenFolder); - btnResume = new ToolButton(new Image(LoadSvg("play-line", 14)), TextResource.GetText("MENU_RESUME")) { IsImportant = true, MarginStart = 0, MarginEnd = 0 }; - toolbar.Add(btnResume); - btnPause = new ToolButton(new Image(LoadSvg("pause-line", 14)), TextResource.GetText("MENU_PAUSE")) { IsImportant = true, MarginStart = 0, MarginEnd = 0 }; - toolbar.Add(btnPause); - - toolbar.Add(new ToolItem() { Expand = true }); - - //toolbar.Add(new SeparatorToolItem() { Expand = true, Draw = false }); - var cont = new ToolItem() { MarginEnd = 3 }; - - var searchEntry = new Entry() { WidthChars = 10, PlaceholderText = TextResource.GetText("LBL_SEARCH") }; + var searchEntry = new Entry() { WidthChars = 15, PlaceholderText = TextResource.GetText("LBL_SEARCH") }; searchEntry.Activated += (a, b) => { searchKeyword = searchEntry.Text; - filter.Refilter(); + finishedDownloadFilter.Refilter(); }; - cont.Add(searchEntry); - toolbar.Add(cont); - var btnMenu = new ToolButton(new Image(LoadSvg("menu-line", 14)), string.Empty) { IsImportant = false }; - toolbar.Add(btnMenu); + toolbar.PackEnd(searchEntry, false, false, 0); + toolbar.Margin = 5; + toolbar.ShowAll(); + btnOpenFile.Visible = false; + btnOpenFolder.Visible = false; + btnResume.Visible = false; + btnPause.Visible = false; newButton = new ButtonWrapper(this.btnNew); deleteButton = new ButtonWrapper(this.btnDel); pauseButton = new ButtonWrapper(this.btnPause); @@ -224,9 +491,16 @@ namespace XDM.GtkUI openFileButton = new ButtonWrapper(this.btnOpenFile); openFolderButton = new ButtonWrapper(this.btnOpenFolder); + btnMenu.Clicked += BtnMenu_Clicked; + return toolbar; } + private void BtnMenu_Clicked(object? sender, EventArgs e) + { + OpenMainMenu(); + } + private Widget CreateCategoryTree() { string GetFontIcon(string name) @@ -250,14 +524,16 @@ namespace XDM.GtkUI categoryTree = new TreeView() { - HeadersVisible = false + HeadersVisible = false, + ShowExpanders = false, + LevelIndentation = 15 }; categoryTree.StyleContext.AddClass("dark"); var cols = new TreeViewColumn(); var cell1 = new CellRendererPixbuf(); - cell1.SetPadding(5, 5); + cell1.SetPadding(3, 5); cols.PackStart(cell1, false); cols.AddAttribute(cell1, "pixbuf", 0); @@ -286,13 +562,15 @@ namespace XDM.GtkUI { OverlayScrolling = true, Margin = 5, - MarginEnd = 2 + MarginEnd = 0 }; //scrolledWindow.Margin = 5; scrolledWindow.ShadowType = ShadowType.In; scrolledWindow.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); scrolledWindow.Add(categoryTree); - scrolledWindow.SetSizeRequest(200, 200); + scrolledWindow.SetSizeRequest(160, 200); + + scrolledWindow.ShowAll(); return scrolledWindow; } @@ -324,7 +602,7 @@ namespace XDM.GtkUI swFinished.ShowAll(); swInProgress.Hide(); category = null; - filter.Refilter(); + finishedDownloadFilter.Refilter(); btnOpenFile.Visible = btnOpenFolder.Visible = true; btnPause.Visible = btnResume.Visible = false; } @@ -337,7 +615,7 @@ namespace XDM.GtkUI { category = (Category)model.GetValue(iter, 2); } - filter.Refilter(); + finishedDownloadFilter.Refilter(); } } @@ -351,8 +629,48 @@ namespace XDM.GtkUI typeof(InProgressDownloadEntry) // download type ); - lvInprogress = new TreeView(inprogressDownloadsStore); + inprogressDownloadFilter = new TreeModelFilter(inprogressDownloadsStore, null); + inprogressDownloadFilter.VisibleFunc = (model, iter) => + { + var name = (string)model.GetValue(iter, 0); + return Helpers.IsOfCategoryOrMatchesKeyword(name, searchKeyword, category); + }; + var sortedStore = new TreeModelSort(inprogressDownloadFilter); + + sortedStore.SetSortFunc(0, (model, iter1, iter2) => + { + Console.WriteLine("called"); + var t1 = (string)model.GetValue(iter1, 0); + var t2 = (string)model.GetValue(iter2, 0); + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return 2; + return t1.CompareTo(t2); + }); + + sortedStore.SetSortFunc(1, (model, iter1, iter2) => + { + var t1 = (InProgressDownloadEntry)model.GetValue(iter1, 5); + var t2 = (InProgressDownloadEntry)model.GetValue(iter2, 5); + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return 2; + return t1.DateAdded.CompareTo(t2.DateAdded); + }); + + sortedStore.SetSortFunc(2, (model, iter1, iter2) => + { + var t1 = (InProgressDownloadEntry)model.GetValue(iter1, 5); + var t2 = (InProgressDownloadEntry)model.GetValue(iter2, 5); + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return 2; + return t1.Size.CompareTo(t2.Size); + }); + + inprogressDownloadsStoreSorted = sortedStore; + lvInprogress = new TreeView(sortedStore); lvInprogress.Selection.Mode = SelectionMode.Multiple; //File name column @@ -360,7 +678,7 @@ namespace XDM.GtkUI { Resizable = true, Reorderable = false, - Title = "Name", + Title = TextResource.GetText("SORT_NAME"), Sizing = TreeViewColumnSizing.Fixed, FixedWidth = 200 }; @@ -377,13 +695,15 @@ namespace XDM.GtkUI //Last modified column var lastModifiedRendererText = new CellRendererText(); - var lastModifiedColumn = new TreeViewColumn("Date added", lastModifiedRendererText, "text", 1) + var lastModifiedColumn = new TreeViewColumn(TextResource.GetText("SORT_DATE"), lastModifiedRendererText, "text", 1) { Resizable = true, Reorderable = false, Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 100 + FixedWidth = 120 }; + lastModifiedColumn.SortColumnId = 1; + lastModifiedColumn.SortOrder = SortType.Descending; lastModifiedColumn.SetAttributes(lastModifiedRendererText, "text", 1); lvInprogress.AppendColumn(lastModifiedColumn); @@ -397,7 +717,7 @@ namespace XDM.GtkUI Reorderable = false, Sizing = TreeViewColumnSizing.Fixed, FixedWidth = 80, - Title = "Size", + Title = TextResource.GetText("SORT_SIZE"), }; fileSizeColumn.PackStart(fileSizeRendererText, false); fileSizeColumn.SetAttributes(fileSizeRendererText, "text", 2); @@ -410,7 +730,7 @@ namespace XDM.GtkUI }; fileRendererProgress.SetPadding(5, 10); - var progressColumn = new TreeViewColumn("Progress", fileRendererProgress, "value", 3) + var progressColumn = new TreeViewColumn("%", fileRendererProgress, "value", 3) { Resizable = true, Reorderable = false, @@ -420,11 +740,10 @@ namespace XDM.GtkUI progressColumn.SetAttributes(fileRendererProgress, "value", 3); lvInprogress.AppendColumn(progressColumn); - //Download status column var statusRendererText = new CellRendererText(); statusRendererText.SetPadding(5, 8); - var statusColumn = new TreeViewColumn("Status", statusRendererText, "text", 4) + var statusColumn = new TreeViewColumn(TextResource.GetText("SORT_STATUS"), statusRendererText, "text", 4) { Resizable = true, Reorderable = false, @@ -448,9 +767,12 @@ namespace XDM.GtkUI } }; - swInProgress = new ScrolledWindow { OverlayScrolling = true, Margin = 5, MarginStart = 0, MarginTop = 0, ShadowType = ShadowType.In }; + sortedStore.SetSortColumnId(1, SortType.Descending); + + swInProgress = new ScrolledWindow { OverlayScrolling = true, Margin = 5, MarginBottom = 0, MarginTop = 0, ShadowType = ShadowType.In }; swInProgress.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); swInProgress.Add(lvInprogress); + swInProgress.ShowAll(); //scrolledWindow.SetSizeRequest(200, 200); return swInProgress; @@ -464,20 +786,25 @@ namespace XDM.GtkUI typeof(FinishedDownloadEntry) // download type ); - filter = new TreeModelFilter(finishedDownloadsStore, null); - filter.VisibleFunc = (model, iter) => + finishedDownloadFilter = new TreeModelFilter(finishedDownloadsStore, null); + finishedDownloadFilter.VisibleFunc = (model, iter) => { var name = (string)model.GetValue(iter, 0); return Helpers.IsOfCategoryOrMatchesKeyword(name, searchKeyword, category); }; - var sortedStore = new TreeModelSort(filter); + var sortedStore = new TreeModelSort(finishedDownloadFilter); sortedStore.SetSortFunc(0, (model, iter1, iter2) => { Console.WriteLine("called"); var t1 = (string)model.GetValue(iter1, 0); var t2 = (string)model.GetValue(iter2, 0); + + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return 2; + return t1.CompareTo(t2); }); @@ -485,6 +812,11 @@ namespace XDM.GtkUI { var t1 = (FinishedDownloadEntry)model.GetValue(iter1, 3); var t2 = (FinishedDownloadEntry)model.GetValue(iter2, 3); + + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return 2; + return t1.DateAdded.CompareTo(t2.DateAdded); }); @@ -492,9 +824,15 @@ namespace XDM.GtkUI { var t1 = (FinishedDownloadEntry)model.GetValue(iter1, 3); var t2 = (FinishedDownloadEntry)model.GetValue(iter2, 3); + + if (t1 == null && t2 == null) return 0; + if (t1 == null) return 1; + if (t2 == null) return 2; + return t1.Size.CompareTo(t2.Size); }); + finishedDownloadsStoreSorted = sortedStore; lvFinished = new TreeView(sortedStore); lvFinished.Selection.Mode = SelectionMode.Multiple; @@ -503,9 +841,9 @@ namespace XDM.GtkUI { Resizable = true, Reorderable = false, - Title = "Name", + Title = TextResource.GetText("SORT_NAME"), Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 200 + FixedWidth = 400 }; var fileIconRenderer = new CellRendererPixbuf { }; @@ -521,12 +859,12 @@ namespace XDM.GtkUI //Last modified column var lastModifiedRendererText = new CellRendererText(); - var lastModifiedColumn = new TreeViewColumn("Date added", lastModifiedRendererText, "text", 1) + var lastModifiedColumn = new TreeViewColumn(TextResource.GetText("SORT_DATE"), lastModifiedRendererText, "text", 1) { Resizable = true, Reorderable = false, Sizing = TreeViewColumnSizing.Fixed, - FixedWidth = 100 + FixedWidth = 120 }; lastModifiedColumn.SetAttributes(lastModifiedRendererText, "text", 1); lastModifiedColumn.SortColumnId = 1; @@ -542,7 +880,7 @@ namespace XDM.GtkUI Reorderable = false, Sizing = TreeViewColumnSizing.Fixed, FixedWidth = 80, - Title = "Size", + Title = TextResource.GetText("SORT_SIZE"), }; fileSizeColumn.PackStart(fileSizeRendererText, false); fileSizeColumn.SetAttributes(fileSizeRendererText, "text", 2); @@ -563,9 +901,12 @@ namespace XDM.GtkUI } }; - swFinished = new ScrolledWindow { OverlayScrolling = true, Margin = 5, MarginStart = 0, MarginTop = 0, ShadowType = ShadowType.In }; + sortedStore.SetSortColumnId(1, SortType.Descending); + + swFinished = new ScrolledWindow { OverlayScrolling = true, Margin = 5, MarginBottom = 0, MarginTop = 0, ShadowType = ShadowType.In }; swFinished.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); swFinished.Add(lvFinished); + swFinished.ShowAll(); return swFinished; } @@ -579,14 +920,16 @@ namespace XDM.GtkUI private void AppWin1_DeleteEvent(object o, DeleteEventArgs args) { - Application.Quit(); + args.RetVal = true; + this.Hide(); } private static Gdk.Pixbuf LoadSvg(string name, int dimension = 16) { - return new Gdk.Pixbuf( - IoPath.Combine( - AppDomain.CurrentDomain.BaseDirectory, "svg-icons", $"{name}.svg"), dimension, dimension, true); + return GtkHelper.LoadSvg(name, dimension); + //new Gdk.Pixbuf( + // IoPath.Combine( + // AppDomain.CurrentDomain.BaseDirectory, "svg-icons", $"{name}.svg"), dimension, dimension, true); } public IInProgressDownloadRow? FindInProgressItem(string id) @@ -607,6 +950,23 @@ namespace XDM.GtkUI return null; } + public TreeIter? FindInProgressItemIterById(string id) + { + if (!inprogressDownloadsStore!.GetIterFirst(out TreeIter iter)) + { + return null; + } + do + { + var ent = (InProgressDownloadEntry)inprogressDownloadsStore.GetValue(iter, INPROGRESS_DATA_INDEX); + if (ent.Id == id) + { + return iter; + } + } + while (inprogressDownloadsStore.IterNext(ref iter)); + return null; + } public IFinishedDownloadRow? FindFinishedItem(string id) { @@ -626,6 +986,24 @@ namespace XDM.GtkUI return null; } + public TreeIter? FindFinishedItemIterById(string id) + { + if (!this.finishedDownloadsStore!.GetIterFirst(out TreeIter iter)) + { + return null; + } + do + { + var ent = (FinishedDownloadEntry)finishedDownloadsStore.GetValue(iter, FINISHED_DATA_INDEX); + if (ent.Id == id) + { + return iter; + } + } + while (finishedDownloadsStore.IterNext(ref iter)); + return null; + } + public void AddToTop(InProgressDownloadEntry entry) { var iter = inprogressDownloadsStore.Insert(0); @@ -679,6 +1057,7 @@ namespace XDM.GtkUI owner = this; } using var msg = new MessageDialog(owner, DialogFlags.Modal, MessageType.Question, ButtonsType.YesNo, text); + msg.Title = "XDM"; if (msg.Run() == (int)ResponseType.Yes) { return true; @@ -688,22 +1067,31 @@ namespace XDM.GtkUI public IDownloadCompleteDialog CreateDownloadCompleteDialog(IApp app) { - throw new NotImplementedException(); + var win = DownloadCompleteDialog.CreateFromGladeFile(); + win.App = app; + return win; } public INewDownloadDialogSkeleton CreateNewDownloadDialog(bool empty) { - throw new NotImplementedException(); + var window = NewDownloadWindow.CreateFromGladeFile(); + window.IsEmpty = empty; + return window; } public INewVideoDownloadDialog CreateNewVideoDialog() { - throw new NotImplementedException(); + var window = NewVideoDownloadWindow.CreateFromGladeFile(); + return window; } public IProgressWindow CreateProgressWindow(string downloadId, IApp app, IAppUI appUI) { - throw new NotImplementedException(); + var prgWin = DownloadProgressWindow.CreateFromGladeFile(); + prgWin.DownloadId = downloadId; + prgWin.App = app; + prgWin.AppUI = appUI; + return prgWin; } public void RunOnUIThread(System.Action action) @@ -718,42 +1106,77 @@ namespace XDM.GtkUI public void Delete(IInProgressDownloadRow row) { - throw new NotImplementedException(); + var id = row.DownloadEntry.Id; + var modelIter = FindInProgressItemIterById(id); + if (modelIter.HasValue) + { + var iter = modelIter.Value; + inprogressDownloadsStore.Remove(ref iter); + } + + //var iter = GtkHelper.ConvertViewToModel(((InProgressEntryWrapper)row).TreeIter, + // inprogressDownloadsStoreSorted, inprogressDownloadFilter); + //inprogressDownloadsStore.Remove(ref iter); } public void Delete(IFinishedDownloadRow row) { - throw new NotImplementedException(); + var id = row.DownloadEntry.Id; + var modelIter = FindFinishedItemIterById(id); + if (modelIter.HasValue) + { + var iter = modelIter.Value; + finishedDownloadsStore.Remove(ref iter); + } + //var iter = GtkHelper.ConvertViewToModel(((FinishedEntryWrapper)row).TreeIter, + // finishedDownloadsStoreSorted, finishedDownloadFilter); } public void DeleteAllFinishedDownloads() { - throw new NotImplementedException(); + if (!GtkHelper.ShowConfirmMessageBox(this, TextResource.GetText("MENU_DELETE_COMPLETED"), "XDM")) + { + return; + } + finishedDownloadsStore.Clear(); } public void Delete(IEnumerable rows) { - throw new NotImplementedException(); + foreach (var row in rows) + { + Delete(row); + //var iter = ((InProgressEntryWrapper)row).TreeIter; + //inprogressDownloadsStore.Remove(ref iter); + } } public void Delete(IEnumerable rows) { - throw new NotImplementedException(); + foreach (var row in rows) + { + Delete(row); + //var iter = ((FinishedEntryWrapper)row).TreeIter; + //inprogressDownloadsStore.Remove(ref iter); + } } public string GetUrlFromClipboard() { - throw new NotImplementedException(); + var cb = Clipboard.Get(Gdk.Selection.Clipboard); + return cb.WaitForText(); } public AuthenticationInfo? PromtForCredentials(string message) { - throw new NotImplementedException(); - } - - public void ShowUpdateAvailableNotification() - { - //throw new NotImplementedException(); + var dlg = CredentialsDialog.CreateFromGladeFile(this, windowGroup); + dlg.PromptText = message ?? "Authentication required"; + dlg.Run(); + if (dlg.Result) + { + return dlg.Credentials; + } + return null; } public void ShowMessageBox(object? window, string message) @@ -762,92 +1185,121 @@ namespace XDM.GtkUI { owner = this; } - throw new NotImplementedException(); + GtkHelper.ShowMessageBox(owner, message); } public void OpenNewDownloadMenu() { - throw new NotImplementedException(); + newDownloadMenu.PopupAtWidget(this.btnNew, Gdk.Gravity.SouthWest, Gdk.Gravity.NorthWest, null); } - public string? SaveFileDialog(string? initialPath) + private void OpenMainMenu() { - throw new NotImplementedException(); + mainMenu.PopupAtWidget(this.btnMenu, Gdk.Gravity.SouthEast, Gdk.Gravity.NorthEast, null); } public void ShowRefreshLinkDialog(InProgressDownloadEntry entry, IApp app) { - throw new NotImplementedException(); + var dlg = LinkRefreshWindow.CreateFromGladeFile(); + var ret = LinkRefreshDialogHelper.RefreshLink(entry, app, dlg); + if (!ret) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("NO_REFRESH_LINK")); + return; + } } public void SetClipboardText(string text) { - throw new NotImplementedException(); + var cb = Clipboard.Get(Gdk.Selection.Clipboard); + if (cb != null) + { + cb.Text = text; + } } public void SetClipboardFile(string file) { - throw new NotImplementedException(); + var cbcp = new ClipboardFileCopy(file); + cbcp.Exec(); } public void ShowPropertiesDialog(BaseDownloadEntry ent, ShortState? state) { - throw new NotImplementedException(); + using var propWin = PropertiesDialog.CreateFromGladeFile(this, this.Group); + propWin.FileName = ent.Name; + propWin.Folder = ent.TargetDir ?? Helpers.GetDownloadFolderByFileName(ent.Name); + propWin.Address = ent.PrimaryUrl; + propWin.FileSize = Helpers.FormatSize(ent.Size); + propWin.DateAdded = ent.DateAdded.ToLongDateString() + " " + ent.DateAdded.ToLongTimeString(); + propWin.DownloadType = ent.DownloadType; + propWin.Referer = ent.RefererUrl; + propWin.Cookies = state?.Cookies ?? state?.Cookies1 ?? new Dictionary(); + propWin.Headers = state?.Headers ?? state?.Headers1 ?? new Dictionary>(); + propWin.Run(); + propWin.Destroy(); + propWin.Dispose(); } public void ShowYoutubeDLDialog(IAppUI appUI, IApp app) { - throw new NotImplementedException(); + var win = new VideoDownloaderController(VideoDownloaderWindow.CreateFromGladeFile(), appUI, app); + win.Run(); } - public DownloadSchedule? ShowSchedulerDialog(DownloadSchedule schedule) + public void ShowBatchDownloadWindow(IApp app, IAppUI appUi) { - throw new NotImplementedException(); - } - - public void ShowBatchDownloadWindow(IApp app) - { - throw new NotImplementedException(); + var uvc = new BatchDownloadViewController(BatchDownloadWindow.CreateFromGladeFile(this), app, appUi); + uvc.Run(); + //var batWin = BatchDownloadWindow.CreateFromGladeFile(this, app, appUi);// new BatchDownloadWindow(app, appUi) { Owner = this }; + //batWin.Show(); } public void ShowSettingsDialog(IApp app, int page = 0) { - throw new NotImplementedException(); - } - - public void ImportDownloads(IApp app) - { - throw new NotImplementedException(); - } - - public void ExportDownloads(IApp app) - { - throw new NotImplementedException(); + using var win = SettingsDialog.CreateFromGladeFile(this, windowGroup, app.AppUI, app); + win.SetActivePage(page); + win.LoadConfig(); + win.Run(); + win.Destroy(); } public void UpdateBrowserMonitorButton() { - throw new NotImplementedException(); + btnMonitoring.Active = Config.Instance.IsBrowserMonitoringEnabled; } public void ShowBrowserMonitoringDialog(IApp app) { - throw new NotImplementedException(); + ShowSettingsDialog(app, 0); } public void UpdateParallalismLabel() { - throw new NotImplementedException(); } public IUpdaterUI CreateUpdateUIDialog(IAppUI ui) { - throw new NotImplementedException(); + return UpdaterWindow.CreateFromGladeFile(ui); + } + + public void ShowUpdateAvailableNotification() + { + isUpdateAvailable = true; + helpLabel.Text = TextResource.GetText("MSG_UPDATE_AVAILABLE"); + helpImage.Pixbuf = LoadSvg("notification-3-fill", 16); + helpImage.ShowAll(); } public void ClearUpdateInformation() { - throw new NotImplementedException(); + RunOnUIThread(() => + { + isUpdateAvailable = false; + helpLabel.Text = TextResource.GetText("LBL_SUPPORT_PAGE"); + helpImage.Pixbuf = LoadSvg("question-line", 16); + helpImage.ShowAll(); + }); } private IEnumerable GetAllFinishedDownloads() @@ -869,10 +1321,10 @@ namespace XDM.GtkUI { yield break; } - yield return (InProgressDownloadEntry)inprogressDownloadsStore.GetValue(iter, FINISHED_DATA_INDEX); + yield return (InProgressDownloadEntry)inprogressDownloadsStore.GetValue(iter, INPROGRESS_DATA_INDEX); while (inprogressDownloadsStore.IterNext(ref iter)) { - yield return (InProgressDownloadEntry)inprogressDownloadsStore.GetValue(iter, FINISHED_DATA_INDEX); + yield return (InProgressDownloadEntry)inprogressDownloadsStore.GetValue(iter, INPROGRESS_DATA_INDEX); } } @@ -950,19 +1402,61 @@ namespace XDM.GtkUI return -1; } - public void ShowQueuesAndSchedulerWindow() - { - throw new NotImplementedException(); - } - public IQueuesWindow CreateQueuesAndSchedulerWindow(IAppUI appUi, IEnumerable queues) { - throw new NotImplementedException(); + return QueueSchedulerDialog.CreateFromGladeFile(this, this.windowGroup, appUi); } public IQueueSelectionDialog CreateQueueSelectionDialog() { - throw new NotImplementedException(); + var qsd = QueueSelectionDialog.CreateFromGladeFile(this, windowGroup); + return qsd; + } + + public void ConfirmDelete(string text, out bool approved, out bool deleteFiles) + { + approved = false; + deleteFiles = false; + using var dlg = DeleteConfirmDialog.CreateFromGladeFile(this, this.windowGroup); + if (!string.IsNullOrEmpty(text)) + { + dlg.DescriptionText = text; + } + dlg.Run(); + if (dlg.Result) + { + approved = true; + deleteFiles = dlg.ShouldDeleteFile; + } + dlg.Destroy(); + } + + public string? SaveFileDialog(string? initialPath, string? defaultExt, string? filter) + { + return GtkHelper.SaveFile(this, initialPath); + } + + public string? OpenFileDialog(string? initialPath, string? defaultExt, string? filter) + { + return GtkHelper.SelectFile(this); + } + + public IQueuesWindow CreateQueuesAndSchedulerWindow(IAppUI appUi) + { + return QueueSchedulerDialog.CreateFromGladeFile(this, this.windowGroup, appUi); + } + + public void ShowDownloadSelectionWindow(IApp app, IAppUI appUI, FileNameFetchMode mode, IEnumerable downloads) + { + var dsvc = new DownloadSelectionViewController(DownloadSelectionWindow.CreateFromGladeFile(), + app, appUI, FileNameFetchMode.FileNameAndExtension, downloads); + dsvc.Run(); + } + + public IClipboardMonitor GetClipboardMonitor() => this.clipboarMonitor; + + public void ShowFloatingWidget() + { } //private ref InProgressEntryWrapper? FindInProgressDownloadById() diff --git a/app/XDM/XDM.Gtk.UI/ButtonWrapper.cs b/app/XDM/XDM.Gtk.UI/ButtonWrapper.cs index 7545304..d1467f0 100644 --- a/app/XDM/XDM.Gtk.UI/ButtonWrapper.cs +++ b/app/XDM/XDM.Gtk.UI/ButtonWrapper.cs @@ -10,9 +10,9 @@ namespace XDM.GtkUI { internal class ButtonWrapper : IButton { - private readonly ToolButton button; + private readonly Button button; - public ButtonWrapper(ToolButton button) + public ButtonWrapper(Button button) { this.button = button; button.Clicked += (s, e) => diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/About/AboutDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/About/AboutDialog.cs new file mode 100644 index 0000000..40f5457 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/About/AboutDialog.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using System.IO; + +namespace XDM.GtkUI.Dialogs.About +{ + public class AboutDialog : Dialog + { + [UI] private Label TxtAppVersion, TxtCopyright; + [UI] private LinkButton TxtWebsite; + [UI] private Image AppLogo; + + public bool Result { get; set; } = false; + + private WindowGroup group; + + private AboutDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + AppLogo.Pixbuf = GtkHelper.LoadSvg("xdm-logo", 128); + TxtAppVersion.Text = "Xtreme Download Manager 8.0.1 BETA"; + TxtAppVersion.StyleContext.AddClass("medium-font"); + TxtCopyright.Text = "© 2013 Subhra Das Gupta"; + TxtWebsite.Label = "www.xtremedownloadmanager.com"; + TxtWebsite.Uri = "https://xtremedownloadmanager.com/"; + + Title = TextResource.GetText("MENU_ABOUT"); + SetDefaultSize(500, 450); + } + + public static AboutDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "about-dialog.glade")); + return new AboutDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/AdvancedDownload/AdvancedDownloadDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/AdvancedDownload/AdvancedDownloadDialog.cs new file mode 100644 index 0000000..0498eb4 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/AdvancedDownload/AdvancedDownloadDialog.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; + +namespace XDM.GtkUI.Dialogs.AdvancedDownload +{ + internal class AdvancedDownloadDialog : Dialog + { + [UI] private Button btnOk = null; + [UI] private Button btnCancel = null; + [UI] private Entry TxtUserName = null; + [UI] private Entry TxtPassword = null; + [UI] private ComboBox CmbProxyType = null; + [UI] private Entry TxtProxyHost = null; + [UI] private Entry TxtProxyPort = null; + [UI] private Entry TxtProxyUser = null; + [UI] private Entry TxtProxyPassword = null; + [UI] private CheckButton ChkEnabled = null; + [UI] private CheckButton ChkRememberAuth = null; + [UI] private Entry TxtSpeedLimit = null; + + [UI] private Label tabPage1 = null; + [UI] private Label tabPage2 = null; + [UI] private Label tabPage3 = null; + + [UI] private Label LblUser = null; + [UI] private Label LblPassword = null; + [UI] private Label LblProxy = null; + [UI] private Label LblProxyHost = null; + [UI] private Label LblProxyPort = null; + [UI] private Label LblProxyUser = null; + [UI] private Label LblProxyPass = null; + [UI] private Label LblSpeedLimit = null; + + private WindowGroup group; + + //private static Builder builder = new Builder(); + + //static AdvancedDownloadDialog() + //{ + // builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "advanced-download-dialog.glade")); + //} + + public static Builder LoadBuilder() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "advanced-download-dialog.glade")); + return builder; + } + + public AdvancedDownloadDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog"))// base(TextResource.GetText("DESC_ADV_TITLE"), parent, DialogFlags.Modal) + { + SetDefaultSize(550, 450); + builder.Autoconnect(this); + Title = TextResource.GetText("DESC_ADV_TITLE"); + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.PopulateComboBox(CmbProxyType!, + TextResource.GetText("NET_SYSTEM_PROXY"), + TextResource.GetText("ND_NO_PROXY"), + TextResource.GetText("ND_MANUAL_PROXY")); + + GtkHelper.ConfigurePasswordField(TxtPassword); + GtkHelper.ConfigurePasswordField(TxtProxyPassword); + TxtSpeedLimit!.Text = "0"; + CmbProxyType!.Changed += CmbProxyType_Changed; + + btnOk.Clicked += BtnOK_Click; + btnCancel.Clicked += BtnCancel_Click; + + LoadTexts(); + + GtkHelper.AttachSafeDispose(this); + } + + public AuthenticationInfo? Authentication + { + get + { + if (string.IsNullOrEmpty(TxtUserName.Text)) + { + return null; + } + return new AuthenticationInfo + { + UserName = TxtUserName.Text, + Password = TxtPassword.Text + }; + } + set + { + if (value.HasValue) + { + TxtUserName.Text = value.Value.UserName; + TxtPassword.Text = value.Value.Password; + } + } + } + + public ProxyInfo? Proxy + { + get + { + var selectedIndex = CmbProxyType.Active; + if (selectedIndex == 1) + { + return new ProxyInfo { ProxyType = ProxyType.Direct }; + } + if (selectedIndex == 0) + { + return new ProxyInfo { ProxyType = ProxyType.System }; + } + if (selectedIndex == 2 && + !string.IsNullOrEmpty(TxtProxyHost.Text) && + Int32.TryParse(TxtProxyPort.Text, out _)) + { + return new ProxyInfo + { + ProxyType = ProxyType.Custom, + Host = TxtProxyHost.Text, + Port = Int32.Parse(TxtProxyPort.Text), + UserName = TxtProxyUser.Text, + Password = TxtProxyPassword.Text + }; + } + return null; + } + set + { + SetProxy(value ?? Config.Instance.Proxy); + } + } + + private void SetProxy(ProxyInfo? proxy) + { + CmbProxyType.Active = (int)(proxy?.ProxyType ?? 0); + TxtProxyHost.Text = proxy?.Host; + TxtProxyPort.Text = proxy?.Port.ToString(); + TxtProxyUser.Text = proxy?.UserName; + TxtProxyPassword.Text = proxy?.Password; + } + + public int SpeedLimit + { + get + { + if (Int32.TryParse(TxtSpeedLimit.Text, out int n)) + { + return n; + } + return 0; + } + set => TxtSpeedLimit.Text = value.ToString(); + } + + public bool EnableSpeedLimit + { + get => ChkEnabled.Active; + set => ChkEnabled.Active = value; + } + + public bool Result { get; set; } = false; + + private void BtnOK_Click(object sender, EventArgs e) + { + Result = true; + this.group.RemoveWindow(this); + Visible = false; + } + + private void BtnCancel_Click(object sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Visible = false; + } + + private void CmbProxyType_Changed(object? sender, EventArgs e) + { + TxtProxyUser.IsEditable = TxtProxyPassword.IsEditable = TxtProxyHost.IsEditable = + TxtProxyPort.IsEditable = CmbProxyType.Active == 2; + } + + //private void LoadTranslations(Builder builder) + //{ + // builder. + //} + + //private void LoadTranslations(Widget widget) + //{ + // if (widget == null) + // { + // return; + // } + + // if (!string.IsNullOrEmpty(widget.GetProperty("name").ToString())) + // { + // var text = TextResource.GetText(widget.Name); + // if (!string.IsNullOrEmpty(text)) + // { + // switch (widget) + // { + // case Button btn: + // btn.Label = text; + // break; + // case Label lbl: + // lbl.Text = text; + // break; + // } + // } + // } + + // if (widget is not Container c) + // { + // return; + // } + + // var children = c.Children; + // if (children != null) + // { + // foreach (var child in children) + // { + // LoadTranslations(child); + // } + // } + //} + + public void LoadTexts() + { + + tabPage1.Text = TextResource.GetText("ND_AUTH"); + tabPage2.Text = TextResource.GetText("DESC_NET4"); + tabPage3.Text = TextResource.GetText("MENU_SPEED_LIMITER"); + + LblUser.Text = TextResource.GetText("DESC_USER"); + LblPassword.Text = TextResource.GetText("DESC_PASS"); + ChkRememberAuth.Label = TextResource.GetText("ND_AUTH_REMEMBER"); + + LblProxy.Text = TextResource.GetText("DESC_NET4"); + LblProxyHost.Text = TextResource.GetText("PROXY_HOST"); + LblProxyUser.Text = TextResource.GetText("DESC_NET7"); + LblProxyPort.Text = TextResource.GetText("PROXY_PORT"); + LblProxyPass.Text = TextResource.GetText("DESC_NET8"); + ChkEnabled.Label = TextResource.GetText("MENU_SPEED_LIMITER"); + LblSpeedLimit.Text = TextResource.GetText("MSG_SPEED_LIMIT"); + + btnOk.Label = TextResource.GetText("MSG_OK"); + btnCancel.Label = TextResource.GetText("ND_CANCEL"); + //button3.Text = TextResource.GetText("ND_SYSTEM_PROXY"); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/BatchWindow/BatchDownloadWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/BatchWindow/BatchDownloadWindow.cs new file mode 100644 index 0000000..985f6d0 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/BatchWindow/BatchDownloadWindow.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UI = Gtk.Builder.ObjectAttribute; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Common.UI; +using Translations; +using XDM.Core.Lib.Common; +using XDM.GtkUI.Utils; +using XDM.Core.Lib.UI; +using XDM.Core.Lib.Util; + +namespace XDM.GtkUI.Dialogs.BatchWindow +{ + internal class BatchDownloadWindow : Window, IBatchDownloadView + { + public bool IsLetterMode { get => CmbType.Active == 0; set => CmbType.Active = value ? 0 : 1; } + public bool IsUsingLeadingZero { get => ChkLeadingZero.Active; set => ChkLeadingZero.Active = value; } + public string Url { get => TxtAddress.Text; set => TxtAddress.Text = value; } + public char? StartLetter => CmbLetterFrom.Active < 0 ? null : GtkHelper.GetComboBoxSelectedItem(CmbLetterFrom)[0]; + public char? EndLetter => CmbLetterTo.Active < 0 ? null : GtkHelper.GetComboBoxSelectedItem(CmbLetterTo)[0]; + public int StartNumber => Helpers.ParseIntSafe(TxtNumberFrom.Text); + public int EndNumber => Helpers.ParseIntSafe(TxtNumberTo.Text); + public int LeadingZeroCount => Helpers.ParseIntSafe(TxtLeadingZero.Text); + public string BatchAddress1 { get => TxtFile1.Text; set => TxtFile1.Text = value; } + public string BatchAddress2 { get => TxtFile2.Text; set => TxtFile2.Text = value; } + public string BatchAddressN { get => TxtFileN.Text; set => TxtFileN.Text = value; } + public bool IsBatchMode => this.TabControl.CurrentPage == 0; + + public event EventHandler? PatternChanged; + public event EventHandler? OkClicked; + + public void SetStartLetterRange(string[] range) + { + GtkHelper.PopulateComboBox(this.CmbLetterFrom, range); + //this.CmbLetterFrom.ItemsSource = range; + } + + public void SetEndLetterRange(string[] range) + { + GtkHelper.PopulateComboBox(this.CmbLetterTo, range); + //this.CmbLetterTo.ItemsSource = range; + } + + public void ShowWindow() + { + this.Show(); + } + + public void DestroyWindow() + { + Close(); + Destroy(); + Dispose(); + } + + private WindowGroup windowGroup; + + [UI] private Label Label1; + [UI] private Label Label2; + [UI] private Label Label3; + [UI] private Label Label4; + [UI] private Label Label5; + [UI] private Label Label6; + [UI] private Label Label7; + [UI] private Label Label8; + [UI] private Label PageLabel2; + [UI] private Label Header1; + [UI] private Label Header2; + [UI] private Button BtnOK; + [UI] private Button BtnCancel; + [UI] private CheckButton ChkLeadingZero; + [UI] private ComboBox CmbType; + [UI] private ComboBox CmbLetterFrom; + [UI] private ComboBox CmbLetterTo; + [UI] private Entry TxtAddress; + [UI] private SpinButton TxtNumberFrom; + [UI] private SpinButton TxtNumberTo; + [UI] private Entry TxtFile1; + [UI] private Entry TxtFile2; + [UI] private Entry TxtFileN; + [UI] private Entry TxtLeadingZero; + [UI] private Notebook TabControl; + + private BatchDownloadWindow(Builder builder, Window parent) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + Title = TextResource.GetText("MENU_BATCH_DOWNLOAD"); + SetDefaultSize(600, 500); + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + + this.windowGroup = new WindowGroup(); + this.windowGroup.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + LoadTexts(); + + GtkHelper.PopulateComboBox(CmbType, TextResource.GetText("LBL_BATCH_LETTER"), TextResource.GetText("LBL_BATCH_NUM")); + //GtkHelper.PopulateComboBox(CmbLetterFrom, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); + //GtkHelper.PopulateComboBox(CmbLetterTo, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); + + CmbType.Changed += CmbType_Changed; + CmbLetterFrom.Changed += CmbLetterFrom_Changed; + CmbLetterTo.Changed += CmbLetterTo_Changed; + ChkLeadingZero.Toggled += ChkLeadingZero_Toggled; + TxtAddress.Changed += TxtAddress_Changed; + TxtAddress.FocusOutEvent += TxtAddress_FocusOutEvent; + TxtNumberFrom.ValueChanged += Txt_ValueChanged; + TxtNumberTo.ValueChanged += Txt_ValueChanged; + + CmbType.Active = 0; + + BtnOK.Clicked += BtnOK_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + } + + private void Txt_ValueChanged(object? sender, EventArgs e) + { + OnBatchPatternChange(); + } + + private void TxtAddress_FocusOutEvent(object o, FocusOutEventArgs args) + { + OnBatchPatternChange(); + } + + private void TxtAddress_Changed(object? sender, EventArgs e) + { + OnBatchPatternChange(); + } + + private void ChkLeadingZero_Toggled(object? sender, EventArgs e) + { + OnBatchPatternChange(); + } + + private void CmbLetterTo_Changed(object? sender, EventArgs e) + { + OnBatchPatternChange(); + } + + private void CmbLetterFrom_Changed(object? sender, EventArgs e) + { + OnBatchPatternChange(); + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + DestroyWindow(); + } + + private void BtnOK_Clicked(object? sender, EventArgs e) + { + OkClicked?.Invoke(this, EventArgs.Empty); + } + + private void CmbType_Changed(object? sender, EventArgs e) + { + if (CmbType.Active == 1) + { + CmbLetterFrom.Hide(); + CmbLetterTo.Hide(); + TxtNumberFrom.ShowAll(); + TxtNumberTo.ShowAll(); + } + else + { + CmbLetterFrom.ShowAll(); + CmbLetterTo.ShowAll(); + TxtNumberFrom.Hide(); + TxtNumberTo.Hide(); + } + OnBatchPatternChange(); + } + + private void OnBatchPatternChange() + { + PatternChanged?.Invoke(this, EventArgs.Empty); + } + + private void LoadTexts() + { + Label1.Text = TextResource.GetText("LBL_BATCH_DESC"); + Label2.Text = TextResource.GetText("ND_ADDRESS"); + Label3.Text = TextResource.GetText("LBL_BATCH_ASTERISK"); + Label4.Text = TextResource.GetText("LBL_BATCH_FROM"); + Label5.Text = TextResource.GetText("LBL_BATCH_TO"); + Label6.Text = TextResource.GetText("LBL_BATCH_FILE1"); + Label7.Text = TextResource.GetText("LBL_BATCH_FILE2"); + Label8.Text = TextResource.GetText("LBL_BATCH_FILEN"); + PageLabel2.Text = TextResource.GetText("BAT_PASTE_LINK"); + Header1.Text = TextResource.GetText("BAT_PATTERN"); + Header2.Text = TextResource.GetText("BAT_LINKS"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + BtnOK.Label = TextResource.GetText("MSG_OK"); + ChkLeadingZero.Label = TextResource.GetText("BAT_LEADING_ZERO"); + } + + public static BatchDownloadWindow CreateFromGladeFile(Window parent) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "batch-download-dialog.glade")); + return new BatchDownloadWindow(builder, parent); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/CredentialsDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/CredentialsDialog.cs new file mode 100644 index 0000000..d3432f4 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/CredentialsDialog.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs +{ + public class CredentialsDialog : Dialog + { + [UI] private Entry TxtUserName; + [UI] private Entry TxtPassword; + [UI] private Label TxtMessage; + [UI] private Label LblUser; + [UI] private Label LblPassword; + [UI] private Button BtnOk; + [UI] private Button BtnCancel; + + private WindowGroup group; + + public AuthenticationInfo? Credentials => new AuthenticationInfo + { + UserName = TxtUserName.Text, + Password = TxtPassword.Text + }; + + public bool Result { get; set; } = false; + + public string PromptText { set => TxtMessage.Text = value; } + + private CredentialsDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + GtkHelper.ConfigurePasswordField(TxtPassword); + + Title = TextResource.GetText("ND_AUTH"); + SetDefaultSize(400, 200); + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + BtnOk.Clicked += BtnOk_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Visible = false; + } + + private void BtnOk_Clicked(object? sender, EventArgs e) + { + if (string.IsNullOrEmpty(TxtUserName.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NO_USERNAME")); + return; + } + + Result = true; + this.group.RemoveWindow(this); + Visible = false; + } + + public static CredentialsDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "credential-dialog.glade")); + return new CredentialsDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/DeleteConfirm/DeleteConfirmDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/DeleteConfirm/DeleteConfirmDialog.cs new file mode 100644 index 0000000..b5c69ae --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/DeleteConfirm/DeleteConfirmDialog.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.DeleteConfirm +{ + public class DeleteConfirmDialog : Dialog + { + [UI] private Label TxtLabel; + [UI] private CheckButton ChkDiskDel; + [UI] private Button BtnDelete; + [UI] private Button BtnCancel; + + public bool Result { get; set; } = false; + + private WindowGroup group; + + public string DescriptionText + { + set + { + TxtLabel.Text = value; + } + } + + public bool ShouldDeleteFile => ChkDiskDel.Active; + + private DeleteConfirmDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + BtnDelete.Clicked += BtnDelete_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + + BtnDelete.Label = TextResource.GetText("DESC_DEL"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + ChkDiskDel.Label = TextResource.GetText("LBL_DELETE_FILE"); + TxtLabel.Text = TextResource.GetText("DEL_SEL_TEXT"); + + Title = TextResource.GetText("MENU_DELETE_DWN"); + SetDefaultSize(400, 200); + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Visible = false; + } + + private void BtnDelete_Clicked(object? sender, EventArgs e) + { + Result = true; + this.group.RemoveWindow(this); + Visible = false; + } + + public static DeleteConfirmDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "delete-confirm-dialog.glade")); + return new DeleteConfirmDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/DownloadComplete/DownloadCompleteDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/DownloadComplete/DownloadCompleteDialog.cs new file mode 100644 index 0000000..eaf6540 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/DownloadComplete/DownloadCompleteDialog.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.DownloadComplete +{ + public class DownloadCompleteDialog : Window, IDownloadCompleteDialog + { + public string FileNameText + { + get => TxtFileName.Text; + set => TxtFileName.Text = value; + } + + public string FolderText + { + get => TxtLocation.Text; + set => TxtLocation.Text = value; + } + + public IApp? App { get; set; } + public event EventHandler? FileOpenClicked; + public event EventHandler? FolderOpenClicked; + public event EventHandler? DontShowAgainClickd; + + [UI] private Image ImgFileIcon; + [UI] private Label TxtFileName; + [UI] private Label TxtLocation; + [UI] private Button BtnOpenFolder; + [UI] private Button BtnOpen; + [UI] private LinkButton TxtDontShowCompleteDialog; + + private DownloadCompleteDialog(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + KeepAbove = true; + Title = TextResource.GetText("CD_TITLE"); + SetPosition(WindowPosition.CenterAlways); + + BtnOpen.Label = TextResource.GetText("CTX_OPEN_FILE"); + BtnOpenFolder.Label = TextResource.GetText("CTX_OPEN_FOLDER"); + TxtDontShowCompleteDialog.Label = TextResource.GetText("MSG_DONT_SHOW_AGAIN"); + TxtFileName.StyleContext.AddClass("large-font"); + TxtFileName.Ellipsize = Pango.EllipsizeMode.End; + ImgFileIcon.Pixbuf = GtkHelper.LoadSvg("file-download-line", 64); + + BtnOpen.Clicked += BtnOpen_Click; + BtnOpenFolder.Clicked += BtnOpenFolder_Click; + TxtDontShowCompleteDialog.Clicked += TxtDontShowCompleteDialog_MouseDown; + SetDefaultSize(400, 200); + + GtkHelper.AttachSafeDispose(this); + } + + private void TxtDontShowCompleteDialog_MouseDown(object? sender, EventArgs e) + { + + } + + private void BtnOpen_Click(object? sender, EventArgs e) + { + FileOpenClicked?.Invoke(sender, new DownloadCompleteDialogEventArgs + { + Path = IoPath.Combine(TxtLocation.Text, TxtFileName.Text) + }); + Close(); + } + + public void ShowDownloadCompleteDialog() + { + SetDefaultSize(400, 200); + this.Show(); + } + + private void BtnOpenFolder_Click(object? sender, EventArgs e) + { + FolderOpenClicked?.Invoke(sender, new DownloadCompleteDialogEventArgs + { + Path = TxtLocation.Text, + FileName = TxtFileName.Text + }); + Close(); + } + + public static DownloadCompleteDialog CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "download-complete-window.glade")); + return new DownloadCompleteDialog(builder); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/DownloadSelection/DownloadSelectionWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/DownloadSelection/DownloadSelectionWindow.cs new file mode 100644 index 0000000..f9af5e7 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/DownloadSelection/DownloadSelectionWindow.cs @@ -0,0 +1,244 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using System; +using YDLWrapper; +using XDM.Core.Lib.Util; +using TraceLog; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Dialogs.AdvancedDownload; +using XDM.Core.Lib.Downloader; + +namespace XDM.GtkUI.Dialogs.DownloadSelection +{ + internal class DownloadSelectionWindow : Window, IDownloadSelectionView + { + public string DownloadLocation { get => TxtSaveIn.Text; set => TxtSaveIn.Text = value; } + public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } + public ProxyInfo? Proxy { get => proxy; set => proxy = value; } + public int SpeedLimit { get => speedLimit; set => speedLimit = value; } + public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } + public int SelectedRowCount => this.GetSelectedRowCount(); + public IEnumerable SelectedItems => this.GetSelectedRows(); + + public event EventHandler? BrowseClicked; + public event EventHandler? DownloadClicked; + public event EventHandler? QueueSchedulerClicked; + public event EventHandler? DownloadLaterClicked; + + public void CloseWindow() + { + this.Close(); + this.Destroy(); + this.Dispose(); + } + + public string? SelectFolder() + { + return GtkHelper.SelectFolder(this); + } + + public void SetData(FileNameFetchMode mode, IEnumerable downloads, Func populateEntryWrapper) + { + foreach (IDownloadEntryWrapper entry in downloads.Select(o => + { + var ent = new DownloadEntryWrapper(); + populateEntryWrapper.Invoke(o, ent); + return ent; + })) + { + store.AppendValues(true, entry.Name, entry); + } + } + + public void ShowWindow() + { + ShowAll(); + } + + private void PrepareMenu() + { + dontAddToQueueMenuItem = new Gtk.MenuItem(TextResource.GetText("LBL_QUEUE_OPT3")); + queueAndSchedulerMenuItem = new Gtk.MenuItem(TextResource.GetText("DESC_Q_TITLE")); + + dontAddToQueueMenuItem.Activated += DontAddToQueueMenuItem_Click; + queueAndSchedulerMenuItem.Activated += QueueAndSchedulerMenuItem_Click; + + DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( + args => DownloadLaterClicked?.Invoke(this, args), + menu1, + dontAddToQueueMenuItem, + queueAndSchedulerMenuItem, + this); + } + + private void DontAddToQueueMenuItem_Click(object? sender, EventArgs e) + { + this.DownloadLaterClicked?.Invoke(this, new DownloadLaterEventArgs(string.Empty)); + } + + private void QueueAndSchedulerMenuItem_Click(object? sender, EventArgs e) + { + this.QueueSchedulerClicked?.Invoke(this, EventArgs.Empty); + } + + private Gtk.MenuItem dontAddToQueueMenuItem; + private Gtk.MenuItem queueAndSchedulerMenuItem; + + private AuthenticationInfo? authentication; + private ProxyInfo? proxy = Config.Instance.Proxy; + private int speedLimit = Config.Instance.DefaltDownloadSpeed; + private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; + + [UI] private Label LblSaveIn; + [UI] private CheckButton ChkSelectAll; + [UI] private TreeView LbDownloadList; + [UI] private Entry TxtSaveIn; + [UI] private Button BtnBrowse; + [UI] private Gtk.Menu menu1; + [UI] private Button BtnDownloadNow; + [UI] private MenuButton BtnDownloadLater; + [UI] private Button BtnMore; + + private WindowGroup windowGroup; + private ListStore store; + + private int GetSelectedRowCount() + { + return GtkHelper.GetListStoreValues(store, 2).Where(x => x.IsSelected).Count(); + } + + private IEnumerable GetSelectedRows() + { + return GtkHelper.GetListStoreValues(store, 2).Where(x => x.IsSelected); + } + + private DownloadSelectionWindow(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + SetDefaultSize(600, 500); + + windowGroup = new WindowGroup(); + windowGroup.AddWindow(this); + + Title = TextResource.GetText("BAT_SELECT_ITEMS"); + SetPosition(WindowPosition.CenterAlways); + + PrepareMenu(); + GtkHelper.AttachSafeDispose(this); + + store = new ListStore(typeof(bool), typeof(string), typeof(IDownloadEntryWrapper)); + LbDownloadList.Model = store; + LbDownloadList.HeadersVisible = false; + + var fileNameColumn = new TreeViewColumn + { + Resizable = false, + Reorderable = false, + Title = TextResource.GetText("SORT_NAME"), + Sizing = TreeViewColumnSizing.Autosize, + Expand = true + }; + + var checkboxRenderer = new CellRendererToggle { }; + checkboxRenderer.Toggled += CheckboxRenderer_Toggled; + fileNameColumn.PackStart(checkboxRenderer, false); + fileNameColumn.SetAttributes(checkboxRenderer, "active", 0); + + var fileNameRendererText = new CellRendererText(); + fileNameColumn.PackStart(fileNameRendererText, false); + fileNameColumn.SetAttributes(fileNameRendererText, "text", 1); + LbDownloadList.AppendColumn(fileNameColumn); + + ChkSelectAll.Toggled += ChkSelectAll_Toggled; + BtnDownloadNow.Clicked += BtnDownloadNow_Clicked; + BtnMore.Clicked += BtnMore_Clicked; + BtnBrowse.Clicked += BtnBrowse_Clicked; + + LoadTexts(); + } + + private void BtnBrowse_Clicked(object? sender, EventArgs e) + { + BrowseClicked?.Invoke(this, EventArgs.Empty); + } + + private void BtnMore_Clicked(object? sender, EventArgs e) + { + using var dlg = new AdvancedDownloadDialog(AdvancedDownloadDialog.LoadBuilder(), this, this.windowGroup) + { + Authentication = Authentication, + Proxy = Proxy, + EnableSpeedLimit = EnableSpeedLimit, + SpeedLimit = SpeedLimit, + }; + dlg.Run(); + if (dlg.Result) + { + Authentication = dlg.Authentication; + Proxy = dlg.Proxy; + EnableSpeedLimit = dlg.EnableSpeedLimit; + SpeedLimit = dlg.SpeedLimit; + } + dlg.Destroy(); + } + + private void BtnDownloadNow_Clicked(object? sender, EventArgs e) + { + DownloadClicked?.Invoke(this, EventArgs.Empty); + } + + private void ChkSelectAll_Toggled(object? sender, EventArgs e) + { + GtkHelper.ListStoreForEach(store, iter => + { + store.SetValue(iter, 0, ChkSelectAll.Active); + var ent = (IDownloadEntryWrapper)store.GetValue(iter, 2); + ent.IsSelected = ChkSelectAll.Active; + }); + } + + private void CheckboxRenderer_Toggled(object o, ToggledArgs args) + { + TreeIter iter; + if (store.GetIter(out iter, new TreePath(args.Path))) + { + store.SetValue(iter, 0, !(bool)store.GetValue(iter, 0)); + var ent = (IDownloadEntryWrapper)store.GetValue(iter, 2); + ent.IsSelected = true; + } + } + + private void LoadTexts() + { + ChkSelectAll.Label = TextResource.GetText("VID_CHK"); + LblSaveIn.Text = TextResource.GetText("LBL_SAVE_IN"); + BtnMore.Label = TextResource.GetText("ND_MORE"); + BtnDownloadLater.Label = TextResource.GetText("ND_DOWNLOAD_LATER"); + BtnDownloadNow.Label = TextResource.GetText("ND_DOWNLOAD_NOW"); + } + + public static DownloadSelectionWindow CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "download-selection-window.glade")); + return new DownloadSelectionWindow(builder); + } + } + + internal class DownloadEntryWrapper : IDownloadEntryWrapper + { + public string Name { get; set; } + public bool IsSelected { get; set; } + public object DownloadEntry { get; set; } + public string EntryType { get; set; } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/Language/LanguageDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/Language/LanguageDialog.cs new file mode 100644 index 0000000..835c8f6 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/Language/LanguageDialog.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using System.IO; + +namespace XDM.GtkUI.Dialogs.Language +{ + public class LanguageDialog : Dialog + { + [UI] private Label Label1, Label2; + [UI] private ComboBox CmbLanguage; + [UI] private Button BtnOk, BtnCancel; + + public bool Result { get; set; } = false; + + private WindowGroup group; + + private LanguageDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + Label1.Text = TextResource.GetText("MSG_LANG1"); + Label2.Text = TextResource.GetText("MSG_LANG2"); + + BtnOk.Clicked += BtnOk_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + + BtnOk.Label = TextResource.GetText("MSG_OK"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + + Title = TextResource.GetText("MENU_LANG"); + SetDefaultSize(400, 200); + + var indexFile = IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Lang\index.txt"); + var items = new List(); + var n = 0; + var c = 0; + if (File.Exists(indexFile)) + { + var lines = File.ReadAllLines(indexFile); + foreach (var line in lines) + { + var index = line.IndexOf("="); + if (index > 0) + { + var name = line.Substring(0, index); + items.Add(name); + if (name == Config.Instance.Language) + { + c = n; + } + n++; + } + } + if (items.Count > 0) + { + GtkHelper.PopulateComboBoxGeneric(CmbLanguage, items.ToArray()); + CmbLanguage.Active = c; + } + } + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Dispose(); + } + + private void BtnOk_Clicked(object? sender, EventArgs e) + { + Result = true; + var name = GtkHelper.GetSelectedComboBoxValue(CmbLanguage); + if (!string.IsNullOrEmpty(name)) + { + Config.Instance.Language = name; + Config.SaveConfig(); + } + this.group.RemoveWindow(this); + Dispose(); + } + + public static LanguageDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "language-dialog.glade")); + return new LanguageDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/LinkRefresh/LinkRefreshWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/LinkRefresh/LinkRefreshWindow.cs new file mode 100644 index 0000000..3d35a62 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/LinkRefresh/LinkRefreshWindow.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.LinkRefresh +{ + internal class LinkRefreshWindow : Window, IRefreshLinkDialogSkeleton + { + [UI] private Label LblText; + [UI] private Button BtnStop; + + private WindowGroup group; + + public event EventHandler? WatchingStopped; + + public void LinkReceived() + { + Application.Invoke((_, _) => + { + try + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_REF_LINK_MSG")); + CloseAndDispose(); + } + catch { } + }); + } + + public void ShowWindow() + { + this.ShowAll(); + } + + private LinkRefreshWindow(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + SetDefaultSize(400, 200); + SetPosition(WindowPosition.CenterAlways); + this.group = new WindowGroup(); + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + BtnStop.Label = TextResource.GetText("BTN_STOP_PROCESSING"); + LblText.Text = TextResource.GetText("REF_WAITING_FOR_LINK"); + + Title = TextResource.GetText("MENU_REFRESH_LINK"); + DeleteEvent += LinkRefreshWindow_DeleteEvent; + BtnStop.Clicked += BtnStop_Clicked; + } + + private void CloseAndDispose() + { + this.Close(); + this.Destroy(); + this.Dispose(); + } + + private void BtnStop_Clicked(object? sender, EventArgs e) + { + CloseAndDispose(); + } + + private void LinkRefreshWindow_DeleteEvent(object o, DeleteEventArgs args) + { + WatchingStopped?.Invoke(this, EventArgs.Empty); + } + + public static LinkRefreshWindow CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "link-refresh-window.glade")); + return new LinkRefreshWindow(builder); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/NewDownload/NewDownloadWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/NewDownload/NewDownloadWindow.cs new file mode 100644 index 0000000..4bba380 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/NewDownload/NewDownloadWindow.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using XDM.GtkUI.Dialogs.AdvancedDownload; +using UI = Gtk.Builder.ObjectAttribute; + +namespace XDM.GtkUI.Dialogs.NewDownload +{ + public class NewDownloadWindow : Window, INewDownloadDialogSkeleton + { + private AuthenticationInfo? authentication; + private ProxyInfo? proxy = Config.Instance.Proxy; + private int speedLimit = Config.Instance.DefaltDownloadSpeed; + private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; + private int previousIndex = 0; + private ListStore dropdownItems; + + [UI] private Entry TxtUrl; + [UI] private Entry TxtFile; + [UI] private ComboBox CmbLocation; + [UI] private Label lblFileSize; + [UI] private Label lblAddress; + [UI] private Label lblFile; + [UI] private Label lblSaveIn; + [UI] private LinkButton lblIgnoreLabel; + [UI] private MenuButton btnDownloadLater; + [UI] private Button btnDownloadNow; + [UI] private Button btnMore; + [UI] private Gtk.Menu menu1; + [UI] private Image ImgFileIcon; + + private WindowGroup windowGroup; + + private Gtk.MenuItem dontAddToQueueMenuItem; + private Gtk.MenuItem queueAndSchedulerMenuItem; + + public static NewDownloadWindow CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "new-download-window.glade")); + return new NewDownloadWindow(builder); + } + + private NewDownloadWindow(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + SetDefaultSize(500, 300); + KeepAbove = true; + + Title = TextResource.GetText("ND_TITLE"); + SetPosition(WindowPosition.CenterAlways); + ImgFileIcon!.Pixbuf = GtkHelper.LoadSvg("file-download-line", 48); + + windowGroup = new WindowGroup(); + windowGroup.AddWindow(this); + + dropdownItems = new ListStore(typeof(string)); + + //TxtUrl = (Entry)builder.GetObject("txtUrl"); + //TxtFile = (Entry)builder.GetObject("txtFile"); + //CmbLocation = (ComboBox)builder.GetObject("cmdFolder"); + //lblFileSize = (Label)builder.GetObject("lblFileSize"); + //lblIgnoreLabel = (LinkButton)builder.GetObject("lblIgnoreLabel"); + //btnDownloadLater = (Button)builder.GetObject("btnDownloadLater"); + //btnDownloadNow = (Button)builder.GetObject("btnDownloadNow"); + //btnMore = (Button)builder.GetObject("btnMore"); + //lblAddress = (Label)builder.GetObject("lblAddress"); + //lblFile = (Label)builder.GetObject("lblFile"); + //lblSaveIn = (Label)builder.GetObject("lblSaveIn"); + + lblAddress.Text = TextResource.GetText("ND_ADDRESS"); + lblFile.Text = TextResource.GetText("ND_FILE"); + lblSaveIn.Text = TextResource.GetText("LBL_SAVE_IN"); + btnDownloadNow.Label = TextResource.GetText("ND_DOWNLOAD_NOW"); + btnDownloadLater.Label = TextResource.GetText("ND_DOWNLOAD_LATER"); + btnMore.Label = TextResource.GetText("ND_MORE"); + lblIgnoreLabel.Label = TextResource.GetText("ND_IGNORE_URL"); + + CmbLocation.Changed += CmbLocation_Changed; + this.Destroyed += Window_Closed; + TxtUrl.Changed += TxtUrl_TextChanged; + btnDownloadNow.Clicked += btnDownload_Click; + btnDownloadLater.Clicked += btnDownloadLater_Click; + btnMore.Clicked += btnAdvanced_Click; + lblIgnoreLabel.Clicked += TextBlock_MouseDown; + + dropdownItems = GtkHelper.PopulateComboBox(CmbLocation); + + CmbLocation.Hexpand = true; //If there's available space, we use it + //CellRendererText renderer = (CmbLocation.Cells[0] as CellRendererText); //Get the ComboBoxText only renderer + //renderer.WrapWidth = 10; //Always show at least 20 chars + //renderer.Ellipsize = Pango.EllipsizeMode.End; + + //CmbLocation.Model = dropdownItems; + //var cmbRenderer = new CellRendererText(); + //CmbLocation.PackStart(cmbRenderer, true); + //CmbLocation.AddAttribute(cmbRenderer, "text", 0); + + PrepareMenu(); + + this.ShowAll(); + + GtkHelper.AttachSafeDispose(this); + } + + public bool IsEmpty { get => TxtUrl.IsEditable; set => TxtUrl.IsEditable = value; } + public string Url { get => TxtUrl.Text; set => TxtUrl.Text = value; } + public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } + public ProxyInfo? Proxy { get => proxy; set => proxy = value; } + public int SpeedLimit { get => speedLimit; set => speedLimit = value; } + public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } + public string SelectedFileName { get => TxtFile.Text; set => TxtFile.Text = value; } + public int SeletedFolderIndex + { + get => CmbLocation.Active; + set + { + CmbLocation.Active = value; + previousIndex = value; + } + } + + public event EventHandler? DownloadClicked; + public event EventHandler? CancelClicked; + public event EventHandler? DestroyEvent; + public event EventHandler? BlockHostEvent; + public event EventHandler? UrlChangedEvent; + public event EventHandler? UrlBlockedEvent; + public event EventHandler? QueueSchedulerClicked; + public event EventHandler? DownloadLaterClicked; + public event EventHandler? FileBrowsedEvent; + public event EventHandler? DropdownSelectionChangedEvent; + + public void DisposeWindow() + { + this.Close(); + } + + public void Invoke(System.Action callback) + { + Application.Invoke(delegate { callback.Invoke(); }); + } + + public void SetFileSizeText(string text) + { + this.lblFileSize.Text = text; + } + + public void SetFolderValues(string[] values) + { + dropdownItems.Clear(); + previousIndex = 0; + foreach (var item in values) + { + dropdownItems.AppendValues(item); + } + } + + public void ShowMessageBox(string message) + { + GtkHelper.ShowMessageBox(this, message); + } + + public void ShowWindow() + { + this.Show(); + } + + private void CmbLocation_Changed(object? sender, EventArgs e) + { + if (CmbLocation.Active == 1) + { + var folder = GtkHelper.SelectFolder(this); + if (!string.IsNullOrEmpty(folder)) + { + this.FileBrowsedEvent?.Invoke(this, new FileBrowsedEventArgs(folder)); + } + else + { + CmbLocation.Active = previousIndex; + } + } + else + { + previousIndex = CmbLocation.Active; + this.DropdownSelectionChangedEvent?.Invoke(this, + new FileBrowsedEventArgs(GtkHelper.GetComboBoxSelectedItem(CmbLocation))); + } + } + + private void Window_Closed(object? sender, EventArgs e) + { + this.DestroyEvent?.Invoke(this, EventArgs.Empty); + } + + private void TxtUrl_TextChanged(object? sender, EventArgs e) + { + UrlChangedEvent?.Invoke(sender, e); + } + + private void btnDownload_Click(object? sender, EventArgs e) + { + DownloadClicked?.Invoke(sender, e); + } + + private void btnDownloadLater_Click(object? sender, EventArgs e) + { + ShowQueuesContextMenu(); + } + + private void btnAdvanced_Click(object? sender, EventArgs e) + { + var dlg = new AdvancedDownloadDialog(AdvancedDownloadDialog.LoadBuilder(), this, this.windowGroup) + { + Authentication = Authentication, + Proxy = Proxy, + EnableSpeedLimit = EnableSpeedLimit, + SpeedLimit = SpeedLimit, + }; + dlg.Run(); + if (dlg.Result) + { + Authentication = dlg.Authentication; + Proxy = dlg.Proxy; + EnableSpeedLimit = dlg.EnableSpeedLimit; + SpeedLimit = dlg.SpeedLimit; + } + dlg.Destroy(); + } + + private void TextBlock_MouseDown(object? sender, EventArgs e) + { + UrlBlockedEvent?.Invoke(sender, EventArgs.Empty); + } + + private void ShowQueuesContextMenu() + { + //DownloadLaterMenuHelper.PopulateMenuAndAttachEvents(DownloadLaterClicked, btnDownloadLater, this); + } + + private void DontAddToQueueMenuItem_Click(object? sender, EventArgs e) + { + this.DownloadLaterClicked?.Invoke(this, new DownloadLaterEventArgs(string.Empty)); + } + + private void QueueAndSchedulerMenuItem_Click(object? sender, EventArgs e) + { + this.QueueSchedulerClicked?.Invoke(this, EventArgs.Empty); + } + + private void PrepareMenu() + { + dontAddToQueueMenuItem = new Gtk.MenuItem(TextResource.GetText("LBL_QUEUE_OPT3")); + queueAndSchedulerMenuItem = new Gtk.MenuItem(TextResource.GetText("DESC_Q_TITLE")); + + dontAddToQueueMenuItem.Activated += DontAddToQueueMenuItem_Click; + queueAndSchedulerMenuItem.Activated += QueueAndSchedulerMenuItem_Click; + + DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( + args => DownloadLaterClicked?.Invoke(this, args), + menu1, + dontAddToQueueMenuItem, + queueAndSchedulerMenuItem, + this); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/NewQueue/NewQueueDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/NewQueue/NewQueueDialog.cs new file mode 100644 index 0000000..57f3273 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/NewQueue/NewQueueDialog.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using XDMApp; +using XDM.Core.Lib.Util; + +namespace XDM.GtkUI.Dialogs.NewQueue +{ + internal class NewQueueDialog : Dialog + { + [UI] private Label LblQueueName; + [UI] private Label LblQueueSelection; + [UI] private Entry TxtQueueName; + [UI] private TreeView lvDownloads; + [UI] private CheckButton ChkSelectAll; + [UI] private Button BtnOK; + [UI] private Button BtnCancel; + + private WindowGroup group; + private DownloadQueue? modifyingQueue; + private Action okAction; + private ListStore listStore; + + public bool Result { get; set; } = false; + + private NewQueueDialog(Builder builder, + Window parent, + WindowGroup group, + IAppUI ui, + Action okAction, + DownloadQueue? modifyingQueue) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + GtkHelper.AttachSafeDispose(this); + LoadTexts(); + Title = TextResource.GetText("LBL_QUEUE_OPT1"); + SetDefaultSize(640, 480); + BtnCancel.Clicked += BtnCancel_Clicked; + BtnOK.Clicked += BtnOK_Clicked; + + this.listStore = new ListStore( + typeof(bool), typeof(string), + typeof(string), typeof(string), + typeof(string), typeof(InProgressEntryWrapper)); + + this.lvDownloads.Model = this.listStore; + + var fileNameColumn = new TreeViewColumn + { + Resizable = true, + Reorderable = false, + Title = TextResource.GetText("SORT_NAME"), + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 200 + }; + + var checkboxRenderer = new CellRendererToggle { }; + checkboxRenderer.Toggled += CheckboxRenderer_Toggled; + fileNameColumn.PackStart(checkboxRenderer, false); + fileNameColumn.SetAttributes(checkboxRenderer, "active", 0); + + var fileNameRendererText = new CellRendererText(); + fileNameColumn.PackStart(fileNameRendererText, false); + fileNameColumn.SetAttributes(fileNameRendererText, "text", 1); + this.lvDownloads.AppendColumn(fileNameColumn); + + var dateColumn = new TreeViewColumn + { + Resizable = true, + Reorderable = false, + Title = TextResource.GetText("SORT_DATE"), + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 150 + }; + var dateRendererText = new CellRendererText(); + dateColumn.PackStart(dateRendererText, false); + dateColumn.SetAttributes(dateRendererText, "text", 2); + this.lvDownloads.AppendColumn(dateColumn); + + var sizeColumn = new TreeViewColumn + { + Resizable = true, + Reorderable = false, + Title = TextResource.GetText("SORT_SIZE"), + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 150 + }; + var sizeRendererText = new CellRendererText(); + sizeColumn.PackStart(sizeRendererText, false); + sizeColumn.SetAttributes(sizeRendererText, "text", 3); + this.lvDownloads.AppendColumn(sizeColumn); + + var statusColumn = new TreeViewColumn + { + Resizable = true, + Reorderable = false, + Title = TextResource.GetText("SORT_STATUS"), + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 150 + }; + var statusRendererText = new CellRendererText(); + statusColumn.PackStart(statusRendererText, false); + statusColumn.SetAttributes(statusRendererText, "text", 4); + this.lvDownloads.AppendColumn(statusColumn); + + this.okAction = okAction; + if (modifyingQueue == null) + { + this.TxtQueueName.Text = "New queue #" + QueueManager.QueueAutoNumber; + QueueManager.QueueAutoNumber++; + } + else + { + this.TxtQueueName.Text = modifyingQueue.Name; + this.modifyingQueue = modifyingQueue; + } + + var set = new HashSet(); + foreach (var queue in QueueManager.Queues) + { + foreach (var id in queue.DownloadIds) + { + set.Add(id); + } + } + + foreach (var ent in ui.GetAllInProgressDownloads().Select(x => new EntryWrapper { Entry = x })) + { + if (!set.Contains(ent.Entry.Id)) + { + listStore.AppendValues(false, + ent.Entry.Name, + ent.Entry.DateAdded.ToShortDateString() + " " + ent.Entry.DateAdded.ToShortTimeString(), + Helpers.FormatSize(ent.Entry.Size), + ent.Entry.Status.ToString(), + ent); + } + } + + ChkSelectAll.Toggled += ChkSelectAll_Toggled; + } + + private void ChkSelectAll_Toggled(object? sender, EventArgs e) + { + GtkHelper.ListStoreForEach(this.listStore, iter => + { + this.listStore.SetValue(iter, 0, ChkSelectAll.Active); + var ent = (EntryWrapper)this.listStore.GetValue(iter, 5); + ent.Selected = ChkSelectAll.Active; + }); + } + + private void BtnOK_Clicked(object? sender, EventArgs e) + { + if (OnApproved()) + { + Result = true; + this.group.RemoveWindow(this); + Visible = false; + } + } + + private bool OnApproved() + { + if (string.IsNullOrEmpty(TxtQueueName.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_QUEUE_NAME_MISSING")); + return false; + } + var list2 = new List(this.listStore.IterNChildren()); + var list = GtkHelper.GetListStoreValues(this.listStore, 5); + foreach (var entry in list) + { + if (entry.Selected) + { + list2.Add(entry.Entry.Id); + } + } + if (modifyingQueue == null) + { + okAction.Invoke(new DownloadQueue(Guid.NewGuid().ToString(), TxtQueueName.Text) { DownloadIds = list2 }, true); + } + else + { + modifyingQueue.DownloadIds.AddRange(list2); + okAction.Invoke(modifyingQueue, false); + } + return true; + } + + private void CheckboxRenderer_Toggled(object o, ToggledArgs args) + { + TreeIter iter; + if (this.listStore.GetIter(out iter, new TreePath(args.Path))) + { + var value = !(bool)this.listStore.GetValue(iter, 0); + this.listStore.SetValue(iter, 0, value); + var ent = (EntryWrapper)this.listStore.GetValue(iter, 5); + ent.Selected = value; + } + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Visible = false; + } + + private void LoadTexts() + { + LblQueueName.Text = TextResource.GetText("MSG_QUEUE_NAME"); + LblQueueSelection.Text = TextResource.GetText("MSG_QUEUE_SELECT_ITEMS"); + ChkSelectAll.Label = TextResource.GetText("VID_CHK"); + BtnOK.Label = TextResource.GetText("MSG_OK"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + } + + public static NewQueueDialog CreateFromGladeFile(Window parent, WindowGroup group, IAppUI ui, + Action okAction, + DownloadQueue? modifyingQueue) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "new-queue-dialog.glade")); + return new NewQueueDialog(builder, parent, group, ui, okAction, modifyingQueue); + } + } + + internal class EntryWrapper + { + public InProgressDownloadEntry Entry { get; set; } + public bool Selected { get; set; } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/NewVideoDownload/NewVideoDownloadWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/NewVideoDownload/NewVideoDownloadWindow.cs new file mode 100644 index 0000000..e338f5c --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/NewVideoDownload/NewVideoDownloadWindow.cs @@ -0,0 +1,241 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using XDM.GtkUI.Dialogs.AdvancedDownload; +using UI = Gtk.Builder.ObjectAttribute; + +namespace XDM.GtkUI.Dialogs.NewVideoDownload +{ + public class NewVideoDownloadWindow : Window, INewVideoDownloadDialog + { + [UI] private Entry TxtFile; + [UI] private ComboBox CmbLocation; + [UI] private Label lblFileSize; + [UI] private Label lblFile; + [UI] private Label lblSaveIn; + [UI] private MenuButton btnDownloadLater; + [UI] private Button btnDownloadNow; + [UI] private Button btnMore; + [UI] private Gtk.Menu menu1; + [UI] private Image ImgFileIcon; + + private WindowGroup windowGroup; + + private Gtk.MenuItem dontAddToQueueMenuItem; + private Gtk.MenuItem queueAndSchedulerMenuItem; + + private int previousIndex = 0; + public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } + public ProxyInfo? Proxy { get => proxy; set => proxy = value; } + public int SpeedLimit { get => speedLimit; set => speedLimit = value; } + public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } + + private AuthenticationInfo? authentication; + private ProxyInfo? proxy = Config.Instance.Proxy; + private int speedLimit = Config.Instance.DefaltDownloadSpeed; + private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; + + public event EventHandler DownloadClicked; + public event EventHandler DownloadLaterClicked; + public event EventHandler CancelClicked, DestroyEvent, QueueSchedulerClicked, Mp3CheckChanged; + public event EventHandler DropdownSelectionChangedEvent; + public event EventHandler FileBrowsedEvent; + + private ListStore dropdownItems; + + public static NewVideoDownloadWindow CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "new-video-download-window.glade")); + return new NewVideoDownloadWindow(builder); + } + + private NewVideoDownloadWindow(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + SetDefaultSize(500, 300); + KeepAbove = true; + Title = TextResource.GetText("ND_TITLE"); + SetPosition(WindowPosition.CenterAlways); + ImgFileIcon!.Pixbuf = GtkHelper.LoadSvg("file-download-line", 48); + + windowGroup = new WindowGroup(); + windowGroup.AddWindow(this); + + dropdownItems = new ListStore(typeof(string)); + + lblFile.Text = TextResource.GetText("ND_FILE"); + lblSaveIn.Text = TextResource.GetText("LBL_SAVE_IN"); + btnDownloadNow.Label = TextResource.GetText("ND_DOWNLOAD_NOW"); + btnDownloadLater.Label = TextResource.GetText("ND_DOWNLOAD_LATER"); + btnMore.Label = TextResource.GetText("ND_MORE"); + + CmbLocation.Changed += CmbLocation_Changed; + this.Destroyed += Window_Closed; + btnDownloadNow.Clicked += btnDownload_Click; + //btnDownloadLater.Clicked += btnDownloadLater_Click; + btnMore.Clicked += btnAdvanced_Click; + + dropdownItems = GtkHelper.PopulateComboBox(CmbLocation); + + //CmbLocation.Model = dropdownItems; + //var cmbRenderer = new CellRendererText(); + //CmbLocation.PackStart(cmbRenderer, true); + //CmbLocation.AddAttribute(cmbRenderer, "text", 0); + + PrepareMenu(); + + this.ShowAll(); + + GtkHelper.AttachSafeDispose(this); + } + + private void CmbLocation_Changed(object? sender, EventArgs e) + { + if (CmbLocation.Active == 1) + { + var folder = GtkHelper.SelectFolder(this); + if (!string.IsNullOrEmpty(folder)) + { + this.FileBrowsedEvent?.Invoke(this, new FileBrowsedEventArgs(folder)); + } + else + { + CmbLocation.Active = previousIndex; + } + } + else + { + previousIndex = CmbLocation.Active; + this.DropdownSelectionChangedEvent?.Invoke(this, + new FileBrowsedEventArgs(GtkHelper.GetComboBoxSelectedItem(CmbLocation))); + } + } + + private void Window_Closed(object? sender, EventArgs e) + { + this.DestroyEvent?.Invoke(this, EventArgs.Empty); + } + + private void btnDownload_Click(object? sender, EventArgs e) + { + DownloadClicked?.Invoke(sender, e); + } + + private void btnAdvanced_Click(object? sender, EventArgs e) + { + var dlg = new AdvancedDownloadDialog(AdvancedDownloadDialog.LoadBuilder(), this, this.windowGroup) + { + Authentication = Authentication, + Proxy = Proxy, + EnableSpeedLimit = EnableSpeedLimit, + SpeedLimit = SpeedLimit, + }; + dlg.Run(); + if (dlg.Result) + { + Authentication = dlg.Authentication; + Proxy = dlg.Proxy; + EnableSpeedLimit = dlg.EnableSpeedLimit; + SpeedLimit = dlg.SpeedLimit; + } + dlg.Destroy(); + } + + private void DontAddToQueueMenuItem_Click(object? sender, EventArgs e) + { + this.DownloadLaterClicked?.Invoke(this, new DownloadLaterEventArgs(string.Empty)); + } + + private void QueueAndSchedulerMenuItem_Click(object? sender, EventArgs e) + { + this.QueueSchedulerClicked?.Invoke(this, EventArgs.Empty); + } + + private void PrepareMenu() + { + dontAddToQueueMenuItem = new Gtk.MenuItem(TextResource.GetText("LBL_QUEUE_OPT3")); + queueAndSchedulerMenuItem = new Gtk.MenuItem(TextResource.GetText("DESC_Q_TITLE")); + + dontAddToQueueMenuItem.Activated += DontAddToQueueMenuItem_Click; + queueAndSchedulerMenuItem.Activated += QueueAndSchedulerMenuItem_Click; + + DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( + args => DownloadLaterClicked?.Invoke(this, args), + menu1, + dontAddToQueueMenuItem, + queueAndSchedulerMenuItem, + this); + } + + public string SelectedFileName { get => TxtFile.Text; set => TxtFile.Text = value; } + + public string FileSize { get => lblFileSize.Text; set => lblFileSize.Text = value; } + + public int SeletedFolderIndex + { + get => CmbLocation.Active; + set + { + CmbLocation.Active = value; + previousIndex = value; + } + } + + public bool ShowMp3Checkbox + { + get; set; + //get => ChkMp3.Visibility == Visibility.Visible; + //set => ChkMp3.Visibility = value ? Visibility.Visible : Visibility.Collapsed; + } + + public bool IsMp3CheckboxChecked { get; set; }/*{ get => ChkMp3.IsChecked ?? false; set => ChkMp3.IsChecked = value; }*/ + + public void DisposeWindow() + { + this.Close(); + } + + public void Invoke(System.Action callback) + { + Application.Invoke(delegate { callback.Invoke(); }); + } + + public void SetFileSizeText(string text) + { + this.lblFileSize.Text = text; + } + + public void SetFolderValues(string[] values) + { + dropdownItems.Clear(); + previousIndex = 0; + foreach (var item in values) + { + dropdownItems.AppendValues(item); + } + } + + public void ShowMessageBox(string message) + { + GtkHelper.ShowMessageBox(this, message); + } + + public void ShowWindow() + { + this.Show(); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/ProgressWindow/DownloadProgressWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/ProgressWindow/DownloadProgressWindow.cs new file mode 100644 index 0000000..301e58a --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/ProgressWindow/DownloadProgressWindow.cs @@ -0,0 +1,360 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UI = Gtk.Builder.ObjectAttribute; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Common.UI; +using Translations; +using XDM.Core.Lib.Common; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.ProgressWindow +{ + public class DownloadProgressWindow : Window, IProgressWindow + { + public string FileNameText + { + get => this.TxtFileName.Text; + set + { + Application.Invoke((a, b) => SetFileText(value)); + //Dispatcher.Invoke(new Action(() => SetFileText(value))); + } + } + public string UrlText + { + get => this.TxtUrl.Text; + set + { + Application.Invoke((a, b) => TxtUrl.Text = value); + //Dispatcher.Invoke(new Action(() => TxtUrl.Text = value)); + } + } + public string FileSizeText + { + get => this.TxtStatus.Text; + set + { + Application.Invoke((a, b) => actStatusUpdate.Invoke(value)); + //Dispatcher.Invoke(actStatusUpdate, value); + } + } + public string DownloadSpeedText + { + get => this.TxtSpeed.Text; + set + { + Application.Invoke((a, b) => actSpeedUpdate.Invoke(value)); + //Dispatcher.Invoke(actSpeedUpdate, value); + } + } + public string DownloadETAText + { + get => this.TxtETA.Text; + set + { + Application.Invoke((a, b) => actEtaUpdate.Invoke(value)); + //Dispatcher.Invoke(actEtaUpdate, value); + } + } + public int DownloadProgress + { + get => (int)(this.PrgProgress.Fraction * 100); + set + { + Application.Invoke((a, b) => actPrgUpdate.Invoke(value)); + //Dispatcher.Invoke(actPrgUpdate, value); + } + } + public string DownloadId + { + get => this.downloadId; + set => this.downloadId = value; + } + + public IApp App { get; set; } + + public IAppUI AppUI { get; set; } + + public void DestroyWindow() + { + Application.Invoke((a, b) => + { + try + { + Destroy(); + Dispose(); + } + catch { } + }); + //Dispatcher.Invoke(new Action(() => + //{ + // try + // { + // Close(); + // } + // catch { } + //})); + } + + public void ShowProgressWindow() + { + Application.Invoke((a, b) => + { + this.SetDefaultSize(450, 280); + this.ShowAll(); + }); + //Dispatcher.Invoke(new Action(() => this.Show())); + } + + public void DownloadFailed(ErrorDetails error) + { + Application.Invoke((a, b) => + { + TxtStatus.Text = error.Message; + BtnPause.Label = TextResource.GetText("MENU_RESUME"); + BtnPause.Name = "Paused"; + TxtETA.Text = string.Empty; + //TxtSpeedLimit.Visible = false; + //speedLimiterDlg?.Close(); + //speedLimiterDlg = null; + }); + //Dispatcher.Invoke(new Action(error => + //{ + // TxtStatus.Text = error.Message; + // BtnPause.Content = TextResource.GetText("MENU_RESUME"); + // BtnPause.Tag = new(); + // TxtETA.Text = string.Empty; + // TxtSpeedLimit.Visibility = Visibility.Collapsed; + // speedLimiterDlg?.Close(); + // speedLimiterDlg = null; + //}), error); + } + + public void DownloadCancelled() + { + Application.Invoke((a, b) => + { + TxtStatus.Text = TextResource.GetText("MSG_DWN_STOP"); + TxtETA.Text = string.Empty; + BtnPause.Label = TextResource.GetText("MENU_RESUME"); + BtnPause.Name = "Paused"; + //TxtSpeedLimit.Visible = false; + //speedLimiterDlg?.Close(); + //speedLimiterDlg = null; + }); + + //Dispatcher.Invoke(new Action(() => + //{ + // TxtStatus.Text = TextResource.GetText("MSG_DWN_STOP"); + // TxtETA.Text = string.Empty; + // BtnPause.Content = TextResource.GetText("MENU_RESUME"); + // BtnPause.Tag = new(); + // TxtSpeedLimit.Visibility = Visibility.Collapsed; + // speedLimiterDlg?.Close(); + // speedLimiterDlg = null; + //})); + } + + public void DownloadStarted() + { + Application.Invoke((a, b) => + { + BtnPause.Label = TextResource.GetText("MENU_PAUSE"); + BtnPause.Name = string.Empty; + //TxtSpeedLimit.Visible = false; + + if (App.GetLiveDownloadSpeedLimit(downloadId, out bool enable, out int limit)) + { + SetSpeedLimitText(enable, limit); + } + }); + + //Dispatcher.Invoke(new Action(() => + //{ + // BtnPause.Content = TextResource.GetText("MENU_PAUSE"); + // BtnPause.Tag = null; + // TxtSpeedLimit.Visibility = Visibility.Visible; + + // if (App.GetLiveDownloadSpeedLimit(downloadId, out bool enable, out int limit)) + // { + // SetSpeedLimitText(enable, limit); + // } + //})); + } + + private void SetSpeedLimitText(bool enable, int limit) + { + //if (enable && limit > 0) + //{ + // TxtSpeedLimit.Label = $"{TextResource.GetText("SPEED_LIMIT_TITLE")} - {limit}K/S"; + //} + //else + //{ + // TxtSpeedLimit.Label = TextResource.GetText("MSG_NO_SPEED_LIMIT"); + //} + } + + private void SetFileText(string value) + { + TxtFileName.Text = value; + var prg = PrgProgress.Fraction >= 0 && PrgProgress.Fraction <= 1 ? (int)(PrgProgress.Fraction * 100) + "% " : ""; + this.Title = $"{prg}{value}"; + } + + private void StopDownload(bool close) + { + if (downloadId != null) + { + App?.StopDownloads(new List { downloadId }, close); + } + } + + private void DownloadProgressWindow_DeleteEvent(object o, DeleteEventArgs args) + { + args.RetVal = true; + StopDownload(true); + //Close(); + //Dispose(); + //Destroy(); + } + + private void BtnPause_Click(object? sender, EventArgs e) + { + if (!string.IsNullOrEmpty(BtnPause.Name)) + { + AppUI.ResumeDownload(downloadId); + BtnPause.Label = TextResource.GetText("MENU_PAUSE"); + BtnPause.Name = string.Empty; + //TxtSpeedLimit.Visible = true; + } + else + { + StopDownload(false); + BtnPause.Label = TextResource.GetText("MENU_RESUME"); + BtnPause.Name = "Paused"; + } + } + + private void BtnStop_Click(object? sender, EventArgs e) + { + StopDownload(true); + //Close(); + //Dispose(); + //Destroy(); + } + + private void BtnHide_Click(object? sender, EventArgs e) + { + DeleteEvent -= DownloadProgressWindow_DeleteEvent; + App.HideProgressWindow(downloadId); + //Close(); + //Destroy(); + //Dispose(); + } + + //private void TxtSpeedLimit_Click(object sender, EventArgs e) + //{ + // if (speedLimiterDlg == null) + // { + // speedLimiterDlg = new SpeedLimiterWindow + // { + // Owner = this + // }; + // if (App.GetLiveDownloadSpeedLimit(downloadId, out bool enable, out int limit)) + // { + // speedLimiterDlg.EnableSpeedLimit = enable; + // speedLimiterDlg.SpeedLimit = limit; + // } + // speedLimiterDlg.Closed += (_, _) => + // { + // speedLimiterDlg = null; + // }; + // speedLimiterDlg.OkClicked += (a, b) => + // { + // var limit2 = speedLimiterDlg.SpeedLimit; + // App.UpdateSpeedLimit(DownloadId, speedLimiterDlg.EnableSpeedLimit, limit2); + // SetSpeedLimitText(speedLimiterDlg.EnableSpeedLimit, limit2); + // }; + // } + + // if (!speedLimiterDlg.IsVisible) + // { + // speedLimiterDlg.Show(); + // } + // else + // { + // speedLimiterDlg.Activate(); + // } + //} + + [UI] private Label TxtFileName; + [UI] private Label TxtUrl; + [UI] private Label TxtStatus; + [UI] private Label TxtSpeed; + [UI] private Label TxtETA; + //[UI] private LinkButton TxtSpeedLimit; + [UI] private ProgressBar PrgProgress; + [UI] private Button BtnHide; + [UI] private Button BtnStop; + [UI] private Button BtnPause; + [UI] private Image ImgIcon; + + private Action actSpeedUpdate, actEtaUpdate, actStatusUpdate; + private Action actPrgUpdate; + private string downloadId = string.Empty; + private WindowGroup windowGroup; + + private DownloadProgressWindow(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + Title = TextResource.GetText("STAT_DOWNLOADING"); + SetPosition(WindowPosition.CenterAlways); + + this.windowGroup = new WindowGroup(); + this.windowGroup.AddWindow(this); + + actSpeedUpdate = value => this.TxtSpeed.Text = value; + actEtaUpdate = value => this.TxtETA.Text = value; + actStatusUpdate = value => this.TxtStatus.Text = value; + + actPrgUpdate = value => + { + var val = value >= 0 && value <= 100 ? value : 0; + this.PrgProgress.Fraction = val / 100.0f; + var prg = value >= 0 && value <= 100 ? value + "% " : ""; + this.Title = $"{prg}{FileNameText}"; + }; + + this.DeleteEvent += DownloadProgressWindow_DeleteEvent; + this.BtnPause.Clicked += BtnPause_Click; + this.BtnStop.Clicked += BtnStop_Click; + this.BtnHide.Clicked += BtnHide_Click; + + this.BtnHide.Label = TextResource.GetText("DWN_HIDE"); + this.BtnStop.Label = TextResource.GetText("BTN_STOP_PROCESSING"); + this.BtnPause.Label = TextResource.GetText("MENU_PAUSE"); + //this.TxtSpeedLimit.Label = TextResource.GetText("MSG_NO_SPEED_LIMIT"); + this.ImgIcon.Pixbuf = GtkHelper.LoadSvg("file-download-line", 48); + + this.BtnPause.Name = string.Empty; + this.TxtFileName.StyleContext.AddClass("medium-font"); + + TxtUrl.Ellipsize = Pango.EllipsizeMode.End; + TxtFileName.Ellipsize = Pango.EllipsizeMode.End; + + GtkHelper.AttachSafeDispose(this); + } + + public static DownloadProgressWindow CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "download-progress-window.glade")); + return new DownloadProgressWindow(builder); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/Properties/PropertiesDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/Properties/PropertiesDialog.cs new file mode 100644 index 0000000..64df5d3 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/Properties/PropertiesDialog.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.Properties +{ + internal class PropertiesDialog : Dialog + { + [UI] private Label Label1; + [UI] private Label Label2; + [UI] private Label Label3; + [UI] private Label Label4; + [UI] private Label Label5; + [UI] private Label Label6; + [UI] private Label Label7; + [UI] private Label Label8; + [UI] private Label Label9; + [UI] private Label TxtSize; + [UI] private Label TxtDate; + [UI] private Label TxtType; + [UI] private Entry TxtName; + [UI] private Entry TxtSaveIn; + [UI] private Entry TxtAddress; + [UI] private Entry TxtReferer; + [UI] private Entry TxtCookie; + [UI] private TextView TxtHeaders; + + private PropertiesDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + group.AddWindow(this); + GtkHelper.AttachSafeDispose(this); + Title = TextResource.GetText("MENU_PROPERTIES"); + SetDefaultSize(400, 200); + LoadTexts(); + } + + public string FileName { set => TxtName.Text = value; } + public string Folder { set => TxtSaveIn.Text = value; } + public string Address { set => TxtAddress.Text = value; } + public string FileSize { set => TxtSize.Text = value; } + public string DateAdded { set => TxtDate.Text = value; } + public string DownloadType { set => TxtType.Text = value; } + public string Referer { set => TxtReferer.Text = value; } + + public Dictionary Cookies + { + set + { + if (value != null) + { + var list = new List(value.Values); + TxtCookie.Text = string.Join(";", list.ToArray()); + } + } + } + + public Dictionary> Headers + { + set + { + if (value != null) + { + var textBuf = new StringBuilder(); + foreach (var key in value.Keys) + { + foreach (var val in value[key]) + { + textBuf.Append(key + ": " + val + "\r\n"); + } + } + TxtHeaders.Buffer.Text = textBuf.ToString(); + } + } + } + + private void LoadTexts() + { + Label1.Text = TextResource.GetText("SORT_NAME"); + Label2.Text = TextResource.GetText("LBL_SAVE_IN"); + Label3.Text = TextResource.GetText("ND_ADDRESS"); + Label4.Text = TextResource.GetText("SORT_SIZE"); + Label5.Text = TextResource.GetText("SORT_DATE"); + Label6.Text = TextResource.GetText("SORT_TYPE"); + Label7.Text = TextResource.GetText("PROP_REFERER"); + Label8.Text = TextResource.GetText("PROP_COOKIE"); + Label9.Text = TextResource.GetText("MSG_HEADERS"); + } + + public static PropertiesDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "properties-dialog.glade")); + return new PropertiesDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/QueueSchedulerDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/QueueSchedulerDialog.cs new file mode 100644 index 0000000..b2f1a93 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/QueueSchedulerDialog.cs @@ -0,0 +1,539 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.Core.Lib.Util; +using XDMApp; +using XDM.GtkUI.Dialogs.NewQueue; + +namespace XDM.GtkUI.Dialogs.QueueScheduler +{ + internal class QueueSchedulerDialog : Dialog, IQueuesWindow + { + [UI] private Button BtnNew = null; + [UI] private Button BtnDel = null; + [UI] private Button BtnStart = null; + [UI] private Button BtnStop = null; + [UI] private Button BtnSave = null; + [UI] private Button BtnCancel = null; + [UI] private Button BtnAdd = null; + [UI] private Button BtnRemove = null; + [UI] private Button BtnUp = null; + [UI] private Button BtnDown = null; + [UI] private Button BtnMoveTo = null; + [UI] private TreeView lvFiles = null; + [UI] private TreeView LbQueues = null; + [UI] private CheckButton ChkEnableScheduler = null; + [UI] private CheckButton chkEveryday = null; + [UI] private CheckButton chkSun = null; + [UI] private CheckButton chkMon = null; + [UI] private CheckButton chkTue = null; + [UI] private CheckButton chkWed = null; + [UI] private CheckButton chkThu = null; + [UI] private CheckButton chkFri = null; + [UI] private CheckButton chkSat = null; + [UI] private Label LblQueueStart = null; + [UI] private Label LblQueueStop = null; + [UI] private Label TabHeader1 = null; + [UI] private Label TabHeader2 = null; + [UI] private ComboBox CmbHour1 = null; + [UI] private ComboBox CmbMinute1 = null; + [UI] private ComboBox CmbAmPm1 = null; + [UI] private ComboBox CmbHour2 = null; + [UI] private ComboBox CmbMinute2 = null; + [UI] private ComboBox CmbAmPm2 = null; + [UI] private ScrolledWindow queueScroll = null; + [UI] private Notebook Tab = null; + + private WindowGroup group; + private ListStore queueListStore; + private ListStore filesListStore; + private bool suppressEvent; + private IAppUI appUI; + private byte[] bits; + private readonly CheckButton[] checkboxes; + private DownloadSchedule defaultSchedule; + private SchedulerPanelControl SchedulerPanel; + + public event EventHandler? QueuesModified; + public event EventHandler? QueueStartRequested; + public event EventHandler? QueueStopRequested; + public event EventHandler? WindowClosing; + + private QueueSchedulerDialog(Builder builder, Window parent, WindowGroup group, IAppUI appUI) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + Title = TextResource.GetText("DESC_Q_TITLE"); + SetDefaultSize(700, 500); + LoadTexts(); + + this.appUI = appUI; + queueListStore = new ListStore(typeof(string), typeof(DownloadQueue)); + LbQueues.Model = queueListStore; + + var queueNameRendererText = new CellRendererText(); + var queueNameColumn = new TreeViewColumn("", queueNameRendererText, "text", 0) + { + Resizable = false, + Reorderable = false, + Sizing = TreeViewColumnSizing.Autosize, + Expand = true + }; + LbQueues.HeadersVisible = false; + LbQueues.AppendColumn(queueNameColumn); + queueScroll.SetSizeRequest(150, 100); + + filesListStore = new ListStore(typeof(string), typeof(string), typeof(string), typeof(InProgressDownloadEntry)); + lvFiles.Model = filesListStore; + + var k = 0; + foreach (var key in new string[] { "ND_FILE", "SORT_SIZE", "SORT_STATUS" }) + { + var cellRendererText = new CellRendererText(); + var treeViewColumn = new TreeViewColumn(TextResource.GetText(key), cellRendererText, "text", k++) + { + Resizable = true, + Reorderable = false, + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 150 + }; + lvFiles.AppendColumn(treeViewColumn); + } + + this.SchedulerPanel = new SchedulerPanelControl( + chkEveryday, + new CheckButton[] { chkSun, chkMon, chkTue, chkWed, chkThu, chkFri, chkSat }, + new TimePickerControl(CmbHour1, CmbMinute1, CmbAmPm1, LblQueueStart), + new TimePickerControl(CmbHour2, CmbMinute2, CmbAmPm2, LblQueueStop) + ); + + this.SchedulerPanel.Schedule = defaultSchedule; + + this.SchedulerPanel.ValueChanged += (_, _) => + { + DownloadSchedule? schedule = null; + if (ChkEnableScheduler.Active) + { + schedule = this.SchedulerPanel.Schedule; + } + if (GtkHelper.GetSelectedValue(LbQueues, 1) is DownloadQueue queue) + { + queue.Schedule = schedule; + } + }; + + this.LbQueues.Selection.Changed += (_, _) => + { + var selected = GtkHelper.GetSelectedValue(LbQueues, 1); + if (selected != null) + { + UpdateControls(selected); + } + }; + + this.lvFiles.Selection.Changed += (_, _) => ListSelectionChanged(); + + this.ChkEnableScheduler.Toggled += (_, _) => + { + SchedulerPanel.Enabled = this.ChkEnableScheduler.Active; + if (GtkHelper.GetSelectedValue(LbQueues, 1) is DownloadQueue queue) + { + queue.Schedule = this.ChkEnableScheduler.Active ? this.SchedulerPanel.Schedule : null; + } + }; + + Hidden += QueueSchedulerDialog_Hidden; + BtnNew.Clicked += BtnNew_Clicked; + BtnStart.Clicked += BtnStart_Clicked; + BtnStop.Clicked += BtnStop_Clicked; + BtnDel.Clicked += BtnDel_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + BtnAdd.Clicked += BtnAdd_Clicked; + BtnRemove.Clicked += BtnRemove_Clicked; + BtnUp.Clicked += BtnUp_Clicked; + BtnDown.Clicked += BtnDown_Clicked; + BtnMoveTo.Clicked += BtnMoveTo_Clicked; + BtnSave.Clicked += BtnSave_Clicked; + + lvFiles.Selection.Mode = SelectionMode.Multiple; + + SchedulerPanel.Enabled = false; + } + + private void BtnSave_Clicked(object? sender, EventArgs e) + { + SaveQueues(); + Destroy(); + Dispose(); + } + + private void BtnMoveTo_Clicked(object? sender, EventArgs e) + { + if (this.filesListStore.IterNChildren() > 0 && + this.queueListStore.IterNChildren() > 1 && + LbQueues.Selection.CountSelectedRows() > 0) + { + var qsd = QueueSelectionDialog.CreateFromGladeFile(this, this.group); + var queueNames = new List(); + var queueIds = new List(); + var selectedItem = GtkHelper.GetSelectedValue(LbQueues, 1); + var index = 0; + foreach (DownloadQueue item in GtkHelper.GetListStoreValues(queueListStore, 1)) + { + if (item != selectedItem) + { + queueNames.Add(item.Name); + queueIds.Add(item.ID); + } + index++; + } + var downloadIds = new string[this.lvFiles.Selection.CountSelectedRows()]; + index = 0; + foreach (InProgressDownloadEntry lvi in GtkHelper.GetSelectedValues(lvFiles, 3)) + { + downloadIds[index++] = lvi.Id; + } + qsd.SetData(queueNames, queueIds, downloadIds); + qsd.QueueSelected += Qsd_QueueSelected; + qsd.Run(); + qsd.Destroy(); + qsd.Dispose(); + } + } + + private void Qsd_QueueSelected(object? sender, QueueSelectionEventArgs e) + { + var qid = e.SelectedQueueId; + var queue = GtkHelper.GetListStoreValues(queueListStore, 1).Find(x => x.ID == qid);// GtkHelper.GetValueAt(LbQueues, e.SelectedQueueIndex, 1); + var downloadIds = e.DownloadIds; + var selectedQueue = GtkHelper.GetSelectedValue(LbQueues, 1); + foreach (var id in downloadIds) + { + selectedQueue.DownloadIds.Remove(id); + queue.DownloadIds.Add(id); + } + LoadQueueDetails(selectedQueue); + } + + private void QueueSchedulerDialog_Hidden(object? sender, EventArgs e) + { + this.WindowClosing?.Invoke(this, EventArgs.Empty); + } + + private void BtnDown_Clicked(object? sender, EventArgs e) + { + var indices = GtkHelper.GetSelectedIndices(lvFiles); + if (indices.Length > 0 && indices[indices.Length - 1] < this.filesListStore.IterNChildren() - 1) + { + var index = indices[indices.Length - 1] + 1; + var ent = GtkHelper.GetValueAt(lvFiles, index, 3); + if (ent == null) return; + GtkHelper.RemoveAt(filesListStore, index); + filesListStore.InsertWithValues(indices[0], ent.Name, + Helpers.FormatSize(ent.Size), ent.Status.ToString(), ent); + } + } + + private void BtnUp_Clicked(object? sender, EventArgs e) + { + var indices = GtkHelper.GetSelectedIndices(lvFiles); + if (indices.Length > 0 && indices[0] > 0) + { + var ent = GtkHelper.GetValueAt(lvFiles, indices[0] - 1, 3); + if (ent == null) return; + var index = indices[indices.Length - 1]; + GtkHelper.RemoveAt(filesListStore, indices[0] - 1); + filesListStore.InsertWithValues(index, ent.Name, + Helpers.FormatSize(ent.Size), ent.Status.ToString(), ent); + } + //var indices = GtkHelper.getse lvFiles.GetSelectedIndices(); + //if (indices.Length > 0 && indices[0] > 0) + //{ + // var item = this.downloads[indices[0] - 1]; + // var index = indices[indices.Length - 1]; + // this.downloads.Remove(item); + // this.downloads.Insert(index, item); + // //var index1 = indices[0] - 1; + // //var index2 = indices[0] + lvFiles.SelectedItems.Count - 1; + // //var value = this.downloads[index1]; + // //this.downloads.RemoveAt(index1); + // //this.downloads.Insert(index2, value); + //} + } + + private void BtnRemove_Clicked(object? sender, EventArgs e) + { + var selectedQueue = GtkHelper.GetSelectedValue(LbQueues, 1); + if (selectedQueue == null) return; + var selectedIds = new List(); + foreach (var item in GtkHelper.GetSelectedValues(lvFiles, 3)) + { + if (item != null) + { + selectedIds.Add(item.Id); + } + } + foreach (var id in selectedIds) + { + selectedQueue.DownloadIds.Remove(id); + } + LoadQueueDetails(selectedQueue); + } + + private void BtnAdd_Clicked(object? sender, EventArgs e) + { + var index = GtkHelper.GetSelectedIndex(LbQueues); + if (index < 0) return; + + var dlg = NewQueueDialog.CreateFromGladeFile(this, this.group, appUI, (queue, newQueue) => + { + LoadQueueDetails(queue); + }, GtkHelper.GetSelectedValue(this.LbQueues, 1)); + dlg.Run(); + dlg.Destroy(); + dlg.Dispose(); + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Visible = false; + } + + private void BtnDel_Clicked(object? sender, EventArgs e) + { + var index = GtkHelper.GetSelectedIndex(LbQueues); + if (GtkHelper.GetSelectedIndex(LbQueues) >= 0) + { + GtkHelper.RemoveAt(this.queueListStore, index); + } + } + + private void BtnStop_Clicked(object? sender, EventArgs e) + { + SaveQueues(); + var queue = GtkHelper.GetSelectedValue(LbQueues, 1); + if (queue != null) + { + QueueStopRequested?.Invoke(this, new DownloadListEventArgs(queue.DownloadIds)); + } + } + + private void BtnStart_Clicked(object? sender, EventArgs e) + { + SaveQueues(); + var queue = GtkHelper.GetSelectedValue(LbQueues, 1); + QueueStartRequested?.Invoke(this, new DownloadListEventArgs(queue.DownloadIds)); + } + + private void BtnNew_Clicked(object? sender, EventArgs e) + { + var dlg = NewQueueDialog.CreateFromGladeFile(this, this.group, appUI, (queue, newQueue) => + { + AddToQueueList(queue); + }, null); + dlg.Run(); + dlg.Destroy(); + dlg.Dispose(); + } + + public bool Result { get; set; } = false; + + private void UpdateControls(DownloadQueue? queue) + { + if (queue != null) + { + LoadQueueDetails(queue); + EnableControls(true); + } + else + { + this.SchedulerPanel.Schedule = defaultSchedule; + EnableControls(false); + } + } + + private void LoadQueueDetails(DownloadQueue queue) + { + lvFiles.Selection.UnselectAll(); + filesListStore.Clear(); + foreach (var id in queue.DownloadIds) + { + var ent = appUI.GetInProgressDownloadEntry(id); + if (ent != null) + { + filesListStore.AppendValues(ent.Name, Helpers.FormatSize(ent.Size), ent.Status.ToString(), ent); + } + } + + if (queue.Schedule.HasValue) + { + this.SchedulerPanel.Schedule = queue.Schedule.Value; + } + else + { + this.SchedulerPanel.Schedule = this.defaultSchedule; + } + ChkEnableScheduler.Active = queue.Schedule.HasValue; + } + + private void AddToQueueList(DownloadQueue queue) + { + queueListStore.AppendValues(queue.Name, queue); + } + + private void EnableControls(bool enable) + { + this.Tab.Sensitive = enable; + this.BtnNew.Sensitive = this.BtnDel.Sensitive = this.BtnStart.Sensitive = this.BtnStop.Sensitive = enable; + } + + public void RefreshView() + { + if (GtkHelper.GetSelectedValue(LbQueues, 1) is DownloadQueue queue) + { + filesListStore.Clear(); + var realQueue = QueueManager.GetQueue(queue.ID); + + if (realQueue != null) + { + foreach (var id in realQueue.DownloadIds) + { + var ent = appUI.GetInProgressDownloadEntry(id); + if (ent != null) + { + filesListStore.AppendValues(ent.Name, Helpers.FormatSize(ent.Size), ent.Status.ToString(), ent); + } + } + } + } + } + + private void ListSelectionChanged() + { + var count = lvFiles.Selection.CountSelectedRows(); + BtnRemove.Sensitive = BtnUp.Sensitive = BtnDown.Sensitive = BtnMoveTo.Sensitive = count > 0; + } + + public void SetData(IEnumerable queues) + { + queueListStore.Clear(); + foreach (var item in queues) + { + AddToQueueList(item); + //queueListStore.AppendValues(item.Name, item); + } + if (this.queueListStore.IterNChildren() > 0) + { + GtkHelper.SetSelectedIndex(LbQueues, 0); + } + ListSelectionChanged(); + } + + public void ShowWindow(object peer) + { + this.Run(); + this.Destroy(); + this.Dispose(); + } + + private void SaveQueues() + { + QueuesModified?.Invoke(this, new QueueListEventArgs( + GtkHelper.GetListStoreValues(this.queueListStore, 1))); + } + + //private TimeSpan GetSchedulerStartTime() + //{ + // var hrs = CmbHour1.Active + 1; + // var min = CmbMinute1.Active + 1; + // return TimeHelper.ConvertH12ToH24(hrs, + // min, CmbAmPm1.Active == 0); + //} + + //private TimeSpan GetSchedulerStopTime() + //{ + // var hrs = CmbHour2.Active + 1; + // var min = CmbMinute2.Active; + // return TimeHelper.ConvertH12ToH24(hrs, + // min, CmbAmPm2.Active == 0); + //} + + //private void SetTime(TimeSpan value, ComboBox cmbHrs, ComboBox cmbMin, ComboBox cmbAmPm) + //{ + // suppressEvent = true; + // TimeHelper.ConvertH24ToH12(value, out int hh, out int mi, out bool am); + // cmbAmPm.Active = am ? 0 : 1; + // cmbHrs.Active = hh - 1; + // cmbMin.Active = mi; + // suppressEvent = false; + //} + + //private void SetStartTime(TimeSpan value) + //{ + // SetTime(value, CmbHour1, CmbMinute1, CmbAmPm1); + //} + + //private void SetStopTime(TimeSpan value) + //{ + // SetTime(value, CmbHour2, CmbMinute2, CmbAmPm2); + //} + + public static QueueSchedulerDialog CreateFromGladeFile(Window parent, WindowGroup group, IAppUI appUI) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "queue-manager-dialog.glade")); + return new QueueSchedulerDialog(builder, parent, group, appUI); + } + + private void LoadTexts() + { + BtnNew.Label = TextResource.GetText("DESC_NEW"); + BtnDel.Label = TextResource.GetText("DESC_DEL"); + BtnStart.Label = TextResource.GetText("MENU_START_Q"); + BtnStop.Label = TextResource.GetText("MENU_PAUSE"); + BtnSave.Label = TextResource.GetText("DESC_SAVE_Q"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + BtnAdd.Label = TextResource.GetText("Q_ADD"); + BtnRemove.Label = TextResource.GetText("Q_REMOVE"); + BtnUp.Label = TextResource.GetText("Q_MOVE_UP"); + BtnDown.Label = TextResource.GetText("Q_MOVE_DN"); + BtnMoveTo.Label = TextResource.GetText("Q_MOVE_TO"); + + TabHeader1.Text = TextResource.GetText("Q_LIST_FILES"); + TabHeader2.Text = TextResource.GetText("Q_SCHEDULE_TXT"); + + ChkEnableScheduler.Label = TextResource.GetText("Q_ENABLE"); + chkEveryday.Label = TextResource.GetText("MSG_Q_DAILY"); + chkSun.Label = TextResource.GetText("MSG_Q_D1"); + chkMon.Label = TextResource.GetText("MSG_Q_D2"); + chkTue.Label = TextResource.GetText("MSG_Q_D3"); + chkWed.Label = TextResource.GetText("MSG_Q_D4"); + chkThu.Label = TextResource.GetText("MSG_Q_D5"); + chkFri.Label = TextResource.GetText("MSG_Q_D6"); + chkSat.Label = TextResource.GetText("MSG_Q_D7"); + LblQueueStart.Text = TextResource.GetText("MSG_Q_START"); + LblQueueStop.Text = TextResource.GetText("MSG_Q_STOP"); + + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/QueueSelectionDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/QueueSelectionDialog.cs new file mode 100644 index 0000000..754c393 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/QueueSelectionDialog.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.Core.Lib.Util; +using XDMApp; + +namespace XDM.GtkUI.Dialogs.QueueScheduler +{ + internal class QueueSelectionDialog : Dialog, IQueueSelectionDialog + { + public event EventHandler? QueueSelected; + public event EventHandler? ManageQueuesClicked; + + [UI] private Button BtnOK = null; + [UI] private Button BtnCancel = null; + [UI] private TreeView LbQueues = null; + + private IEnumerable downloadIds; + private IEnumerable queueIds; + private ListStore listStore; + private WindowGroup group; + public bool Result { get; set; } = false; + + private QueueSelectionDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + Title = TextResource.GetText("Q_MOVE_TO"); + SetDefaultSize(400, 300); + LoadTexts(); + + listStore = new ListStore(typeof(string)); + LbQueues.Model = listStore; + + var queueNameRendererText = new CellRendererText(); + var queueNameColumn = new TreeViewColumn("", queueNameRendererText, "text", 0) + { + Resizable = false, + Reorderable = false, + Sizing = TreeViewColumnSizing.Autosize, + Expand = true + }; + LbQueues.HeadersVisible = false; + LbQueues.AppendColumn(queueNameColumn); + + BtnCancel.Clicked += BtnCancel_Clicked; + BtnOK.Clicked += BtnOK_Clicked; + } + + private void BtnOK_Clicked(object? sender, EventArgs e) + { + var selectedIndex = GtkHelper.GetSelectedIndex(LbQueues); + var queueId = this.queueIds.ElementAt(selectedIndex); + QueueSelected?.Invoke(this, new QueueSelectionEventArgs(queueId, downloadIds)); + QueueSelected = null; + Result = true; + this.group.RemoveWindow(this); + Visible = false; + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Visible = false; + } + + public void SetData(IEnumerable queueNames, IEnumerable queueIds, IEnumerable downloadIds) + { + this.queueIds = queueIds; + this.downloadIds = downloadIds; + foreach (var name in queueNames) + { + listStore.AppendValues(name); + } + if (listStore.IterNChildren() > 0) + { + GtkHelper.SetSelectedIndex(LbQueues, 0); + } + } + + public void ShowWindow(IAppWinPeer peer) + { + this.Run(); + this.Destroy(); + this.Dispose(); + } + + private void LoadTexts() + { + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + BtnOK.Label = TextResource.GetText("MSG_OK"); + } + + public static QueueSelectionDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "queue-selection-dialog.glade")); + return new QueueSelectionDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/SchedulerPanelControl.cs b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/SchedulerPanelControl.cs new file mode 100644 index 0000000..e47ae28 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/SchedulerPanelControl.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.Core.Lib.Util; + +namespace XDM.GtkUI.Dialogs.QueueScheduler +{ + internal class SchedulerPanelControl + { + private CheckButton chkEveryday = null; + + public event EventHandler? ValueChanged; + private byte[] bits; + private readonly CheckButton[] checkboxes; + private TimePickerControl StartTime, EndTime; + private bool suppressEvents = false; + + public bool Enabled + { + set + { + chkEveryday.Sensitive = StartTime.Enabled = EndTime.Enabled = value; + foreach (var chk in checkboxes) + { + chk.Sensitive = value; + } + } + } + + public SchedulerPanelControl(CheckButton chkEveryday, + CheckButton[] checkboxes, + TimePickerControl startTime, + TimePickerControl endTime) + { + this.chkEveryday = chkEveryday; + this.checkboxes = checkboxes; + this.StartTime = startTime; + this.EndTime = endTime; + + bits = new byte[] + { + 0, 1, 2, 4, 8, 16, 32, 64 + }; + + foreach (var chk in checkboxes) + { + chk.Toggled += (_, _) => + { + if (!chk.Active) + { + chkEveryday.Active = false; + } + EmitValueChanged(); + }; + } + + chkEveryday.Toggled += (_, _) => + { + if (chkEveryday.Active) + { + foreach (var chk in checkboxes) + { + chk.Active = true; + } + } + }; + + startTime.ValueChanged += (_, _) => EmitValueChanged(); + endTime.ValueChanged += (_, _) => EmitValueChanged(); + } + + private void EmitValueChanged() + { + if (!suppressEvents) + { + this.ValueChanged?.Invoke(this, EventArgs.Empty); + } + } + + private void SetDays(WeekDays days) + { + var index = 1; + var allChecked = true; + + foreach (var chk in checkboxes) + { + var day = (WeekDays)bits[index]; + if (((byte)days & (byte)day) == (byte)day) + { + chk.Active = true; + } + else + { + allChecked = false; + } + index++; + } + + chkEveryday.Active = allChecked; + } + + private WeekDays GetDaysOfWeek() + { + var index = 1; + var weekdays = WeekDays.None; + foreach (var chk in checkboxes) + { + if (chk.Active) + { + weekdays |= (WeekDays)bits[index]; + } + index++; + } + return weekdays; + } + + public DownloadSchedule Schedule + { + get + { + return new DownloadSchedule + { + StartTime = StartTime.Time, + EndTime = EndTime.Time, + Days = GetDaysOfWeek() + }; + } + set + { + suppressEvents = true; + SetDays(value.Days); + StartTime.Time = value.StartTime; + EndTime.Time = value.EndTime; + suppressEvents = false; + } + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/TimePickerControl.cs b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/TimePickerControl.cs new file mode 100644 index 0000000..b37ac79 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/QueueScheduler/TimePickerControl.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Gtk; +using System.IO; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Utils; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.Core.Lib.Util; + +namespace XDM.GtkUI.Dialogs.QueueScheduler +{ + internal class TimePickerControl + { + public event EventHandler? ValueChanged; + private bool suppressEvent = false; + private ComboBox cmbHrs, cmbMin, cmbAmPm; + private Label label; + + public bool Enabled + { + set + { + cmbHrs.Sensitive = cmbMin.Sensitive = cmbAmPm.Sensitive = label.Sensitive = value; + } + } + + public TimePickerControl(ComboBox cmbHrs, ComboBox cmbMin, ComboBox cmbAmPm, Label label) + { + this.cmbHrs = cmbHrs; + this.cmbMin = cmbMin; + this.cmbAmPm = cmbAmPm; + this.label = label; + + GtkHelper.PopulateComboBox(this.cmbHrs, Enumerable.Range(1, 12).Select(x => $"{x}").ToArray()); + GtkHelper.PopulateComboBox(this.cmbMin, Enumerable.Range(0, 60).Select(x => x.ToString("D2")).ToArray()); + GtkHelper.PopulateComboBox(this.cmbAmPm, "AM", "PM"); + + this.cmbHrs.Active = 10; + this.cmbMin.Active = 5; + this.cmbAmPm.Active = 0; + + this.cmbHrs.Changed += (_, _) => + { + if (!suppressEvent) + { + this.ValueChanged?.Invoke(this, EventArgs.Empty); + } + }; + + this.cmbMin.Changed += (_, _) => + { + if (!suppressEvent) + { + this.ValueChanged?.Invoke(this, EventArgs.Empty); + } + }; + + this.cmbAmPm.Changed += (_, _) => + { + if (!suppressEvent) + { + this.ValueChanged?.Invoke(this, EventArgs.Empty); + } + }; + } + + public TimeSpan Time + { + get + { + var hrs = cmbHrs.Active + 1; + var min = cmbMin.Active; + return TimeHelper.ConvertH12ToH24(hrs, + min, cmbAmPm.Active == 0); + } + set + { + suppressEvent = true; + TimeHelper.ConvertH24ToH12(value, out int hh, out int mi, out bool am); + cmbAmPm.Active = am ? 0 : 1; + cmbHrs.Active = hh - 1; + cmbMin.Active = mi; + suppressEvent = false; + } + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/Settings/CategoryEditDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/Settings/CategoryEditDialog.cs new file mode 100644 index 0000000..f045a23 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/Settings/CategoryEditDialog.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.Settings +{ + public class CategoryEditDialog : Dialog + { + [UI] private Label Label1, Label2, Label3; + [UI] private Entry TxtName, TxtFileTypes, TxtFolder; + [UI] private Button Browse, BtnOk, BtnCancel; + + public string? DisplayName { get; private set; } + public string? FileTypes { get; private set; } + public string? Folder { get; private set; } + + public bool Result { get; set; } = false; + + private WindowGroup group; + + private CategoryEditDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + Label1.Text = TextResource.GetText("SORT_NAME"); + Label2.Text = TextResource.GetText("SETTINGS_CAT_TYPES"); + Label3.Text = TextResource.GetText("SETTINGS_CAT_FOLDER"); + + BtnOk.Clicked += BtnOk_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + Browse.Clicked += Browse_Clicked; + + BtnOk.Label = TextResource.GetText("MSG_OK"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + + Title = TextResource.GetText("MSG_CATEGORY"); + SetDefaultSize(400, 200); + } + + private void Browse_Clicked(object? sender, EventArgs e) + { + var folder = GtkHelper.SelectFolder(this); + if (!string.IsNullOrEmpty(folder)) + { + this.TxtFolder.Text = folder; + } + } + + public void SetCategory(Category category) + { + this.TxtName.Text = category.DisplayName; + this.TxtFileTypes.Text = string.Join(",", category.FileExtensions.ToArray()); + this.TxtFolder.Text = category.DefaultFolder; + } + + private void BtnOk_Clicked(object? sender, EventArgs e) + { + Result = true; + if (string.IsNullOrEmpty(TxtName.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_CAT_NAME_MISSING")); + return; + } + if (string.IsNullOrEmpty(TxtFileTypes.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_CAT_FILE_TYPES_MISSING")); + return; + } + if (string.IsNullOrEmpty(TxtFolder.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_CAT_FOLDER_MISSING")); + return; + } + this.DisplayName = this.TxtName.Text; + this.FileTypes = this.TxtFileTypes.Text; + this.Folder = this.TxtFolder.Text; + Result = true; + this.group.RemoveWindow(this); + Dispose(); + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Dispose(); + } + + public static CategoryEditDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "category-edit-dialog.glade")); + return new CategoryEditDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/Settings/PasswordDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/Settings/PasswordDialog.cs new file mode 100644 index 0000000..91e62e5 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/Settings/PasswordDialog.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; + +namespace XDM.GtkUI.Dialogs.Settings +{ + public class PasswordDialog : Dialog + { + [UI] private Label Label1, Label2, Label3; + [UI] private Entry TxtUserName, TxtHost, TxtPassword; + [UI] private Button BtnOk, BtnCancel; + + public string UserName { get; private set; } + public string Host { get; private set; } + public string Password { get; private set; } + + public bool Result { get; set; } = false; + + private WindowGroup group; + + private PasswordDialog(Builder builder, Window parent, WindowGroup group) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + Modal = true; + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + + GtkHelper.AttachSafeDispose(this); + + Label1.Text = TextResource.GetText("DESC_HOST"); + Label2.Text = TextResource.GetText("DESC_USER"); + Label3.Text = TextResource.GetText("DESC_PASS"); + + BtnOk.Clicked += BtnOk_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + + BtnOk.Label = TextResource.GetText("MSG_OK"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + + Title = TextResource.GetText("DESC_PASS"); + SetDefaultSize(400, 300); + } + + public void SetPassword(PasswordEntry password) + { + Host = TxtHost.Text = password.Host; + UserName = TxtUserName.Text = password.User; + Password = TxtPassword.Text = password.Password; + } + + private void BtnOk_Clicked(object? sender, EventArgs e) + { + Result = true; + if (string.IsNullOrEmpty(TxtHost.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_HOST_NAME_MISSING")); + return; + } + if (string.IsNullOrEmpty(TxtUserName.Text)) + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NO_USERNAME")); + return; + } + this.Host = this.TxtHost.Text; + this.UserName = this.TxtUserName.Text; + this.Password = this.TxtPassword.Text; + Result = true; + this.group.RemoveWindow(this); + Dispose(); + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Result = false; + this.group.RemoveWindow(this); + Dispose(); + } + + public static PasswordDialog CreateFromGladeFile(Window parent, WindowGroup group) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "password-dialog.glade")); + return new PasswordDialog(builder, parent, group); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/Settings/SettingsDialog.cs b/app/XDM/XDM.Gtk.UI/Dialogs/Settings/SettingsDialog.cs new file mode 100644 index 0000000..600efe5 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/Settings/SettingsDialog.cs @@ -0,0 +1,717 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using XDMApp; +using XDM.Core.Lib.Util; +using TraceLog; +using BrowserMonitoring; + +namespace XDM.GtkUI.Dialogs.Settings +{ + internal class SettingsDialog : Dialog + { + //private int[] minVidSize = new int[] { 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }; + private WindowGroup group; + [UI] + private Label TabHeader1, TabHeader2, TabHeader3, TabHeader4, TabHeader5; + [UI] + private Label Label1, Label2, Label3, Label4, Label5, Label6, Label7, + Label8, Label9, Label10, Label11, Label12, Label13, Label14, Label15, + Label16, Label17, Label18, Label19, Label20, Label21, + Label22, Label23, Label24, Label25, Label26, Label27, + Label28, Label29, Label30; + [UI] + private LinkButton VideoWikiLink; + [UI] + Button BtnChrome, BtnFirefox, BtnEdge, BtnOpera, BtnDefault1, BtnDefault2, + BtnDefault3, CatAdd, CatEdit, CatDel, CatDef, AddPass, EditPass, DelPass, BtnUserAgentReset, + BtnCopy1, BtnCopy2, BtnCancel, BtnOK, BtnDownloadFolderBrowse, BtnTempFolderBrowse, BtnBrowse; + [UI] + private CheckButton ChkMonitorClipboard, ChkTimestamp, ChkDarkTheme, ChkAutoCat, ChkShowPrg, + ChkShowComplete, ChkStartAuto, ChkOverwrite, ChkEnableSpeedLimit, ChkHalt, ChkKeepAwake, + ChkRunCmd, ChkRunAntivirus, ChkAutoRun; + [UI] + private ComboBox CmbMinVidSize, CmbDblClickAction, CmbMaxParallalDownloads, + CmbTimeOut, CmbMaxSegments, CmbMaxRetry, CmbProxyType; + [UI] + private Entry TxtChromeWebStoreUrl, TxtFirefoxAMOUrl, TxtTempFolder, TxtDownloadFolder, + TxtMaxSpeedLimit, TxtProxyHost, TxtProxyPort, TxtProxyUser, TxtProxyPassword, + TxtCustomCmd, TxtAntiVirusCmd, TxtAntiVirusArgs, TxtDefaultUserAgent, + TxtExceptions, TxtDefaultVideoFormats, TxtDefaultFileTypes; + [UI] + private TreeView LvCategories, LvPasswords; + + [UI] + private Notebook Tabs; + + private ListStore categoryStore, passwordStore; + private IApp app; + + private SettingsDialog(Builder builder, + Window parent, + WindowGroup group, + IAppUI ui, + IApp app) : base(builder.GetRawOwnedObject("dialog")) + { + builder.Autoconnect(this); + + Modal = true; + SetDefaultSize(640, 480); + SetPosition(WindowPosition.CenterAlways); + TransientFor = parent; + this.group = group; + this.group.AddWindow(this); + this.app = app; + GtkHelper.AttachSafeDispose(this); + + LoadTexts(); + + Title = TextResource.GetText("TITLE_SETTINGS"); + GtkHelper.PopulateComboBoxGeneric(CmbMinVidSize, new int[] { 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 }); + GtkHelper.PopulateComboBoxGeneric(CmbMaxParallalDownloads, Enumerable.Range(1, 50).ToArray()); + GtkHelper.PopulateComboBox(CmbDblClickAction, TextResource.GetText("CTX_OPEN_FOLDER"), TextResource.GetText("MSG_OPEN_FILE")); + + CreateCategoryListView(); + + GtkHelper.PopulateComboBoxGeneric(CmbTimeOut, Enumerable.Range(1, 300).ToArray()); + GtkHelper.PopulateComboBoxGeneric(CmbMaxSegments, Enumerable.Range(1, 64).ToArray()); + GtkHelper.PopulateComboBoxGeneric(CmbMaxRetry, Enumerable.Range(1, 100).ToArray()); + GtkHelper.PopulateComboBox(CmbProxyType, TextResource.GetText("NET_SYSTEM_PROXY"), + TextResource.GetText("ND_NO_PROXY"), TextResource.GetText("ND_MANUAL_PROXY")); + + CreatePasswordManagerListView(); + + VideoWikiLink.Clicked += VideoWikiLink_Clicked; + BtnChrome.Clicked += BtnChrome_Clicked; + BtnFirefox.Clicked += BtnFirefox_Clicked; + BtnEdge.Clicked += BtnEdge_Clicked; + BtnOpera.Clicked += BtnOpera_Clicked; + BtnCopy1.Clicked += BtnCopy1_Clicked; + BtnCopy2.Clicked += BtnCopy2_Clicked; + BtnDefault1.Clicked += BtnDefault1_Clicked; + BtnDefault2.Clicked += BtnDefault2_Clicked; + BtnDefault3.Clicked += BtnDefault3_Clicked; + + BtnCopy1.Image = new Image(GtkHelper.LoadSvg("file-copy-line")); + BtnCopy2.Image = new Image(GtkHelper.LoadSvg("file-copy-line")); + + BtnOK.Clicked += BtnOK_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + + BtnTempFolderBrowse.Clicked += BtnTempFolderBrowse_Clicked; + BtnDownloadFolderBrowse.Clicked += BtnDownloadFolderBrowse_Clicked; + + CatAdd.Clicked += CatAdd_Clicked; + CatEdit.Clicked += CatEdit_Clicked; + CatDel.Clicked += CatDel_Clicked; + CatDef.Clicked += CatDef_Clicked; + + CmbProxyType.Changed += CmbProxyType_Changed; + + AddPass.Clicked += AddPass_Clicked; + DelPass.Clicked += DelPass_Clicked; + EditPass.Clicked += EditPass_Clicked; + + BtnBrowse.Clicked += BtnBrowse_Clicked; + BtnUserAgentReset.Clicked += BtnUserAgentReset_Clicked; + } + + private void BtnUserAgentReset_Clicked(object? sender, EventArgs e) + { + TxtDefaultUserAgent.Text = Config.DefaultFallbackUserAgent; + } + + private void BtnBrowse_Clicked(object? sender, EventArgs e) + { + var file = GtkHelper.SelectFile(this); + if (!string.IsNullOrEmpty(file)) + { + TxtAntiVirusCmd.Text = file; + } + } + + private void EditPass_Clicked(object? sender, EventArgs e) + { + var passwd = GtkHelper.GetSelectedValue(this.LvPasswords, 2); + if (passwd.HasValue) + { + using var dlg = PasswordDialog.CreateFromGladeFile(this, this.group); + dlg.SetPassword(passwd.Value); + dlg.Run(); + dlg.Destroy(); + if (dlg.Result) + { + var password = new PasswordEntry + { + Host = dlg.Host, + User = dlg.UserName, + Password = dlg.Password + }; + if (LvPasswords.Selection.GetSelected(out var iter)) + { + passwordStore.SetValues(iter, password.Host, password.User, password); + } + } + } + } + + private void DelPass_Clicked(object? sender, EventArgs e) + { + if (LvPasswords.Selection.GetSelected(out var iter)) + { + passwordStore.Remove(ref iter); + } + } + + private void AddPass_Clicked(object? sender, EventArgs e) + { + using var dlg = PasswordDialog.CreateFromGladeFile(this, this.group); + dlg.Run(); + dlg.Destroy(); + if (dlg.Result) + { + var password = new PasswordEntry + { + Host = dlg.Host, + User = dlg.UserName, + Password = dlg.Password + }; + passwordStore.AppendValues(password.Host, password.User, password); + } + } + + private void CmbProxyType_Changed(object? sender, EventArgs e) + { + TxtProxyUser.Sensitive = TxtProxyPassword.Sensitive = TxtProxyHost.Sensitive = + TxtProxyPort.Sensitive = CmbProxyType.Active == 2; + } + + private void CatDef_Clicked(object? sender, EventArgs e) + { + categoryStore.Clear(); + foreach (var cat in Config.DefaultCategories) + { + categoryStore.AppendValues(cat.DisplayName, string.Join(",", cat.FileExtensions), cat.DefaultFolder, cat); + } + } + + private void CatDel_Clicked(object? sender, EventArgs e) + { + if (LvCategories.Selection.GetSelected(out var iter)) + { + categoryStore.Remove(ref iter); + } + } + + private void CatEdit_Clicked(object? sender, EventArgs e) + { + var cat = GtkHelper.GetSelectedValue(this.LvCategories, 3); + if (cat.HasValue) + { + using var dlg = CategoryEditDialog.CreateFromGladeFile(this, this.group); + dlg.SetCategory(cat.Value); + dlg.Run(); + dlg.Destroy(); + if (dlg.Result) + { + var cat1 = new Category + { + Name = cat.Value.Name, + DisplayName = dlg.DisplayName!, + DefaultFolder = dlg.Folder!, + FileExtensions = new HashSet(dlg.FileTypes!.Replace("\r\n", "") + .Split(',').Select(x => x.Trim()).Where(x => x.Length > 0)) + }; + if (LvCategories.Selection.GetSelected(out var iter)) + { + categoryStore.SetValues(iter, cat1.DisplayName, string.Join(",", cat1.FileExtensions), cat1.DefaultFolder, cat1); + } + } + } + } + + private void CatAdd_Clicked(object? sender, EventArgs e) + { + using var dlg = CategoryEditDialog.CreateFromGladeFile(this, this.group); + dlg.Run(); + dlg.Destroy(); + if (dlg.Result) + { + var cat = new Category + { + Name = Guid.NewGuid().ToString(), + DisplayName = dlg.DisplayName!, + DefaultFolder = dlg.Folder!, + FileExtensions = new HashSet(dlg.FileTypes!.Replace("\r\n", "") + .Split(',').Select(x => x.Trim()).Where(x => x.Length > 0)) + }; + categoryStore.AppendValues(cat.DisplayName, string.Join(",", cat.FileExtensions), cat.DefaultFolder, cat); + } + } + + private void BtnDownloadFolderBrowse_Clicked(object? sender, EventArgs e) + { + var folder = GtkHelper.SelectFolder(this); + if (!string.IsNullOrEmpty(folder)) + { + TxtDownloadFolder.Text = folder; + } + } + + private void BtnTempFolderBrowse_Clicked(object? sender, EventArgs e) + { + var folder = GtkHelper.SelectFolder(this); + if (!string.IsNullOrEmpty(folder)) + { + TxtTempFolder.Text = folder; + } + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Dispose(); + } + + private void BtnOK_Clicked(object? sender, EventArgs e) + { + UpdateBrowserMonitoringConfig(); + UpdateGeneralSettingsConfig(); + UpdateNetworkSettingsConfig(); + UpdatePasswordManagerConfig(); + UpdateAdvancedSettingsConfig(); + Config.SaveConfig(); + app.ApplyConfig(); + Dispose(); + Helpers.RunGC(); + } + + private void BtnDefault3_Clicked(object? sender, EventArgs e) + { + TxtExceptions.Text = string.Join(",", Config.DefaultBlockedHosts); + } + + private void BtnDefault2_Clicked(object? sender, EventArgs e) + { + TxtDefaultVideoFormats.Text = string.Join(",", Config.DefaultVideoExtensions); + } + + private void BtnDefault1_Clicked(object? sender, EventArgs e) + { + TxtDefaultFileTypes.Text = string.Join(",", Config.DefaultFileExtensions); + } + + private void BtnCopy2_Clicked(object? sender, EventArgs e) + { + var cb = Clipboard.Get(Gdk.Selection.Clipboard); + if (cb != null) + { + cb.Text = TxtFirefoxAMOUrl.Text; + } + } + + private void BtnCopy1_Clicked(object? sender, EventArgs e) + { + var cb = Clipboard.Get(Gdk.Selection.Clipboard); + if (cb != null) + { + cb.Text = TxtChromeWebStoreUrl.Text; + } + } + + private void BtnOpera_Clicked(object? sender, EventArgs e) + { + try + { + NativeMessagingConfigurer.InstallNativeMessagingHost(Browser.Chrome); + } + catch (Exception ex) + { + Log.Debug(ex, "Error installing native host"); + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NATIVE_HOST_FAILED")); + return; + } + + try + { + BrowserLauncher.LaunchOperaBrowser(this.app.ChromeExtensionUrl); + } + catch (Exception ex) + { + Log.Debug(ex, "Error launching Opera"); + GtkHelper.ShowMessageBox(this, $"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Opera"); + } + } + + private void BtnEdge_Clicked(object? sender, EventArgs e) + { + try + { + NativeMessagingConfigurer.InstallNativeMessagingHost(Browser.Chrome); + } + catch (Exception ex) + { + Log.Debug(ex, "Error installing native host"); + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NATIVE_HOST_FAILED")); + return; + } + + try + { + BrowserLauncher.LaunchMicrosoftEdge(this.app.ChromeExtensionUrl); + } + catch (Exception ex) + { + Log.Debug(ex, "Error Microsoft Edge"); + GtkHelper.ShowMessageBox(this, $"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Microsoft Edge"); + } + } + + private void BtnFirefox_Clicked(object? sender, EventArgs e) + { + try + { + NativeMessagingConfigurer.InstallNativeMessagingHost(Browser.Firefox); + } + catch (Exception ex) + { + Log.Debug(ex, "Error installing native host"); + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NATIVE_HOST_FAILED")); + return; + } + + try + { + BrowserLauncher.LaunchFirefox(this.app.FirefoxExtensionUrl); + } + catch (Exception ex) + { + Log.Debug(ex, "Error launching Firefox"); + GtkHelper.ShowMessageBox(this, $"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Firefox"); + } + } + + private void BtnChrome_Clicked(object? sender, EventArgs e) + { + try + { + NativeMessagingConfigurer.InstallNativeMessagingHost(Browser.Chrome); + } + catch (Exception ex) + { + Log.Debug(ex, "Error installing native host"); + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NATIVE_HOST_FAILED")); + return; + } + + try + { + BrowserLauncher.LaunchGoogleChrome(this.app.ChromeExtensionUrl); + } + catch (Exception ex) + { + Log.Debug(ex, "Error launching Google Chrome"); + GtkHelper.ShowMessageBox(this, $"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Google Chrome"); + } + } + + private void VideoWikiLink_Clicked(object? sender, EventArgs e) + { + Helpers.OpenBrowser("https://subhra74.github.io/xdm/redirect-support.html?path=video"); + } + + private void LoadTexts() + { + TabHeader1.Text = TextResource.GetText("SETTINGS_MONITORING"); + TabHeader2.Text = TextResource.GetText("SETTINGS_GENERAL"); + TabHeader3.Text = TextResource.GetText("SETTINGS_NETWORK"); + TabHeader4.Text = TextResource.GetText("SETTINGS_CRED"); + TabHeader5.Text = TextResource.GetText("SETTINGS_ADV"); + + Label1.StyleContext.AddClass("medium-font"); + + Label1.Text = TextResource.GetText("SETTINGS_MONITORING"); + Label2.Text = TextResource.GetText("DESC_MONITORING_1"); + Label3.Text = TextResource.GetText("MSG_VID_WIKI_TEXT"); + VideoWikiLink.Label = TextResource.GetText("MSG_VID_WIKI_LINK"); + + Label4.Text = TextResource.GetText("DESC_OTHER_BROWSERS"); + Label5.Text = TextResource.GetText("DESC_CHROME"); + Label6.Text = TextResource.GetText("DESC_MOZ"); + + //BtnChrome.Label = TextResource.GetText("MSG_VID_WIKI_LINK"); + //BtnFirefox.Label = TextResource.GetText("MSG_VID_WIKI_LINK"); + //BtnEdge.Label = TextResource.GetText("MSG_VID_WIKI_LINK"); + //BtnOpera.Label = TextResource.GetText("MSG_VID_WIKI_LINK"); + + Label7.Text = TextResource.GetText("DESC_FILETYPES"); + Label8.Text = TextResource.GetText("DESC_VIDEOTYPES"); + Label9.Text = TextResource.GetText("DESC_SITEEXCEPTIONS"); + Label10.Text = TextResource.GetText("LBL_MIN_VIDEO_SIZE"); + + BtnDefault1.Label = BtnDefault2.Label = BtnDefault3.Label = TextResource.GetText("DESC_DEF"); + + ChkMonitorClipboard.Label = TextResource.GetText("MENU_CLIP_ADD"); + ChkTimestamp.Label = TextResource.GetText("LBL_GET_TIMESTAMP"); + + Label11.StyleContext.AddClass("medium-font"); + + Label11.Text = TextResource.GetText("SETTINGS_GENERAL"); + Label12.Text = TextResource.GetText("MSG_DOUBLE_CLICK_ACTION"); + Label13.Text = TextResource.GetText("LBL_TEMP_FOLDER"); + Label14.Text = TextResource.GetText("SETTINGS_FOLDER"); + Label15.Text = TextResource.GetText("MSG_MAX_DOWNLOAD"); + Label16.Text = TextResource.GetText("SETTINGS_CAT"); + + ChkDarkTheme.Label = TextResource.GetText("SETTINGS_DARK_THEME"); + ChkAutoCat.Label = TextResource.GetText("SETTINGS_ATUO_CAT"); + ChkShowPrg.Label = TextResource.GetText("SHOW_DWN_PRG"); + ChkShowComplete.Label = TextResource.GetText("SHOW_DWN_COMPLETE"); + ChkStartAuto.Label = TextResource.GetText("LBL_START_AUTO"); + ChkOverwrite.Label = TextResource.GetText("LBL_OVERWRITE_EXISTING"); + CatAdd.Label = TextResource.GetText("SETTINGS_CAT_ADD"); + CatEdit.Label = TextResource.GetText("SETTINGS_CAT_EDIT"); + CatDel.Label = TextResource.GetText("DESC_DEL"); + CatDef.Label = TextResource.GetText("DESC_DEF"); + + Label17.StyleContext.AddClass("medium-font"); + + Label17.Text = TextResource.GetText("SETTINGS_NETWORK"); + Label18.Text = TextResource.GetText("DESC_NET1"); + Label19.Text = TextResource.GetText("DESC_NET2"); + Label20.Text = TextResource.GetText("NET_MAX_RETRY"); + Label21.Text = TextResource.GetText("DESC_NET4"); + Label22.Text = TextResource.GetText("PROXY_HOST"); + Label23.Text = TextResource.GetText("PROXY_PORT"); + Label24.Text = TextResource.GetText("DESC_NET7"); + Label25.Text = TextResource.GetText("DESC_NET8"); + + ChkEnableSpeedLimit.Label = TextResource.GetText("MSG_SPEED_LIMIT"); + + Label26.Text = TextResource.GetText("SETTINGS_CRED"); + Label26.StyleContext.AddClass("medium-font"); + + AddPass.Label = TextResource.GetText("SETTINGS_CAT_ADD"); + EditPass.Label = TextResource.GetText("SETTINGS_CAT_EDIT"); + DelPass.Label = TextResource.GetText("DESC_DEL"); + + Label27.Text = TextResource.GetText("SETTINGS_ADV"); + Label27.StyleContext.AddClass("medium-font"); + + ChkHalt.Label = TextResource.GetText("MSG_HALT"); + ChkKeepAwake.Label = TextResource.GetText("MSG_AWAKE"); + ChkRunCmd.Label = TextResource.GetText("EXEC_CMD"); + ChkRunAntivirus.Label = TextResource.GetText("EXE_ANTI_VIR"); + ChkAutoRun.Label = TextResource.GetText("AUTO_START"); + BtnUserAgentReset.Label = TextResource.GetText("DESC_DEF"); + + Label28.Text = TextResource.GetText("ANTIVIR_CMD"); + Label29.Text = TextResource.GetText("ANTIVIR_ARGS"); + Label30.Text = TextResource.GetText("MSG_FALLBACK_UA"); + + BtnOK.Label = TextResource.GetText("DESC_SAVE_Q"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + } + + public void LoadConfig() + { + //Browser monitoring + TxtChromeWebStoreUrl.Text = Config.ChromeWebstoreUrl; + TxtFirefoxAMOUrl.Text = Config.FirefoxAMOUrl; + TxtDefaultFileTypes.Text = string.Join(",", Config.Instance.FileExtensions); + TxtDefaultVideoFormats.Text = string.Join(",", Config.Instance.VideoExtensions); + TxtExceptions.Text = string.Join(",", Config.Instance.BlockedHosts); + GtkHelper.SetSelectedComboBoxValue(CmbMinVidSize, Config.Instance.MinVideoSize); + ChkMonitorClipboard.Active = Config.Instance.MonitorClipboard; + ChkTimestamp.Active = Config.Instance.FetchServerTimeStamp; + + //General settings + ChkShowPrg.Active = Config.Instance.ShowProgressWindow; + ChkShowComplete.Active = Config.Instance.ShowDownloadCompleteWindow; + ChkStartAuto.Active = Config.Instance.StartDownloadAutomatically; + ChkOverwrite.Active = Config.Instance.FileConflictResolution == FileConflictResolution.Overwrite; + ChkDarkTheme.Active = Config.Instance.AllowSystemDarkTheme; + TxtTempFolder.Text = Config.Instance.TempDir; + GtkHelper.SetSelectedComboBoxValue(CmbMaxParallalDownloads, Config.Instance.MaxParallelDownloads); + ChkAutoCat.Active = Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto; + TxtDownloadFolder.Text = Config.Instance.DefaultDownloadFolder; + CmbDblClickAction.Active = Config.Instance.DoubleClickOpenFile ? 1 : 0; + + foreach (var cat in Config.Instance.Categories) + { + categoryStore.AppendValues(cat.DisplayName, string.Join(",", cat.FileExtensions), cat.DefaultFolder, cat); + } + + //Network settings + GtkHelper.SetSelectedComboBoxValue(CmbTimeOut, Config.Instance.NetworkTimeout); + GtkHelper.SetSelectedComboBoxValue(CmbMaxSegments, Config.Instance.MaxSegments); + GtkHelper.SetSelectedComboBoxValue(CmbMaxRetry, Config.Instance.MaxRetry); + TxtMaxSpeedLimit.Text = Config.Instance.DefaltDownloadSpeed.ToString(); + ChkEnableSpeedLimit.Active = Config.Instance.EnableSpeedLimit; + CmbProxyType.Active = (int)(Config.Instance.Proxy?.ProxyType ?? ProxyType.System); + TxtProxyHost.Text = Config.Instance.Proxy?.Host; + TxtProxyPort.Text = (Config.Instance.Proxy?.Port ?? 0).ToString(); + TxtProxyUser.Text = Config.Instance.Proxy?.UserName; + TxtProxyPassword.Text = Config.Instance.Proxy?.Password; + + //Password manager + foreach (var password in Config.Instance.UserCredentials) + { + passwordStore.AppendValues(password.Host, password.User, password); + } + + //Advanced settings + ChkHalt.Active = Config.Instance.ShutdownAfterAllFinished; + ChkKeepAwake.Active = Config.Instance.KeepPCAwake; + ChkRunCmd.Active = Config.Instance.RunCommandAfterCompletion; + ChkRunAntivirus.Active = Config.Instance.ScanWithAntiVirus; + ChkAutoRun.Active = Helpers.IsAutoStartEnabled(); + + TxtCustomCmd.Text = Config.Instance.AfterCompletionCommand; + TxtAntiVirusCmd.Text = Config.Instance.AntiVirusExecutable; + TxtAntiVirusArgs.Text = Config.Instance.AntiVirusArgs; + TxtDefaultUserAgent.Text = Config.Instance.FallbackUserAgent; + } + + private void CreateCategoryListView() + { + categoryStore = new ListStore(typeof(string), typeof(string), typeof(string), typeof(Category)); + LvCategories.Model = categoryStore; + + var k = 0; + foreach (var key in new string[] { "SETTINGS_CAT_NAME", "SETTINGS_CAT_TYPES", "SETTINGS_CAT_FOLDER" }) + { + var cellRendererText = new CellRendererText(); + var treeViewColumn = new TreeViewColumn(TextResource.GetText(key), cellRendererText, "text", k++) + { + Resizable = true, + Reorderable = false, + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 150 + }; + LvCategories.AppendColumn(treeViewColumn); + } + + LvCategories.Selection.Changed += CategorySelection_Changed; + } + + private void CategorySelection_Changed(object? sender, EventArgs e) + { + var count = LvCategories.Selection.CountSelectedRows(); + CatEdit.Sensitive = CatDel.Sensitive = count > 0; + } + + private void CreatePasswordManagerListView() + { + passwordStore = new ListStore(typeof(string), typeof(string), typeof(PasswordEntry)); + LvPasswords.Model = passwordStore; + + var k = 0; + foreach (var key in new string[] { "DESC_HOST", "DESC_USER" }) + { + var cellRendererText = new CellRendererText(); + var treeViewColumn = new TreeViewColumn(TextResource.GetText(key), cellRendererText, "text", k++) + { + Resizable = true, + Reorderable = false, + Sizing = TreeViewColumnSizing.Fixed, + FixedWidth = 150 + }; + LvPasswords.AppendColumn(treeViewColumn); + } + LvPasswords.Selection.Changed += Selection_Changed; ; + } + + private void Selection_Changed(object? sender, EventArgs e) + { + var count = LvPasswords.Selection.CountSelectedRows(); + EditPass.Sensitive = DelPass.Sensitive = count > 0; + } + + private void UpdateBrowserMonitoringConfig() + { + Config.Instance.FileExtensions = TxtDefaultFileTypes.Text.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToArray(); + Config.Instance.VideoExtensions = TxtDefaultVideoFormats.Text.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToArray(); + Config.Instance.BlockedHosts = TxtExceptions.Text.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToArray(); + Config.Instance.FetchServerTimeStamp = ChkTimestamp.Active; + Config.Instance.MonitorClipboard = ChkMonitorClipboard.Active; + Config.Instance.MinVideoSize = GtkHelper.GetSelectedComboBoxValue(CmbMinVidSize); + } + + private void UpdateGeneralSettingsConfig() + { + Config.Instance.ShowProgressWindow = ChkShowPrg.Active; + Config.Instance.ShowDownloadCompleteWindow = ChkShowComplete.Active; + Config.Instance.StartDownloadAutomatically = ChkStartAuto.Active; + Config.Instance.FileConflictResolution = + ChkOverwrite.Active ? FileConflictResolution.Overwrite : FileConflictResolution.AutoRename; + Config.Instance.TempDir = TxtTempFolder.Text; + Config.Instance.MaxParallelDownloads = GtkHelper.GetSelectedComboBoxValue(CmbMaxParallalDownloads); + Config.Instance.Categories = GtkHelper.GetListStoreValues(categoryStore, 3); + Config.Instance.FolderSelectionMode = ChkAutoCat.Active ? FolderSelectionMode.Auto : FolderSelectionMode.Manual; + Config.Instance.DefaultDownloadFolder = TxtDownloadFolder.Text; + Config.Instance.AllowSystemDarkTheme = ChkDarkTheme.Active; + Config.Instance.DoubleClickOpenFile = CmbDblClickAction.Active == 1; + } + + private void UpdateNetworkSettingsConfig() + { + Config.Instance.NetworkTimeout = GtkHelper.GetSelectedComboBoxValue(CmbTimeOut); + Config.Instance.MaxSegments = GtkHelper.GetSelectedComboBoxValue(CmbMaxSegments); + Config.Instance.MaxRetry = GtkHelper.GetSelectedComboBoxValue(CmbMaxRetry); + if (Int32.TryParse(TxtMaxSpeedLimit.Text, out int speed)) + { + Config.Instance.DefaltDownloadSpeed = speed; + } + Config.Instance.EnableSpeedLimit = ChkEnableSpeedLimit.Active; + Int32.TryParse(TxtProxyPort.Text, out int port); + Config.Instance.Proxy = new ProxyInfo + { + ProxyType = (ProxyType)CmbProxyType.Active, + Host = TxtProxyHost.Text, + UserName = TxtProxyUser.Text, + Password = TxtProxyPassword.Text, + Port = port + }; + } + + private void UpdatePasswordManagerConfig() + { + Config.Instance.UserCredentials = GtkHelper.GetListStoreValues(passwordStore, 2); + } + + private void UpdateAdvancedSettingsConfig() + { + Config.Instance.ShutdownAfterAllFinished = ChkHalt.Active; + Config.Instance.KeepPCAwake = ChkKeepAwake.Active; + Config.Instance.RunCommandAfterCompletion = ChkRunCmd.Active; + Config.Instance.ScanWithAntiVirus = ChkRunAntivirus.Active; + Helpers.EnableAutoStart(ChkAutoRun.Active); + + Config.Instance.AfterCompletionCommand = TxtCustomCmd.Text; + Config.Instance.AntiVirusExecutable = TxtAntiVirusCmd.Text; + Config.Instance.AntiVirusArgs = TxtAntiVirusArgs.Text; + Config.Instance.FallbackUserAgent = TxtDefaultUserAgent.Text; + } + + public void SetActivePage(int page) + { + Tabs.Page = page; + } + + public static SettingsDialog CreateFromGladeFile(Window parent, WindowGroup group, IAppUI ui, IApp app) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "settings-dialog.glade")); + return new SettingsDialog(builder, parent, group, ui, app); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/Updater/UpdaterWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/Updater/UpdaterWindow.cs new file mode 100644 index 0000000..00f08d4 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/Updater/UpdaterWindow.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using GLib; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using XDM.Core.Lib.Downloader; + +namespace XDM.GtkUI.Dialogs.Updater +{ + public class UpdaterWindow : Window, IUpdaterUI + { + [UI] private Label TxtHeading; + [UI] private ProgressBar Prg; + [UI] private Button BtnCancel; + private IAppUI AppUI; + private bool active = false; + + private UpdaterWindow(Builder builder, IAppUI appUI) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + AppUI = appUI; + Title = TextResource.GetText("OPT_UPDATE_FFMPEG"); + SetPosition(WindowPosition.CenterAlways); + + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + TxtHeading.Text = TextResource.GetText("STAT_DOWNLOADING"); + SetDefaultSize(500, 200); + + GtkHelper.AttachSafeDispose(this); + + Realized += UpdaterWindow_Realized; + BtnCancel.Clicked += BtnCancel_Clicked; + DeleteEvent += UpdaterWindow_DeleteEvent; + BtnCancel.Clicked += BtnCancel_Clicked; + } + + private void UpdaterWindow_DeleteEvent(object o, DeleteEventArgs args) + { + if (active) + { + Cancelled?.Invoke(this, EventArgs.Empty); + } + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + Cancelled?.Invoke(sender, e); + } + + private void CloseWindow() + { + Close(); + Dispose(); + } + + public void DownloadCancelled(object? sender, EventArgs e) + { + active = false; + Application.Invoke((_, _) => CloseWindow()); + } + + private void UpdaterWindow_Realized(object? sender, EventArgs e) + { + Load?.Invoke(this, EventArgs.Empty); + } + + public string Label + { + get => TxtHeading.Text; + set => Application.Invoke((_, _) => TxtHeading.Text = value); + } + + public bool Inderminate { get; set; } + + public event EventHandler? Cancelled; + public event EventHandler? Finished; + public event EventHandler? Load; + + public static UpdaterWindow CreateFromGladeFile(IAppUI appUI) + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "updater-window.glade")); + return new UpdaterWindow(builder, appUI); + } + + public void DownloadFailed(object? sender, DownloadFailedEventArgs e) + { + active = false; + Application.Invoke((_, _) => + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_FAILED")); + CloseWindow(); + }); + } + + public void DownloadFinished(object? sender, EventArgs e) + { + active = false; + Application.Invoke((_, _) => + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_UPDATED")); + CloseWindow(); + }); + this.Finished?.Invoke(sender, e); + } + + public void DownloadProgressChanged(object? sender, ProgressResultEventArgs e) + { + Application.Invoke((_, _) => Prg.Fraction = e.Progress / 100.0d); + } + + public void DownloadStarted(object? sender, EventArgs e) + { + active = true; + } + + public void ShowNoUpdateMessage() + { + active = false; + Application.Invoke((_, _) => + { + GtkHelper.ShowMessageBox(this, TextResource.GetText("MSG_NO_UPDATE")); + CloseWindow(); + }); + this.Finished?.Invoke(this, EventArgs.Empty); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Dialogs/VideoDownloader/VideoDownloaderWindow.cs b/app/XDM/XDM.Gtk.UI/Dialogs/VideoDownloader/VideoDownloaderWindow.cs new file mode 100644 index 0000000..02dc32b --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Dialogs/VideoDownloader/VideoDownloaderWindow.cs @@ -0,0 +1,514 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using Application = Gtk.Application; +using IoPath = System.IO.Path; +using XDM.Core.Lib.Common; +using Translations; +using UI = Gtk.Builder.ObjectAttribute; +using XDM.GtkUI.Utils; +using System; +using YDLWrapper; +using XDM.Core.Lib.Util; +using TraceLog; +using XDM.Core.Lib.UI; +using XDM.GtkUI.Dialogs.AdvancedDownload; + +namespace XDM.GtkUI.Dialogs.VideoDownloader +{ + public class VideoDownloaderWindow : Window, IVideoDownloadView + { + private YDLProcess? ydl; + + [UI] private Box Page1; + [UI] private Box Page2; + [UI] private Box Page3; + [UI] private Box Page4; + [UI] private Label LblUrl; + [UI] private Label LblUserName; + [UI] private Label LblPass; + [UI] private Label LblSaveIn; + [UI] private Entry TxtUrl; + [UI] private Entry TxtUserName; + [UI] private Entry TxtPassword; + [UI] private Entry TxtSaveIn; + [UI] private Button BtnGo; + [UI] private Button BtnCancel; + [UI] private Button BtnBrowse; + [UI] private Button BtnDownloadNow; + [UI] private MenuButton BtnDownloadLater; + [UI] private Button BtnMore; + [UI] private CheckButton ChkAuth; + [UI] private CheckButton ChkSelectAll; + [UI] private Label LblProgress; + [UI] private TreeView LvVideoList; + [UI] private TreeView LvFormats; + [UI] private ScrolledWindow SwFormats; + [UI] private Menu menu1; + [UI] private CheckButton ChkReadCookie; + [UI] private ComboBox CmbBrowser; + [UI] private Label LblHelpMessage; + [UI] private Button BtnHelp; + + private ListStore videoStore; + private ListStore formatStore; + + private WindowGroup windowGroup; + + public string DownloadLocation { get => TxtSaveIn.Text; set => TxtSaveIn.Text = value; } + public string Url { get => TxtUrl.Text; set => TxtUrl.Text = value; } + public event EventHandler? CancelClicked; + public event EventHandler? BrowseClicked; + public event EventHandler? SearchClicked; + public event EventHandler? WindowClosed; + public event EventHandler? DownloadClicked; + public event EventHandler? QueueSchedulerClicked; + public event EventHandler? DownloadLaterClicked; + + public string? SelectedBrowser + { + get + { + if (ChkReadCookie.Active) + { + var val = GtkHelper.GetComboBoxSelectedItem(this.CmbBrowser); + return val; + } + return null; + } + } + + public List AllowedBrowsers + { + set + { + GtkHelper.PopulateComboBox(CmbBrowser, value.ToArray()); + if (value.Count > 0) + { + CmbBrowser.Active = 0; + } + } + } + + public void SwitchToInitialPage() + { + Page2.Hide(); + Page3.Hide(); + Page4.Hide(); + Page1.Show(); + } + public void SwitchToProcessingPage() + { + Page2.Show(); + Page3.Hide(); + Page4.Hide(); + Page1.Hide(); + } + public void SwitchToFinalPage() + { + Page3.Show(); + Page2.Hide(); + Page4.Hide(); + Page1.Hide(); + } + public void SwitchToErrorPage() + { + Page4.Show(); + Page2.Hide(); + Page3.Hide(); + Page1.Hide(); + } + + public int SelectedFormat + { + get => GtkHelper.GetSelectedIndex(LvFormats); + set => GtkHelper.SetSelectedIndex(LvFormats, value); + } + + public IEnumerable SelectedRows => GetSelectedVideoList(); + + public int SelectedItemCount => GetSelectedVideoCount(); + + public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } + public ProxyInfo? Proxy { get => proxy; set => proxy = value; } + public int SpeedLimit { get => speedLimit; set => speedLimit = value; } + public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } + + public string? SelectFolder() + { + return GtkHelper.SelectFolder(this); + } + + public void SetVideoResultList(IEnumerable videos, IEnumerable formats) + { + videoStore.Clear(); + foreach (var video in videos) + { + videoStore.AppendValues(true, video); + } + formatStore.Clear(); + foreach (var format in formats) + { + formatStore.AppendValues(format); + } + } + + public void CloseWindow() + { + windowGroup.RemoveWindow(this); + this.Close(); + this.Destroy(); + } + + public void ShowWindow() + { + this.Show(); + } + + private Gtk.MenuItem dontAddToQueueMenuItem; + private Gtk.MenuItem queueAndSchedulerMenuItem; + + private AuthenticationInfo? authentication; + private ProxyInfo? proxy = Config.Instance.Proxy; + private int speedLimit = Config.Instance.DefaltDownloadSpeed; + private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; + + private VideoDownloaderWindow(Builder builder) : base(builder.GetRawOwnedObject("window")) + { + builder.Autoconnect(this); + SetDefaultSize(600, 500); + + windowGroup = new WindowGroup(); + windowGroup.AddWindow(this); + + Title = TextResource.GetText("LBL_VIDEO_DOWNLOAD"); + SetPosition(WindowPosition.CenterAlways); + + Page1.ShowAll(); + Page2.Visible = false; + Page3.Visible = false; + Page4.Visible = false; + + LblUrl.Text = TextResource.GetText("VID_PASTE_URL"); + ChkAuth.Label = TextResource.GetText("SETTINGS_ADV"); + LblUserName.Text = TextResource.GetText("DESC_USER"); + LblPass.Text = TextResource.GetText("DESC_PASS"); + LblSaveIn.Text = TextResource.GetText("LBL_SAVE_IN"); + LblProgress.Text = TextResource.GetText("STAT_WAITING"); + BtnCancel.Label = TextResource.GetText("ND_CANCEL"); + + ChkSelectAll.Label = TextResource.GetText("VID_CHK"); + + BtnDownloadNow.Label = TextResource.GetText("ND_DOWNLOAD_NOW"); + BtnDownloadLater.Label = TextResource.GetText("ND_DOWNLOAD_LATER"); + BtnMore.Label = TextResource.GetText("ND_MORE"); + + TxtUserName.Visible = TxtPassword.Visible = LblUserName.Visible = LblPass.Visible = false; + + ChkAuth.Toggled += (_, _) => + { + TxtUserName.Visible = TxtPassword.Visible = LblUserName.Visible = LblPass.Visible = ChkAuth.Active; + }; + + BtnGo.Clicked += BtnGo_Clicked; + BtnCancel.Clicked += BtnCancel_Clicked; + + videoStore = new ListStore(typeof(bool), typeof(string)); + formatStore = new ListStore(typeof(string)); + + LvVideoList.Model = videoStore; + LvFormats.Model = formatStore; + + LvVideoList.HeadersVisible = false; + LvFormats.HeadersVisible = false; + + var fileNameColumn = new TreeViewColumn + { + Resizable = false, + Reorderable = false, + Title = TextResource.GetText("SORT_NAME"), + Sizing = TreeViewColumnSizing.Autosize, + Expand = true + }; + + var checkboxRenderer = new CellRendererToggle { }; + checkboxRenderer.Toggled += CheckboxRenderer_Toggled; + fileNameColumn.PackStart(checkboxRenderer, false); + fileNameColumn.SetAttributes(checkboxRenderer, "active", 0); + + var fileNameRendererText = new CellRendererText(); + fileNameColumn.PackStart(fileNameRendererText, false); + fileNameColumn.SetAttributes(fileNameRendererText, "text", 1); + LvVideoList.AppendColumn(fileNameColumn); + + var formatColumn = new TreeViewColumn + { + Resizable = false, + Reorderable = false, + Title = "Formats", + Sizing = TreeViewColumnSizing.Autosize, + Expand = true + }; + + var formatRendererText = new CellRendererText(); + formatColumn.PackStart(formatRendererText, false); + formatColumn.SetAttributes(formatRendererText, "text", 0); + LvFormats.AppendColumn(formatColumn); + + SwFormats.SetSizeRequest(100, 100); + + DeleteEvent += VideoDownloaderWindow_DeleteEvent; + + BtnBrowse.Clicked += BtnBrowse_Clicked; + BtnDownloadNow.Clicked += BtnDownloadNow_Clicked; + + TxtSaveIn.Text = Helpers.GetVideoDownloadFolder(); + + ChkReadCookie.Label = TextResource.GetText("MSG_READ_BROWSER_COOKIE"); + BtnHelp.Label = TextResource.GetText("MSG_VIDEO_DOWNLOAD_HELP"); + LblHelpMessage.Text = TextResource.GetText("MSG_NO_VIDEO"); + + BtnHelp.Clicked += BtnHelp_Clicked; + CmbBrowser.Sensitive = false; + ChkReadCookie.Toggled += ChkReadCookie_Toggled; + + BtnMore.Clicked += btnAdvanced_Click; + PrepareMenu(); + + GtkHelper.AttachSafeDispose(this); + } + + private void ChkReadCookie_Toggled(object? sender, EventArgs e) + { + CmbBrowser.Sensitive = ChkReadCookie.Active; + } + + private void BtnHelp_Clicked(object? sender, EventArgs e) + { + Helpers.OpenBrowser("https://github.com/subhra74/xdm"); + } + + private void BtnGo_Clicked(object? sender, EventArgs e) + { + SearchClicked?.Invoke(this, EventArgs.Empty); + } + + private void BtnDownloadNow_Clicked(object? sender, EventArgs e) + { + DownloadClicked?.Invoke(this, EventArgs.Empty); + } + + private void BtnBrowse_Clicked(object? sender, EventArgs e) + { + BrowseClicked?.Invoke(this, EventArgs.Empty); + } + + private void VideoDownloaderWindow_DeleteEvent(object o, DeleteEventArgs args) + { + WindowClosed?.Invoke(this, EventArgs.Empty); + } + + private void BtnCancel_Clicked(object? sender, EventArgs e) + { + CancelClicked?.Invoke(this, EventArgs.Empty); + } + + private void CheckboxRenderer_Toggled(object o, ToggledArgs args) + { + TreeIter iter; + if (videoStore.GetIter(out iter, new TreePath(args.Path))) + videoStore.SetValue(iter, 0, !(bool)videoStore.GetValue(iter, 0)); + } + + //public void SetVideoResultList(List items) + //{ + // if (items == null) return; + // var formatSet = new HashSet(); + + // videoStore.Clear(); + // foreach (var item in items) + // { + // videoStore.AppendValues(true, item.Title, item); + // } + + // foreach (var item in items) + // { + // if (item.Formats != null) + // { + // item.Formats.ForEach(item => + // { + // if (!string.IsNullOrEmpty(item.Height)) + // { + // if (Int32.TryParse(item.Height, out int height)) + // { + // formatSet.Add(height); + // } + // } + // }); + // } + // } + // var formatsList = new List(formatSet); + // formatsList.Sort(); + // formatsList.Reverse(); + + // formatStore.Clear(); + // foreach (var format in formatsList) + // { + // formatStore.AppendValues($"{format}p", format); + // } + + // if (formatsList.Count > 0) + // { + // GtkHelper.SetSelectedIndex(LvFormats, 0); + // } + + // //this.videoQualities = formatsList; + // //LbQuality.ItemsSource = this.videoQualities.Select(n => $"{n}p"); + // //if (this.videoQualities.Count > 0) + // //{ + // // LbQuality.SelectedIndex = 0; + // //} + //} + + //private void DownloadSelectedItems(bool startImmediately, string? queueId) + //{ + // if (string.IsNullOrEmpty(TxtSaveIn.Text)) + // { + // AppUI!.ShowMessageBox(ParentWindow, TextResource.GetText("MSG_CAT_FOLDER_MISSING")); + // return; + // } + // if (this.GetSelectedVideoCount() == 0) + // { + // AppUI!.ShowMessageBox(ParentWindow, TextResource.GetText("BAT_SELECT_ITEMS")); + // return; + // } + // var quality = -1; + // if (GtkHelper.GetSelectedIndex(LvFormats) >= 0) + // { + // quality = this.GetSelectedFormat(); + // } + + // foreach (var item in this.GetSelectedVideoList()) + // { + // var fmt = FindMatchingFormatByQuality(item, quality); + // if (fmt.HasValue) + // { + // AddDownload(fmt.Value, startImmediately, queueId); + // } + // } + // this.Close(); + //} + + private int GetSelectedVideoCount() + { + if (!videoStore.GetIterFirst(out TreeIter iter)) + { + return 0; + } + var count = 0; + do + { + if ((bool)videoStore.GetValue(iter, 0)) + { + count++; + } + } + while (videoStore.IterNext(ref iter)); + return count; + } + + private List GetSelectedVideoList() + { + var list = new List(); + if (!videoStore.GetIterFirst(out TreeIter iter)) + { + return list; + } + var count = 0; + do + { + if ((bool)videoStore.GetValue(iter, 0)) + { + list.Add(count); + } + count++; + } + while (videoStore.IterNext(ref iter)); + return list; + } + + //private List GetSelectedVideoList() + //{ + // var list = new List(); + // if (!videoStore.GetIterFirst(out TreeIter iter)) + // { + // return list; + // } + // do + // { + // if ((bool)videoStore.GetValue(iter, 0)) + // { + // var entry = (YDLVideoEntry)videoStore.GetValue(iter, 2); + // list.Add(entry); + // } + // } + // while (videoStore.IterNext(ref iter)); + // return list; + //} + + private void DontAddToQueueMenuItem_Click(object? sender, EventArgs e) + { + this.DownloadLaterClicked?.Invoke(this, new DownloadLaterEventArgs(string.Empty)); + } + + private void QueueAndSchedulerMenuItem_Click(object? sender, EventArgs e) + { + this.QueueSchedulerClicked?.Invoke(this, EventArgs.Empty); + } + + private void PrepareMenu() + { + dontAddToQueueMenuItem = new Gtk.MenuItem(TextResource.GetText("LBL_QUEUE_OPT3")); + queueAndSchedulerMenuItem = new Gtk.MenuItem(TextResource.GetText("DESC_Q_TITLE")); + + dontAddToQueueMenuItem.Activated += DontAddToQueueMenuItem_Click; + queueAndSchedulerMenuItem.Activated += QueueAndSchedulerMenuItem_Click; + + DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( + args => DownloadLaterClicked?.Invoke(this, args), + menu1, + dontAddToQueueMenuItem, + queueAndSchedulerMenuItem, + this); + } + + private void btnAdvanced_Click(object? sender, EventArgs e) + { + var dlg = new AdvancedDownloadDialog(AdvancedDownloadDialog.LoadBuilder(), this, this.windowGroup) + { + Authentication = Authentication, + Proxy = Proxy, + EnableSpeedLimit = EnableSpeedLimit, + SpeedLimit = SpeedLimit, + }; + dlg.Run(); + if (dlg.Result) + { + Authentication = dlg.Authentication; + Proxy = dlg.Proxy; + EnableSpeedLimit = dlg.EnableSpeedLimit; + SpeedLimit = dlg.SpeedLimit; + } + dlg.Destroy(); + } + + public static VideoDownloaderWindow CreateFromGladeFile() + { + var builder = new Builder(); + builder.AddFromFile(IoPath.Combine(AppDomain.CurrentDomain.BaseDirectory, "glade", "video-downloader-window.glade")); + return new VideoDownloaderWindow(builder); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/InProgressEntryWrapper.cs b/app/XDM/XDM.Gtk.UI/InProgressEntryWrapper.cs index 8a62659..89b17f9 100644 --- a/app/XDM/XDM.Gtk.UI/InProgressEntryWrapper.cs +++ b/app/XDM/XDM.Gtk.UI/InProgressEntryWrapper.cs @@ -16,7 +16,7 @@ namespace XDM.GtkUI private TreeIter treeIter; private ITreeModel store; - public InProgressEntryWrapper(InProgressDownloadEntry downloadEntry, + internal InProgressEntryWrapper(InProgressDownloadEntry downloadEntry, TreeIter treeIter, ITreeModel store) { @@ -45,7 +45,7 @@ namespace XDM.GtkUI set { this.DownloadEntry.Size = value; - store.SetValue(treeIter, 2, Helpers.FormatSize( value)); + store.SetValue(treeIter, 2, Helpers.FormatSize(value)); } } @@ -98,5 +98,12 @@ namespace XDM.GtkUI store.SetValue(treeIter, 4, Helpers.GenerateStatusText(this.DownloadEntry)); } } + + internal TreeIter TreeIter => treeIter; + + public ITreeModel GetStore() + { + return this.store; + } } } diff --git a/app/XDM/XDM.Gtk.UI/MenuItemWrapper.cs b/app/XDM/XDM.Gtk.UI/MenuItemWrapper.cs index 52e84d8..13b30a8 100644 --- a/app/XDM/XDM.Gtk.UI/MenuItemWrapper.cs +++ b/app/XDM/XDM.Gtk.UI/MenuItemWrapper.cs @@ -14,19 +14,30 @@ namespace XDM.GtkUI private string name; public string Name => name; public MenuItem MenuItem => menuItem; + public bool Enabled { get => menuItem.IsSensitive; set => menuItem.Sensitive = value; } + public event EventHandler? Clicked; - public MenuItemWrapper(string name, MenuItem menuItem) + public MenuItemWrapper(string name, string text, bool visible = true) { this.name = name; - this.menuItem = menuItem; - this.menuItem.ShowAll(); - menuItem.Activated += (s, e) => Clicked?.Invoke(s, e); + this.menuItem = new MenuItem(text); + this.menuItem.Name = name; + if (visible) + { + this.menuItem.ShowAll(); + } + this.menuItem.Activated += Mi_Click; + } + + private void Mi_Click(object? sender, EventArgs e) + { + this.Clicked?.Invoke(sender, e); } } } diff --git a/app/XDM/XDM.Gtk.UI/PollingClipboardMonitor.cs b/app/XDM/XDM.Gtk.UI/PollingClipboardMonitor.cs new file mode 100644 index 0000000..5423cbc --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/PollingClipboardMonitor.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Timers; +using System.Threading.Tasks; +using Gtk; +using XDM.Core.Lib.Common; +using TraceLog; + +namespace XDM.GtkUI +{ + public class PollingClipboardMonitor : IClipboardMonitor + { + private Timer timer; + private string lastText; + private Clipboard cb; + public PollingClipboardMonitor() + { + cb = Clipboard.Get(Gdk.Selection.Clipboard); + timer = new Timer(1000); + timer.Elapsed += Timer_Elapsed; + } + + private void Timer_Elapsed(object? sender, ElapsedEventArgs e) + { + Application.Invoke(CheckGtkClipboardContents); + } + + private void CheckGtkClipboardContents(object? sender, EventArgs e) + { + if (cb == null) + { + Log.Debug("Clipboard is null"); + return; + } + var text = cb.WaitForText(); + if (text != lastText) + { + Log.Debug("Clipboard changed"); + lastText = text; + this.ClipboardChanged?.Invoke(this, EventArgs.Empty); + } + } + + public event EventHandler? ClipboardChanged; + + public string GetClipboardText() => lastText; + + public void StartClipboardMonitoring() + { + timer.Start(); + } + + public void StopClipboardMonitoring() + { + timer.Stop(); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Program.cs b/app/XDM/XDM.Gtk.UI/Program.cs index 93b6dc7..4845589 100644 --- a/app/XDM/XDM.Gtk.UI/Program.cs +++ b/app/XDM/XDM.Gtk.UI/Program.cs @@ -1,17 +1,32 @@ using System; +using System.Net; using Gtk; +using TraceLog; using Translations; using XDM.Core.Lib.Common; +using XDM.Core.Lib.DataAccess; using XDMApp; namespace XDM.GtkUI { class Program { + private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; + private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto"; + static void Main(string[] args) { Application.Init(); + GLib.ExceptionManager.UnhandledException += ExceptionManager_UnhandledException; + var globalStyleSheet = @" + .large-font{ font-size: 16px; } + .medium-font{ font-size: 14px; } + "; + var screen = Gdk.Screen.Default; + var provider = new CssProvider(); + provider.LoadFromData(globalStyleSheet); + Gtk.StyleContext.AddProviderForScreen(screen, provider, 800); //var screen = Gdk.Screen.Default; //var provider = new CssProvider(); //provider.LoadFromData(@".dark @@ -46,11 +61,51 @@ namespace XDM.GtkUI // "); //Gtk.StyleContext.AddProviderForScreen(screen, provider, 800); - var app = new XDMApp.XDMApp(); + ServicePointManager.ServerCertificateValidationCallback += (a, b, c, d) => true; + ServicePointManager.DefaultConnectionLimit = 100; + + ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault; + + AppContext.SetSwitch(DisableCachingName, true); + AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true); + TextResource.Load(Config.Instance.Language); + + var debugMode = Environment.GetEnvironmentVariable("XDM_DEBUG_MODE"); + if (!string.IsNullOrEmpty(debugMode) && debugMode == "1") + { + var logFile = System.IO.Path.Combine(Config.DataDir, "log.txt"); + Log.InitFileBasedTrace(System.IO.Path.Combine(Config.DataDir, "log.txt")); + } + Log.Debug("Application_Startup"); + + AppDB.Instance.Init(System.IO.Path.Combine(Config.DataDir, "downloads.db")); + + if (Config.Instance.AllowSystemDarkTheme) + { + Gtk.Settings.Default.ThemeName = "Adwaita"; + Gtk.Settings.Default.ApplicationPreferDarkTheme = true; + } + var app = new XDMApp.XDMApp(); + var appWin = new AppWinPeer(); app.AppUI = new XDMApp.AppWin(appWin, app); - appWin.ShowAll(); + appWin.Show(); + app.AppUI.WindowLoaded += (_, _) => app.StartClipboardMonitor(); + app.StartScheduler(); + app.StartNativeMessagingHost(); + + //var t = new System.Threading.Thread(() => + // { + // while (true) + // { + // System.Threading.Thread.Sleep(5000); + // Console.WriteLine("Trigger GC"); + // GC.Collect(); + // } + // }); + //t.Start(); + Application.Run(); //var app = new XDMApp.XDMApp(); @@ -76,5 +131,11 @@ namespace XDM.GtkUI // Console.WriteLine("Finished show all"); // Application.Run(); } + + private static void ExceptionManager_UnhandledException(GLib.UnhandledExceptionArgs args) + { + Log.Debug("GLib ExceptionManager_UnhandledException: " + args.ExceptionObject); + args.ExitApplication = false; + } } } diff --git a/app/XDM/XDM.Gtk.UI/Utils/ClipboardFileCopy.cs b/app/XDM/XDM.Gtk.UI/Utils/ClipboardFileCopy.cs new file mode 100644 index 0000000..87bf710 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Utils/ClipboardFileCopy.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Gtk; +using TraceLog; + +namespace XDM.GtkUI.Utils +{ + internal class ClipboardFileCopy + { + private string source; + + public ClipboardFileCopy(string file) + { + this.source = $"file://{file}"; + } + + public void Exec() + { + var cb = Clipboard.Get(Gdk.Selection.Clipboard); + if (cb == null) + { + Log.Debug("Clipboard is null"); + return; + } + var target0 = new TargetEntry("x-special/gnome-copied-files", 0, 0); + var target1 = new TargetEntry("text/uri-list", 0, 0); + cb.SetWithData(new TargetEntry[] { target0, target1 }, ClearGet, ClearFunc); + } + + private void ClearGet(Clipboard clipboard, SelectionData selection, uint info) + { + var temp = $"copy\n{source}"; + selection.Set(selection.Target, 8, Encoding.UTF8.GetBytes(temp)); + } + + private void ClearFunc(Clipboard clipboard) + { + //??? + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Utils/DownloadLaterMenuHelper.cs b/app/XDM/XDM.Gtk.UI/Utils/DownloadLaterMenuHelper.cs new file mode 100644 index 0000000..b9b6619 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Utils/DownloadLaterMenuHelper.cs @@ -0,0 +1,41 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XDM.Core.Lib.UI; +using XDMApp; + +namespace XDM.GtkUI.Utils +{ + internal static class DownloadLaterMenuHelper + { + internal static void PopulateMenuAndAttachEvents( + Action? DownloadLaterClicked, + Menu nctx, + MenuItem dontAddToQueueMenuItem, + MenuItem queueAndSchedulerMenuItem, + Window window) + { + foreach (var queue in QueueManager.Queues) + { + var menuItem = new MenuItem + { + Name = queue.ID, + Label = queue.Name + }; + menuItem.Activated += (s, e) => + { + var args = new DownloadLaterEventArgs((string)menuItem.Name); + DownloadLaterClicked?.Invoke(args); + }; + nctx.Append(menuItem); + } + nctx.Append(dontAddToQueueMenuItem); + nctx.Append(queueAndSchedulerMenuItem); + + nctx.ShowAll(); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/Utils/GtkHelper.cs b/app/XDM/XDM.Gtk.UI/Utils/GtkHelper.cs new file mode 100644 index 0000000..611f0a5 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/Utils/GtkHelper.cs @@ -0,0 +1,440 @@ +using Gtk; +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XDM.GtkUI.Utils +{ + internal static class GtkHelper + { + public static void ShowMessageBox(Window window, string text, string? title = null) + { + using var msgBox = new MessageDialog(window, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok, text); + msgBox.Title = title ?? window.Title; + if (window.Group != null) + { + window.Group.AddWindow(msgBox); + } + msgBox.Run(); + if (window.Group != null) + { + window.Group.RemoveWindow(msgBox); + } + msgBox.Destroy(); + } + + public static bool ShowConfirmMessageBox(Window window, string text, string? title = null) + { + using var msgBox = new MessageDialog(window, DialogFlags.Modal, MessageType.Question, ButtonsType.YesNo, text); + msgBox.Title = title ?? window.Title; + if (window.Group != null) + { + window.Group.AddWindow(msgBox); + } + var ret = msgBox.Run(); + if (window.Group != null) + { + window.Group.RemoveWindow(msgBox); + } + msgBox.Destroy(); + return ret == (int)ResponseType.Yes; + } + + public static T GetComboBoxSelectedItem(ComboBox comboBox) + { + comboBox.GetActiveIter(out TreeIter tree); + return (T)comboBox.Model.GetValue(tree, 0); + } + + //public static int GetSelectedIndex(ComboBox comboBox) + //{ + // comboBox.GetActiveIter(out TreeIter tree); + // var path = comboBox.Model.GetPath(tree); + // return path?.Indices?.Length > 0 ? path.Indices[0] : -1; + //} + + //public static void SetSelectedIndex(ComboBox comboBox, int index) + //{ + // if (!comboBox.Model.GetIterFirst(out TreeIter iter)) + // { + // return; + // } + // var i = 0; + // do + // { + // if (index == i) + // { + // comboBox.SetActiveIter(iter); + // return; + // } + // i++; + // } + // while (comboBox.Model.IterNext(ref iter)); + //} + + public static int GetSelectedIndex(TreeView treeView) + { + var paths = treeView.Selection.GetSelectedRows(); + if (paths != null && paths.Length > 0) + { + return paths[0].Indices[0]; + } + return -1; + } + + public static int[] GetSelectedIndices(TreeView treeView) + { + var paths = treeView.Selection.GetSelectedRows(); + if (paths != null && paths.Length > 0) + { + return paths.Select(path => path.Indices[0]).ToArray(); + } + return new int[0]; + } + + public static void SetSelectedIndex(TreeView treeView, int index) + { + if (!treeView.Model.GetIterFirst(out TreeIter iter)) + { + return; + } + var i = 0; + do + { + if (index == i) + { + treeView.Selection.SelectIter(iter); + return; + } + i++; + } + while (treeView.Model.IterNext(ref iter)); + } + + public static T? GetSelectedValue(TreeView treeView, int dataIndex) + { + var index = GetSelectedIndex(treeView); + if (!treeView.Model.GetIterFirst(out TreeIter iter)) + { + return default(T); + } + var i = 0; + do + { + if (index == i) + { + return (T)treeView.Model.GetValue(iter, dataIndex); + } + i++; + } + while (treeView.Model.IterNext(ref iter)); + return default(T); + } + + public static T? GetValueAt(TreeView treeView, int index, int dataIndex) + { + if (!treeView.Model.GetIterFirst(out TreeIter iter)) + { + return default(T); + } + var i = 0; + do + { + if (index == i) + { + return (T)treeView.Model.GetValue(iter, dataIndex); + } + i++; + } + while (treeView.Model.IterNext(ref iter)); + return default(T); + } + + public static List GetSelectedValues(TreeView treeView, int dataIndex) + { + var list = new List(); + if (!treeView.Model.GetIterFirst(out TreeIter iter)) + { + return list; + } + do + { + if (treeView.Selection.IterIsSelected(iter)) + { + list.Add((T)treeView.Model.GetValue(iter, dataIndex)); + } + } + while (treeView.Model.IterNext(ref iter)); + return list; + } + + public static void RemoveAt(ListStore model, int index) + { + if (!model.GetIterFirst(out TreeIter iter)) + { + return; + } + var i = 0; + do + { + if (index == i) + { + model.Remove(ref iter); + break; + } + i++; + } + while (model.IterNext(ref iter)); + } + + public static List GetListStoreValues(ITreeModel model, int dataIndex) + { + var list = new List(); + if (!model.GetIterFirst(out TreeIter iter)) + { + return list; + } + do + { + list.Add((T)model.GetValue(iter, dataIndex)); + } + while (model.IterNext(ref iter)); + return list; + } + + public static void ListStoreForEach(ITreeModel model, Action iterCallback) + { + if (!model.GetIterFirst(out TreeIter iter)) + { + return; + } + do + { + iterCallback.Invoke(iter); + } + while (model.IterNext(ref iter)); + } + + public static ListStore PopulateComboBox(ComboBox comboBox, params string[] values) + { + var cmbStore = new ListStore(typeof(string)); + foreach (var text in values) + { + var iter = cmbStore.Append(); + cmbStore.SetValue(iter, 0, text); + } + comboBox.Model = cmbStore; + var cell = new CellRendererText(); + cell.Ellipsize = Pango.EllipsizeMode.End; + comboBox.PackStart(cell, true); + comboBox.AddAttribute(cell, "text", 0); + return cmbStore; + } + + public static ListStore PopulateComboBoxGeneric(ComboBox comboBox, params T[] values) + { + var cmbStore = new ListStore(typeof(string), typeof(T)); + foreach (var text in values) + { + var iter = cmbStore.Append(); + cmbStore.SetValue(iter, 0, $"{text}"); + cmbStore.SetValue(iter, 1, text); + } + comboBox.Model = cmbStore; + var cell = new CellRendererText(); + cell.Ellipsize = Pango.EllipsizeMode.End; + comboBox.PackStart(cell, true); + comboBox.AddAttribute(cell, "text", 0); + return cmbStore; + } + + public static T? GetSelectedComboBoxValue(ComboBox comboBox) + { + var index = comboBox.Active; + var count = 0; + if (!comboBox.Model.GetIterFirst(out TreeIter iter)) + { + return default(T); + } + do + { + + if (index == count) + { + return (T)comboBox.Model.GetValue(iter, 1); + } + count++; + } + while (comboBox.Model.IterNext(ref iter)); + return default(T); + } + + public static void SetSelectedComboBoxValue(ComboBox comboBox, T value) + { + var count = 0; + if (!comboBox.Model.GetIterFirst(out TreeIter iter)) + { + return; + } + do + { + var val = (T)comboBox.Model.GetValue(iter, 1); + if (EqualityComparer.Default.Equals(val, value)) + { + comboBox.Active = count; + return; + } + count++; + } + while (comboBox.Model.IterNext(ref iter)); + } + + public static Gdk.Pixbuf LoadSvg(string name, int dimension = 16) + { + return new Gdk.Pixbuf( + Path.Combine( + AppDomain.CurrentDomain.BaseDirectory, "svg-icons", $"{name}.svg"), dimension, dimension, true); + } + + public static string? SelectFolder(Window parent) + { + using var fc = new FileChooserDialog("XDM", parent, FileChooserAction.SelectFolder); + try + { + if (parent.Group != null) + { + parent.Group.AddWindow(fc); + } + fc.AddButton(Stock.Save, ResponseType.Accept); + fc.AddButton(Stock.Cancel, ResponseType.Cancel); + if (fc.Run() == (int)ResponseType.Accept) + { + return fc.Filename; + } + return null; + } + finally + { + if (parent.Group != null) + { + parent.Group.RemoveWindow(fc); + } + fc.Destroy(); + fc.Dispose(); + } + } + + public static string? SelectFile(Window parent) + { + using var fc = new FileChooserDialog("XDM", parent, FileChooserAction.Open); + try + { + if (parent.Group != null) + { + parent.Group.AddWindow(fc); + } + fc.AddButton(Stock.Save, ResponseType.Accept); + fc.AddButton(Stock.Cancel, ResponseType.Cancel); + if (fc.Run() == (int)ResponseType.Accept) + { + return fc.Filename; + } + return null; + } + finally + { + if (parent.Group != null) + { + parent.Group.RemoveWindow(fc); + } + fc.Destroy(); + fc.Dispose(); + } + } + + public static string? SaveFile(Window parent, string? path) + { + using var fc = new FileChooserDialog("XDM", parent, FileChooserAction.Save); + if (!string.IsNullOrEmpty(path)) + { + var dir = Path.GetDirectoryName(path); + fc.SetFilename(Path.GetFileName(path)); + fc.SetCurrentFolderFile(GLib.FileFactory.NewForPath(dir)); + } + try + { + if (parent.Group != null) + { + parent.Group.AddWindow(fc); + } + fc.AddButton(Stock.Save, ResponseType.Accept); + fc.AddButton(Stock.Cancel, ResponseType.Cancel); + if (fc.Run() == (int)ResponseType.Accept) + { + return fc.Filename; + } + return null; + } + finally + { + if (parent.Group != null) + { + parent.Group.RemoveWindow(fc); + } + fc.Destroy(); + fc.Dispose(); + } + } + + public static void AttachSafeDispose(Window window) + { + window.DeleteEvent += (s, _) => + { + try + { + if (s is Window w) + { + var g = w.Group; + if (g != null) + { + g.RemoveWindow(w); + } + } + } + catch { } + }; + + window.Destroyed += (s, _) => + { + try + { + if (s is Window w) + { + w.Dispose(); + } + } + catch { } + }; + } + + public static void ConfigurePasswordField(Entry? entry) + { + if (entry == null) + { + return; + } + entry.Visibility = false; + entry.InvisibleChar = '*'; + entry.InputPurpose = InputPurpose.Password; + } + + public static TreeIter ConvertViewToModel(TreeIter iter, TreeModelSort sortedModel, TreeModelFilter filterModel) + { + var iter1 = sortedModel.ConvertIterToChildIter(iter); + return filterModel.ConvertIterToChildIter(iter1); + } + } +} diff --git a/app/XDM/XDM.Gtk.UI/XDM.Gtk.UI.csproj b/app/XDM/XDM.Gtk.UI/XDM.Gtk.UI.csproj index 72651ca..ad17e74 100644 --- a/app/XDM/XDM.Gtk.UI/XDM.Gtk.UI.csproj +++ b/app/XDM/XDM.Gtk.UI/XDM.Gtk.UI.csproj @@ -1,49 +1,82 @@  - - Exe - net5.0 - true - true - Link - XDM.GtkUI + + Exe + net6.0 + true + true + xdm-app + + + XDM.GtkUI - - AnyCPU;x86 + + x64 latest enable - + + - - - - - - + + + + + + - - + + + + + + + 4.5.0 + + + + + + + + + + + + + + + Always + Always - + + - + - + - - - - - + - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\AtkSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\CairoSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\GdkSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\GioSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\GLibSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\GtkSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\GtkSourceSharp.dll - - - D:\gtksharp\GtkSharp-master\BuildOutput\Release\PangoSharp.dll - - + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\AtkSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\CairoSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\GdkSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\GioSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\GLibSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\GtkSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\GtkSourceSharp.dll + + + D:\gtksharp\GtkSharp-master\BuildOutput\Release\PangoSharp.dll + + - - - + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/about-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/about-dialog.glade new file mode 100644 index 0000000..a3c5e68 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/about-dialog.glade @@ -0,0 +1,100 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + + + + + + + False + False + 0 + + + + + True + False + vertical + + + + True + True + 0 + + + + + True + False + label + + + False + True + 1 + + + + + True + False + 10 + label + + + False + True + 2 + + + + + button + True + False + False + False + start + 40 + none + http://glade.gnome.org + + + False + True + 3 + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/advanced-download-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/advanced-download-dialog.glade new file mode 100644 index 0000000..e4d4a54 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/advanced-download-dialog.glade @@ -0,0 +1,375 @@ + + + + + + False + dialog + + + False + 10 + 10 + 10 + 10 + vertical + 2 + + + False + end + + + button + True + True + True + + + True + True + 0 + + + + + button + True + True + True + 10 + + + True + True + 1 + + + + + False + False + 0 + + + + + True + True + 10 + + + + True + False + 10 + 10 + 20 + + + True + False + 10 + 10 + label + + + 0 + 0 + + + + + True + False + 10 + label + + + 0 + 1 + + + + + True + True + 10 + True + + + 1 + 0 + + + + + True + True + True + + + 1 + 1 + + + + + checkbutton + True + True + False + start + 10 + True + + + 0 + 2 + 2 + + + + + + + ND_AUTH + True + False + page 1 + + + False + + + + + + True + False + 10 + 10 + 20 + 10 + + + True + False + 10 + label + + + 0 + 0 + + + + + True + False + 10 + label + + + 0 + 1 + + + + + True + False + 10 + label + + + 0 + 2 + + + + + True + False + 10 + label + + + 0 + 3 + + + + + True + False + 10 + label + + + 0 + 4 + + + + + True + False + 10 + 10 + True + + + 1 + 0 + + + + + True + True + 10 + 10 + True + + + 1 + 1 + + + + + True + True + 10 + 10 + True + + + 1 + 2 + + + + + True + True + 10 + 10 + True + + + 1 + 3 + + + + + True + True + 10 + 10 + True + + + 1 + 4 + + + + + + + + + + + 1 + + + + + True + False + page 2 + + + 1 + False + + + + + + True + False + 10 + 10 + 20 + 10 + + + checkbutton + True + True + False + start + 10 + True + + + 0 + 0 + 2 + + + + + True + False + 10 + label + + + 0 + 1 + + + + + True + True + True + + + 1 + 1 + + + + + 2 + + + + + True + False + page 3 + + + 2 + False + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/advanced-download-window.glade b/app/XDM/XDM.Gtk.UI/glade/advanced-download-window.glade new file mode 100644 index 0000000..fc64b1b --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/advanced-download-window.glade @@ -0,0 +1,383 @@ + + + + + + False + + + True + False + vertical + + + True + True + 10 + 10 + 10 + + + + True + False + 10 + 10 + 20 + + + True + False + 10 + 10 + label + + + 0 + 0 + + + + + True + False + 10 + label + + + 0 + 1 + + + + + True + True + 10 + True + + + 1 + 0 + + + + + True + True + True + + + 1 + 1 + + + + + checkbutton + True + True + False + start + 10 + True + + + 0 + 2 + 2 + + + + + + + ND_AUTH + True + False + page 1 + + + False + + + + + + True + False + 10 + 10 + 20 + 10 + + + True + False + 10 + label + + + 0 + 0 + + + + + True + False + 10 + label + + + 0 + 1 + + + + + True + False + 10 + label + + + 0 + 2 + + + + + True + False + 10 + label + + + 0 + 3 + + + + + True + False + 10 + label + + + 0 + 4 + + + + + True + False + 10 + 10 + True + + + 1 + 0 + + + + + True + True + 10 + 10 + True + + + 1 + 1 + + + + + True + True + 10 + 10 + True + + + 1 + 2 + + + + + True + True + 10 + 10 + True + + + 1 + 3 + + + + + True + True + 10 + 10 + True + + + 1 + 4 + + + + + + + + + + + 1 + + + + + True + False + page 2 + + + 1 + False + + + + + + True + False + 10 + 10 + 20 + 10 + + + checkbutton + True + True + False + start + 10 + True + + + 0 + 0 + 2 + + + + + True + False + 10 + label + + + 0 + 1 + + + + + True + True + True + + + 1 + 1 + + + + + 2 + + + + + True + False + page 3 + + + 2 + False + + + + + True + True + 0 + + + + + True + False + 10 + 10 + 10 + + + + + + button + True + True + True + right + + + False + True + end + 1 + + + + + button + True + True + True + 10 + right + + + False + True + end + 2 + + + + + False + True + end + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/batch-download-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/batch-download-dialog.glade new file mode 100644 index 0000000..b04db60 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/batch-download-dialog.glade @@ -0,0 +1,448 @@ + + + + + + 1000000000 + 1 + 10 + + + 1000000000 + 1 + 10 + + + False + + + True + False + 10 + 10 + 10 + 10 + vertical + + + True + True + + + True + False + vertical + + + + True + False + 10 + 10 + 10 + 10 + 10 + 10 + + + True + False + start + 10 + label + True + char + + + 0 + 0 + 3 + + + + + True + False + start + label + + + 0 + 1 + + + + + True + False + start + label + + + 0 + 2 + + + + + True + False + start + label + + + 0 + 3 + + + + + True + False + start + label + + + 0 + 4 + + + + + True + False + start + label + + + 0 + 5 + + + + + True + False + start + label + + + 0 + 6 + + + + + True + False + start + label + + + 0 + 7 + + + + + checkbutton + True + True + False + start + True + + + 0 + 8 + + + + + True + True + True + + + 1 + 1 + 2 + + + + + True + False + start + start + + + 1 + 2 + + + + + True + False + + + True + False + start + start + + + False + True + 0 + + + + + True + True + start + start + adjustment1 + + + False + True + 1 + + + + + 1 + 3 + + + + + True + False + + + True + False + start + start + + + False + True + 0 + + + + + True + True + number + adjustment2 + True + + + False + True + 1 + + + + + 1 + 4 + + + + + True + True + True + False + + + 1 + 5 + 2 + + + + + True + True + True + False + + + 1 + 6 + 2 + + + + + True + True + True + False + + + 1 + 7 + 2 + + + + + True + True + start + number + + + 1 + 8 + + + + + + + + + + + + + + + + + True + True + 0 + + + + + + + True + False + page 1 + + + False + + + + + True + False + 10 + 10 + 10 + 10 + vertical + + + True + False + start + 10 + label + + + False + True + 0 + + + + + True + True + in + + + True + True + + + + + True + True + 1 + + + + + 1 + + + + + True + False + page 2 + + + 1 + False + + + + + True + True + 0 + + + + + True + False + 10 + + + button + True + True + True + + + False + True + end + 0 + + + + + button + True + True + True + 10 + + + False + True + end + 1 + + + + + False + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/category-edit-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/category-edit-dialog.glade new file mode 100644 index 0000000..ad1011a --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/category-edit-dialog.glade @@ -0,0 +1,170 @@ + + + + + + False + dialog + + + False + 10 + 10 + 10 + 10 + vertical + 10 + + + False + end + + + button + True + True + True + 10 + + + True + True + 0 + + + + + button + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + vertical + + + True + False + start + label + + + False + True + 0 + + + + + True + True + + + False + True + 1 + + + + + True + False + start + 10 + label + + + False + True + 2 + + + + + True + True + + + False + True + 3 + + + + + True + False + start + 10 + label + + + False + True + 4 + + + + + True + False + 10 + + + True + True + True + + + False + True + 0 + + + + + ... + True + True + True + + + False + True + 1 + + + + + False + True + 5 + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/credential-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/credential-dialog.glade new file mode 100644 index 0000000..39ea3ef --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/credential-dialog.glade @@ -0,0 +1,126 @@ + + + + + + False + + + True + False + 10 + 10 + 10 + 10 + vertical + + + True + False + start + 10 + label + + + False + True + 0 + + + + + True + False + start + 5 + label + + + False + True + 1 + + + + + True + True + + + False + True + 2 + + + + + True + False + start + 10 + 5 + label + + + False + True + 3 + + + + + True + True + + + False + True + 4 + + + + + True + False + + + button + True + True + True + end + + + False + True + end + 0 + + + + + button + True + True + True + end + 10 + + + False + True + end + 1 + + + + + True + True + 5 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/delete-confirm-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/delete-confirm-dialog.glade new file mode 100644 index 0000000..b2d2530 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/delete-confirm-dialog.glade @@ -0,0 +1,105 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + button + True + True + True + end + 10 + 10 + + + False + True + end + 0 + + + + + button + True + True + True + end + 10 + 10 + + + False + True + end + 1 + + + + + False + False + 0 + + + + + True + False + 10 + 10 + 10 + 10 + vertical + + + True + False + start + 10 + label + + + False + True + 0 + + + + + checkbutton + True + True + False + True + + + False + True + 1 + + + + + False + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/download-complete-window.glade b/app/XDM/XDM.Gtk.UI/glade/download-complete-window.glade new file mode 100644 index 0000000..db0d9b3 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/download-complete-window.glade @@ -0,0 +1,143 @@ + + + + + + False + + + True + False + vertical + + + True + False + + + True + False + start + start + 15 + 15 + 30 + gtk-missing-image + + + False + True + 0 + + + + + True + False + vertical + + + True + False + start + 30 + 10 + label + + + False + True + 0 + + + + + True + False + start + label + + + False + True + 1 + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + 5 + 10 + 10 + + + button + True + True + True + none + http://glade.gnome.org + + + False + True + 0 + + + + + button + True + True + True + + + False + True + end + 1 + + + + + button + True + True + True + True + True + + + False + True + end + 2 + + + + + False + True + 10 + 2 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/download-progress-window.glade b/app/XDM/XDM.Gtk.UI/glade/download-progress-window.glade new file mode 100644 index 0000000..dde080b --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/download-progress-window.glade @@ -0,0 +1,237 @@ + + + + + + False + + + True + False + 10 + 10 + 20 + 10 + vertical + + + True + False + + + True + False + center + start + 10 + drive-removable-media + 6 + + + False + False + 0 + + + + + True + False + vertical + + + True + False + start + start + 10 + label + end + True + + + False + True + 0 + + + + + True + False + start + start + 10 + label + + + False + True + 1 + + + + + True + False + 10 + vertical + + + True + False + + + True + False + start + end + 10 + label + + + False + True + 0 + + + + + True + False + end + end + 20 + 10 + label + + + False + True + end + 1 + + + + + True + True + 0 + + + + + True + False + 20 + + + False + True + 1 + + + + + True + False + + + True + False + start + start + 10 + label + + + False + True + 0 + + + + + True + True + 2 + + + + + True + True + 2 + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + + + button + True + True + True + + + False + True + 0 + + + + + button + True + True + True + + + False + True + end + 1 + + + + + button + True + True + True + 10 + + + False + True + end + 2 + + + + + False + True + 2 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/download-selection-window.glade b/app/XDM/XDM.Gtk.UI/glade/download-selection-window.glade new file mode 100644 index 0000000..4c54933 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/download-selection-window.glade @@ -0,0 +1,164 @@ + + + + + + True + False + + + False + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + checkbutton + True + True + False + True + + + False + True + 0 + + + + + True + True + in + + + True + True + + + + + + + + True + True + 1 + + + + + True + False + 10 + + + True + False + label + + + False + True + 0 + + + + + True + True + + + True + True + 1 + + + + + ... + True + True + True + + + False + True + 2 + + + + + False + True + 2 + + + + + True + False + 10 + + + button + True + True + True + + + False + True + 0 + + + + + button + True + True + True + + + False + True + end + 1 + + + + + True + True + False + True + menu1 + + + + + + False + True + end + 2 + + + + + False + True + 3 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/language-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/language-dialog.glade new file mode 100644 index 0000000..172fa14 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/language-dialog.glade @@ -0,0 +1,108 @@ + + + + + + False + dialog + + + False + 10 + 10 + 10 + 10 + vertical + 2 + + + False + end + + + button + True + True + True + 10 + + + True + True + 0 + + + + + button + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + vertical + 10 + + + True + False + start + label + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + start + label + + + False + True + 2 + + + + + False + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/link-refresh-window.glade b/app/XDM/XDM.Gtk.UI/glade/link-refresh-window.glade new file mode 100644 index 0000000..b9e15d5 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/link-refresh-window.glade @@ -0,0 +1,46 @@ + + + + + + False + + + True + False + 10 + 10 + 10 + 10 + vertical + + + True + False + label + + + True + True + 0 + + + + + button + True + True + True + end + + + False + True + end + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/new-download-window.glade b/app/XDM/XDM.Gtk.UI/glade/new-download-window.glade new file mode 100644 index 0000000..f310d4b --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/new-download-window.glade @@ -0,0 +1,235 @@ + + + + + + True + False + + + False + + + True + False + vertical + + + + True + False + 20 + 20 + 20 + True + True + + + True + False + 10 + 10 + lblAddress + + + 0 + 0 + + + + + True + False + 10 + 10 + lblFile + + + 0 + 1 + + + + + True + False + 10 + lblSaveIn + + + 0 + 2 + + + + + True + True + 10 + True + + + 1 + 0 + + + + + True + True + 10 + True + + + 1 + 1 + + + + + True + False + True + + + 1 + 2 + + + + + True + False + end + 20 + gtk-missing-image + + + 2 + 0 + 2 + + + + + True + False + 20 + label + + + 2 + 2 + + + + + button + True + False + False + False + start + start + none + + + 1 + 3 + + + + + + + + + + + False + True + 0 + + + + + True + False + 10 + 10 + 10 + True + + + button + True + True + True + + + False + True + 0 + + + + + True + False + True + char + + + True + True + 1 + + + + + True + True + False + True + menu1 + + + True + False + label + + + + + False + True + 2 + + + + + button + True + True + True + True + True + 10 + + + False + True + 3 + + + + + False + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/new-queue-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/new-queue-dialog.glade new file mode 100644 index 0000000..edab8da --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/new-queue-dialog.glade @@ -0,0 +1,165 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + + + + + + + False + False + 0 + + + + + True + False + 10 + 10 + 10 + 8 + vertical + + + True + False + start + 5 + label + + + False + True + 0 + + + + + True + True + + + False + True + 1 + + + + + True + False + start + 5 + 5 + label + + + False + True + 2 + + + + + True + True + in + + + True + True + + + + + + + + True + True + 3 + + + + + True + False + 10 + + + checkbutton + True + True + False + True + + + False + True + 0 + + + + + button + True + True + True + + + False + True + end + 1 + + + + + button + True + True + True + 10 + + + False + True + end + 2 + + + + + False + True + 4 + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/new-video-download-window.glade b/app/XDM/XDM.Gtk.UI/glade/new-video-download-window.glade new file mode 100644 index 0000000..850c781 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/new-video-download-window.glade @@ -0,0 +1,207 @@ + + + + + + True + False + + + False + + + True + False + vertical + + + + True + False + 20 + 20 + 20 + True + True + + + True + False + 10 + 10 + lblFile + + + 0 + 0 + + + + + True + True + 10 + True + + + 1 + 0 + + + + + True + False + 10 + lblSaveIn + + + 0 + 1 + + + + + True + False + True + + + 1 + 1 + + + + + True + False + vertical + + + True + False + end + 20 + gtk-missing-image + + + True + True + 0 + + + + + True + False + start + 20 + label + + + True + True + 1 + + + + + 2 + 0 + 2 + + + + + + + + + + + + + + False + True + 0 + + + + + True + False + 10 + 10 + 10 + True + + + button + True + True + True + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + + True + True + False + True + menu1 + + + True + False + label + + + + + False + True + 2 + + + + + button + True + True + True + 10 + + + False + True + 3 + + + + + False + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/password-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/password-dialog.glade new file mode 100644 index 0000000..7731ce5 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/password-dialog.glade @@ -0,0 +1,145 @@ + + + + + + False + dialog + + + False + 10 + 10 + 10 + 10 + vertical + 2 + + + False + end + + + button + True + True + True + 10 + + + True + True + 0 + + + + + button + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + vertical + 10 + + + True + False + start + label + + + False + True + 0 + + + + + True + True + + + False + True + 1 + + + + + True + False + start + label + + + False + True + 2 + + + + + True + True + + + False + True + 3 + + + + + True + False + start + label + + + False + True + 4 + + + + + True + True + False + password + + + False + True + 5 + + + + + False + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/properties-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/properties-dialog.glade new file mode 100644 index 0000000..7db6c31 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/properties-dialog.glade @@ -0,0 +1,292 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + + + + + + + False + False + 0 + + + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + start + label + + + False + True + 0 + + + + + True + True + False + + + False + True + 1 + + + + + True + False + start + label + + + False + True + 2 + + + + + True + True + False + + + False + True + 3 + + + + + True + False + start + label + + + False + True + 4 + + + + + True + True + False + + + False + True + 5 + + + + + + True + False + 10 + + + True + False + start + label + + + 0 + 0 + + + + + True + False + start + label + + + 0 + 1 + + + + + True + False + start + label + + + 0 + 2 + + + + + True + False + start + label + + + 1 + 0 + + + + + True + False + start + label + + + 1 + 1 + + + + + True + False + start + label + + + 1 + 2 + + + + + False + True + 6 + + + + + True + False + start + label + + + False + True + 7 + + + + + True + True + False + + + False + True + 8 + + + + + True + False + start + label + + + False + True + 9 + + + + + True + True + False + + + False + True + 10 + + + + + True + False + start + label + + + False + True + 11 + + + + + True + True + in + + + True + True + False + + + + + True + True + 12 + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/queue-manager-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/queue-manager-dialog.glade new file mode 100644 index 0000000..7e550ce --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/queue-manager-dialog.glade @@ -0,0 +1,672 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + + + + + + + False + False + 0 + + + + + True + False + vertical + + + True + False + 10 + 10 + 10 + + + True + True + 10 + in + + + True + True + + + + + + + + False + True + 0 + + + + + True + True + + + True + False + vertical + + + True + True + 10 + 10 + 10 + in + + + True + True + + + + + + + + True + True + 0 + + + + + True + False + 10 + 10 + 10 + + + button + True + True + True + 10 + + + False + True + 0 + + + + + button + True + True + True + 10 + + + False + True + 1 + + + + + button + True + True + True + 10 + + + False + True + 2 + + + + + button + True + True + True + 10 + + + False + True + 3 + + + + + button + True + True + True + + + False + True + 4 + + + + + False + True + 1 + + + + + + + True + False + page 1 + + + False + + + + + True + False + False + vertical + + + checkbutton + True + True + False + start + 10 + 10 + 10 + 10 + True + + + False + True + 0 + + + + + True + False + 10 + 10 + 10 + 10 + + + True + False + 10 + label + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + 10 + 10 + : + + + False + True + 2 + + + + + True + False + + + False + True + 3 + + + + + True + False + 10 + 10 + : + + + False + True + 4 + + + + + True + False + + + False + True + 5 + + + + + False + True + 1 + + + + + + True + False + start + start + 10 + 10 + 10 + 5 + 10 + True + True + + + checkbutton + True + True + False + True + + + 0 + 0 + + + + + checkbutton + True + True + False + True + + + 1 + 0 + + + + + checkbutton + True + True + False + True + + + 2 + 0 + + + + + checkbutton + True + True + False + True + + + 1 + 1 + + + + + checkbutton + True + True + False + True + + + 2 + 1 + + + + + checkbutton + True + True + False + True + + + 1 + 2 + + + + + checkbutton + True + True + False + True + + + 2 + 2 + + + + + checkbutton + True + True + False + True + + + 1 + 3 + + + + + + + + + + + + + + + + + False + False + 2 + + + + + True + False + 10 + 10 + 10 + 10 + + + True + False + 10 + label + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + 10 + 10 + : + + + False + True + 2 + + + + + True + False + + + False + True + 3 + + + + + True + False + 10 + 10 + : + + + False + True + 4 + + + + + True + False + + + False + True + 5 + + + + + False + True + end + 3 + + + + + 1 + + + + + True + False + page 2 + + + 1 + False + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + 10 + 10 + 10 + 10 + + + button + True + True + True + 10 + + + False + True + 0 + + + + + button + True + True + True + 10 + + + False + True + 1 + + + + + button + True + True + True + 10 + + + False + True + 2 + + + + + button + True + True + True + + + False + True + 3 + + + + + button + True + True + True + + + False + True + end + 4 + + + + + button + True + True + True + 10 + + + False + True + end + 5 + + + + + False + True + 1 + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/queue-selection-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/queue-selection-dialog.glade new file mode 100644 index 0000000..4566af0 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/queue-selection-dialog.glade @@ -0,0 +1,111 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + + + + + + + False + False + 0 + + + + + True + False + 10 + 10 + 10 + 5 + vertical + + + True + True + in + + + True + True + + + + + + + + True + True + 0 + + + + + True + False + 10 + + + button + True + True + True + 10 + + + False + True + end + 0 + + + + + button + True + True + True + + + False + True + end + 1 + + + + + False + True + 1 + + + + + True + True + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/settings-dialog.glade b/app/XDM/XDM.Gtk.UI/glade/settings-dialog.glade new file mode 100644 index 0000000..5e6a35c --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/settings-dialog.glade @@ -0,0 +1,1664 @@ + + + + + + False + dialog + + + False + vertical + 2 + + + False + end + + + button + True + True + True + 5 + 10 + + + True + True + 0 + + + + + button + True + True + True + 10 + 10 + + + True + True + 1 + + + + + False + False + 0 + + + + + True + True + 10 + 10 + left + + + True + True + + + True + False + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + start + 10 + Label1 + + + False + True + 0 + + + + + True + False + start + 10 + True + Label2 + True + + + False + True + 1 + + + + + True + False + start + Label3 + True + + + False + True + 2 + + + + + button + True + False + False + False + start + none + + + False + True + 3 + + + + + + True + False + 10 + 5 + 5 + True + True + + + Google Chrome + True + True + True + + + 0 + 0 + + + + + Mozilla Firefox + True + True + True + + + 1 + 0 + + + + + Microsoft Edge + True + True + True + + + 0 + 1 + + + + + Opera Browser + True + True + True + + + 1 + 1 + + + + + False + True + 4 + + + + + True + False + start + Label4 + True + + + False + True + 5 + + + + + + True + False + 10 + 5 + 5 + True + + + True + False + start + Label5 + + + 0 + 0 + + + + + True + False + start + Label6 + + + 0 + 1 + + + + + True + True + True + False + 30 + + + 1 + 0 + + + + + True + True + True + False + 30 + + + 1 + 1 + + + + + True + True + True + + + 2 + 0 + + + + + True + True + True + + + 2 + 1 + + + + + False + True + 6 + + + + + True + False + start + Label7 + True + + + False + True + 7 + + + + + True + True + 10 + + + False + True + 8 + + + + + BtnDefault1 + True + True + True + start + + + False + False + 9 + + + + + True + False + start + Label8 + True + + + False + True + 10 + + + + + True + True + 10 + + + False + True + 11 + + + + + BtnDefault2 + True + True + True + start + + + False + False + 12 + + + + + True + False + start + Label9 + True + + + False + True + 13 + + + + + True + True + 10 + + + False + True + 14 + + + + + BtnDefault3 + True + True + True + start + + + False + False + 15 + + + + + True + False + 10 + 10 + + + True + False + start + True + Label10 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + KB + + + False + True + 2 + + + + + False + True + 16 + + + + + checkbutton + True + True + False + True + + + False + True + 17 + + + + + checkbutton + True + True + False + True + + + False + True + 18 + + + + + + + + + + + True + False + page 1 + + + False + + + + + True + True + + + True + False + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + start + Label11 + + + False + True + 0 + + + + + ChkShowPrg + True + True + False + True + + + False + True + 1 + + + + + ChkShowComplete + True + True + False + True + + + False + True + 2 + + + + + ChkStartAuto + True + True + False + True + + + False + True + 3 + + + + + ChkOverwrite + True + True + False + True + + + False + True + 4 + + + + + True + False + 10 + 10 + + + True + False + start + True + Label12 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 5 + + + + + True + False + start + Label13 + + + False + True + 6 + + + + + True + False + 10 + 10 + + + True + True + True + + + False + True + 0 + + + + + ... + True + True + True + + + False + True + 1 + + + + + False + True + 7 + + + + + True + False + start + Label14 + + + False + True + 8 + + + + + True + False + 10 + 10 + + + True + True + True + + + False + True + 0 + + + + + ... + True + True + True + + + False + True + 1 + + + + + False + True + 9 + + + + + True + False + 10 + 10 + + + True + False + start + True + Label15 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 10 + + + + + ChkDarkTheme + True + True + False + True + + + False + True + 11 + + + + + ChkAutoCat + True + True + False + True + + + False + True + 12 + + + + + True + False + start + Label16 + + + False + True + 13 + + + + + True + True + 10 + in + 200 + + + True + True + + + + + + + + True + True + 14 + + + + + True + False + 10 + 10 + + + CatDef + True + True + True + + + False + True + end + 0 + + + + + CatDel + True + False + True + True + + + False + True + end + 1 + + + + + CatEdit + True + False + True + True + + + False + True + end + 2 + + + + + CatAdd + True + True + True + + + False + True + end + 3 + + + + + False + True + 15 + + + + + + + + + 1 + + + + + True + False + page 2 + + + 1 + False + + + + + True + True + + + True + False + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + start + Label17 + + + False + True + 0 + + + + + True + False + 10 + 10 + + + True + False + start + True + Label18 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + 10 + 10 + + + True + False + start + True + Label19 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 2 + + + + + True + False + 10 + 10 + + + True + False + start + True + Label20 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False + True + 3 + + + + + True + False + 10 + + + ChkEnableSpeedLimit + True + True + False + True + True + + + False + True + 0 + + + + + True + True + + + False + True + 1 + + + + + False + True + 4 + + + + + + True + False + 10 + 10 + 10 + True + True + + + True + False + start + Label21 + + + 0 + 0 + + + + + True + False + + + 1 + 0 + + + + + True + False + start + Label22 + + + 0 + 1 + + + + + True + False + start + Label23 + + + 0 + 2 + + + + + True + False + start + Label24 + + + 0 + 3 + + + + + True + False + start + Label25 + + + 0 + 4 + + + + + True + False + True + + + 1 + 1 + + + + + True + False + True + digits + + + 1 + 2 + + + + + True + False + True + + + 1 + 3 + + + + + True + False + True + False + password + + + 1 + 4 + + + + + False + True + 5 + + + + + + + + + 2 + + + + + True + False + page 3 + + + 2 + False + + + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + start + Label26 + + + False + True + 0 + + + + + True + True + in + + + True + True + + + + + + + + True + True + 1 + + + + + True + False + 10 + + + button + True + False + True + True + + + False + True + end + 0 + + + + + button + True + False + True + True + + + False + True + end + 1 + + + + + button + True + True + True + + + False + True + end + 2 + + + + + False + True + 2 + + + + + 3 + + + + + True + False + page 4 + + + 3 + False + + + + + True + True + + + True + False + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + start + Label27 + + + False + True + 0 + + + + + checkbutton + True + True + False + True + + + False + True + 1 + + + + + checkbutton + True + True + False + True + + + False + True + 2 + + + + + checkbutton + True + True + False + True + + + False + True + 3 + + + + + True + True + 10 + + + False + True + 4 + + + + + checkbutton + True + True + False + True + + + False + True + 5 + + + + + True + False + start + Label28 + + + False + True + 6 + + + + + True + False + 10 + 10 + + + True + True + True + + + False + True + 0 + + + + + ... + True + True + True + + + False + True + 1 + + + + + False + True + 7 + + + + + True + False + start + Label29 + + + False + True + 8 + + + + + True + True + 10 + + + False + True + 9 + + + + + checkbutton + True + True + False + True + + + False + True + 10 + + + + + True + False + start + Label30 + + + False + True + 11 + + + + + True + False + 10 + 10 + + + True + True + True + + + False + True + 0 + + + + + ... + True + True + True + + + False + True + 1 + + + + + False + True + 12 + + + + + + + + + 4 + + + + + True + False + page 5 + + + 4 + False + + + + + True + True + 10 + 1 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/updater-window.glade b/app/XDM/XDM.Gtk.UI/glade/updater-window.glade new file mode 100644 index 0000000..11994e4 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/updater-window.glade @@ -0,0 +1,59 @@ + + + + + + False + + + True + False + 10 + 10 + 10 + 10 + vertical + 10 + + + True + False + end + label + + + True + True + 0 + + + + + True + False + + + False + True + 1 + + + + + button + True + True + True + end + end + + + True + True + 2 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/glade/video-downloader-window.glade b/app/XDM/XDM.Gtk.UI/glade/video-downloader-window.glade new file mode 100644 index 0000000..a0319de --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/glade/video-downloader-window.glade @@ -0,0 +1,468 @@ + + + + + + True + False + + + False + + + True + False + 10 + 10 + 10 + 10 + vertical + + + False + vertical + + + True + False + start + 5 + label + + + False + True + 0 + + + + + True + False + + + True + True + + + True + True + 0 + + + + + gtk-find + True + True + True + 10 + True + True + + + False + True + end + 1 + + + + + False + True + 1 + + + + + True + False + + + checkbutton + True + True + False + True + + + False + True + 0 + + + + + True + False + + + True + True + 10 + 1 + + + + + False + True + 10 + 2 + + + + + checkbutton + True + True + False + 20 + 5 + True + + + False + True + 3 + + + + + True + False + start + 5 + 5 + label + + + False + True + 4 + + + + + True + True + + + False + True + 5 + + + + + True + False + start + 10 + 5 + label + + + False + True + 6 + + + + + True + True + + + False + True + 7 + + + + + True + True + 0 + + + + + False + vertical + + + True + False + 30 + label + + + False + True + 0 + + + + + button + True + True + True + end + + + False + True + end + 1 + + + + + True + True + 1 + + + + + False + vertical + + + checkbutton + True + True + False + 5 + True + + + False + True + 0 + + + + + True + False + + + True + True + in + + + True + True + 5 + + + + + + + + True + True + 0 + + + + + True + True + 5 + in + + + True + True + + + + + + + + False + True + 1 + + + + + True + True + 1 + + + + + True + False + + + True + False + 10 + 5 + label + + + False + True + 0 + + + + + True + True + 5 + + + True + True + 1 + + + + + ... + True + True + True + 10 + 5 + + + False + True + 2 + + + + + False + True + 2 + + + + + True + False + + + button + True + True + True + 10 + + + False + True + 0 + + + + + button + True + True + True + 10 + 10 + + + False + True + end + 1 + + + + + True + True + False + True + 10 + 10 + menu1 + + + + + + False + True + end + 2 + + + + + False + True + 3 + + + + + True + True + 2 + + + + + False + vertical + + + True + False + center + center + label + True + + + True + True + 0 + + + + + button + True + True + True + end + end + + + False + True + end + 1 + + + + + True + True + 3 + + + + + + diff --git a/app/XDM/XDM.Gtk.UI/images/file-copy-line.svg b/app/XDM/XDM.Gtk.UI/images/file-copy-line.svg new file mode 100644 index 0000000..c4f413b --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/images/file-copy-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/images/xdm-logo.svg b/app/XDM/XDM.Gtk.UI/images/xdm-logo.svg new file mode 100644 index 0000000..5d78067 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/images/xdm-logo.svg @@ -0,0 +1,10 @@ + + + Layer 1 + + + + + + + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/arrow-down-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/arrow-down-line.svg index bb250de..ad9a9d0 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/arrow-down-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/arrow-down-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/check-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/check-line.svg index 236239c..34b1ef9 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/check-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/check-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/delete-bin-7-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/delete-bin-7-line.svg index 3ffc830..f5f105a 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/delete-bin-7-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/delete-bin-7-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/external-link-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/external-link-line.svg index 6d8b1af..4d69488 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/external-link-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/external-link-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-copy-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-copy-line.svg new file mode 100644 index 0000000..09e98c0 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-copy-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-download-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-download-line.svg new file mode 100644 index 0000000..703b7bb --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-download-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-line.svg index c6ff5ce..3ad5428 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/file-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-music-fill.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-music-fill.svg index 2a469ff..8487419 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/file-music-fill.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-music-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-music-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-music-line.svg index 26b465d..bd86900 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/file-music-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-music-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-text-fill.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-text-fill.svg index ba4a06e..024e9b0 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/file-text-fill.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-text-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-text-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-text-line.svg index e6113b0..cc63550 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/file-text-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-text-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/file-zip-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/file-zip-line.svg index 181f54b..978513a 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/file-zip-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/file-zip-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/folder-shared-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/folder-shared-line.svg index c2f0ca6..418aeb2 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/folder-shared-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/folder-shared-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/function-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/function-line.svg index 02d7847..1d9e286 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/function-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/function-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/links-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/links-line.svg index 95a802e..6b37c86 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/links-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/links-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/list-settings-fill.svg b/app/XDM/XDM.Gtk.UI/svg-icons/list-settings-fill.svg new file mode 100644 index 0000000..3bcf44e --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/svg-icons/list-settings-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/menu-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/menu-line.svg index 14770a6..7938137 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/menu-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/menu-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/movie-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/movie-line.svg index e29bd34..af67e54 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/movie-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/movie-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/notification-3-fill.svg b/app/XDM/XDM.Gtk.UI/svg-icons/notification-3-fill.svg new file mode 100644 index 0000000..b983f70 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/svg-icons/notification-3-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/pause-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/pause-line.svg index 08359c6..369260e 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/pause-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/pause-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/play-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/play-line.svg index fb61548..5e28473 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/play-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/play-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/question-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/question-line.svg new file mode 100644 index 0000000..fe54a9d --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/svg-icons/question-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/search-line.svg b/app/XDM/XDM.Gtk.UI/svg-icons/search-line.svg index 0a2a7c4..af716a3 100644 --- a/app/XDM/XDM.Gtk.UI/svg-icons/search-line.svg +++ b/app/XDM/XDM.Gtk.UI/svg-icons/search-line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/XDM/XDM.Gtk.UI/svg-icons/xdm-logo.svg b/app/XDM/XDM.Gtk.UI/svg-icons/xdm-logo.svg new file mode 100644 index 0000000..5d78067 --- /dev/null +++ b/app/XDM/XDM.Gtk.UI/svg-icons/xdm-logo.svg @@ -0,0 +1,10 @@ + + + Layer 1 + + + + + + + \ No newline at end of file diff --git a/app/XDM/XDM.Messaging/NativeMessageSerializer.cs b/app/XDM/XDM.Messaging/NativeMessageSerializer.cs new file mode 100644 index 0000000..28529d4 --- /dev/null +++ b/app/XDM/XDM.Messaging/NativeMessageSerializer.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace BrowserMonitoring +{ + public static class NativeMessageSerializer + { + internal static int MessageSignature = Int32.MaxValue - 1024; + + public static void WriteMessage(Stream pipe, string message, bool withHeader = true) + { + var msgBytes = Encoding.UTF8.GetBytes(message); + WriteMessage(pipe, msgBytes, withHeader); + } + + public static void WriteMessage(Stream pipe, byte[] msgBytes, bool withHeader = true) + { + if (withHeader) + { + pipe.Write(BitConverter.GetBytes(MessageSignature), 0, 4); + } + pipe.Write(BitConverter.GetBytes(msgBytes.Length), 0, 4); + pipe.Write(msgBytes, 0, msgBytes.Length); + pipe.Flush(); + } + + public static byte[] ReadMessageBytes(Stream pipe, bool withHeader = true) + { + var b4 = new byte[4]; + if (withHeader) + { + ReadFully(pipe, b4, 4); + var sig = BitConverter.ToInt32(b4, 0); + if (sig != MessageSignature) + { + throw new IOException("Invalid message signature from XDM"); + } + } + ReadFully(pipe, b4, 4); + var syncLength = BitConverter.ToInt32(b4, 0); + if (syncLength > 32 * 1024 * 1024) + { + throw new ArgumentException($"Message length too long: {syncLength}"); + } + var bytes = new byte[syncLength]; + ReadFully(pipe, bytes, syncLength); + return bytes; + } + + private static void ReadFully(Stream stream, byte[] buf, int bytesToRead) + { + var rem = bytesToRead; + var index = 0; + while (rem > 0) + { + var c = stream.Read(buf, index, rem); + if (c == 0) throw new IOException("Unexpected EOF"); + index += c; + rem -= c; + } + } + } +} diff --git a/app/XDM/BrowserMonitor/RawBrowserMessage.cs b/app/XDM/XDM.Messaging/RawBrowserMessage.cs similarity index 100% rename from app/XDM/BrowserMonitor/RawBrowserMessage.cs rename to app/XDM/XDM.Messaging/RawBrowserMessage.cs diff --git a/app/XDM/XDM.Messaging/RawBrowserMessageEnvelop.cs b/app/XDM/XDM.Messaging/RawBrowserMessageEnvelop.cs new file mode 100644 index 0000000..85cceef --- /dev/null +++ b/app/XDM/XDM.Messaging/RawBrowserMessageEnvelop.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.IO; +using XDM.Messaging; + +namespace BrowserMonitoring +{ + public struct RawBrowserMessageEnvelop + { + public string MessageType { get; set; } + + public RawBrowserMessage Message { get; set; } + + public RawBrowserMessage[] Messages { get; set; } + + public string[] VideoIds { get; set; } + + public string CustomData { get; set; } + + public void Serialize(BinaryWriter w) + { + RawBrowserMessageEnvelopSerializerV1.Serialize(this, w); + } + + public static RawBrowserMessageEnvelop Deserialize(BinaryReader r) + { + var version = r.ReadInt32(); + if (version == 1) + { + return RawBrowserMessageEnvelopSerializerV1.Deserialize(r); + } + if (version == Int32.MaxValue) //custom data + { + var data = StreamHelper.ReadString(r); + return new RawBrowserMessageEnvelop { MessageType = "custom", CustomData = data }; + } + throw new InvalidDataException($"Version ${version} not supported."); + } + } + + internal static class RawBrowserMessageEnvelopSerializerV1 + { + public static void Serialize(RawBrowserMessageEnvelop e, BinaryWriter w) + { + w.Write(1); + w.Write(e.MessageType); + w.Write(e.Message != null); + if (e.Message != null) + { + w.Write(e.Message.Url ?? string.Empty); + w.Write(e.Message.File ?? string.Empty); + w.Write(e.Message.Method ?? string.Empty); + w.Write(e.Message.RequestBody ?? string.Empty); + StreamHelper.WriteStateHeaders(e.Message.RequestHeaders, w); + StreamHelper.WriteStateHeaders(e.Message.ResponseHeaders, w); + StreamHelper.WriteStateCookies(e.Message.Cookies, w); + } + var count = e.VideoIds?.Length ?? 0; + w.Write(count); + if (e.VideoIds != null && e.VideoIds.Length > 0) + { + foreach (var item in e.VideoIds) + { + w.Write(item); + } + } + w.Write(e.Messages != null); + if (e.Messages != null) + { + count = e.Messages.Length; + w.Write(count); + foreach (var message in e.Messages) + { + w.Write(message.Url ?? string.Empty); + w.Write(message.File ?? string.Empty); + w.Write(message.Method ?? string.Empty); + w.Write(message.RequestBody ?? string.Empty); + StreamHelper.WriteStateHeaders(message.RequestHeaders, w); + StreamHelper.WriteStateHeaders(message.ResponseHeaders, w); + StreamHelper.WriteStateCookies(message.Cookies, w); + } + } + } + + public static RawBrowserMessageEnvelop Deserialize(BinaryReader r) + { + var e = new RawBrowserMessageEnvelop { }; + e.MessageType = StreamHelper.ReadString(r); + if (r.ReadBoolean()) + { + e.Message = new(); + e.Message.Url = StreamHelper.ReadString(r); + e.Message.File = StreamHelper.ReadString(r); + e.Message.Method = StreamHelper.ReadString(r); + e.Message.RequestBody = StreamHelper.ReadString(r); + StreamHelper.ReadStateHeaders(r, out Dictionary> dict1); + StreamHelper.ReadStateHeaders(r, out Dictionary> dict2); + StreamHelper.ReadStateCookies(r, out Dictionary dict3); + e.Message.RequestHeaders = dict1; + e.Message.ResponseHeaders = dict2; + e.Message.Cookies = dict3; + } + var count = r.ReadInt32(); + e.VideoIds = new string[count]; + for (int i = 0; i < count; i++) + { + e.VideoIds[i] = r.ReadString(); + } + if (r.ReadBoolean()) + { + count = r.ReadInt32(); + var list = new RawBrowserMessage[count]; + for (int i = 0; i < count; i++) + { + var message = new RawBrowserMessage(); + message.Url = StreamHelper.ReadString(r); + message.File = StreamHelper.ReadString(r); + message.Method = StreamHelper.ReadString(r); + message.RequestBody = StreamHelper.ReadString(r); + StreamHelper.ReadStateHeaders(r, out Dictionary> dict1); + StreamHelper.ReadStateHeaders(r, out Dictionary> dict2); + StreamHelper.ReadStateCookies(r, out Dictionary dict3); + message.RequestHeaders = dict1; + message.ResponseHeaders = dict2; + message.Cookies = dict3; + list[i] = message; + } + e.Messages = list; + } + return e; + } + } +} diff --git a/app/XDM/XDM.Messaging/StreamHelper.cs b/app/XDM/XDM.Messaging/StreamHelper.cs new file mode 100644 index 0000000..285e28d --- /dev/null +++ b/app/XDM/XDM.Messaging/StreamHelper.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace XDM.Messaging +{ + public static class StreamHelper + { + public static string? ReadString(BinaryReader r) + { + var str = r.ReadString(); + if (!string.IsNullOrEmpty(str)) + { + return str; + } + return null; + } + + public static void WriteStateHeaders(Dictionary>? headers, BinaryWriter w) + { + w.Write(headers == null ? 0 : headers.Count); + if (headers != null && headers.Count > 0) + { + foreach (var key in headers.Keys) + { + w.Write(key); + var list = headers[key]; + w.Write(list.Count); + foreach (var item in list) + { + w.Write(item); + } + } + } + } + + public static void ReadStateHeaders(BinaryReader r, out Dictionary> headers) + { + headers = new Dictionary>(); + var count = r.ReadInt32(); + for (var i = 0; i < count; i++) + { + var key = r.ReadString(); + var c = r.ReadInt32(); + var list = new List(c); + for (var k = 0; k < c; k++) + { + list.Add(r.ReadString()); + } + headers[key] = list; + } + } + + public static void WriteStateCookies(Dictionary? cookies, BinaryWriter w) + { + w.Write(cookies == null ? 0 : cookies.Count); + if (cookies != null && cookies.Count > 0) + { + foreach (var key in cookies.Keys) + { + w.Write(key); + w.Write(cookies[key]); + } + } + } + + public static void ReadStateCookies(BinaryReader r, out Dictionary cookies) + { + cookies = new Dictionary(); + var count = r.ReadInt32(); + for (var i = 0; i < count; i++) + { + cookies[r.ReadString()] = r.ReadString(); + } + } + } +} diff --git a/app/XDM/BrowserMonitor/SyncMessage.cs b/app/XDM/XDM.Messaging/SyncMessage.cs similarity index 88% rename from app/XDM/BrowserMonitor/SyncMessage.cs rename to app/XDM/XDM.Messaging/SyncMessage.cs index 006ba4b..1889626 100644 --- a/app/XDM/BrowserMonitor/SyncMessage.cs +++ b/app/XDM/XDM.Messaging/SyncMessage.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; -using XDM.Core.Lib.Util; +using XDM.Messaging; namespace BrowserMonitoring { @@ -62,9 +62,9 @@ namespace BrowserMonitoring { msg.VidList.Add(new VideoItem { - Id = Helpers.ReadString(r), - Info = Helpers.ReadString(r), - Text = Helpers.ReadString(r) + Id = StreamHelper.ReadString(r), + Info = StreamHelper.ReadString(r), + Text = StreamHelper.ReadString(r) }); } return msg; @@ -86,6 +86,10 @@ namespace BrowserMonitoring private static string[] ReadStringArray(BinaryReader r) { var c = r.ReadInt32(); + if (c > 1024) + { + throw new IOException("Too many lines in message: " + c); + } var arr = new string[c]; for (int i = 0; i < c; i++) { diff --git a/app/XDM/XDM.Messaging/XDM.Messaging.projitems b/app/XDM/XDM.Messaging/XDM.Messaging.projitems new file mode 100644 index 0000000..56168ae --- /dev/null +++ b/app/XDM/XDM.Messaging/XDM.Messaging.projitems @@ -0,0 +1,18 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + 417407f5-8dba-474e-8ab7-66f2cc33b777 + + + XDM.Messaging + + + + + + + + + \ No newline at end of file diff --git a/app/XDM/XDM.Messaging/XDM.Messaging.shproj b/app/XDM/XDM.Messaging/XDM.Messaging.shproj new file mode 100644 index 0000000..c4ccdba --- /dev/null +++ b/app/XDM/XDM.Messaging/XDM.Messaging.shproj @@ -0,0 +1,13 @@ + + + + 417407f5-8dba-474e-8ab7-66f2cc33b777 + 14.0 + + + + + + + + diff --git a/app/XDM/XDM.Tests/JsonParsingTest.cs b/app/XDM/XDM.Tests/JsonParsingTest.cs new file mode 100644 index 0000000..702b9f4 --- /dev/null +++ b/app/XDM/XDM.Tests/JsonParsingTest.cs @@ -0,0 +1,188 @@ +using NUnit.Framework; +using Newtonsoft.Json; +using System.IO; +using System; + +namespace XDM.Tests +{ + public class Tests + { + [SetUp] + public void Setup() + { + } + + [Test] + public void DeserializeBrowserMessageJsonSuccess() + { + Test(); + } + + private T? ReadProperty(JsonTextReader reader, string name) + { + if (reader.TokenType == JsonToken.PropertyName && reader.Value.ToString() == name && + reader.Read() && reader.Value != null) + { + return (T)reader.Value; + } + return default(T); + } + + private bool IsObjectStart(JsonTextReader reader, string name) + { + return reader.TokenType == JsonToken.PropertyName && reader.Value.ToString() == name && + reader.Read() && reader.TokenType == JsonToken.StartObject; + } + + private bool IsListStart(JsonTextReader reader, string name) + { + return reader.TokenType == JsonToken.PropertyName && reader.Value.ToString() == name && + reader.Read() && reader.TokenType == JsonToken.StartArray; + } + + private void SkipUnknownParts(JsonTextReader reader) + { + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.StartObject) + { + var n = 1; + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) n--; + if (reader.TokenType == JsonToken.StartObject) n++; + if (n == 0) return; + } + } + else if (reader.TokenType == JsonToken.StartArray) + { + var n = 1; + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) n--; + if (reader.TokenType == JsonToken.StartArray) n++; + if (n == 0) return; + } + } + else if (reader.Value != null) + { + continue; + } + } + } + } + + private void ReadMessageObject(JsonTextReader reader) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + var url = ReadProperty(reader, "url"); + if (url != null) + { + Console.WriteLine("url: {0}", url); + } + if (IsObjectStart(reader, "cookies")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + var cookieName = (string)reader.Value; + if (reader.Read() && reader.TokenType == JsonToken.String) + { + var cookieValue = (string)reader.Value; + Console.WriteLine("cookieName: {0}, cookieValue: {1}", cookieName, cookieValue); + } + } + } + } + + if (IsObjectStart(reader, "responseHeaders"))// && IsListStart(reader, "realUA")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + var headerName = (string)reader.Value; + if (IsListStart(reader, headerName)) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.String) + { + Console.WriteLine("{0}: {1}", headerName, reader.Value); + } + } + } + } + } + } + + if (IsObjectStart(reader, "requestHeaders")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + if (reader.TokenType == JsonToken.PropertyName && reader.Value != null) + { + var headerName = (string)reader.Value; + if (IsListStart(reader, headerName)) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.String) + { + Console.WriteLine("{0}: {1}", headerName, reader.Value); + } + } + } + } + } + } + + SkipUnknownParts(reader); + } + } + + private void Test() + { + var reader = new JsonTextReader(new StreamReader(@"C:\Users\subhro\Desktop\message.json")); + if (reader.Read() && reader.TokenType == JsonToken.StartObject) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndObject) break; + + var messageType = ReadProperty(reader, "messageType"); + if (messageType != null) + { + Console.WriteLine("messageType: {0}", messageType); + } + if (IsObjectStart(reader, "message")) + { + ReadMessageObject(reader); + } + if (IsListStart(reader, "messages")) + { + while (reader.Read()) + { + if (reader.TokenType == JsonToken.EndArray) break; + if (reader.TokenType == JsonToken.StartObject) + { + ReadMessageObject(reader); + } + } + } + SkipUnknownParts(reader); + } + } + } + } +} \ No newline at end of file diff --git a/app/XDM/XDM.Tests/XDM.Tests.csproj b/app/XDM/XDM.Tests/XDM.Tests.csproj new file mode 100644 index 0000000..bb8c3e4 --- /dev/null +++ b/app/XDM/XDM.Tests/XDM.Tests.csproj @@ -0,0 +1,16 @@ + + + + net6.0 + + false + + + + + + + + + + diff --git a/app/XDM/XDM.Win.Installer/ReadMe.txt b/app/XDM/XDM.Win.Installer/ReadMe.txt new file mode 100644 index 0000000..3b508b4 --- /dev/null +++ b/app/XDM/XDM.Win.Installer/ReadMe.txt @@ -0,0 +1 @@ +Please copy ffmpeg-x86.exe and youtube-dl.exe in this directory before running build-installer.bat \ No newline at end of file diff --git a/app/XDM/XDM.Win.Installer/build-installer.bat b/app/XDM/XDM.Win.Installer/build-installer.bat new file mode 100644 index 0000000..d4e667f --- /dev/null +++ b/app/XDM/XDM.Win.Installer/build-installer.bat @@ -0,0 +1,13 @@ +DEL /s /q *.wixobj +DEL /s /q net4.7.2.wxs +RMDIR /S /Q net4.7.2 + +Rem heat dir net3.5 -o net3.5.wxs -scom -frag -srd -sreg -ag -cg NET35 -dr INSTALLFOLDER + +robocopy ..\XDM.Wpf.UI\bin\x86\Release\net4.7.2 net4.7.2 /E + +heat dir net4.7.2 -o net4.7.2.wxs -scom -frag -srd -sreg -gg -cg NET472 -dr INSTALLFOLDER + +candle product.wxs net4.7.2.wxs +light -ext WixUIExtension -ext WixUtilExtension -cultures:en-us product.wixobj net4.7.2.wixobj -b net4.7.2 -out xdmsetup.msi + diff --git a/app/XDM/XDM.Win.Installer/gpl-3.0.rtf b/app/XDM/XDM.Win.Installer/gpl-3.0.rtf new file mode 100644 index 0000000..210e8a3 --- /dev/null +++ b/app/XDM/XDM.Win.Installer/gpl-3.0.rtf @@ -0,0 +1,152 @@ +{\rtf1\ansi\deff0{\fonttbl{\f0 \fswiss Helvetica;}{\f1 Courier;}} +{\colortbl;\red255\green0\blue0;\red0\green0\blue255;} +\widowctrl\hyphauto + +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs28 GNU GENERAL PUBLIC LICENSE\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Version 3, 29 June 2007\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Copyright \u169? 2007 Free Software Foundation, Inc. <{\field{\*\fldinst{HYPERLINK "https://fsf.org/"}}{\fldrslt{\ul +https://fsf.org/ +}}} +>\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs28 Preamble\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The GNU General Public License is a free, copyleft license for software and other kinds of works.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The precise terms and conditions for copying, distribution and modification follow.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs28 TERMS AND CONDITIONS\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 0. Definitions.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \u8220"This License\u8221" refers to version 3 of the GNU General Public License.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \u8220"Copyright\u8221" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \u8220"The Program\u8221" refers to any copyrightable work licensed under this License. Each licensee is addressed as \u8220"you\u8221". \u8220"Licensees\u8221" and \u8220"recipients\u8221" may be individuals or organizations.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 To \u8220"modify\u8221" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a \u8220"modified version\u8221" of the earlier work or a work \u8220"based on\u8221" the earlier work.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A \u8220"covered work\u8221" means either the unmodified Program or a work based on the Program.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 To \u8220"propagate\u8221" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 To \u8220"convey\u8221" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 An interactive user interface displays \u8220"Appropriate Legal Notices\u8221" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 1. Source Code.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The \u8220"source code\u8221" for a work means the preferred form of the work for making modifications to it. \u8220"Object code\u8221" means any non-source form of a work.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A \u8220"Standard Interface\u8221" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The \u8220"System Libraries\u8221" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A \u8220"Major Component\u8221", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The \u8220"Corresponding Source\u8221" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The Corresponding Source for a work in source code form is that same work.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 2. Basic Permissions.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 4. Conveying Verbatim Copies.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 5. Conveying Modified Source Versions.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab a) The work must carry prominent notices stating that you modified it, and giving a relevant date.\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to \u8220"keep intact all notices\u8221".\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.\sa180\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an \u8220"aggregate\u8221" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 6. Conveying Non-Source Forms.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.\sa180\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A \u8220"User Product\u8221" is either (1) a \u8220"consumer product\u8221", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, \u8220"normally used\u8221" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \u8220"Installation Information\u8221" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 7. Additional Terms.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \u8220"Additional permissions\u8221" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab d) Limiting the use for publicity purposes of names of licensors or authors of the material; or\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or\par} +{\pard \ql \f0 \sa0 \li360 \fi-360 \bullet \tx360\tab f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.\sa180\par} +{\pard \ql \f0 \sa180 \li0 \fi0 All other non-permissive additional terms are considered \u8220"further restrictions\u8221" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 8. Termination.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).\par} +{\pard \ql \f0 \sa180 \li0 \fi0 However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 9. Acceptance Not Required for Having Copies.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 10. Automatic Licensing of Downstream Recipients.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 An \u8220"entity transaction\u8221" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 11. Patents.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A \u8220"contributor\u8221" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's \u8220"contributor version\u8221".\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A contributor's \u8220"essential patent claims\u8221" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, \u8220"control\u8221" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 In the following three paragraphs, a \u8220"patent license\u8221" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To \u8220"grant\u8221" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. \u8220"Knowingly relying\u8221" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 A patent license is \u8220"discriminatory\u8221" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 12. No Surrender of Others' Freedom.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 13. Use with the GNU Affero General Public License.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 14. Revised Versions of this License.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License \u8220"or any later version\u8221" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 15. Disclaimer of Warranty.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \u8220"AS IS\u8221" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 16. Limitation of Liability.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs24 17. Interpretation of Sections 15 and 16.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 END OF TERMS AND CONDITIONS\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \b \fs28 How to Apply These Terms to Your New Programs\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the \u8220"copyright\u8221" line and a pointer to where the full notice is found.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \f1 \line + Copyright (C) \line +\line + This program is free software: you can redistribute it and/or modify\line + it under the terms of the GNU General Public License as published by\line + the Free Software Foundation, either version 3 of the License, or\line + (at your option) any later version.\line +\line + This program is distributed in the hope that it will be useful,\line + but WITHOUT ANY WARRANTY; without even the implied warranty of\line + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\line + GNU General Public License for more details.\line +\line + You should have received a copy of the GNU General Public License\line + along with this program. If not, see .\par} +{\pard \ql \f0 \sa180 \li0 \fi0 Also add information on how to contact you by electronic and paper mail.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\par} +{\pard \ql \f0 \sa180 \li0 \fi0 \f1 Copyright (C) \line + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\line + This is free software, and you are welcome to redistribute it\line + under certain conditions; type `show c' for details.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an \u8220"about box\u8221".\par} +{\pard \ql \f0 \sa180 \li0 \fi0 You should also get your employer (if you work as a programmer) or school, if any, to sign a \u8220"copyright disclaimer\u8221" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <{\field{\*\fldinst{HYPERLINK "https://www.gnu.org/licenses/"}}{\fldrslt{\ul +https://www.gnu.org/licenses/ +}}} +>.\par} +{\pard \ql \f0 \sa180 \li0 \fi0 The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <{\field{\*\fldinst{HYPERLINK "https://www.gnu.org/licenses/why-not-lgpl.html"}}{\fldrslt{\ul +https://www.gnu.org/licenses/why-not-lgpl.html +}}} +>.\par} +} diff --git a/app/XDM/XDM.Win.Installer/icon.ico b/app/XDM/XDM.Win.Installer/icon.ico new file mode 100644 index 0000000..96c5be5 Binary files /dev/null and b/app/XDM/XDM.Win.Installer/icon.ico differ diff --git a/app/XDM/XDM.Win.Installer/product.wxs b/app/XDM/XDM.Win.Installer/product.wxs new file mode 100644 index 0000000..3c679b1 --- /dev/null +++ b/app/XDM/XDM.Win.Installer/product.wxs @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + NOT NEWERVERSIONDETECTED + + + + 602)]]> + + + + + + + + + + + WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/XDM/XDM.WinForm.UI/AboutBox.Designer.cs b/app/XDM/XDM.WinForm.UI/AboutBox.Designer.cs deleted file mode 100644 index c3e1793..0000000 --- a/app/XDM/XDM.WinForm.UI/AboutBox.Designer.cs +++ /dev/null @@ -1,207 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class AboutBox - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); - this.labelProductName = new System.Windows.Forms.Label(); - this.labelVersion = new System.Windows.Forms.Label(); - this.labelCopyright = new System.Windows.Forms.Label(); - this.textBoxDescription = new System.Windows.Forms.TextBox(); - this.okButton = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.tableLayoutPanel.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel - // - this.tableLayoutPanel.ColumnCount = 2; - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); - this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); - this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); - this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); - this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); - this.tableLayoutPanel.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel.Controls.Add(this.label2, 0, 4); - this.tableLayoutPanel.Controls.Add(this.linkLabel1, 1, 3); - this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel.Location = new System.Drawing.Point(10, 10); - this.tableLayoutPanel.Name = "tableLayoutPanel"; - this.tableLayoutPanel.RowCount = 6; - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); - this.tableLayoutPanel.Size = new System.Drawing.Size(487, 307); - this.tableLayoutPanel.TabIndex = 0; - // - // labelProductName - // - this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelProductName.Location = new System.Drawing.Point(148, 0); - this.labelProductName.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); - this.labelProductName.MaximumSize = new System.Drawing.Size(0, 20); - this.labelProductName.Name = "labelProductName"; - this.labelProductName.Size = new System.Drawing.Size(336, 20); - this.labelProductName.TabIndex = 19; - this.labelProductName.Text = "Product Name"; - this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // labelVersion - // - this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelVersion.Location = new System.Drawing.Point(148, 30); - this.labelVersion.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); - this.labelVersion.MaximumSize = new System.Drawing.Size(0, 20); - this.labelVersion.Name = "labelVersion"; - this.labelVersion.Size = new System.Drawing.Size(336, 20); - this.labelVersion.TabIndex = 0; - this.labelVersion.Text = "Version"; - this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // labelCopyright - // - this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelCopyright.Location = new System.Drawing.Point(148, 60); - this.labelCopyright.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); - this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 20); - this.labelCopyright.Name = "labelCopyright"; - this.labelCopyright.Size = new System.Drawing.Size(336, 20); - this.labelCopyright.TabIndex = 21; - this.labelCopyright.Text = "Copyright"; - this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBoxDescription - // - this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBoxDescription.Location = new System.Drawing.Point(148, 123); - this.textBoxDescription.Margin = new System.Windows.Forms.Padding(7, 3, 3, 3); - this.textBoxDescription.Multiline = true; - this.textBoxDescription.Name = "textBoxDescription"; - this.textBoxDescription.ReadOnly = true; - this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.textBoxDescription.Size = new System.Drawing.Size(336, 147); - this.textBoxDescription.TabIndex = 23; - this.textBoxDescription.TabStop = false; - this.textBoxDescription.Text = "Description"; - this.textBoxDescription.WordWrap = false; - // - // okButton - // - this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.okButton.Location = new System.Drawing.Point(397, 277); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(87, 27); - this.okButton.TabIndex = 24; - this.okButton.Text = "&OK"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(41)))), ((int)(((byte)(46))))); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.tableLayoutPanel.SetRowSpan(this.label1, 4); - this.label1.Size = new System.Drawing.Size(135, 120); - this.label1.TabIndex = 25; - this.label1.Text = "X T R E M E"; - this.label1.TextAlign = System.Drawing.ContentAlignment.BottomCenter; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(41)))), ((int)(((byte)(46))))); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.ForeColor = System.Drawing.Color.White; - this.label2.Location = new System.Drawing.Point(3, 120); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(135, 153); - this.label2.TabIndex = 26; - this.label2.Text = "DOWNLOAD MANAGER"; - this.label2.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue; - this.linkLabel1.Location = new System.Drawing.Point(148, 90); - this.linkLabel1.Margin = new System.Windows.Forms.Padding(7, 0, 3, 0); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(336, 30); - this.linkLabel1.TabIndex = 27; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "linkLabel1"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // AboutBox - // - this.AcceptButton = this.okButton; - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(507, 327); - this.Controls.Add(this.tableLayoutPanel); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AboutBox"; - this.Padding = new System.Windows.Forms.Padding(10); - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "About XDM"; - this.tableLayoutPanel.ResumeLayout(false); - this.tableLayoutPanel.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; - private System.Windows.Forms.Label labelProductName; - private System.Windows.Forms.Label labelVersion; - private System.Windows.Forms.Label labelCopyright; - private System.Windows.Forms.TextBox textBoxDescription; - private System.Windows.Forms.Button okButton; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.LinkLabel linkLabel1; - } -} diff --git a/app/XDM/XDM.WinForm.UI/AboutBox.cs b/app/XDM/XDM.WinForm.UI/AboutBox.cs deleted file mode 100644 index b530686..0000000 --- a/app/XDM/XDM.WinForm.UI/AboutBox.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Text; -using System.IO; -using System.Linq; -using System.Reflection; - -using System.Windows.Forms; -using XDM.Core.Lib.Util; -using XDMApp; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - partial class AboutBox : Form - { - private PrivateFontCollection fontInstance; - public AboutBox() - { - InitializeComponent(); - this.Text = String.Format("About {0}", "XDM"); - this.labelProductName.Text = "Xtreme Download Manager - 8.0.0 beta"; - this.labelVersion.Text = String.Format("CLR version {0}", Environment.Version); - this.labelCopyright.Text = "Copyright (C) 2021 Subhra Das Gupta"; - this.linkLabel1.Text = "https://xtremedownloadmanager.com"; - this.textBoxDescription.Text = AssemblyDescription; - label1.Padding = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(10), LogicalToDeviceUnits(10), 0); - label2.Padding = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(0), LogicalToDeviceUnits(10), LogicalToDeviceUnits(10)); - - var margin = new Padding(LogicalToDeviceUnits(7), 0, LogicalToDeviceUnits(3), 0); - labelProductName.Margin = labelVersion.Margin = labelCopyright.Margin = - linkLabel1.Margin = textBoxDescription.Margin = margin; - okButton.Margin = new Padding(LogicalToDeviceUnits(3)); - textBoxDescription.Text = File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "gpl-3.0.txt")); - } - - #region Assembly Attribute Accessors - - public string AssemblyTitle - { - get - { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); - if (attributes.Length > 0) - { - AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; - if (titleAttribute.Title != "") - { - return titleAttribute.Title; - } - } - return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); - } - } - - public string AssemblyVersion - { - get - { - return Assembly.GetExecutingAssembly().GetName().Version.ToString(); - } - } - - public string AssemblyDescription - { - get - { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyDescriptionAttribute)attributes[0]).Description; - } - } - - public string AssemblyProduct - { - get - { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyProductAttribute)attributes[0]).Product; - } - } - - public string AssemblyCopyright - { - get - { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; - } - } - - public string AssemblyCompany - { - get - { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCompanyAttribute)attributes[0]).Company; - } - } - #endregion - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Helpers.OpenBrowser("https://xtremedownloadmanager.com/"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/AboutBox.resx b/app/XDM/XDM.WinForm.UI/AboutBox.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/AboutBox.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/AdvancedDialogHelper.cs b/app/XDM/XDM.WinForm.UI/AdvancedDialogHelper.cs deleted file mode 100644 index 3000121..0000000 --- a/app/XDM/XDM.WinForm.UI/AdvancedDialogHelper.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Windows.Forms; -using XDM.Core.Lib.Common; - -namespace XDM.WinForm.UI -{ - internal static class AdvancedDialogHelper - { - internal static void Show( - ref AuthenticationInfo? Authentication, - ref ProxyInfo? Proxy, - ref bool EnableSpeedLimit, - ref int SpeedLimit, - IWin32Window window) - { - using var dlg = new AdvancedDownloadDialog(); - dlg.Authentication = Authentication; - dlg.Proxy = Proxy; - dlg.EnableSpeedLimit = EnableSpeedLimit; - dlg.SpeedLimit = SpeedLimit; - if (dlg.ShowDialog(window) == DialogResult.OK) - { - Authentication = dlg.Authentication; - Proxy = dlg.Proxy; - EnableSpeedLimit = dlg.EnableSpeedLimit; - SpeedLimit = dlg.SpeedLimit; - } - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.Designer.cs b/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.Designer.cs deleted file mode 100644 index d7c7946..0000000 --- a/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.Designer.cs +++ /dev/null @@ -1,471 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class AdvancedDownloadDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.button3 = new System.Windows.Forms.Button(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.speedLimiterView1 = new XDM.WinForm.UI.SpeedLimiterView(); - this.tableLayoutPanel2.SuspendLayout(); - this.panel1.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 3; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.button1, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.button2, 2, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 335); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(563, 57); - this.tableLayoutPanel2.TabIndex = 1; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(391, 13); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(20, 3, 20, 3); - this.button1.Size = new System.Drawing.Size(73, 31); - this.button1.TabIndex = 0; - this.button1.Text = "OK"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(477, 13); - this.button2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3); - this.button2.Size = new System.Drawing.Size(73, 31); - this.button2.TabIndex = 1; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // panel1 - // - this.panel1.Controls.Add(this.tabControl1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Name = "panel1"; - this.panel1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.panel1.Size = new System.Drawing.Size(563, 335); - this.panel1.TabIndex = 2; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Controls.Add(this.tabPage4); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(10, 10); - this.tabControl1.Margin = new System.Windows.Forms.Padding(10); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.Padding = new System.Drawing.Point(10, 5); - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(543, 325); - this.tabControl1.TabIndex = 3; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.tableLayoutPanel1); - this.tabPage1.Location = new System.Drawing.Point(4, 28); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(535, 293); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Authentication"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(529, 287); - this.tableLayoutPanel1.TabIndex = 1; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(15, 15); - this.label1.Margin = new System.Windows.Forms.Padding(5); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(60, 19); - this.label1.TabIndex = 0; - this.label1.Text = "Username"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(15, 44); - this.label2.Margin = new System.Windows.Forms.Padding(5); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(60, 19); - this.label2.TabIndex = 1; - this.label2.Text = "Password"; - // - // textBox1 - // - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(83, 13); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(433, 23); - this.textBox1.TabIndex = 2; - // - // textBox2 - // - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(83, 42); - this.textBox2.Name = "textBox2"; - this.textBox2.PasswordChar = '*'; - this.textBox2.Size = new System.Drawing.Size(433, 23); - this.textBox2.TabIndex = 3; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox1, 2); - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(15, 73); - this.checkBox1.Margin = new System.Windows.Forms.Padding(5); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(499, 19); - this.checkBox1.TabIndex = 4; - this.checkBox1.Text = "Remember authentication for this website"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.tableLayoutPanel3); - this.tabPage2.Location = new System.Drawing.Point(4, 28); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(535, 293); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Proxy"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.ColumnCount = 4; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Controls.Add(this.comboBox1, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.label3, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.label4, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.label5, 0, 2); - this.tableLayoutPanel3.Controls.Add(this.label6, 2, 1); - this.tableLayoutPanel3.Controls.Add(this.label7, 2, 2); - this.tableLayoutPanel3.Controls.Add(this.textBox3, 1, 1); - this.tableLayoutPanel3.Controls.Add(this.textBox4, 3, 1); - this.tableLayoutPanel3.Controls.Add(this.textBox5, 1, 2); - this.tableLayoutPanel3.Controls.Add(this.textBox6, 3, 2); - this.tableLayoutPanel3.Controls.Add(this.button3, 0, 3); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel3.RowCount = 6; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(529, 287); - this.tableLayoutPanel3.TabIndex = 0; - // - // comboBox1 - // - this.tableLayoutPanel3.SetColumnSpan(this.comboBox1, 3); - this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Items.AddRange(new object[] { - "Use Systems proxy settings", - "No Proxy", - "Manual proxy"}); - this.comboBox1.Location = new System.Drawing.Point(116, 13); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(400, 23); - this.comboBox1.TabIndex = 0; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(15, 15); - this.label3.Margin = new System.Windows.Forms.Padding(5); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(81, 15); - this.label3.TabIndex = 1; - this.label3.Text = "Proxy settings"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(15, 44); - this.label4.Margin = new System.Windows.Forms.Padding(5); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(93, 19); - this.label4.TabIndex = 2; - this.label4.Text = "Proxy Host"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.Location = new System.Drawing.Point(15, 73); - this.label5.Margin = new System.Windows.Forms.Padding(5); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(93, 19); - this.label5.TabIndex = 3; - this.label5.Text = "Proxy Username"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Dock = System.Windows.Forms.DockStyle.Fill; - this.label6.Location = new System.Drawing.Point(271, 44); - this.label6.Margin = new System.Windows.Forms.Padding(5); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(90, 19); - this.label6.TabIndex = 4; - this.label6.Text = "Proxy Port"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Dock = System.Windows.Forms.DockStyle.Fill; - this.label7.Location = new System.Drawing.Point(271, 73); - this.label7.Margin = new System.Windows.Forms.Padding(5); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(90, 19); - this.label7.TabIndex = 5; - this.label7.Text = "Proxy Password"; - // - // textBox3 - // - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(116, 42); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(147, 23); - this.textBox3.TabIndex = 6; - // - // textBox4 - // - this.textBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox4.Location = new System.Drawing.Point(369, 42); - this.textBox4.Name = "textBox4"; - this.textBox4.Size = new System.Drawing.Size(147, 23); - this.textBox4.TabIndex = 7; - // - // textBox5 - // - this.textBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox5.Location = new System.Drawing.Point(116, 71); - this.textBox5.Name = "textBox5"; - this.textBox5.Size = new System.Drawing.Size(147, 23); - this.textBox5.TabIndex = 8; - // - // textBox6 - // - this.textBox6.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox6.Location = new System.Drawing.Point(369, 71); - this.textBox6.Name = "textBox6"; - this.textBox6.Size = new System.Drawing.Size(147, 23); - this.textBox6.TabIndex = 9; - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel3.SetColumnSpan(this.button3, 4); - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(13, 100); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(503, 25); - this.button3.TabIndex = 10; - this.button3.Text = "Proxy"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // tabPage4 - // - this.tabPage4.Controls.Add(this.speedLimiterView1); - this.tabPage4.Location = new System.Drawing.Point(4, 28); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.Padding = new System.Windows.Forms.Padding(3); - this.tabPage4.Size = new System.Drawing.Size(535, 293); - this.tabPage4.TabIndex = 3; - this.tabPage4.Text = "Speed limiter"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // speedLimiterView1 - // - this.speedLimiterView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.speedLimiterView1.EnableSpeedLimit = false; - this.speedLimiterView1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.speedLimiterView1.Location = new System.Drawing.Point(3, 3); - this.speedLimiterView1.Name = "speedLimiterView1"; - this.speedLimiterView1.Size = new System.Drawing.Size(529, 287); - this.speedLimiterView1.SpeedLimit = 0; - this.speedLimiterView1.TabIndex = 0; - // - // AdvancedDownloadDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(563, 392); - this.Controls.Add(this.panel1); - this.Controls.Add(this.tableLayoutPanel2); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "AdvancedDownloadDialog"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Advanced Download Dialog"; - this.TopMost = true; - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.panel1.ResumeLayout(false); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - this.tabPage4.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.Button button3; - private SpeedLimiterView speedLimiterView1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.cs b/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.cs deleted file mode 100644 index 1c01ba3..0000000 --- a/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System; -using System.Diagnostics; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class AdvancedDownloadDialog : Form - { - public AuthenticationInfo? Authentication - { - get - { - if (string.IsNullOrEmpty(textBox1.Text)) - { - return null; - } - return new AuthenticationInfo - { - UserName = textBox1.Text, - Password = textBox2.Text - }; - } - set - { - if (value.HasValue) - { - textBox1.Text = value.Value.UserName; - textBox2.Text = value.Value.Password; - } - } - } - - public int SpeedLimit - { - get => this.speedLimiterView1.SpeedLimit; - set => this.speedLimiterView1.SpeedLimit = value; - } - - public bool EnableSpeedLimit - { - get => this.speedLimiterView1.EnableSpeedLimit; - set => this.speedLimiterView1.EnableSpeedLimit = value; - } - - public ProxyInfo? Proxy - { - get - { - if (comboBox1.SelectedIndex == 1) - { - return new ProxyInfo { ProxyType = ProxyType.Direct }; - } - if (comboBox1.SelectedIndex == 0) - { - return new ProxyInfo { ProxyType = ProxyType.System }; - } - if (comboBox1.SelectedIndex == 2 && - !string.IsNullOrEmpty(textBox3.Text) && - Int32.TryParse(textBox4.Text, out _)) - { - return new ProxyInfo - { - ProxyType = ProxyType.Custom, - Host = textBox3.Text, - Port = Int32.Parse(textBox4.Text), - UserName = textBox5.Text, - Password = textBox6.Text - }; - } - return null; - } - set - { - if (value.HasValue) - { - comboBox1.SelectedIndex = (int)(Config.Instance.Proxy?.ProxyType ?? ProxyType.System); - textBox3.Text = Config.Instance.Proxy?.Host; - textBox4.Text = (Config.Instance.Proxy?.Port ?? 0).ToString(); - textBox5.Text = Config.Instance.Proxy?.UserName; - textBox6.Text = Config.Instance.Proxy?.Password; - } - else - { - SetProxy(value ?? Config.Instance.Proxy); - } - } - } - - private void SetProxy(ProxyInfo? proxy) - { - comboBox1.SelectedIndex = (int)(proxy?.ProxyType ?? 0); - textBox3.Text = proxy?.Host; - textBox4.Text = proxy?.Port.ToString(); - textBox5.Text = proxy?.UserName; - textBox6.Text = proxy?.Password; - } - - public AdvancedDownloadDialog() - { - InitializeComponent(); - comboBox1.SelectedIndexChanged += (_, _) => - { - textBox3.Enabled = textBox4.Enabled = textBox5.Enabled - = textBox6.Enabled = comboBox1.SelectedIndex == 2; - }; - textBox4.Validating += (o, e) => - { - if (!Int32.TryParse(textBox4.Text, out _)) - { - MessageBox.Show(TextResource.GetText("MSG_INVALID_PORT")); - e.Cancel = true; - } - }; - - button3.Margin = new Padding(0, LogicalToDeviceUnits(10), 0, LogicalToDeviceUnits(10)); - LoadTexts(); - } - - private void button1_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.OK; - } - - private void button3_Click(object sender, EventArgs e) - { - Helpers.OpenWindowsProxySettings(); - } - - private void button2_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.Cancel; - } - - private void LoadTexts() - { - tabPage1.Text = TextResource.GetText("ND_AUTH"); - tabPage2.Text = TextResource.GetText("DESC_NET4"); - tabPage4.Text = TextResource.GetText("MENU_SPEED_LIMITER"); - - label1.Text = TextResource.GetText("DESC_USER"); - label2.Text = TextResource.GetText("DESC_PASS"); - checkBox1.Text = TextResource.GetText("ND_AUTH_REMEMBER"); - - label3.Text = TextResource.GetText("DESC_NET4"); - label4.Text = TextResource.GetText("PROXY_HOST"); - label5.Text = TextResource.GetText("DESC_NET7"); - label6.Text = TextResource.GetText("PROXY_PORT"); - label7.Text = TextResource.GetText("DESC_NET8"); - button3.Text = TextResource.GetText("ND_SYSTEM_PROXY"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.resx b/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/AdvancedDownloadDialog.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/App.HiDpi.config b/app/XDM/XDM.WinForm.UI/App.HiDpi.config deleted file mode 100644 index 087d81c..0000000 --- a/app/XDM/XDM.WinForm.UI/App.HiDpi.config +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/AppWinPeer.Designer.cs b/app/XDM/XDM.WinForm.UI/AppWinPeer.Designer.cs deleted file mode 100644 index 60c7a93..0000000 --- a/app/XDM/XDM.WinForm.UI/AppWinPeer.Designer.cs +++ /dev/null @@ -1,1316 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class AppWinPeer - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AppWinPeer)); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel3 = new System.Windows.Forms.Panel(); - this.panel6 = new System.Windows.Forms.Panel(); - this.dgCompletedList = new System.Windows.Forms.DataGridView(); - this.CompletedImgCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CompletedNameCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CompletedDateCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CompletedSizeCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dgActiveList = new System.Windows.Forms.DataGridView(); - this.ImgCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.NameCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ActiveDateCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SizeCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.StatusCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.SpeedCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.EtaCol = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.panel5 = new System.Windows.Forms.Panel(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.btnParallel = new System.Windows.Forms.Button(); - this.btnMonitoring = new System.Windows.Forms.Button(); - this.label3 = new System.Windows.Forms.Label(); - this.btnHelp = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.btnMenu = new System.Windows.Forms.Button(); - this.btnOpenFolder = new System.Windows.Forms.Button(); - this.btnOpenFile = new System.Windows.Forms.Button(); - this.btnNew = new System.Windows.Forms.Button(); - this.btnDelete = new System.Windows.Forms.Button(); - this.btnPause = new System.Windows.Forms.Button(); - this.btnResume = new System.Windows.Forms.Button(); - this.panel4 = new System.Windows.Forms.Panel(); - this.panel9 = new System.Windows.Forms.Panel(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.btnSearch = new System.Windows.Forms.Button(); - this.panel2 = new System.Windows.Forms.Panel(); - this.dgCategories = new System.Windows.Forms.DataGridView(); - this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.c12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dgState = new System.Windows.Forms.DataGridView(); - this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.ctxMenuNotifyIcon = new System.Windows.Forms.ContextMenuStrip(this.components); - this.exitMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ctxMenuActiveList = new System.Windows.Forms.ContextMenuStrip(this.components); - this.pauseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.resumeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveAsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.refreshLinkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.restartToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.scheduleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.moveToQueueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.showProgressToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.copyURLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.propertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ctxMenuCompletedList = new System.Windows.Forms.ContextMenuStrip(this.components); - this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteDownloadsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.downloadAgainToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.copyURLToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.copyFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.propertiesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.ctxMainMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.settingsToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.removeFinishedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.importToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exportToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.langToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.browserMonitoringToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.helpAndSupportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.reportAProblemToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.aboutXDMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ctxDownloadMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.newDownloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.videoDownloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.batchDownloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolbarTooltip = new System.Windows.Forms.ToolTip(this.components); - this.tableLayoutPanel4.SuspendLayout(); - this.panel1.SuspendLayout(); - this.panel3.SuspendLayout(); - this.panel6.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dgCompletedList)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.dgActiveList)).BeginInit(); - this.panel5.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.panel4.SuspendLayout(); - this.panel9.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.panel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dgCategories)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.dgState)).BeginInit(); - this.ctxMenuNotifyIcon.SuspendLayout(); - this.ctxMenuActiveList.SuspendLayout(); - this.ctxMenuCompletedList.SuspendLayout(); - this.ctxMainMenu.SuspendLayout(); - this.ctxDownloadMenu.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel4.ColumnCount = 1; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Controls.Add(this.panel1, 0, 1); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.RowCount = 2; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.Size = new System.Drawing.Size(784, 461); - this.tableLayoutPanel4.TabIndex = 23; - // - // panel1 - // - this.panel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel1.Controls.Add(this.panel3); - this.panel1.Controls.Add(this.panel2); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Margin = new System.Windows.Forms.Padding(0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(784, 461); - this.panel1.TabIndex = 22; - // - // panel3 - // - this.panel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); - this.panel3.Controls.Add(this.panel6); - this.panel3.Controls.Add(this.panel5); - this.panel3.Controls.Add(this.tableLayoutPanel1); - this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel3.Location = new System.Drawing.Point(190, 0); - this.panel3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(594, 461); - this.panel3.TabIndex = 6; - // - // panel6 - // - this.panel6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); - this.panel6.Controls.Add(this.dgCompletedList); - this.panel6.Controls.Add(this.dgActiveList); - this.panel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel6.Location = new System.Drawing.Point(0, 44); - this.panel6.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.panel6.Name = "panel6"; - this.panel6.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.panel6.Size = new System.Drawing.Size(594, 381); - this.panel6.TabIndex = 10; - // - // dgCompletedList - // - this.dgCompletedList.AllowUserToAddRows = false; - this.dgCompletedList.AllowUserToDeleteRows = false; - this.dgCompletedList.AllowUserToResizeRows = false; - this.dgCompletedList.BackgroundColor = System.Drawing.Color.White; - this.dgCompletedList.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.dgCompletedList.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal; - this.dgCompletedList.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.Color.DarkGray; - dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5); - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.White; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.DarkGray; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dgCompletedList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; - this.dgCompletedList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgCompletedList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.CompletedImgCol, - this.CompletedNameCol, - this.CompletedDateCol, - this.CompletedSizeCol}); - dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle3.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle3.ForeColor = System.Drawing.Color.DimGray; - dataGridViewCellStyle3.Padding = new System.Windows.Forms.Padding(7); - dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(242)))), ((int)(((byte)(242)))), ((int)(((byte)(242))))); - dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.Black; - dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgCompletedList.DefaultCellStyle = dataGridViewCellStyle3; - this.dgCompletedList.Dock = System.Windows.Forms.DockStyle.Fill; - this.dgCompletedList.EnableHeadersVisualStyles = false; - this.dgCompletedList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(246)))), ((int)(((byte)(246)))), ((int)(((byte)(246))))); - this.dgCompletedList.Location = new System.Drawing.Point(0, 5); - this.dgCompletedList.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.dgCompletedList.Name = "dgCompletedList"; - this.dgCompletedList.RowHeadersVisible = false; - this.dgCompletedList.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - this.dgCompletedList.RowTemplate.Height = 30; - this.dgCompletedList.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.dgCompletedList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dgCompletedList.Size = new System.Drawing.Size(594, 376); - this.dgCompletedList.TabIndex = 6; - // - // CompletedImgCol - // - this.CompletedImgCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.CompletedImgCol.DataPropertyName = "ImgCol"; - this.CompletedImgCol.HeaderText = ""; - this.CompletedImgCol.Name = "CompletedImgCol"; - this.CompletedImgCol.ReadOnly = true; - this.CompletedImgCol.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.CompletedImgCol.Width = 25; - // - // CompletedNameCol - // - this.CompletedNameCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.CompletedNameCol.DataPropertyName = "NameCol"; - this.CompletedNameCol.FillWeight = 80F; - this.CompletedNameCol.HeaderText = "Name"; - this.CompletedNameCol.Name = "CompletedNameCol"; - this.CompletedNameCol.ReadOnly = true; - // - // CompletedDateCol - // - this.CompletedDateCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.CompletedDateCol.DataPropertyName = "DateCol"; - this.CompletedDateCol.FillWeight = 3F; - this.CompletedDateCol.HeaderText = "Date"; - this.CompletedDateCol.MinimumWidth = 50; - this.CompletedDateCol.Name = "CompletedDateCol"; - this.CompletedDateCol.ReadOnly = true; - // - // CompletedSizeCol - // - this.CompletedSizeCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.CompletedSizeCol.DataPropertyName = "SizeCol"; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.CompletedSizeCol.DefaultCellStyle = dataGridViewCellStyle2; - this.CompletedSizeCol.FillWeight = 5F; - this.CompletedSizeCol.HeaderText = "Size"; - this.CompletedSizeCol.MinimumWidth = 50; - this.CompletedSizeCol.Name = "CompletedSizeCol"; - this.CompletedSizeCol.ReadOnly = true; - this.CompletedSizeCol.Resizable = System.Windows.Forms.DataGridViewTriState.False; - // - // dgActiveList - // - this.dgActiveList.AllowUserToAddRows = false; - this.dgActiveList.AllowUserToDeleteRows = false; - this.dgActiveList.AllowUserToResizeRows = false; - this.dgActiveList.BackgroundColor = System.Drawing.Color.White; - this.dgActiveList.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.dgActiveList.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.SingleHorizontal; - this.dgActiveList.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle4.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle4.ForeColor = System.Drawing.Color.DarkGray; - dataGridViewCellStyle4.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5); - dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; - dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.DarkGray; - dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgActiveList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; - this.dgActiveList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgActiveList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ImgCol, - this.NameCol, - this.ActiveDateCol, - this.SizeCol, - this.StatusCol, - this.SpeedCol, - this.EtaCol}); - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle6.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle6.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle6.ForeColor = System.Drawing.Color.DimGray; - dataGridViewCellStyle6.Padding = new System.Windows.Forms.Padding(7); - dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(242)))), ((int)(((byte)(242)))), ((int)(((byte)(242))))); - dataGridViewCellStyle6.SelectionForeColor = System.Drawing.Color.Black; - dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgActiveList.DefaultCellStyle = dataGridViewCellStyle6; - this.dgActiveList.Dock = System.Windows.Forms.DockStyle.Fill; - this.dgActiveList.EnableHeadersVisualStyles = false; - this.dgActiveList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(246)))), ((int)(((byte)(246)))), ((int)(((byte)(246))))); - this.dgActiveList.Location = new System.Drawing.Point(0, 5); - this.dgActiveList.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.dgActiveList.Name = "dgActiveList"; - this.dgActiveList.RowHeadersVisible = false; - this.dgActiveList.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - this.dgActiveList.RowTemplate.Height = 30; - this.dgActiveList.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.dgActiveList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dgActiveList.Size = new System.Drawing.Size(594, 376); - this.dgActiveList.TabIndex = 5; - // - // ImgCol - // - this.ImgCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.None; - this.ImgCol.DataPropertyName = "FileIconText"; - this.ImgCol.HeaderText = ""; - this.ImgCol.Name = "ImgCol"; - this.ImgCol.ReadOnly = true; - this.ImgCol.Resizable = System.Windows.Forms.DataGridViewTriState.False; - this.ImgCol.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.ImgCol.Width = 9; - // - // NameCol - // - this.NameCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.NameCol.DataPropertyName = "Name"; - this.NameCol.FillWeight = 80F; - this.NameCol.HeaderText = "Name"; - this.NameCol.MinimumWidth = 50; - this.NameCol.Name = "NameCol"; - this.NameCol.ReadOnly = true; - // - // ActiveDateCol - // - this.ActiveDateCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.ActiveDateCol.DataPropertyName = "DateAdded"; - this.ActiveDateCol.FillWeight = 2F; - this.ActiveDateCol.HeaderText = "Date"; - this.ActiveDateCol.MinimumWidth = 50; - this.ActiveDateCol.Name = "ActiveDateCol"; - this.ActiveDateCol.ReadOnly = true; - // - // SizeCol - // - this.SizeCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.SizeCol.DataPropertyName = "Size"; - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - this.SizeCol.DefaultCellStyle = dataGridViewCellStyle5; - this.SizeCol.FillWeight = 2F; - this.SizeCol.HeaderText = "Size"; - this.SizeCol.MinimumWidth = 50; - this.SizeCol.Name = "SizeCol"; - this.SizeCol.ReadOnly = true; - this.SizeCol.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.SizeCol.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - // - // StatusCol - // - this.StatusCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.StatusCol.DataPropertyName = "Status"; - this.StatusCol.FillWeight = 2F; - this.StatusCol.HeaderText = "Status"; - this.StatusCol.MinimumWidth = 50; - this.StatusCol.Name = "StatusCol"; - this.StatusCol.ReadOnly = true; - this.StatusCol.Resizable = System.Windows.Forms.DataGridViewTriState.True; - // - // SpeedCol - // - this.SpeedCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.SpeedCol.DataPropertyName = "DownloadSpeed"; - this.SpeedCol.FillWeight = 2F; - this.SpeedCol.HeaderText = "Status"; - this.SpeedCol.MinimumWidth = 50; - this.SpeedCol.Name = "SpeedCol"; - this.SpeedCol.ReadOnly = true; - // - // EtaCol - // - this.EtaCol.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.EtaCol.DataPropertyName = "ETA"; - this.EtaCol.FillWeight = 2F; - this.EtaCol.HeaderText = "ETA"; - this.EtaCol.MinimumWidth = 50; - this.EtaCol.Name = "EtaCol"; - this.EtaCol.ReadOnly = true; - // - // panel5 - // - this.panel5.AutoSize = true; - this.panel5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(235)))), ((int)(((byte)(235))))); - this.panel5.Controls.Add(this.tableLayoutPanel2); - this.panel5.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel5.Location = new System.Drawing.Point(0, 425); - this.panel5.Name = "panel5"; - this.panel5.Padding = new System.Windows.Forms.Padding(0, 1, 0, 0); - this.panel5.Size = new System.Drawing.Size(594, 36); - this.panel5.TabIndex = 1; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel2.ColumnCount = 7; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.btnParallel, 3, 0); - this.tableLayoutPanel2.Controls.Add(this.btnMonitoring, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.label3, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.btnHelp, 5, 0); - this.tableLayoutPanel2.Controls.Add(this.label2, 2, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(594, 35); - this.tableLayoutPanel2.TabIndex = 0; - // - // btnParallel - // - this.btnParallel.AutoSize = true; - this.btnParallel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnParallel.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnParallel.FlatAppearance.BorderSize = 0; - this.btnParallel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnParallel.ForeColor = System.Drawing.Color.DimGray; - this.btnParallel.Location = new System.Drawing.Point(192, 5); - this.btnParallel.Margin = new System.Windows.Forms.Padding(0); - this.btnParallel.Name = "btnParallel"; - this.btnParallel.Size = new System.Drawing.Size(128, 25); - this.btnParallel.TabIndex = 8; - this.btnParallel.Text = "1 download at a time"; - this.btnParallel.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnParallel.UseVisualStyleBackColor = true; - this.btnParallel.Click += new System.EventHandler(this.btnParallel_Click); - // - // btnMonitoring - // - this.btnMonitoring.AutoSize = true; - this.btnMonitoring.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnMonitoring.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnMonitoring.FlatAppearance.BorderSize = 0; - this.btnMonitoring.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnMonitoring.Location = new System.Drawing.Point(117, 5); - this.btnMonitoring.Margin = new System.Windows.Forms.Padding(0); - this.btnMonitoring.Name = "btnMonitoring"; - this.btnMonitoring.Size = new System.Drawing.Size(59, 25); - this.btnMonitoring.TabIndex = 2; - this.btnMonitoring.Text = "button1"; - this.btnMonitoring.UseVisualStyleBackColor = true; - this.btnMonitoring.Click += new System.EventHandler(this.btnMonitoring_Click); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.ForeColor = System.Drawing.Color.DimGray; - this.label3.Location = new System.Drawing.Point(5, 5); - this.label3.Margin = new System.Windows.Forms.Padding(0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(112, 25); - this.label3.TabIndex = 3; - this.label3.Text = "Browser monitoring"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // btnHelp - // - this.btnHelp.AutoSize = true; - this.btnHelp.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnHelp.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnHelp.FlatAppearance.BorderSize = 0; - this.btnHelp.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnHelp.ForeColor = System.Drawing.Color.DimGray; - this.btnHelp.Location = new System.Drawing.Point(480, 5); - this.btnHelp.Margin = new System.Windows.Forms.Padding(0); - this.btnHelp.Name = "btnHelp"; - this.btnHelp.Size = new System.Drawing.Size(109, 25); - this.btnHelp.TabIndex = 6; - this.btnHelp.Text = "Help and support"; - this.btnHelp.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnHelp.UseVisualStyleBackColor = true; - this.btnHelp.Click += new System.EventHandler(this.btnHelp_Click); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(179, 5); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.label2.Size = new System.Drawing.Size(10, 25); - this.label2.TabIndex = 9; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(246)))), ((int)(((byte)(246)))), ((int)(((byte)(246))))); - this.tableLayoutPanel1.ColumnCount = 10; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 150F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.btnMenu, 9, 0); - this.tableLayoutPanel1.Controls.Add(this.btnOpenFolder, 5, 0); - this.tableLayoutPanel1.Controls.Add(this.btnOpenFile, 4, 0); - this.tableLayoutPanel1.Controls.Add(this.btnNew, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.btnDelete, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.btnPause, 3, 0); - this.tableLayoutPanel1.Controls.Add(this.btnResume, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.panel4, 8, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(594, 44); - this.tableLayoutPanel1.TabIndex = 0; - // - // btnMenu - // - this.btnMenu.AutoSize = true; - this.btnMenu.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnMenu.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnMenu.FlatAppearance.BorderSize = 0; - this.btnMenu.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnMenu.ForeColor = System.Drawing.Color.Gray; - this.btnMenu.Location = new System.Drawing.Point(561, 0); - this.btnMenu.Margin = new System.Windows.Forms.Padding(0); - this.btnMenu.Name = "btnMenu"; - this.btnMenu.Padding = new System.Windows.Forms.Padding(5, 8, 5, 8); - this.btnMenu.Size = new System.Drawing.Size(33, 44); - this.btnMenu.TabIndex = 7; - this.btnMenu.Text = "7"; - this.btnMenu.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnMenu.UseVisualStyleBackColor = true; - // - // btnOpenFolder - // - this.btnOpenFolder.AutoSize = true; - this.btnOpenFolder.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnOpenFolder.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnOpenFolder.FlatAppearance.BorderSize = 0; - this.btnOpenFolder.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnOpenFolder.Font = new System.Drawing.Font("Segoe UI", 9.75F); - this.btnOpenFolder.ForeColor = System.Drawing.Color.Gray; - this.btnOpenFolder.Location = new System.Drawing.Point(152, 0); - this.btnOpenFolder.Margin = new System.Windows.Forms.Padding(0); - this.btnOpenFolder.Name = "btnOpenFolder"; - this.btnOpenFolder.Size = new System.Drawing.Size(25, 44); - this.btnOpenFolder.TabIndex = 5; - this.btnOpenFolder.Text = "6"; - this.btnOpenFolder.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnOpenFolder.UseVisualStyleBackColor = true; - // - // btnOpenFile - // - this.btnOpenFile.AutoSize = true; - this.btnOpenFile.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnOpenFile.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnOpenFile.FlatAppearance.BorderSize = 0; - this.btnOpenFile.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnOpenFile.Font = new System.Drawing.Font("Segoe UI", 9.75F); - this.btnOpenFile.ForeColor = System.Drawing.Color.Gray; - this.btnOpenFile.Location = new System.Drawing.Point(127, 0); - this.btnOpenFile.Margin = new System.Windows.Forms.Padding(0); - this.btnOpenFile.Name = "btnOpenFile"; - this.btnOpenFile.Size = new System.Drawing.Size(25, 44); - this.btnOpenFile.TabIndex = 4; - this.btnOpenFile.Text = "5"; - this.btnOpenFile.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnOpenFile.UseVisualStyleBackColor = true; - // - // btnNew - // - this.btnNew.AutoSize = true; - this.btnNew.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnNew.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnNew.FlatAppearance.BorderSize = 0; - this.btnNew.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnNew.Font = new System.Drawing.Font("Segoe UI", 9.75F); - this.btnNew.ForeColor = System.Drawing.Color.Gray; - this.btnNew.Location = new System.Drawing.Point(0, 0); - this.btnNew.Margin = new System.Windows.Forms.Padding(0); - this.btnNew.Name = "btnNew"; - this.btnNew.Padding = new System.Windows.Forms.Padding(4); - this.btnNew.Size = new System.Drawing.Size(52, 44); - this.btnNew.TabIndex = 0; - this.btnNew.Text = "New"; - this.btnNew.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnNew.UseVisualStyleBackColor = true; - // - // btnDelete - // - this.btnDelete.AutoSize = true; - this.btnDelete.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnDelete.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnDelete.FlatAppearance.BorderSize = 0; - this.btnDelete.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnDelete.Font = new System.Drawing.Font("Segoe UI", 9.75F); - this.btnDelete.ForeColor = System.Drawing.Color.Gray; - this.btnDelete.Location = new System.Drawing.Point(52, 0); - this.btnDelete.Margin = new System.Windows.Forms.Padding(0); - this.btnDelete.Name = "btnDelete"; - this.btnDelete.Size = new System.Drawing.Size(25, 44); - this.btnDelete.TabIndex = 1; - this.btnDelete.Text = "2"; - this.btnDelete.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnDelete.UseVisualStyleBackColor = true; - // - // btnPause - // - this.btnPause.AutoSize = true; - this.btnPause.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnPause.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnPause.FlatAppearance.BorderSize = 0; - this.btnPause.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnPause.Font = new System.Drawing.Font("Segoe UI", 9.75F); - this.btnPause.ForeColor = System.Drawing.Color.Gray; - this.btnPause.Location = new System.Drawing.Point(102, 0); - this.btnPause.Margin = new System.Windows.Forms.Padding(0); - this.btnPause.Name = "btnPause"; - this.btnPause.Size = new System.Drawing.Size(25, 44); - this.btnPause.TabIndex = 2; - this.btnPause.Text = "3"; - this.btnPause.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnPause.UseVisualStyleBackColor = true; - // - // btnResume - // - this.btnResume.AutoSize = true; - this.btnResume.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnResume.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnResume.FlatAppearance.BorderSize = 0; - this.btnResume.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnResume.Font = new System.Drawing.Font("Segoe UI", 9.75F); - this.btnResume.ForeColor = System.Drawing.Color.Gray; - this.btnResume.Location = new System.Drawing.Point(77, 0); - this.btnResume.Margin = new System.Windows.Forms.Padding(0); - this.btnResume.Name = "btnResume"; - this.btnResume.Size = new System.Drawing.Size(25, 44); - this.btnResume.TabIndex = 3; - this.btnResume.Text = "4"; - this.btnResume.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText; - this.btnResume.UseVisualStyleBackColor = true; - // - // panel4 - // - this.panel4.AutoSize = true; - this.panel4.Controls.Add(this.panel9); - this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel4.Location = new System.Drawing.Point(411, 0); - this.panel4.Margin = new System.Windows.Forms.Padding(0); - this.panel4.Name = "panel4"; - this.panel4.Padding = new System.Windows.Forms.Padding(0, 5, 2, 5); - this.panel4.Size = new System.Drawing.Size(150, 44); - this.panel4.TabIndex = 8; - // - // panel9 - // - this.panel9.AutoSize = true; - this.panel9.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.panel9.Controls.Add(this.tableLayoutPanel3); - this.panel9.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel9.Location = new System.Drawing.Point(0, 5); - this.panel9.Name = "panel9"; - this.panel9.Padding = new System.Windows.Forms.Padding(1); - this.panel9.Size = new System.Drawing.Size(148, 34); - this.panel9.TabIndex = 0; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.AutoSize = true; - this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel3.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel3.ColumnCount = 2; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.Controls.Add(this.textBox1, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.btnSearch, 1, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(1, 1); - this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(0); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 3; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.00001F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(146, 32); - this.tableLayoutPanel3.TabIndex = 0; - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.ForeColor = System.Drawing.Color.DimGray; - this.textBox1.Location = new System.Drawing.Point(3, 7); - this.textBox1.MaximumSize = new System.Drawing.Size(130, 0); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(111, 16); - this.textBox1.TabIndex = 6; - // - // btnSearch - // - this.btnSearch.AutoSize = true; - this.btnSearch.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnSearch.Dock = System.Windows.Forms.DockStyle.Fill; - this.btnSearch.FlatAppearance.BorderSize = 0; - this.btnSearch.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnSearch.Location = new System.Drawing.Point(120, 3); - this.btnSearch.Name = "btnSearch"; - this.tableLayoutPanel3.SetRowSpan(this.btnSearch, 3); - this.btnSearch.Size = new System.Drawing.Size(23, 26); - this.btnSearch.TabIndex = 5; - this.btnSearch.Text = "8"; - this.btnSearch.UseVisualStyleBackColor = true; - // - // panel2 - // - this.panel2.AutoScroll = true; - this.panel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(29)))), ((int)(((byte)(33)))), ((int)(((byte)(27))))); - this.panel2.Controls.Add(this.dgCategories); - this.panel2.Controls.Add(this.dgState); - this.panel2.Dock = System.Windows.Forms.DockStyle.Left; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(190, 461); - this.panel2.TabIndex = 4; - // - // dgCategories - // - this.dgCategories.AllowUserToAddRows = false; - this.dgCategories.AllowUserToDeleteRows = false; - this.dgCategories.AllowUserToResizeColumns = false; - this.dgCategories.AllowUserToResizeRows = false; - this.dgCategories.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; - this.dgCategories.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; - this.dgCategories.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(41)))), ((int)(((byte)(46))))); - this.dgCategories.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.dgCategories.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - this.dgCategories.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgCategories.ColumnHeadersVisible = false; - this.dgCategories.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Column1, - this.c12}); - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(41)))), ((int)(((byte)(46))))); - dataGridViewCellStyle7.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle7.ForeColor = System.Drawing.Color.Gray; - dataGridViewCellStyle7.Padding = new System.Windows.Forms.Padding(5, 5, 10, 5); - dataGridViewCellStyle7.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(106)))), ((int)(((byte)(182))))); - dataGridViewCellStyle7.SelectionForeColor = System.Drawing.Color.White; - dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgCategories.DefaultCellStyle = dataGridViewCellStyle7; - this.dgCategories.Dock = System.Windows.Forms.DockStyle.Fill; - this.dgCategories.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.dgCategories.Location = new System.Drawing.Point(0, 57); - this.dgCategories.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.dgCategories.MultiSelect = false; - this.dgCategories.Name = "dgCategories"; - this.dgCategories.RowHeadersVisible = false; - this.dgCategories.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - this.dgCategories.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.dgCategories.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dgCategories.Size = new System.Drawing.Size(190, 404); - this.dgCategories.TabIndex = 7; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; - this.Column1.HeaderText = "Column1"; - this.Column1.Name = "Column1"; - this.Column1.Width = 5; - // - // c12 - // - this.c12.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.c12.HeaderText = "Column2"; - this.c12.Name = "c12"; - this.c12.ReadOnly = true; - // - // dgState - // - this.dgState.AllowUserToAddRows = false; - this.dgState.AllowUserToDeleteRows = false; - this.dgState.AllowUserToResizeColumns = false; - this.dgState.AllowUserToResizeRows = false; - this.dgState.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; - this.dgState.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; - this.dgState.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(41)))), ((int)(((byte)(46))))); - this.dgState.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.dgState.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); - dataGridViewCellStyle8.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle8.ForeColor = System.Drawing.Color.LightGray; - dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dgState.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle8; - this.dgState.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dgState.ColumnHeadersVisible = false; - this.dgState.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.dataGridViewTextBoxColumn1, - this.dataGridViewTextBoxColumn2}); - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(36)))), ((int)(((byte)(41)))), ((int)(((byte)(46))))); - dataGridViewCellStyle9.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle9.ForeColor = System.Drawing.Color.Gray; - dataGridViewCellStyle9.Padding = new System.Windows.Forms.Padding(5, 10, 10, 10); - dataGridViewCellStyle9.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(106)))), ((int)(((byte)(182))))); - dataGridViewCellStyle9.SelectionForeColor = System.Drawing.Color.White; - dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgState.DefaultCellStyle = dataGridViewCellStyle9; - this.dgState.Dock = System.Windows.Forms.DockStyle.Top; - this.dgState.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; - this.dgState.Location = new System.Drawing.Point(0, 0); - this.dgState.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.dgState.MultiSelect = false; - this.dgState.Name = "dgState"; - this.dgState.RowHeadersVisible = false; - this.dgState.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; - this.dgState.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.dgState.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dgState.Size = new System.Drawing.Size(190, 57); - this.dgState.TabIndex = 4; - // - // dataGridViewTextBoxColumn1 - // - this.dataGridViewTextBoxColumn1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells; - this.dataGridViewTextBoxColumn1.HeaderText = "Column1"; - this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - this.dataGridViewTextBoxColumn1.Width = 5; - // - // dataGridViewTextBoxColumn2 - // - this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.dataGridViewTextBoxColumn2.HeaderText = "Column2"; - this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - this.dataGridViewTextBoxColumn2.ReadOnly = true; - // - // ctxMenuNotifyIcon - // - this.ctxMenuNotifyIcon.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.exitMenuItem}); - this.ctxMenuNotifyIcon.Name = "notifyIconCtxMenu"; - this.ctxMenuNotifyIcon.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; - this.ctxMenuNotifyIcon.ShowImageMargin = false; - this.ctxMenuNotifyIcon.Size = new System.Drawing.Size(69, 26); - // - // exitMenuItem - // - this.exitMenuItem.Name = "exitMenuItem"; - this.exitMenuItem.Size = new System.Drawing.Size(68, 22); - this.exitMenuItem.Text = "Exit"; - // - // ctxMenuActiveList - // - this.ctxMenuActiveList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.pauseToolStripMenuItem, - this.resumeToolStripMenuItem, - this.deleteToolStripMenuItem, - this.saveAsToolStripMenuItem1, - this.refreshLinkToolStripMenuItem, - this.restartToolStripMenuItem, - this.scheduleToolStripMenuItem, - this.moveToQueueToolStripMenuItem, - this.showProgressToolStripMenuItem, - this.copyURLToolStripMenuItem, - this.propertiesToolStripMenuItem}); - this.ctxMenuActiveList.Name = "ctxMenuActiveList"; - this.ctxMenuActiveList.ShowImageMargin = false; - this.ctxMenuActiveList.Size = new System.Drawing.Size(159, 246); - // - // pauseToolStripMenuItem - // - this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem"; - this.pauseToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.pauseToolStripMenuItem.Text = "Pause"; - // - // resumeToolStripMenuItem - // - this.resumeToolStripMenuItem.Name = "resumeToolStripMenuItem"; - this.resumeToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.resumeToolStripMenuItem.Text = "Resume"; - // - // deleteToolStripMenuItem - // - this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; - this.deleteToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.deleteToolStripMenuItem.Text = "Delete downloads"; - // - // saveAsToolStripMenuItem1 - // - this.saveAsToolStripMenuItem1.Name = "saveAsToolStripMenuItem1"; - this.saveAsToolStripMenuItem1.Size = new System.Drawing.Size(158, 22); - this.saveAsToolStripMenuItem1.Text = "Save As..."; - // - // refreshLinkToolStripMenuItem - // - this.refreshLinkToolStripMenuItem.Name = "refreshLinkToolStripMenuItem"; - this.refreshLinkToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.refreshLinkToolStripMenuItem.Text = "Refresh link"; - // - // restartToolStripMenuItem - // - this.restartToolStripMenuItem.Name = "restartToolStripMenuItem"; - this.restartToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.restartToolStripMenuItem.Text = "Download from start"; - // - // scheduleToolStripMenuItem - // - this.scheduleToolStripMenuItem.Name = "scheduleToolStripMenuItem"; - this.scheduleToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.scheduleToolStripMenuItem.Text = "Schedule"; - this.scheduleToolStripMenuItem.Visible = false; - // - // moveToQueueToolStripMenuItem - // - this.moveToQueueToolStripMenuItem.Name = "moveToQueueToolStripMenuItem"; - this.moveToQueueToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.moveToQueueToolStripMenuItem.Text = "Move to queue"; - this.moveToQueueToolStripMenuItem.Click += new System.EventHandler(this.moveToQueueToolStripMenuItem_Click); - // - // showProgressToolStripMenuItem - // - this.showProgressToolStripMenuItem.Name = "showProgressToolStripMenuItem"; - this.showProgressToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.showProgressToolStripMenuItem.Text = "Show progress"; - // - // copyURLToolStripMenuItem - // - this.copyURLToolStripMenuItem.Name = "copyURLToolStripMenuItem"; - this.copyURLToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.copyURLToolStripMenuItem.Text = "Copy URL"; - // - // propertiesToolStripMenuItem - // - this.propertiesToolStripMenuItem.Name = "propertiesToolStripMenuItem"; - this.propertiesToolStripMenuItem.Size = new System.Drawing.Size(158, 22); - this.propertiesToolStripMenuItem.Text = "Properties"; - // - // ctxMenuCompletedList - // - this.ctxMenuCompletedList.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.openToolStripMenuItem, - this.openFolderToolStripMenuItem, - this.deleteDownloadsToolStripMenuItem, - this.downloadAgainToolStripMenuItem1, - this.copyURLToolStripMenuItem1, - this.copyFileToolStripMenuItem, - this.propertiesToolStripMenuItem1}); - this.ctxMenuCompletedList.Name = "ctxMenuCompletedList"; - this.ctxMenuCompletedList.ShowImageMargin = false; - this.ctxMenuCompletedList.Size = new System.Drawing.Size(144, 158); - // - // openToolStripMenuItem - // - this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.openToolStripMenuItem.Text = "Open"; - // - // openFolderToolStripMenuItem - // - this.openFolderToolStripMenuItem.Name = "openFolderToolStripMenuItem"; - this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.openFolderToolStripMenuItem.Text = "Open folder"; - // - // deleteDownloadsToolStripMenuItem - // - this.deleteDownloadsToolStripMenuItem.Name = "deleteDownloadsToolStripMenuItem"; - this.deleteDownloadsToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.deleteDownloadsToolStripMenuItem.Text = "Delete downloads"; - // - // downloadAgainToolStripMenuItem1 - // - this.downloadAgainToolStripMenuItem1.Name = "downloadAgainToolStripMenuItem1"; - this.downloadAgainToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); - this.downloadAgainToolStripMenuItem1.Text = "Download again"; - // - // copyURLToolStripMenuItem1 - // - this.copyURLToolStripMenuItem1.Name = "copyURLToolStripMenuItem1"; - this.copyURLToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); - this.copyURLToolStripMenuItem1.Text = "Copy URL"; - // - // copyFileToolStripMenuItem - // - this.copyFileToolStripMenuItem.Name = "copyFileToolStripMenuItem"; - this.copyFileToolStripMenuItem.Size = new System.Drawing.Size(143, 22); - this.copyFileToolStripMenuItem.Text = "Copy file"; - // - // propertiesToolStripMenuItem1 - // - this.propertiesToolStripMenuItem1.Name = "propertiesToolStripMenuItem1"; - this.propertiesToolStripMenuItem1.Size = new System.Drawing.Size(143, 22); - this.propertiesToolStripMenuItem1.Text = "Properties"; - // - // ctxMainMenu - // - this.ctxMainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.settingsToolStripMenuItem1, - this.removeFinishedToolStripMenuItem, - this.importToolStripMenuItem, - this.exportToolStripMenuItem1, - this.langToolStripMenuItem1, - this.browserMonitoringToolStripMenuItem, - this.toolStripSeparator1, - this.helpAndSupportToolStripMenuItem, - this.reportAProblemToolStripMenuItem, - this.checkForUpdateToolStripMenuItem, - this.aboutXDMToolStripMenuItem, - this.exitToolStripMenuItem}); - this.ctxMainMenu.Name = "ctxMainMenu"; - this.ctxMainMenu.Size = new System.Drawing.Size(224, 252); - // - // settingsToolStripMenuItem1 - // - this.settingsToolStripMenuItem1.Name = "settingsToolStripMenuItem1"; - this.settingsToolStripMenuItem1.Size = new System.Drawing.Size(223, 22); - this.settingsToolStripMenuItem1.Text = "Settings"; - this.settingsToolStripMenuItem1.Click += new System.EventHandler(this.settingsToolStripMenuItem1_Click); - // - // removeFinishedToolStripMenuItem - // - this.removeFinishedToolStripMenuItem.Name = "removeFinishedToolStripMenuItem"; - this.removeFinishedToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.removeFinishedToolStripMenuItem.Text = "Remove finished downloads"; - this.removeFinishedToolStripMenuItem.Click += new System.EventHandler(this.removeFinishedToolStripMenuItem_Click); - // - // importToolStripMenuItem - // - this.importToolStripMenuItem.Name = "importToolStripMenuItem"; - this.importToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.importToolStripMenuItem.Text = "Import"; - this.importToolStripMenuItem.Click += new System.EventHandler(this.importExportToolStripMenuItem_Click); - // - // exportToolStripMenuItem1 - // - this.exportToolStripMenuItem1.Name = "exportToolStripMenuItem1"; - this.exportToolStripMenuItem1.Size = new System.Drawing.Size(223, 22); - this.exportToolStripMenuItem1.Text = "Export"; - this.exportToolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuItem1_Click); - // - // langToolStripMenuItem1 - // - this.langToolStripMenuItem1.Name = "langToolStripMenuItem1"; - this.langToolStripMenuItem1.Size = new System.Drawing.Size(223, 22); - this.langToolStripMenuItem1.Text = "Language"; - this.langToolStripMenuItem1.Click += new System.EventHandler(this.langToolStripMenuItem1_Click); - // - // browserMonitoringToolStripMenuItem - // - this.browserMonitoringToolStripMenuItem.Name = "browserMonitoringToolStripMenuItem"; - this.browserMonitoringToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.browserMonitoringToolStripMenuItem.Text = "Browser monitoring"; - this.browserMonitoringToolStripMenuItem.Visible = false; - this.browserMonitoringToolStripMenuItem.Click += new System.EventHandler(this.browserMonitoringToolStripMenuItem_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(220, 6); - // - // helpAndSupportToolStripMenuItem - // - this.helpAndSupportToolStripMenuItem.Name = "helpAndSupportToolStripMenuItem"; - this.helpAndSupportToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.helpAndSupportToolStripMenuItem.Text = "Help and support"; - this.helpAndSupportToolStripMenuItem.Click += new System.EventHandler(this.helpAndSupportToolStripMenuItem_Click); - // - // reportAProblemToolStripMenuItem - // - this.reportAProblemToolStripMenuItem.Name = "reportAProblemToolStripMenuItem"; - this.reportAProblemToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.reportAProblemToolStripMenuItem.Text = "Report a problem"; - this.reportAProblemToolStripMenuItem.Click += new System.EventHandler(this.reportAProblemToolStripMenuItem_Click); - // - // checkForUpdateToolStripMenuItem - // - this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem"; - this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.checkForUpdateToolStripMenuItem.Text = "Check for update"; - this.checkForUpdateToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdateToolStripMenuItem_Click); - // - // aboutXDMToolStripMenuItem - // - this.aboutXDMToolStripMenuItem.Name = "aboutXDMToolStripMenuItem"; - this.aboutXDMToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.aboutXDMToolStripMenuItem.Text = "About XDM"; - this.aboutXDMToolStripMenuItem.Click += new System.EventHandler(this.aboutXDMToolStripMenuItem_Click); - // - // exitToolStripMenuItem - // - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(223, 22); - this.exitToolStripMenuItem.Text = "Exit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); - // - // ctxDownloadMenu - // - this.ctxDownloadMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.newDownloadToolStripMenuItem, - this.videoDownloadToolStripMenuItem, - this.batchDownloadToolStripMenuItem}); - this.ctxDownloadMenu.Name = "ctxDownloadMenu"; - this.ctxDownloadMenu.Size = new System.Drawing.Size(161, 70); - // - // newDownloadToolStripMenuItem - // - this.newDownloadToolStripMenuItem.Name = "newDownloadToolStripMenuItem"; - this.newDownloadToolStripMenuItem.Size = new System.Drawing.Size(160, 22); - this.newDownloadToolStripMenuItem.Text = "New download"; - this.newDownloadToolStripMenuItem.Click += new System.EventHandler(this.newDownloadToolStripMenuItem_Click); - // - // videoDownloadToolStripMenuItem - // - this.videoDownloadToolStripMenuItem.Name = "videoDownloadToolStripMenuItem"; - this.videoDownloadToolStripMenuItem.Size = new System.Drawing.Size(160, 22); - this.videoDownloadToolStripMenuItem.Text = "Video download"; - this.videoDownloadToolStripMenuItem.Click += new System.EventHandler(this.videoDownloadToolStripMenuItem_Click); - // - // batchDownloadToolStripMenuItem - // - this.batchDownloadToolStripMenuItem.Name = "batchDownloadToolStripMenuItem"; - this.batchDownloadToolStripMenuItem.Size = new System.Drawing.Size(160, 22); - this.batchDownloadToolStripMenuItem.Text = "Batch download"; - this.batchDownloadToolStripMenuItem.Click += new System.EventHandler(this.batchDownloadToolStripMenuItem_Click); - // - // AppWinPeer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(784, 461); - this.Controls.Add(this.tableLayoutPanel4); - this.DoubleBuffered = true; - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Name = "AppWinPeer"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Xtreme Download Manager - 8.01 ( Beta )"; - this.Load += new System.EventHandler(this.Form2_Load); - this.tableLayoutPanel4.ResumeLayout(false); - this.panel1.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.panel6.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dgCompletedList)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.dgActiveList)).EndInit(); - this.panel5.ResumeLayout(false); - this.panel5.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.panel4.ResumeLayout(false); - this.panel4.PerformLayout(); - this.panel9.ResumeLayout(false); - this.panel9.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - this.panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dgCategories)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.dgState)).EndInit(); - this.ctxMenuNotifyIcon.ResumeLayout(false); - this.ctxMenuActiveList.ResumeLayout(false); - this.ctxMenuCompletedList.ResumeLayout(false); - this.ctxMainMenu.ResumeLayout(false); - this.ctxDownloadMenu.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - private System.Windows.Forms.ToolStripButton toolStripButton2; - private System.Windows.Forms.ToolStripButton toolStripButton3; - private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.DataGridView dgState; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private System.Windows.Forms.DataGridView dgCategories; - private System.Windows.Forms.DataGridViewTextBoxColumn Column1; - private System.Windows.Forms.DataGridViewTextBoxColumn c12; - private System.Windows.Forms.ContextMenuStrip ctxMenuNotifyIcon; - private System.Windows.Forms.ToolStripMenuItem exitMenuItem; - private System.Windows.Forms.ContextMenuStrip ctxMenuActiveList; - private System.Windows.Forms.ToolStripMenuItem pauseToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem resumeToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem refreshLinkToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem moveToQueueToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem showProgressToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyURLToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem propertiesToolStripMenuItem; - private System.Windows.Forms.ContextMenuStrip ctxMenuCompletedList; - private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem openFolderToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem deleteDownloadsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem copyURLToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem copyFileToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem propertiesToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem restartToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem downloadAgainToolStripMenuItem1; - private System.Windows.Forms.ContextMenuStrip ctxMainMenu; - private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem removeFinishedToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem importToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem browserMonitoringToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem helpAndSupportToolStripMenuItem; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem reportAProblemToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem checkForUpdateToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem aboutXDMToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button btnNew; - private System.Windows.Forms.Button btnDelete; - private System.Windows.Forms.Button btnPause; - private System.Windows.Forms.Button btnResume; - private System.Windows.Forms.Button btnOpenFolder; - private System.Windows.Forms.Button btnOpenFile; - private System.Windows.Forms.Button btnMenu; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.Panel panel9; - private System.Windows.Forms.ContextMenuStrip ctxDownloadMenu; - private System.Windows.Forms.ToolStripMenuItem newDownloadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem videoDownloadToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem batchDownloadToolStripMenuItem; - private System.Windows.Forms.ToolTip toolbarTooltip; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Button btnSearch; - private System.Windows.Forms.Panel panel6; - private System.Windows.Forms.DataGridView dgCompletedList; - private System.Windows.Forms.DataGridView dgActiveList; - private System.Windows.Forms.Panel panel5; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Button btnMonitoring; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button btnHelp; - private System.Windows.Forms.ToolStripMenuItem scheduleToolStripMenuItem; - private System.Windows.Forms.Button btnParallel; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.DataGridViewTextBoxColumn CompletedImgCol; - private System.Windows.Forms.DataGridViewTextBoxColumn CompletedNameCol; - private System.Windows.Forms.DataGridViewTextBoxColumn CompletedDateCol; - private System.Windows.Forms.DataGridViewTextBoxColumn CompletedSizeCol; - private System.Windows.Forms.DataGridViewTextBoxColumn ImgCol; - private System.Windows.Forms.DataGridViewTextBoxColumn NameCol; - private System.Windows.Forms.DataGridViewTextBoxColumn ActiveDateCol; - private System.Windows.Forms.DataGridViewTextBoxColumn SizeCol; - private System.Windows.Forms.DataGridViewTextBoxColumn StatusCol; - private System.Windows.Forms.DataGridViewTextBoxColumn SpeedCol; - private System.Windows.Forms.DataGridViewTextBoxColumn EtaCol; - private System.Windows.Forms.ToolStripMenuItem exportToolStripMenuItem1; - private System.Windows.Forms.ToolStripMenuItem langToolStripMenuItem1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/AppWinPeer.cs b/app/XDM/XDM.WinForm.UI/AppWinPeer.cs deleted file mode 100644 index e51c6f1..0000000 --- a/app/XDM/XDM.WinForm.UI/AppWinPeer.cs +++ /dev/null @@ -1,3512 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Drawing.Text; -using System.Linq; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using System.Drawing.Drawing2D; -using XDM.Common.UI; -using TraceLog; -using System.Collections.Specialized; -using XDMApp; -using XDM.Core.Lib.UI; -using Translations; -using XDM.WinForm.UI.FormHelper; -using System.Threading; -using XDM.WinForm.UI.Win32; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class AppWinPeer : Form, IAppWinPeer, IClipboardMonitor - { - public static Color ProgressBackColor = Color.FromArgb(230, 230, 230); - public static Color ProgressForeColor = Color.DodgerBlue; - public static bool AppsUseLightTheme = true; - public static Bitmap? MenuMargin; - - private Font remixIconFont; - private DownloadDB downloadsDB; - private Category? categoryFilter; - private const int WM_NCHITTEST = 0x84; - private const int HTCLIENT = 0x1; - private const int HTCAPTION = 0x2; - private const int HT_CLIENT = 0x1; - private const int HT_CAPTION = 0x2; - public static int WM_NCLBUTTONDOWN = 0xA1; - private bool drag = false; // determine if we should be moving the form - private Point startPoint = new Point(0, 0); // also for the moving - private NotifyIcon trayIcon; - private Font buttonFont; - //private PrivateFontCollection fcIconMoon, fcFontAwesome, fcRemixIcon; - private bool darkMode; - private string scheduledIcon, waitingIcon; - private Font ri16Font, ri14Font, ri12Font, fa16Font, fa10Font; - private string searchText; - public event EventHandler ClipboardChanged; - private IButton newButton, deleteButton, pauseButton, resumeButton, openFileButton, openFolderButton; - private IMenuItem[] menuItems; - private System.Windows.Forms.Timer runAfterShown; - - private IFormColors FormColors; - - public event EventHandler? CategoryChanged; - public event EventHandler? InProgressContextMenuOpening; - public event EventHandler? FinishedContextMenuOpening; - public event EventHandler? SelectionChanged; - public event EventHandler? NewDownloadClicked; - public event EventHandler? YoutubeDLDownloadClicked; - public event EventHandler? BatchDownloadClicked; - public event EventHandler? SettingsClicked; - public event EventHandler? ClearAllFinishedClicked; - public event EventHandler? ExportClicked; - public event EventHandler? ImportClicked; - public event EventHandler? BrowserMonitoringButtonClicked; - public event EventHandler? BrowserMonitoringSettingsClicked; - public event EventHandler? UpdateClicked; - public event EventHandler? HelpClicked; - public event EventHandler? SupportPageClicked; - public event EventHandler? BugReportClicked; - public event EventHandler? CheckForUpdateClicked; - public event EventHandler? SchedulerClicked; - public event EventHandler? MoveToQueueClicked; - - public IMenuItem[] MenuItems { get => menuItems; } - public Dictionary MenuItemMap { get; private set; } - - public AppWinPeer() - { - remixIconFont = new Font(GlobalFontCollection.RiFontInstance.Families[0], 24); - ri16Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 16); //new Font(fcFontAwesome.Families[0], 16); - ri14Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 14); //new Font(fcFontAwesome.Families[0], 16); - ri12Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 12); //new Font(fcFontAwesome.Families[0], 16); - fa16Font = new Font(GlobalFontCollection.FaFontInstance.Families[0], 14); - fa10Font = new Font(GlobalFontCollection.FaFontInstance.Families[0], 10); - scheduledIcon = RemixIcon.GetFontIcon(RemixIcon.ScheduledFileIcon); - waitingIcon = RemixIcon.GetFontIcon(RemixIcon.ScheduledFileIcon); - - this.InitializeComponent(); - - AppsUseLightTheme = !Config.Instance.AllowSystemDarkTheme || !ImmersiveThemeHelper.IsDarkThemeActive(); - MenuMargin = new Bitmap(LogicalToDeviceUnits(16), LogicalToDeviceUnits(16)); - - FormColors = AppsUseLightTheme ? new FormColorsLight() : new FormColorsDark(); - - ProgressBackColor = FormColors.ProgressBarBackColor; - ProgressForeColor = FormColors.ProgressBarForeColor; - - downloadsDB = new(dgActiveList, dgCompletedList); - - this.DoubleBuffered = true; - - var fontAwesomeFont2 = new Font(GlobalFontCollection.ImFontInstance.Families[0], 12); - buttonFont = fontAwesomeFont2; - - panel3.BackColor = panel6.BackColor = FormColors.BorderColor; - - var paddingVar = Math.Max((int)Math.Floor(this.Font.Height * 0.2), 2); - - Shown += (_, _) => - { - runAfterShown = new() { Interval = 1000 }; - runAfterShown.Tick += (x, y) => - { - Helpers.RunGC(); - runAfterShown.Stop(); - runAfterShown.Dispose(); - runAfterShown = null; - }; - runAfterShown.Start(); - }; - - FormClosed += (_, _) => Helpers.RunGC(); - Resize += (_, _) => - { - if (WindowState == FormWindowState.Minimized) Helpers.RunGC(); - }; - - CreateToolbar(); - - CreateTrayIcon(); - - CreateDataGridView(); - - SetupContextMenu(); - - //SetupMainMenu(); - - UpdateParallalismLabel(); - - CreateMenuItems(); - - LayoutMenuItems(); - - if (!IsHandleCreated) - { - this.CreateHandle(); - } - - CreateFooter(); - - label3.Margin = new Padding(LogicalToDeviceUnits(5), 0, LogicalToDeviceUnits(5), 0); - panel6.Padding = new Padding(0, LogicalToDeviceUnits(1), 0, 0); - panel5.Padding = new Padding(0, LogicalToDeviceUnits(1), 0, 0); - panel3.Padding = new Padding(0, LogicalToDeviceUnits(1), 0, 0); - panel4.Padding = new Padding( - LogicalToDeviceUnits(0), - LogicalToDeviceUnits(5), - LogicalToDeviceUnits(2), - LogicalToDeviceUnits(5)); - - if (!AppsUseLightTheme) - { - EnableDarkMode(); - } - - MenuHelper.CustomizeMenuAppearance(ctxMainMenu); - MenuHelper.CustomizeMenuAppearance(ctxDownloadMenu); - MenuHelper.CustomizeMenuAppearance(ctxMenuActiveList); - MenuHelper.CustomizeMenuAppearance(ctxMenuCompletedList); - MenuHelper.CustomizeMenuAppearance(ctxMenuNotifyIcon); - } - - private void CreateFooter() - { - btnMonitoring.Font = this.fa16Font; - btnMonitoring.ForeColor = FormColors.IconColor; - btnMonitoring.Text = RemixIcon.GetFontIcon("f205"); - - btnHelp.Image = CreateToolbarIcon(this.ri12Font, - RemixIcon.GetFontIcon(RemixIcon.HelpIcon), FormColors.IconColor, LogicalToDeviceUnits(10)); - - btnParallel.Image = CreateToolbarIcon(this.ri12Font, - RemixIcon.GetFontIcon(RemixIcon.SettingsIcon), FormColors.IconColor, LogicalToDeviceUnits(10)); - - label3.ForeColor = btnParallel.ForeColor = btnHelp.ForeColor = FormColors.FooterForeColor; - panel5.BackColor = FormColors.BorderColor; - tableLayoutPanel2.BackColor = FormColors.FooterBackColor; - - ButtonHelper.SetFlatStyle(this.btnParallel, FormColors); - ButtonHelper.SetFlatStyle(this.btnHelp, FormColors); - ButtonHelper.SetFlatStyle(this.btnMonitoring, FormColors); - } - - private void CreateToolbar() - { - tableLayoutPanel1.BackColor = FormColors.ToolbarBackColor; - ButtonHelper.ParentBackColor = tableLayoutPanel1.BackColor; - var toolbarImageFont = this.ri12Font; - var fg1 = FormColors.ToolbarButtonForeColor; - var fg2 = FormColors.ToolbarButtonDisabledForeColor; - - this.btnNew.ForeColor = fg1; - ButtonHelper.SetFlatStyle(this.btnNew, FormColors); - this.btnNew.Image = CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.LinkIcon), - fg1, 2); - //Log.Debug("Height1: " + LogicalToDeviceUnits(3) + " height2: " + ((Math.Ceiling(btnNew.Image.Height * 0.5)))); - //var buttonPadding = new Padding(LogicalToDeviceUnits(3)); - var height = Math.Max((int)(Math.Ceiling(btnNew.Image.Height * 0.5)), LogicalToDeviceUnits(3)); - var buttonPadding = new Padding(LogicalToDeviceUnits(3), height, LogicalToDeviceUnits(3), height); - - ButtonHelper.ButtonStateIcons = new() - { - [this.btnDelete] = (ImgEnabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.RemoveIcon), - fg1, 2), - ImgDisabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.RemoveIcon), - fg2, 2) - ), - [this.btnOpenFolder] = (ImgEnabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.FolderOpenIcon), - fg1, 2), - ImgDisabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.FolderOpenIcon), - fg2, 2) - ), - [this.btnResume] = (ImgEnabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.ResumeIcon), - fg1, 2), - ImgDisabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.ResumeIcon), - fg2, 2) - ), - [this.btnOpenFile] = (ImgEnabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.FileOpenIcon), - fg1, 2), - ImgDisabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.FileOpenIcon), - fg2, 2) - ), - [this.btnPause] = (ImgEnabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.PauseIcon), - fg1, 2), - ImgDisabled: - CreateToolbarIcon(toolbarImageFont, - RemixIcon.GetFontIcon(RemixIcon.PauseIcon), - fg2, 2) - ) - }; - - //this.btnDelete.Font = new Font(fontCollection5.Families[0], 12); // - this.btnDelete.Image = ButtonHelper.ButtonStateIcons[this.btnDelete].ImgEnabled; - this.btnDelete.Padding = buttonPadding; - this.btnDelete.ForeColor = fg1;//Color.FromArgb(190, 190, 190); // - this.btnDelete.Text = "Delete";//((char)Int32.Parse("f1f8"/*RemixIcon.RemoveIcon*//*"ec28"*//*"eb99"*/, System.Globalization.NumberStyles.HexNumber)).ToString();//((char)Int32.Parse("f1f8", System.Globalization.NumberStyles.HexNumber)).ToString(); - - //this.btnOpenFolder.Font = new Font(fontCollection5.Families[0], 12); // - this.btnOpenFolder.ForeColor = fg1;//Color.FromArgb(190, 190, 190); // - this.btnOpenFolder.Image = ButtonHelper.ButtonStateIcons[this.btnOpenFolder].ImgEnabled; - this.btnOpenFolder.Padding = buttonPadding; - this.btnOpenFolder.Text = "Open folder"; - - //this.btnOpenFile.Font = new Font(fontCollection5.Families[0], 12); // - this.btnOpenFile.ForeColor = fg1;// Color.FromArgb(190, 190, 190); // - this.btnOpenFile.Image = ButtonHelper.ButtonStateIcons[this.btnOpenFile].ImgEnabled; - this.btnOpenFile.Padding = buttonPadding; - this.btnOpenFile.Text = "Open file"; - - //this.btnResume.Font = new Font(fontCollection5.Families[0], 12); // - this.btnResume.Image = ButtonHelper.ButtonStateIcons[this.btnResume].ImgEnabled; - this.btnResume.Padding = buttonPadding; - this.btnResume.ForeColor = fg1;// Color.FromArgb(190, 190, 190); // - this.btnResume.Text = "Resume"; - - //this.btnPause.Font = new Font(fontCollection5.Families[0], 12); // - this.btnPause.ForeColor = fg1;//Color.FromArgb(190, 190, 190); // - this.btnPause.Text = "Pause"; - this.btnPause.Image = ButtonHelper.ButtonStateIcons[this.btnPause].ImgEnabled; - this.btnPause.Padding = buttonPadding; - - this.btnMenu.Font = toolbarImageFont; // - this.btnMenu.ForeColor = fg1;//Color.FromArgb(190, 190, 190); // - this.btnMenu.Text = RemixIcon.GetFontIcon(RemixIcon.MenuIcon);//((char)Int32.Parse("f0c9"/*RemixIcon.MenuIcon*/, System.Globalization.NumberStyles.HexNumber)).ToString();//((char)Int32.Parse("f04c", System.Globalization.NumberStyles.HexNumber)).ToString(); - - ButtonHelper.SetFlatStyle(btnMenu, FormColors); - - this.btnSearch.Font = fa10Font; // - this.btnSearch.Padding = new Padding(0); - this.btnSearch.ForeColor = FormColors.SearchButtonColor;//Color.FromArgb(190, 190, 190); // - this.btnSearch.Text = ((char)Int32.Parse("f002"/*RemixIcon.SearchIcon*/, System.Globalization.NumberStyles.HexNumber)).ToString();//((char)Int32.Parse("f04c", System.Globalization.NumberStyles.HexNumber)).ToString(); - - btnNew.Tag = "enabled"; - - newButton = new ButtonWrapper(this.btnNew, FormColors); - deleteButton = new ButtonWrapper(this.btnDelete, FormColors); - pauseButton = new ButtonWrapper(this.btnPause, FormColors); - resumeButton = new ButtonWrapper(this.btnResume, FormColors); - openFileButton = new ButtonWrapper(this.btnOpenFile, FormColors); - openFolderButton = new ButtonWrapper(this.btnOpenFolder, FormColors); - - this.btnSearch.Click += (_, _) => - { - Search(); - }; - - ButtonHelper.SetFlatStyle(btnSearch, FormColors); - - this.btnMenu.Click += (a, b) => - { - ctxMainMenu.Show(btnMenu, new Point(btnMenu.Width - ctxMainMenu.Width, btnMenu.Height)); - }; - -#if !NET5_0_OR_GREATER - textBox1.HandleCreated += (s, e) => - { - SendMessage(textBox1.Handle, EM_SETCUEBANNER, 0, TextResource.GetText("LBL_SEARCH") ?? "Search"); - }; -#endif - - textBox1.BackColor = FormColors.TextBackColor; - textBox1.ForeColor = FormColors.TextForeColor; - - panel4.BackColor = FormColors.ToolbarBackColor; - panel9.BackColor = FormColors.BorderColor; - tableLayoutPanel3.BackColor = FormColors.TextBackColor; - btnSearch.BackColor = FormColors.TextBackColor; - btnSearch.ForeColor = FormColors.SearchButtonColor; - - textBox1.Margin = new Padding(LogicalToDeviceUnits(3), 0, 0, 0); - tableLayoutPanel3.Padding = new Padding(LogicalToDeviceUnits(3), 0, 0, 0); - panel9.Padding = new Padding(LogicalToDeviceUnits(1)); - - btnNew.Padding = new Padding(LogicalToDeviceUnits(6)); - textBox1.Margin = new Padding(LogicalToDeviceUnits(3)); - btnSearch.Margin = new Padding(LogicalToDeviceUnits(3)); - - btnMenu.Padding = new Padding( - LogicalToDeviceUnits(5), - LogicalToDeviceUnits(8), - LogicalToDeviceUnits(5), - LogicalToDeviceUnits(8)); - tableLayoutPanel2.Padding = new Padding(LogicalToDeviceUnits(5)); - } - - private void StyleDataGridView(DataGridView dataGridView, bool inProgress) - { - //var dgvType = dataGridView.GetType(); - //var pi = dgvType.GetProperty("DoubleBuffered", - // BindingFlags.Instance | BindingFlags.NonPublic); - //pi?.SetValue(dataGridView, true, null); - - var padding = new Padding(LogicalToDeviceUnits(5)); - var headerPadding = new Padding(LogicalToDeviceUnits(5));//, LogicalToDeviceUnits(5), 0, LogicalToDeviceUnits(5)); - - dataGridView.ColumnHeadersDefaultCellStyle.Padding = headerPadding;// new Padding(0, LogicalToDeviceUnits(10), 0, LogicalToDeviceUnits(10)); - //dataGridView.DefaultCellStyle.Padding = padding; - dataGridView.Columns[0].DefaultCellStyle.Padding = new Padding(LogicalToDeviceUnits(1)); - dataGridView.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; - // dataGridView.Columns[0].DefaultCellStyle.BackColor = Color.Red; - dataGridView.Columns[0].DefaultCellStyle.Font = ri16Font; - - dataGridView.Columns[1].DefaultCellStyle.Padding = new Padding(LogicalToDeviceUnits(1)); - - dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.None; - - //var col = dataGridView.Columns[0]; - //col.DefaultCellStyle.Font = /*inProgress ? fa16Font :*/ ri16Font; - ////dataGridView.Columns[1].DefaultCellStyle.Padding = new Padding(LogicalToDeviceUnits(0), LogicalToDeviceUnits(4), - //// LogicalToDeviceUnits(2), LogicalToDeviceUnits(4)); - var sizeCol = dataGridView.Columns[inProgress ? "SizeCol" : "CompletedSizeCol"]; - sizeCol.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; - sizeCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; - //if (!inProgress) - //{ - // sizeCol.DefaultCellStyle.Padding = new Padding(LogicalToDeviceUnits(4), LogicalToDeviceUnits(4), - // LogicalToDeviceUnits(6), LogicalToDeviceUnits(4)); - // sizeCol.HeaderCell.Style.Padding = new Padding(LogicalToDeviceUnits(4), LogicalToDeviceUnits(4), - // LogicalToDeviceUnits(6), LogicalToDeviceUnits(4)); - //} - if (inProgress) - { - sizeCol.SortMode = DataGridViewColumnSortMode.NotSortable; - } - //if (inProgress) - //{ - // //dataGridView.CellFormatting += (a, b) => - // //{ - // // if (b.ColumnIndex == 3) - // // { - // // long sz = (long)b.Value; - // // b.Value = sz > 0 ? Helpers.FormatSize(sz) : string.Empty; - // // } - // // if (b.ColumnIndex == 2) - // // { - // // var dt = (DateTime)b.Value; - // // b.Value = dt.ToShortDateString(); - // // } - // // if (b.ColumnIndex == 6) - // // { - // // var rowIndex = b.RowIndex; - // // try - // // { - // // var ent = this.downloadsDB.InProgressItems3[rowIndex]; - // // var text = Helpers.GenerateStatusText(ent.DownloadEntry); - // // b.Value = text; - // // } - // // catch { } - // // } - // //}; - //} - - if (inProgress) - { - dataGridView.CellMouseEnter += (a, b) => - { - if (b.ColumnIndex == 0) - { - var rowIndex = b.RowIndex; - try - { - var ent = this.downloadsDB.InProgressItems[rowIndex]; - dataGridView.Rows[rowIndex].Cells[0].ToolTipText = ent.Status.ToString(); - } - catch { } - } - - }; - } - - dataGridView.MouseUp += (o, e) => - { - if (dataGridView.HitTest(e.X, e.Y) == DataGridView.HitTestInfo.Nowhere) - { - dataGridView.ClearSelection(); - } - }; - - dataGridView.DefaultCellStyle.BackColor = FormColors.DataGridViewBackColor; - dataGridView.DefaultCellStyle.ForeColor = FormColors.DataGridViewForeColor; - dataGridView.DefaultCellStyle.SelectionForeColor = FormColors.DataGridViewSelectionForeColor; - dataGridView.DefaultCellStyle.SelectionBackColor = FormColors.DataGridViewSelectionBackColor; - dataGridView.DefaultCellStyle.ForeColor = FormColors.DataGridViewForeColor; - dataGridView.ColumnHeadersDefaultCellStyle.BackColor = FormColors.DataGridViewBackColor; - dataGridView.ColumnHeadersDefaultCellStyle.ForeColor = FormColors.DataGridViewHeaderForeColor; - - dataGridView.Columns[0].DefaultCellStyle.ForeColor = FormColors.IconColor; - dataGridView.Columns[0].DefaultCellStyle.SelectionForeColor = FormColors.IconColor; - - dataGridView.BackgroundColor = FormColors.DataGridViewBackColor; - } - - private void Search() - { - searchText = textBox1.Text; - var category = IsInProgressViewSelected ? null : (Category?)dgCategories.SelectedRows[0].Cells[1].Value; - if (IsInProgressViewSelected) - { - this.downloadsDB.InProgressItems.UpdateView(searchText); - this.dgActiveList.RowCount = 0; - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Refresh(); - this.dgActiveList.ClearSelection(); - } - else - { - this.downloadsDB.FinishedItems.UpdateView(searchText, category); - this.dgCompletedList.RowCount = 0; - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Refresh(); - this.dgCompletedList.ClearSelection(); - } - } - - private void CreateDataGridView() - { - var h12 = Math.Max(ri16Font.Height, dgCompletedList.DefaultCellStyle.Font.Height) + LogicalToDeviceUnits(12); - var h22 = Math.Max(ri16Font.Height, dgActiveList.DefaultCellStyle.Font.Height) + LogicalToDeviceUnits(12); - var h = Math.Max(h12, h22); - dgCompletedList.RowTemplate.Height = h;// Math.Max(ri16Font.Height, dgCompletedList.DefaultCellStyle.Font.Height) + LogicalToDeviceUnits(12); - dgActiveList.RowTemplate.Height = h;// Math.Max(ri16Font.Height, dgActiveList.DefaultCellStyle.Font.Height) + LogicalToDeviceUnits(12); - - dgActiveList.Columns.Insert(4, new DataGridViewProgressColumn(LogicalToDeviceUnits(1)) - { - Width = LogicalToDeviceUnits(50), - Name = "PrgCol", - HeaderText = "%", - DataPropertyName = "Progress", - Resizable = DataGridViewTriState.True, - ReadOnly = true, - AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, - ScaleFactor = LogicalToDeviceUnits(1), - FillWeight = 2, - MinimumWidth = LogicalToDeviceUnits(50) - }); - - StyleDataGridView(dgActiveList, true); - StyleDataGridView(dgCompletedList, false); - - Log.Debug("Columns creating"); - - this.dgCompletedList.Columns["CompletedImgCol"].Width = LogicalToDeviceUnits(40); - this.dgCompletedList.Columns["CompletedNameCol"].MinimumWidth = LogicalToDeviceUnits(300); - this.dgCompletedList.Columns["CompletedNameCol"].FillWeight = 96; - this.dgCompletedList.Columns["CompletedDateCol"].MinimumWidth = LogicalToDeviceUnits(100); - this.dgCompletedList.Columns["CompletedDateCol"].FillWeight = 2; - this.dgCompletedList.Columns["CompletedSizeCol"].MinimumWidth = LogicalToDeviceUnits(100); - this.dgCompletedList.Columns["CompletedSizeCol"].FillWeight = 2; - //this.dgCompletedList.Columns["CompletedImgCol"].DefaultCellStyle.Alignment = - // DataGridViewContentAlignment.MiddleCenter; - - this.dgCompletedList.VirtualMode = true; - this.dgCompletedList.CellValueNeeded += DgCompletedList_CellValueNeeded; - this.dgCompletedList.ColumnHeaderMouseClick += DgCompletedList_ColumnHeaderMouseClick; - - this.dgActiveList.Columns["ImgCol"].Width = LogicalToDeviceUnits(40); - this.dgActiveList.Columns["NameCol"].MinimumWidth = LogicalToDeviceUnits(100); - this.dgActiveList.Columns["NameCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - this.dgActiveList.Columns["NameCol"].FillWeight = 90; - this.dgActiveList.Columns["ActiveDateCol"].MinimumWidth = LogicalToDeviceUnits(80); - this.dgActiveList.Columns["ActiveDateCol"].FillWeight = 2; - this.dgActiveList.Columns["SizeCol"].MinimumWidth = LogicalToDeviceUnits(70); - this.dgActiveList.Columns["SizeCol"].FillWeight = 2; - this.dgActiveList.Columns["StatusCol"].MinimumWidth = LogicalToDeviceUnits(60); - this.dgActiveList.Columns["StatusCol"].FillWeight = 2; - this.dgActiveList.Columns["StatusCol"].Visible = false; - this.dgActiveList.Columns["SpeedCol"].MinimumWidth = LogicalToDeviceUnits(140); - this.dgActiveList.Columns["SpeedCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - this.dgActiveList.Columns["SpeedCol"].FillWeight = 2; - this.dgActiveList.Columns["EtaCol"].MinimumWidth = LogicalToDeviceUnits(60); - this.dgActiveList.Columns["EtaCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - this.dgActiveList.Columns["EtaCol"].Visible = false; - //this.dgActiveList.Columns["ImgCol"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; - - this.dgActiveList.VirtualMode = true; - this.dgActiveList.CellValueNeeded += DgActiveList_CellValueNeeded; - this.dgActiveList.ColumnHeaderMouseClick += DgActiveList_ColumnHeaderMouseClick; - - - //this.dgActiveList.Columns["ImgCol"].Width = LogicalToDeviceUnits(40); - //this.dgActiveList.Columns["NameCol"].Width = LogicalToDeviceUnits(200); - //this.dgActiveList.Columns["NameCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - //this.dgActiveList.Columns["ActiveDateCol"].Width = LogicalToDeviceUnits(80); - //this.dgActiveList.Columns["ActiveDateCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - //this.dgActiveList.Columns["SizeCol"].Width = LogicalToDeviceUnits(70); - //this.dgActiveList.Columns["SizeCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - //this.dgActiveList.Columns["StatusCol"].Width = LogicalToDeviceUnits(60); - //this.dgActiveList.Columns["StatusCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - //this.dgActiveList.Columns["StatusCol"].Visible = false; - //this.dgActiveList.Columns["SpeedCol"].Width = LogicalToDeviceUnits(120); - //this.dgActiveList.Columns["SpeedCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - //this.dgActiveList.Columns["EtaCol"].Width = LogicalToDeviceUnits(60); - //this.dgActiveList.Columns["EtaCol"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - //this.dgActiveList.Columns["EtaCol"].Visible = false; - //this.dgActiveList.Columns["ImgCol"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; - - dgState.Columns[0].DefaultCellStyle.Font = this.ri14Font; // - dgState.Rows.Add(((char)Int32.Parse("ea4c", System.Globalization.NumberStyles.HexNumber)).ToString(), "incomplete"); - dgState.Rows.Add(((char)Int32.Parse("eb7b", System.Globalization.NumberStyles.HexNumber)).ToString(), "complete"); - - var h1 = (int)Math.Ceiling(this.Font.Height * 0.4); - var w1 = (int)Math.Ceiling(this.Font.Height * 0.2); - - dgCategories.Columns[0].DefaultCellStyle.Font = this.ri14Font; - string GetFontIcon(string name) - { - switch (name) - { - case "CAT_DOCUMENTS": - return RemixIcon.GetFontIcon(RemixIcon.DocumentIconLine); - case "CAT_MUSIC": - return RemixIcon.GetFontIcon(RemixIcon.MusicIconLine); - case "CAT_VIDEOS": - return RemixIcon.GetFontIcon(RemixIcon.VideoIconLine); - case "CAT_COMPRESSED": - return RemixIcon.GetFontIcon(RemixIcon.ArchiveIconLine); - case "CAT_PROGRAMS": - return RemixIcon.GetFontIcon(RemixIcon.AppIconLine); - default: - return RemixIcon.GetFontIcon(RemixIcon.OtherFileIconLine); - } - } - - dgCategories.CellFormatting += (a, b) => - { - if (b.ColumnIndex == 1) - { - var category = (Category)b.Value; - b.Value = category.IsPredefined ? - TextResource.GetText(category.Name) : category.DisplayName; - } - }; - - foreach (var category in Config.Instance.Categories) - { - dgCategories.Rows.Add(GetFontIcon(category.Name), category); - } - - dgCategories.ClearSelection(); - - dgState.SelectionChanged += (a, b) => - { - if (dgState.SelectedRows.Count < 1) return; - - var index = dgState.SelectedRows[0].Index; - - if (dgCategories.SelectedRows.Count > 0) - { - dgCategories.ClearSelection(); - } - - if (index == 0) - { - ClearCategoryFilter(); - dgActiveList.BringToFront(); - //panel4.Visible = false; - CategoryChanged?.Invoke(this, new CategoryChangedEventArgs { Level = 0, Index = 0 }); - } - else - { - ClearCategoryFilter(); - dgCompletedList.BringToFront(); - //panel4.Visible = true; - CategoryChanged?.Invoke(this, new CategoryChangedEventArgs { Level = 1, Index = 1 }); - } - - SelectionChanged?.Invoke(this, EventArgs.Empty); - }; - - this.dgState.Columns[0].DefaultCellStyle.Padding = new System.Windows.Forms.Padding(2 * h1, h1, 0, h1); - this.dgState.Columns[1].DefaultCellStyle.Padding = new System.Windows.Forms.Padding(w1, h1, 0, h1); - - this.dgCategories.Columns[0].DefaultCellStyle.Padding = new System.Windows.Forms.Padding(4 * h1, h1, 0, h1); - this.dgCategories.Columns[1].DefaultCellStyle.Padding = new System.Windows.Forms.Padding(w1, h1, 0, h1); - } - - private void DgActiveList_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) - { - var row = e.RowIndex; - if (row >= downloadsDB.InProgressItems.RowCount || row < 0) - { - e.Value = string.Empty; - return; - } - - try - { - var download = downloadsDB.InProgressItems[row]; - switch (e.ColumnIndex) - { - case 0: - e.Value = IconResource.GetFontIconForFileType(download.Name ?? string.Empty); - break; - case 1: - e.Value = download.Name; - break; - case 2: - e.Value = download.DateAdded.ToShortDateString(); - break; - case 3: - e.Value = Helpers.FormatSize(download.Size); - break; - case 4: - e.Value = download.Progress; - break; - case 6: - try - { - e.Value = Helpers.GenerateStatusText(download.DownloadEntry); - } - catch { } - break; - default: - e.Value = string.Empty; - break; - } - } - catch (Exception ex) - { - Log.Debug(ex, "Error with index: " + row + " View row count: " + downloadsDB.InProgressItems.RowCount); - e.Value = string.Empty; - return; - } - } - - private void DgCompletedList_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) - { - // Log.Debug("Row: " + e.RowIndex); - - var row = e.RowIndex; - if (row >= downloadsDB.FinishedItems.RowCount || row < 0) - { - e.Value = string.Empty; - return; - } - try - { - var download = downloadsDB.FinishedItems[row]; - switch (e.ColumnIndex) - { - case 0: - e.Value = IconResource.GetFontIconForFileType(download.Name ?? string.Empty); - break; - case 1: - e.Value = download.Name; - break; - case 2: - e.Value = download.DateAdded.ToShortDateString(); - break; - case 3: - e.Value = Helpers.FormatSize(download.Size); - break; - default: - e.Value = string.Empty; - break; - } - } - catch (Exception ex) - { - Log.Debug(ex, "Error with index: " + row + " View row count: " + downloadsDB.FinishedItems.RowCount); - e.Value = string.Empty; - return; - } - } - - private void DgActiveList_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) - { - var col = e.ColumnIndex; - if (col < 1) return; - var currentSort = dgActiveList.Columns[col].HeaderCell.SortGlyphDirection; - if (currentSort == SortOrder.Ascending) - { - currentSort = SortOrder.Descending; - } - else if (currentSort == SortOrder.Descending) - { - currentSort = SortOrder.Ascending; - } - else - { - currentSort = SortOrder.Ascending; - } - this.downloadsDB.InProgressItems.UpdateView(searchText, - new SortParam - { - SortField = col switch - { - 1 => SortField.Name, - 2 => SortField.Modified, - 3 => SortField.Size, - _ => SortField.Modified - }, - IsAscending = currentSort == SortOrder.Ascending - }); - foreach (DataGridViewColumn column in this.dgActiveList.Columns) - { - column.HeaderCell.SortGlyphDirection = SortOrder.None; - } - dgActiveList.Columns[col].HeaderCell.SortGlyphDirection = currentSort; - dgActiveList.Refresh(); - this.dgActiveList.ClearSelection(); - } - - private void DgCompletedList_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) - { - var col = e.ColumnIndex; - if (col < 1) return; - var currentSort = dgCompletedList.Columns[col].HeaderCell.SortGlyphDirection; - if (currentSort == SortOrder.Ascending) - { - currentSort = SortOrder.Descending; - } - else if (currentSort == SortOrder.Descending) - { - currentSort = SortOrder.Ascending; - } - else - { - currentSort = SortOrder.Ascending; - } - this.downloadsDB.FinishedItems.UpdateView(searchText, null, - new SortParam - { - SortField = col switch - { - 1 => SortField.Name, - 2 => SortField.Modified, - 3 => SortField.Size, - _ => SortField.Modified - }, - IsAscending = currentSort == SortOrder.Ascending - }); - foreach (DataGridViewColumn column in this.dgCompletedList.Columns) - { - column.HeaderCell.SortGlyphDirection = SortOrder.None; - } - dgCompletedList.Columns[col].HeaderCell.SortGlyphDirection = currentSort; - dgCompletedList.Refresh(); - this.dgCompletedList.ClearSelection(); - } - - //private void UpdateToolbarButtonState() - //{ - // DisableButton(btnOpenFile); - // DisableButton(btnOpenFolder); - // DisableButton(btnPause); - // DisableButton(btnResume); - // DisableButton(btnDelete); - - // if (dgState.SelectedRows.Count == 1 && dgState.SelectedRows[0].Index == 0) - // { - // btnOpenFile.Visible = btnOpenFolder.Visible = false; - // btnResume.Visible = btnPause.Visible = true; - // var selectedRows = dgActiveList.SelectedRows; - // if (selectedRows.Count > 0) - // { - // EnableButton(btnDelete); - // } - // if (selectedRows.Count > 1) - // { - // EnableButton(btnResume); - // EnableButton(btnPause); - // } - // else if (selectedRows.Count == 1) - // { - // var ent = this.GetSelectedInProgressEntry();//selectedRows[0].Cells[1].Value as InProgressDownloadEntry; - // if (ent == null) return; - // var isActive = App.IsDownloadActive(ent.Id); - // Log.Information("Selected item active: " + isActive); - // if (isActive) - // { - // EnableButton(btnPause); - // } - // else - // { - // EnableButton(btnResume); - // } - // } - // } - // else - // { - // btnOpenFile.Visible = btnOpenFolder.Visible = true; - // btnPause.Visible = btnResume.Visible = false; - // if (dgCompletedList.SelectedRows.Count > 0) - // { - // EnableButton(btnDelete); - // } - - // if (dgCompletedList.SelectedRows.Count == 1) - // { - // EnableButton(btnOpenFile); - // EnableButton(btnOpenFolder); - // } - // } - //} - - //void SetFlatStyle(Button button) - //{ - - // button.FlatAppearance.MouseOverBackColor = darkMode ? Color.FromArgb(40, 40, 40) : - // Color.FromArgb(230, 230, 230); - - // button.FlatAppearance.MouseDownBackColor = darkMode ? Color.FromArgb(30, 30, 30) : - // Color.FromArgb(226, 226, 226); - - //} - - //private void DisableButton(Button button) - //{ - // button.ForeColor = darkMode ? Color.FromArgb(50, 50, 50) : Color.DarkGray; - // button.Image = buttonStateIcons[button].ImgDisabled; - // button.FlatAppearance.MouseOverBackColor = tableLayoutPanel1.BackColor; - // button.FlatAppearance.MouseDownBackColor = tableLayoutPanel1.BackColor; - - // button.Tag = "disabled"; - //} - - //private void EnableButton(Button button) - //{ - // button.ForeColor = darkMode ? Color.Gray : Color.DimGray;/*Color.FromArgb(200, 200, 200);*/ - // SetFlatStyle(button); - // button.Image = buttonStateIcons[button].ImgEnabled; - // button.Tag = "enabled"; - //} - - private void Form2_Load(object sender, EventArgs e) - { - Log.Debug("LogicalToDeviceUnits(5): " + LogicalToDeviceUnits(5)); - - - var height = 0; - for (int i = 0; i < dgState.Rows.Count; i++) - { - height += dgState.Rows[i].Height; - } - dgState.Height = height; - - height = 0; - - dgCategories.Top = dgState.Height; - - for (int i = 0; i < dgCategories.Rows.Count; i++) - { - height += dgCategories.Rows[i].Height; - } - dgCategories.Height = height; - dgState.Rows[1].Selected = true; - - dgActiveList.ClearSelection(); - dgCompletedList.ClearSelection(); - - dgCompletedList.SelectionChanged += (a, b) => - { - SelectionChanged?.Invoke(this, EventArgs.Empty); - }; - - dgActiveList.SelectionChanged += (a, b) => - { - SelectionChanged?.Invoke(this, EventArgs.Empty); - }; - - if (dgCompletedList.Rows.Count > 0) - { - dgCompletedList.FirstDisplayedScrollingRowIndex = 0; - } - - if (dgActiveList.Rows.Count > 0) - { - dgActiveList.FirstDisplayedScrollingRowIndex = 0; - } - - dgCategories.SelectionChanged += (a, b) => - { - if (dgCategories.SelectedRows.Count < 1) return; - dgState.ClearSelection(); - dgCompletedList.BringToFront(); - ApplyCategoryFilter(); - CategoryChanged?.Invoke(this, new CategoryChangedEventArgs - { - Level = 2, - Index = dgCategories.SelectedRows[0].Index, - Category = (Category)dgCategories.Rows[0].Cells[1].Value - }); - }; - - UpdateBrowserMonitorButton(); - - LoadTexts(); - } - - //} - - ////private void SetToolstripIcon(ToolStripButton btn, string fontAwesomeCode) - ////{ - //// string text = ((char)Int32.Parse(fontAwesomeCode, System.Globalization.NumberStyles.HexNumber)).ToString(); - //// btn.Font = this.fontAwesomeFont; - //// btn.Text = text; - ////} - - ////private void ResumeDownloads() - ////{ - //// var idDict = new Dictionary(); - //// var list = GetInProgressSelectedItems(); - //// foreach (var item in list) - //// { - //// idDict[item.DownloadEntry.Id] = item.DownloadEntry; - //// } - //// //for (int i = 0; i < this.dgActiveList.SelectedRows.Count; i++) - //// //{ - //// // var row = this.dgActiveList.SelectedRows[i]; - //// // var entry = row.Cells[1].Value as BaseDownloadEntry; - //// // idDict[entry.Id] = entry; - //// //} - //// App.ResumeDownload(idDict); - ////} - - //public void ResumeDownload(string downloadId) - //{ - // var idDict = new Dictionary(); - // var download = this.downloadsDB.InProgressItems.FindDownload(downloadId); - // if (download == null) return; - // idDict[download.DownloadEntry.Id] = download.DownloadEntry; - // //for (int i = 0; i < this.dgActiveList.Rows.Count; i++) - // //{ - // // var row = this.dgActiveList.Rows[i]; - // // var entry = row.Cells[1].Value as BaseDownloadEntry; - // // if (entry.Id == downloadId) - // // { - // // idDict[entry.Id] = entry; - // // break; - // // } - // //} - // App.ResumeDownload(idDict); - //} - - //private List GetFinishedSelectedItems() - //{ - // var dgView = this.dgCompletedList; - // var arr = new List(dgView.SelectedRows.Count); - // for (int i = 0; i < dgView.SelectedRows.Count; i++) - // { - // var row = dgView.SelectedRows[i]; - // var entry = this.downloadsDB.FinishedItems[row.Index];// row.Cells[1].Value as BaseDownloadEntry; - // if (entry != null) - // { - // arr.Add(entry); - // } - // } - // return arr; - //} - - //private List GetInProgressSelectedItems() - //{ - // var dgView = this.dgActiveList; - // var arr = new List(dgView.SelectedRows.Count); - // for (int i = 0; i < dgView.SelectedRows.Count; i++) - // { - // var row = dgView.SelectedRows[i]; - // var entry = this.downloadsDB.InProgressItems[row.Index];// row.Cells[1].Value as BaseDownloadEntry; - // if (entry != null) - // { - // arr.Add(entry); - // } - // } - // return arr; - //} - - //public void DeleteDownloads(bool inProgressOnly) - //{ - // if (inProgressOnly) - // { - // var selectedItems = GetInProgressSelectedItems(); - // App.StopDownloads(selectedItems.Select(x => x.DownloadEntry.Id)); - // if (MessageBox.Show(this, - // $"Delete {selectedItems.Count} item{(selectedItems.Count > 1 ? "s" : "")}?", "XDM", MessageBoxButtons.YesNo, MessageBoxIcon.Question) - // == DialogResult.Yes) - // { - // foreach (var item in selectedItems) - // { - // if (item != null) - // { - // this.downloadsDB.InProgressItems.Delete(item); - // App.RemoveDownload(item.DownloadEntry, false); - // } - // } - // } - // } - // else - // { - // var selectedRows = GetFinishedSelectedItems(); //new DataGridViewRow[dgCompletedList.SelectedRows.Count]; - // //var indexes = new int[selectedRows.Length]; - // if (MessageBox.Show(this, - // $"Delete {selectedRows.Count} item{(selectedRows.Count > 1 ? "s" : "")}?", "XDM", MessageBoxButtons.YesNo, MessageBoxIcon.Question) - // == DialogResult.Yes) - // { - // foreach (var selectedRow in selectedRows) - // { - // App.RemoveDownload(selectedRow, false); - // } - // //for (int i = 0; i < dgCompletedList.SelectedRows.Count; i++) - // //{ - // // var row = dgCompletedList.SelectedRows[i]; - // // selectedRows[i] = row; - // // indexes[i] = row.Index; - - // // App.RemoveDownload(this.downloadsDB.FinishedItems[row.Index], false); - - // // //if (row.Cells[1].Value is FinishedDownloadEntry entry) - // // //{ - // // // App.RemoveDownload(entry, false); - // // //} - // //} - // var firstVisibleRowIndex = this.dgCompletedList.FirstDisplayedScrollingRowIndex; - // this.downloadsDB.FinishedItems.Delete(selectedRows); - // this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - // //this.dgCompletedList.RowCount = 0; - // //this.dgCompletedList.Rows.Clear(); - // //if (this.dgCompletedList.RowCount > 0) - // //{ - // // this.dgCompletedList.FirstDisplayedScrollingRowIndex = - // // Math.Min(firstVisibleRowIndex, this.dgCompletedList.RowCount - 1); - // //} - // //this.dgCompletedList.FirstDisplayedScrollingRowIndex = firstVisibleRowIndex; - // //var totalVisible = this.dgCompletedList.DisplayedRowCount(true); - // //var index = this.dgCompletedList.FirstDisplayedScrollingRowIndex; - // //this.downloadsDB.FinishedItems.Delete(indexes); - // //this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - // //if (index < this.downloadsDB.FinishedItems.RowCount) - // //{ - // // this.dgCompletedList.FirstDisplayedScrollingRowIndex = index; - // //} - - // this.dgCompletedList.Refresh(); - // } - // } - // this.downloadsDB.InProgressItems.Save(); - // //this.App.SaveFinishedList(this.tabComplete.AsEnumerable().Select(row => row["NameCol"] as FinishedDownloadEntry).ToList()); - // //this.App.SaveInProgressList(this.tabIncomplete.AsEnumerable().Select(row => row["NameCol"] as InProgressDownloadEntry).ToList()); - //} - - //public void SetInProgressDownloadList(List downloadEntries) - //{ - // //Log.Debug("Setting unfinished list"); - // //this.dgActiveList.SuspendLayout(); - // //foreach (var entry in downloadEntries) - // //{ - // // entry.Status = DownloadStatus.Stopped; - // // this.InProgressDict[entry.Id] = this.tabIncomplete.Rows.Add( - // // Path.GetExtension(entry.Name), - // // entry, entry.DateAdded, entry.Size, entry.Progress, "Stopped"); - - // //} - // //this.dgActiveList.ResumeLayout(); - // //this.dgActiveList.ClearSelection(); - //} - - //public void SetFinishedDownloadList(List downloadEntries) - //{ - // //Log.Debug("Setting completed list"); - // //this.dgCompletedList.SuspendLayout(); - // //foreach (var entry in downloadEntries) - // //{ - // // if (categoryFilter == null) - // // { - // // this.tabComplete.Rows.Add(Path.GetExtension(entry.Name), - // // entry, entry.DateAdded, entry.Size); - // // } - // // else - // // { - // // var ext = Path.GetExtension(entry.Name)?.ToUpperInvariant(); - // // if (categoryFilter.Value.FileExtensions.Contains(ext)) - // // { - // // this.tabComplete.Rows.Add(Path.GetExtension(entry.Name), - // // entry, entry.DateAdded, entry.Size); - // // } - // // } - // //} - // //this.dgCompletedList.ResumeLayout(); - // //this.dgCompletedList.ClearSelection(); - //} - - //private void UpdateProgressOnUI(string id, int progress, double speed, long eta) - //{ - // var downloadEntry = this.downloadsDB.InProgressItems.FindDownload(id);// InProgressDict[id]["NameCol"] as InProgressDownloadEntry; - // if (downloadEntry != null) - // { - // downloadEntry.Progress = progress; - // downloadEntry.DownloadSpeed = Helpers.FormatSize(speed) + "/s"; - // downloadEntry.ETA = Helpers.ToHMS(eta); - // this.downloadsDB.InProgressItems.Save(); - // } - // //InProgressDict[id].SetField("PrgCol", progress); - //} - - //public void UpdateProgress(string id, int progress, double speed, long eta) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(updateProgressAction, id, progress, speed, eta); - // } - // else - // { - // lock (this) - // { - // UpdateProgressOnUI(id, progress, speed, eta); - // } - // } - //} - - //private void DownloadFinishedOnUI(string id, long finalFileSize, string filePath) - //{ - // Log.Debug("Final file name: " + filePath); - // var download = this.downloadsDB.InProgressItems.FindDownload(id); - // if (download == null) return; - // var downloadEntry = download?.DownloadEntry; - // if (downloadEntry == null) return; - // downloadEntry.Progress = 100; - // //InProgressDict[id].SetField("PrgCol", 100); - - // var finishedEntry = new FinishedDownloadEntry - // { - // Name = Path.GetFileName(filePath),// downloadEntry.Name, - // Id = downloadEntry.Id, - // Category = downloadEntry.Category, - // DateAdded = downloadEntry.DateAdded, - // Size = downloadEntry.Size > 0 ? downloadEntry.Size : finalFileSize, - // DownloadType = downloadEntry.DownloadType, - // TargetDir = Path.GetDirectoryName(filePath)!, - // PrimaryUrl = downloadEntry.PrimaryUrl, - // Authentication = downloadEntry.Authentication, - // Proxy = downloadEntry.Proxy - // }; - - // this.downloadsDB.FinishedItems.Add(finishedEntry); - - // //this.dgCompletedList.SuspendLayout(); - // //this.tabComplete.Rows.Add( - // // Path.GetExtension(finishedEntry.Name), - // // finishedEntry, downloadEntry.DateAdded, finishedEntry.Size); - // //this.dgCompletedList.ResumeLayout(); - - // //this.dgActiveList.SuspendLayout(); - - // this.downloadsDB.InProgressItems.Delete(download!); - - // //this.dgActiveList.ResumeLayout(); - // //this.InProgressDict.Remove(id); - - // //this.App.SaveFinishedList(GetFinishedList()); - // //this.App.SaveInProgressList(GetInprogressList()); - - // Log.Debug("dgState.SelectedRows[0].Selected " + dgState.SelectedRows[0].Selected + " this.App.ActiveDownloadCount: " + this.App.ActiveDownloadCount); - - // if (this.App.ActiveDownloadCount == 0 && - // dgState.SelectedRows.Count > 0 && - // dgState.SelectedRows[0].Index == 0) - // { - // Log.Debug("switching to finished listview"); - // //switch to finished view - // dgState.Rows[1].Selected = true; - // } - // else - // { - // Log.Debug("refreshing listview"); - // //already on switched view, refresh - // //dgCompletedList.RowCount = 0; - // //this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - - // this.dgCompletedList.SuspendLayout(); - // this.dgCompletedList.RowCount = 0; - // this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - // this.dgCompletedList.Refresh(); - // this.dgCompletedList.ClearSelection(); - // this.dgCompletedList.ResumeLayout(); - // } - - // //if (this.App.ActiveDownloadCount > 0) - // //{ - // // dgState.Rows[0].Selected = true; - // //} - // //else - // //{ - // // dgState.Rows[1].Selected = true; - // //} - - // //dgCompletedList.ClearSelection(); - // //dgCompletedList.Rows[0].Selected = true; - // //dgCompletedList. - //} - - ////public IEnumerable GetInprogressList() - ////{ - //// return this.downloadsDB.InProgressItems. - //// for (var i = 0; i < this.tabIncomplete.Rows.Count; i++) - //// { - //// yield return this.tabIncomplete.Rows[i]["NameCol"] as InProgressDownloadEntry; - //// } - ////} - - ////public IEnumerable GetFinishedList() - ////{ - //// //return downloadsDB.FinishedItems. - //// //for (var i = 0; i < this.tabComplete.Rows.Count; i++) - //// //{ - //// // yield return this.tabComplete.Rows[i]["NameCol"] as FinishedDownloadEntry; - //// //} - ////} - - //public void DownloadFinished(string id, long finalFileSize, string filePath) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(this.downloadFinishedAction, id, finalFileSize, filePath); - // } - // else - // { - // lock (this) - // { - // this.DownloadFinishedOnUI(id, finalFileSize, filePath); - // } - // } - //} - - //private void DownloadFailedOnUI(string id) - //{ - // var download = this.downloadsDB.InProgressItems.FindDownload(id);// InProgressDict[id]["NameCol"] as InProgressDownloadEntry; - // if (download == null) return; - // download.Status = DownloadStatus.Stopped; - // this.downloadsDB.InProgressItems.Save(); - // dgState.Rows[0].Selected = true; - // UpdateToolbarButtonState(); - // //InProgressDict[id].SetField("StatusCol", "Stopped"); - - // //this.App.SaveInProgressList(GetInprogressList()); - //} - - //public void DownloadFailed(string id) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(this.downloadStoppedAction, id); - // } - // else - // { - // lock (this) - // { - // this.DownloadFailedOnUI(id); - // } - // } - //} - - //public void DownloadCanelled(string id) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(this.downloadStoppedAction, id); - // } - // else - // { - // lock (this) - // { - // this.DownloadFailedOnUI(id); - // } - // } - //} - - //public void DownloadStarted(string id) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(this.downloadStartedAction, id); - // } - // else - // { - // lock (this) - // { - // this.DownloadStartedOnUI(id); - // } - // } - //} - - //private void DownloadStartedOnUI(string id) - //{ - // var download = this.downloadsDB.InProgressItems.FindDownload(id);// InProgressDict[id]["NameCol"] as InProgressDownloadEntry; - // if (download == null) return; - // download.Status = DownloadStatus.Downloading; - // this.downloadsDB.InProgressItems.Save(); - // //InProgressDict[id].SetField("ImgCol", - // // Win32FontIconCache.GetFontIconForFileType(downloadEntry.Name)); - // //InProgressDict[id].SetField("StatusCol", "Downloading"); - // //this.App.SaveInProgressList(this.tabIncomplete.AsEnumerable().Select( - // // row => row["NameCol"] as InProgressDownloadEntry).ToList()); - // UpdateToolbarButtonState(); - //} - - //public void AddItemToTop(string id, string targetFileName, DateTime date, - // long fileSize, string type, FileNameFetchMode fileNameFetchMode, - // string primaryUrl, DownloadStartType startType, - // AuthenticationInfo? authentication, ProxyInfo? proxyInfo, DownloadSchedule? schedule, int maxSpeedLimit) - //{ - // Log.Debug("Scheduled: " + startType + " schedule: " + schedule); - // var downloadEntry = new InProgressDownloadEntry - // { - // Name = targetFileName, - // Category = type, - // DateAdded = date, - // DownloadType = type, - // Id = id, - // Progress = 0, - // Size = fileSize, - // Status = DownloadStatus.Waiting, - // TargetDir = "", - // PrimaryUrl = primaryUrl, - // Authentication = authentication, - // Proxy = proxyInfo, - // MaxSpeedLimitInKiB = maxSpeedLimit, - // Schedule = schedule - // }; - // this.downloadsDB.InProgressItems.Add(downloadEntry); - - // //var label = startType == DownloadStartType.Waiting ? "Waiting" : - // // (startType == DownloadStartType.Scheduled ? "Scheduling" : - // // Path.GetExtension(targetFileName)); - // //this.InProgressDict[id] = this.tabIncomplete.Rows.Add(label, new InProgressDownloadEntry - // //{ - // // Name = targetFileName, - // // Category = type, - // // DateAdded = date, - // // DownloadType = type, - // // Id = id, - // // Progress = 0, - // // Size = fileSize, - // // Status = DownloadStatus.Stopped, - // // TargetDir = "", - // // PrimaryUrl = primaryUrl, - // // Authentication = authentication, - // // Proxy = proxyInfo, - // // MaxSpeedLimitInKiB = maxSpeedLimit, - // // Schedule = schedule - // //}, date, fileSize, 0, startType == DownloadStartType.Scheduled ? "Scheduled" : "Waiting"); - // //this.App.SaveInProgressList(this.tabIncomplete.AsEnumerable().Select(row => row["NameCol"] as InProgressDownloadEntry).ToList()); - // dgState.Rows[0].Selected = true; - // dgActiveList.ClearSelection(); - // dgActiveList.Rows[0].Selected = true; - //} - - //private void NewDownloadClicked() - //{ - // NewDownloadDialogHelper.CreateAndShowDialog(this.App, this, CreateNewDownloadDialog(true)); - //} - - //public void UpdateItem(string id, string targetFileName, long size) - //{ - // if (this.InvokeRequired) - // { - // this.BeginInvoke(this.updateItemCallBack, id, targetFileName, size); - // } - // else - // { - // lock (this) - // { - // this.UpdateItemInvoke(id, targetFileName, size); - // } - // } - //} - - //private void NewDownloadClicked(object sender, ToolStripItemClickedEventArgs e) - //{ - - //} - - //private void btnClose_Click(object sender, EventArgs e) - //{ - // this.Close(); - //} - - ////private void btnMaximize_Click(object sender, EventArgs e) - ////{ - //// if (this.WindowState == FormWindowState.Maximized) - //// { - //// this.WindowState = FormWindowState.Normal; - //// this.button18.Image = this.bmpMaximize; - //// } - //// else - //// { - //// this.WindowState = FormWindowState.Maximized; - //// this.button18.Image = this.bmpRestore; - //// } - ////} - - //private void btnMinimize_Click(object sender, EventArgs e) - //{ - // this.WindowState = FormWindowState.Minimized; - //} - - //private void UpdateItemInvoke(string id, string targetFileName, long size) - //{ - // var downloadEntry = this.downloadsDB.InProgressItems.FindDownload(id);//InProgressDict[id]["NameCol"] as InProgressDownloadEntry; - // if (downloadEntry == null) return; - // downloadEntry.Name = targetFileName; - // downloadEntry.Size = size; - // this.downloadsDB.InProgressItems.Save(); - // //InProgressDict[id].SetField("ImgCol", Win32FontIconCache.GetFontIconForFileType(targetFileName)); - // //InProgressDict[id].SetField("NameCol", downloadEntry); - // //InProgressDict[id].SetField("SizeCol", size); - // //this.App.SaveInProgressList(this.tabIncomplete.AsEnumerable().Select(row => row["NameCol"] as InProgressDownloadEntry).ToList()); - //} - - - - //Bitmap Create3(Font font, string text, int size) - //{ - // var bitmap = new Bitmap(font.Height, font.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - - // //ScaleBitmapLogicalToDevice(ref bitmap); - // Graphics g = Graphics.FromImage(bitmap); - // g.SmoothingMode = SmoothingMode.AntiAlias; - // g.InterpolationMode = InterpolationMode.HighQualityBicubic; - // g.PixelOffsetMode = PixelOffsetMode.HighQuality; - // g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; - - // TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter; - // TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), Color.Black, flags); - // return bitmap; - //} - - //static Bitmap Create2(Font font, string text, int size) - //{ - // var bitmap = new Bitmap(font.Height, font.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - // Graphics g = Graphics.FromImage(bitmap); - // //g.SmoothingMode = SmoothingMode.AntiAlias; - // //g.InterpolationMode = InterpolationMode.HighQualityBicubic; - // //g.PixelOffsetMode = PixelOffsetMode.HighQuality; - // g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; - // g.TextContrast = 10; - - // TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter; - // TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), Color.Gray, flags); - // return bitmap; - //} - - //protected void Mouse_DownHandler(object sender, MouseEventArgs e) - //{ - // if (WindowState != FormWindowState.Maximized) - // { - // //ctrl-leftclick anywhere on the control to drag the form to a new location - // if (e.Button == MouseButtons.Left)// && Control.ModifierKeys == Keys.Control) - // { - // ReleaseCapture(); - // SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); - // } - // } - //} - - [DllImport("user32.dll")] - public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); - - //[DllImport("user32.dll")] - //public static extern bool ReleaseCapture(); - - //[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")] - //private static extern IntPtr CreateRoundRectRgn - //( - // int nLeftRect, // x-coordinate of upper-left corner - // int nTopRect, // y-coordinate of upper-left corner - // int nRightRect, // x-coordinate of lower-right corner - // int nBottomRect, // y-coordinate of lower-right corner - // int nWidthEllipse, // width of ellipse - // int nHeightEllipse // height of ellipse - //); - - //protected override CreateParams CreateParams - //{ - // get - // { - // //const int CS_DROPSHADOW = 0x20000; - // CreateParams cp = base.CreateParams; - // //cp.ClassStyle |= CS_DROPSHADOW; - // //int WS_SYSMENU = 0x80000; - // int WS_MINIMIZEBOX = 0x20000; - // int WS_MAXIMIZEBOX = 0x10000; - // cp.Style |= (cp.Style |= (/*WS_SYSMENU |*/ WS_MINIMIZEBOX | WS_MAXIMIZEBOX)); - // return cp; - // } - //} - - - // private const int - //HTLEFT = 10, - //HTRIGHT = 11, - //HTTOP = 12, - //HTTOPLEFT = 13, - //HTTOPRIGHT = 14, - //HTBOTTOM = 15, - //HTBOTTOMLEFT = 16, - //HTBOTTOMRIGHT = 17; - - // const int _ = 10; // you can rename this variable if you like - - // Rectangle Top { get { return new Rectangle(0, 0, this.ClientSize.Width, _); } } - // Rectangle Left { get { return new Rectangle(0, 0, _, this.ClientSize.Height); } } - // Rectangle Bottom { get { return new Rectangle(0, this.ClientSize.Height - _, this.ClientSize.Width, _); } } - // Rectangle Right { get { return new Rectangle(this.ClientSize.Width - _, 0, _, this.ClientSize.Height); } } - - // Rectangle TopLeft { get { return new Rectangle(0, 0, _, _); } } - // Rectangle TopRight { get { return new Rectangle(this.ClientSize.Width - _, 0, _, _); } } - // Rectangle BottomLeft { get { return new Rectangle(0, this.ClientSize.Height - _, _, _); } } - // Rectangle BottomRight { get { return new Rectangle(this.ClientSize.Width - _, this.ClientSize.Height - _, _, _); } } - - - // private const int cGrip = 16; // Grip size - // private const int cCaption = 32; // Caption bar height; - - // protected override void WndProc(ref System.Windows.Forms.Message message) - // { - // base.WndProc(ref message); - - // if (message.Msg == 0x84) // WM_NCHITTEST - // { - // Point pos = new Point(message.LParam.ToInt32()); - // pos = this.PointToClient(pos); - // if (pos.Y < cCaption && pos.Y > 5) - // { - // message.Result = (IntPtr)2; // HTCAPTION - // return; - // } - - // var cursor = this.PointToClient(Cursor.Position); - - // if (TopLeft.Contains(cursor)) message.Result = (IntPtr)HTTOPLEFT; - // else if (TopRight.Contains(cursor)) message.Result = (IntPtr)HTTOPRIGHT; - // else if (BottomLeft.Contains(cursor)) message.Result = (IntPtr)HTBOTTOMLEFT; - // else if (BottomRight.Contains(cursor)) message.Result = (IntPtr)HTBOTTOMRIGHT; - - // else if (Top.Contains(cursor)) message.Result = (IntPtr)HTTOP; - // else if (Left.Contains(cursor)) message.Result = (IntPtr)HTLEFT; - // else if (Right.Contains(cursor)) message.Result = (IntPtr)HTRIGHT; - // else if (Bottom.Contains(cursor)) message.Result = (IntPtr)HTBOTTOM; - // } - // } - - //*********************************************************** - //This gives us the ability to resize the borderless from any borders instead of just the lower right corner - //protected void WndProc22(ref System.Windows.Forms.Message m) - //{ - // const int wmNcHitTest = 0x84; - // const int htLeft = 10; - // const int htRight = 11; - // const int htTop = 12; - // const int htTopLeft = 13; - // const int htTopRight = 14; - // const int htBottom = 15; - // const int htBottomLeft = 16; - // const int htBottomRight = 17; - - // if (WindowState != FormWindowState.Maximized) - // { - // if (m.Msg == wmNcHitTest) - // { - // int x = (int)(m.LParam.ToInt64() & 0xFFFF); - // int y = (int)((m.LParam.ToInt64() & 0xFFFF0000) >> 16); - // Point pt = PointToClient(new Point(x, y)); - // Size clientSize = ClientSize; - // ///allow resize on the lower right corner - // if (pt.X >= clientSize.Width - 16 && pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htBottomLeft : htBottomRight); - // return; - // } - // ///allow resize on the lower left corner - // if (pt.X <= 16 && pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htBottomRight : htBottomLeft); - // return; - // } - // ///allow resize on the upper right corner - // if (pt.X <= 16 && pt.Y <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htTopRight : htTopLeft); - // return; - // } - // ///allow resize on the upper left corner - // if (pt.X >= clientSize.Width - 16 && pt.Y <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htTopLeft : htTopRight); - // return; - // } - // ///allow resize on the top border - // if (pt.Y <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htTop); - // return; - // } - // ///allow resize on the bottom border - // if (pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htBottom); - // return; - // } - // ///allow resize on the left border - // if (pt.X <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htLeft); - // return; - // } - // ///allow resize on the right border - // if (pt.X >= clientSize.Width - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htRight); - // return; - // } - // } - // } - - // base.WndProc(ref m); - //} - - IntPtr hWndNextWindow; - - public void StartClipboardMonitoring() - { - Log.Debug("Starting clipboard monitoring"); - hWndNextWindow = SetClipboardViewer(this.Handle); - } - - public void StopClipboardMonitoring() - { - Log.Debug("Stopping clipboard monitoring"); - ChangeClipboardChain(this.Handle, hWndNextWindow); - } - - public string GetClipboardText() - { - try - { - var text = Clipboard.GetText(); - if (!string.IsNullOrEmpty(text)) - { - return text; - } - } - catch { } - return null; - } - - protected override void WndProc(ref System.Windows.Forms.Message m) - { - switch (m.Msg) - { - //case (0x0001): // WM_CREATE - // hWndNextWindow = SetClipboardViewer(this.Handle); - // break; - case (0x0002): // WM_DESTROY - ChangeClipboardChain(this.Handle, hWndNextWindow); - break; - case (0x030D): // WM_CHANGECBCHAIN - if (m.WParam == hWndNextWindow) - hWndNextWindow = m.LParam; - else if (hWndNextWindow != IntPtr.Zero) - SendMessage(hWndNextWindow, m.Msg, m.WParam, m.LParam); - break; - case (0x0308): // WM_DRAWCLIPBOARD - { - OnClipboardChanged(); - } - SendMessage(hWndNextWindow, m.Msg, m.WParam, m.LParam); - break; - } - - base.WndProc(ref m); - } - - //protected override void OnShown(EventArgs e) - //{ - // base.OnShown(e); - // if (Config.Instance.MonitorClipboard) - // { - // StartClipboardMonitoring(); - // } - //} - - private void OnClipboardChanged() - { - Log.Debug("Clipboard changed"); - this.ClipboardChanged?.Invoke(this, EventArgs.Empty); - } - - public INewDownloadDialogSkeleton CreateNewDownloadDialog(bool empty) - { - var newDownloadDialogWin32 = new NewDownloadDialogView(empty/*, GlobalFontCollection.RiFontInstance*/); - return newDownloadDialogWin32; - } - - public INewVideoDownloadDialog CreateNewVideoDialog() - { - var newVideoDialogWin32 = new NewVideoDownloadDialogView(GlobalFontCollection.RiFontInstance); - return newVideoDialogWin32; - } - - //public void ShowNewDownloadDialog(Core.Lib.Common.Message message) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(new Action(() => - // { - // NewDownloadDialogHelper.CreateAndShowDialog(this.App, this, this.CreateNewDownloadDialog(false), message); - // })); - // } - // else - // { - // NewDownloadDialogHelper.CreateAndShowDialog(this.App, this, this.CreateNewDownloadDialog(false), message); - // } - //} - - //public void ShowVideoDownloadDialog(string videoId, string name, long size) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(new Action(() => - // { - // NewVideoDownloadDialogHelper.ShowVideoDownloadDialog(this.App, this, this.CreateNewVideoDialog(), videoId, name, size); - // })); - // } - // else - // { - // NewVideoDownloadDialogHelper.ShowVideoDownloadDialog(this.App, this, this.CreateNewVideoDialog(), videoId, name, size); - // } - - //} - - - - //public void InvokeForm(Action callback) - //{ - // if (this.InvokeRequired) - // { - // this.BeginInvoke(callback); - // } - // else - // { - // callback(); - // } - //} - - //protected void WndProc33(ref System.Windows.Forms.Message m) - //{ - // const int wmNcHitTest = 0x84; - // const int htLeft = 10; - // const int htRight = 11; - // const int htTop = 12; - // const int htTopLeft = 13; - // const int htTopRight = 14; - // const int htBottom = 15; - // const int htBottomLeft = 16; - // const int htBottomRight = 17; - - // if (WindowState != FormWindowState.Maximized) - // { - // if (m.Msg == wmNcHitTest) - // { - // int x = (int)(m.LParam.ToInt64() & 0xFFFF); - // int y = (int)((m.LParam.ToInt64() & 0xFFFF0000) >> 16); - // Point pt = PointToClient(new Point(x, y)); - // Size clientSize = ClientSize; - // ///allow resize on the lower right corner - // if (pt.X >= clientSize.Width - 16 && pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htBottomLeft : htBottomRight); - // return; - // } - // ///allow resize on the lower left corner - // if (pt.X <= 16 && pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htBottomRight : htBottomLeft); - // return; - // } - // ///allow resize on the upper right corner - // if (pt.X <= 16 && pt.Y <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htTopRight : htTopLeft); - // return; - // } - // ///allow resize on the upper left corner - // if (pt.X >= clientSize.Width - 16 && pt.Y <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(IsMirrored ? htTopLeft : htTopRight); - // return; - // } - // ///allow resize on the top border - // if (pt.Y <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htTop); - // return; - // } - // ///allow resize on the bottom border - // if (pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htBottom); - // return; - // } - // ///allow resize on the left border - // if (pt.X <= 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htLeft); - // return; - // } - // ///allow resize on the right border - // if (pt.X >= clientSize.Width - 16 && clientSize.Height >= 16) - // { - // m.Result = (IntPtr)(htRight); - // return; - // } - // } - // } - - // base.WndProc(ref m); - //} - - private void CreateTrayIcon() - { - exitMenuItem.Click += ExitApp; - //var ctxMenu = new ContextMenuStrip(); - //var mExit = new ToolStripMenuItem("Exit", null, ExitApp); - //mExit.Padding = new Padding(10, 10, 10, 10); - //ctxMenu.Items.Add(mExit); - ////ctxMenu.Items.Add("Exit", null, ExitApp); - - // Initialize Tray Icon - trayIcon = new NotifyIcon() - { - //Icon = Resources.AppIcon, - ContextMenuStrip = ctxMenuNotifyIcon, - Visible = true, - Icon = this.Icon, - Text = "XDM" - }; - - trayIcon.DoubleClick += (a, b) => - { - this.WindowState = FormWindowState.Normal; - this.Visible = true; - this.BringToFront(); - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - NativeMethods.SetForegroundWindow(this.Handle); - }; - } - - void ExitApp(object sender, EventArgs e) - { - // Hide tray icon, otherwise it will remain shown until user mouses over it - trayIcon.Visible = false; - GlobalFontCollection.Dispose(); - Application.Exit(); - Environment.Exit(0); - } - - protected override void OnClosing(CancelEventArgs e) - { - e.Cancel = true; - this.Visible = false; - } - - public IProgressWindow CreateProgressWindow(string downloadId, IApp app, IAppUI appUI) - { - var prgWin = new ProgressWindow - { - DownloadId = downloadId, - App = app, - AppUI = appUI - }; - return prgWin; - } - - private void button14_Click(object sender, EventArgs e) - { - - } - - public IDownloadCompleteDialog CreateDownloadCompleteDialog(IApp app) - { - var dwnCmpldDlg = new DownloadCompleteDialog - { - App = app, - }; - - return dwnCmpldDlg; - } - - //public void ShowDownloadCompleteDialog(string file, string folder) - //{ - // if (InvokeRequired) - // { - // BeginInvoke(new Action(() => - // { - // DownloadCompleteDialogHelper.ShowDialog(this.App, CreateDownloadCompleteDialog(), file, folder); - // })); - // } - // else - // { - // DownloadCompleteDialogHelper.ShowDialog(this.App, this.CreateDownloadCompleteDialog(), file, folder); - // } - //} - - //private void OpenSelectedFile() - //{ - // if (dgCompletedList.SelectedRows.Count > 0) - // { - // var row = dgCompletedList.SelectedRows[0]; - // var ent = this.downloadsDB.FinishedItems[row.Index];// row.Cells[1].Value as FinishedDownloadEntry; - // if (!string.IsNullOrEmpty(ent.TargetDir)) - // { - // var file = Path.Combine(ent.TargetDir, ent.Name); - // Log.Information("Open: " + file); - // if (!Helpers.OpenFile(file)) - // { - // MessageBox.Show("Could not open file, it is either deleted or moved to a different location"); - // } - // return; - // } - // else - // { - // Log.Error("Path is null"); - // } - // } - // MessageBox.Show("Please select a file to open"); - //} - - //private void OpenSelectedFolder() - //{ - // if (dgCompletedList.SelectedRows.Count > 0) - // { - // var row = dgCompletedList.SelectedRows[0]; - // var ent = this.downloadsDB.FinishedItems[row.Index];// row.Cells[1].Value as FinishedDownloadEntry; - // //var file = Path.Combine(ent.TargetDir, ent.Name); - // Log.Information("Open folder: " + ent.TargetDir); - // if (!Helpers.OpenFolder(ent.TargetDir, ent.Name)) - // { - // MessageBox.Show("Could not open folder, it is either deleted or moved to a different location"); - // } - // return; - // } - // MessageBox.Show("Please select a item to open"); - //} - - - - public string GetUrlFromClipboard() - { - var iData = Clipboard.GetDataObject(); - if (iData.GetDataPresent(DataFormats.Text)) - { - var text = (String)iData.GetData(DataFormats.Text); - if (XDM.Core.Lib.Util.Helpers.IsUriValid(text)) - { - return text; - } - } - return null; - } - - - private void OnMouseDown(object sender, DataGridViewCellMouseEventArgs e) - { - if (e.ColumnIndex != -1 && e.RowIndex != -1 && e.Button == System.Windows.Forms.MouseButtons.Right) - { - DataGridViewCell c = (sender as DataGridView)[e.ColumnIndex, e.RowIndex]; - if (!c.Selected) - { - c.DataGridView.ClearSelection(); - c.DataGridView.CurrentCell = c; - c.Selected = true; - } - } - } - - private void SetupContextMenu() - { - dgActiveList.CellMouseDown += OnMouseDown; - - dgCompletedList.CellMouseDown += OnMouseDown; - - dgActiveList.RowContextMenuStripNeeded += (sender, args) => - { - args.ContextMenuStrip = this.ctxMenuActiveList; - }; - - dgCompletedList.RowContextMenuStripNeeded += (sender, args) => - { - args.ContextMenuStrip = this.ctxMenuCompletedList; - }; - - ctxMenuActiveList.Opening += (s, e) => - { - this.InProgressContextMenuOpening?.Invoke(s, e); - //foreach (ToolStripItem item in ctxMenuActiveList.Items) - //{ - // item.Enabled = false; - //} - //deleteToolStripMenuItem.Enabled = true; - //scheduleToolStripMenuItem.Enabled = true; - //var selectedRows = dgActiveList.SelectedRows; - //if (selectedRows.Count > 1) - //{ - // pauseToolStripMenuItem.Enabled = true; - // resumeToolStripMenuItem.Enabled = true; - // showProgressToolStripMenuItem.Enabled = true; - // copyURLToolStripMenuItem.Enabled = true; - //} - //else if (selectedRows.Count == 1) - //{ - // showProgressToolStripMenuItem.Enabled = true; - // copyURLToolStripMenuItem.Enabled = true; - // saveAsToolStripMenuItem1.Enabled = true; - // refreshLinkToolStripMenuItem.Enabled = true; - // previewToolStripMenuItem.Enabled = true; - // showProgressToolStripMenuItem.Enabled = true; - // copyURLToolStripMenuItem.Enabled = true; - // propertiesToolStripMenuItem.Enabled = true; - - // var ent = GetSelectedInProgressEntry();//selectedRows[0].Cells[1].Value as InProgressDownloadEntry; - // if (ent == null) return; - // var isActive = App.IsDownloadActive(ent.Id); - // Log.Information("Selected item active: " + isActive); - // if (isActive) - // { - // pauseToolStripMenuItem.Enabled = true; - // } - // else - // { - // resumeToolStripMenuItem.Enabled = true; - // restartToolStripMenuItem.Enabled = true; - // } - //} - }; - - ctxMenuCompletedList.Opening += (s, e) => - { - this.FinishedContextMenuOpening?.Invoke(s, e); - //foreach (ToolStripItem item in ctxMenuCompletedList.Items) - //{ - // item.Enabled = false; - //} - //deleteDownloadsToolStripMenuItem.Enabled = true; - //var selectedRows = dgCompletedList.SelectedRows; - //if (selectedRows.Count == 1) - //{ - // foreach (ToolStripItem item in ctxMenuCompletedList.Items) - // { - // item.Enabled = true; - // } - //} - }; - } - - //private void refreshLinkToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // var selected = GetSelectedInProgressEntry(); - // if (selected == null) return; - // using var dlg = new Win32LinkRefreshWindow(); - // LinkRefreshDialogHelper.RefreshLink(selected, App, dlg); - //} - - public void ShowRefreshLinkDialog(InProgressDownloadEntry entry, IApp app) - { - using var dlg = new LinkRefreshWindow(); - LinkRefreshDialogHelper.RefreshLink(entry, app, dlg); - } - - private void moveToQueueToolStripMenuItem_Click(object sender, EventArgs e) - { - MoveToQueueClicked?.Invoke(this, EventArgs.Empty); - } - - //private void showProgressToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // var selected = GetSelectedInProgressEntry(); - // if (selected != null) - // { - // App?.ShowProgressWindow(selected.Id); - // } - //} - - //private void copyURLToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // var entry = GetSelectedInProgressEntry(); - // if (entry != null) - // { - // CopyURL(entry); - // } - //} - - //private void propertiesToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // ShowSeletectedItemProperties(); - //} - - //private void openToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // OpenSelectedFile(); - //} - - //private void openFolderToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // OpenSelectedFolder(); - //} - - //private void deleteDownloadsToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // DeleteDownloads(dgState.Rows[0].Selected); - //} - - //private void copyURLToolStripMenuItem1_Click(object sender, EventArgs e) - //{ - // var entry = GetSelectedFinishedEntry(); - // if (entry != null) - // { - // CopyURL(entry); - // } - //} - - //private void CopyURL(BaseDownloadEntry entry) - //{ - // var url = App.GetPrimaryUrl(entry); - // if (url != null) - // { - // SetClipboardText(url); - // } - //} - - public void SetClipboardText(string text) - { - Clipboard.SetText(text); - } - - public void SetClipboardFile(string file) - { - Clipboard.SetFileDropList(new StringCollection - { - file - }); - } - - - //private void copyFileToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // var entry = GetSelectedFinishedEntry(); - // if (entry != null) - // { - // var file = Path.Combine(entry.TargetDir, entry.Name); - // if (File.Exists(file)) - // { - // Clipboard.SetFileDropList(new StringCollection - // { - // file - // }); - // } - // else - // { - // MessageBox.Show("File does not exist"); - // } - // } - //} - - //private void propertiesToolStripMenuItem1_Click(object sender, EventArgs e) - //{ - // ShowSeletectedItemProperties(); - //} - - //private void restartToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // var selectedItem = GetSelectedInProgressEntry(); - // if (selectedItem == null) return; - // App.RestartDownload(selectedItem); - //} - - //private void redownloadToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // var selectedItem = GetSelectedFinishedEntry(); - // if (selectedItem == null) return; - // App.RestartDownload(selectedItem); - //} - - //private void pauseToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // StopSelectedDownloads(); - //} - - //private void resumeToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // ResumeDownloads(); - //} - - //private void deleteToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // DeleteDownloads(dgState.Rows[0].Selected); - //} - - //private void saveAsToolStripMenuItem1_Click(object sender, EventArgs e) - //{ - // var item = GetSelectedInProgressEntry(); - // if (item == null) return; - // using var fc = new SaveFileDialog(); - // fc.FileName = Path.Combine(item.TargetDir ?? Helpers.GetDownloadFolderByFileName(item.Name), item.Name); - // if (fc.ShowDialog(this) != DialogResult.OK) - // { - // return; - // } - // var file = fc.FileName; - // Log.Information("folder: " + Path.GetDirectoryName(file) + " file: " + Path.GetFileName(file)); - // App.RenameDownload(item.Id, Path.GetDirectoryName(file), Path.GetFileName(file)); - //} - - //public void RenameFileOnUI(string id, string folder, string file) - //{ - // RunOnUIThread(() => - // { - // var downloadEntry = this.downloadsDB.InProgressItems.FindDownload(id); //InProgressDict[id]["NameCol"] as InProgressDownloadEntry; - // if (downloadEntry == null) return; - // if (file != null) - // { - // downloadEntry.Name = file; - // } - // if (folder != null) - // { - // downloadEntry.DownloadEntry.TargetDir = folder; - // } - // this.downloadsDB.InProgressItems.Save(); - // //InProgressDict[id].SetField("NameCol", downloadEntry); - // //App.SaveInProgressList(GetInprogressList()); - // }); - //} - - //private void ShowSeletectedItemProperties() - //{ - // if ((dgState.Rows[0].Selected && dgActiveList.SelectedRows.Count == 0) || - // (dgState.Rows[1].Selected && dgCompletedList.SelectedRows.Count == 0)) - // { - // return; - // } - - // var inProgressSelected = dgState.Rows[0].Selected; - // BaseDownloadEntry? ent = inProgressSelected ? GetSelectedInProgressEntry() : GetSelectedFinishedEntry(); - // if (ent == null) return; - // ShortState? state = null; - // try - // { - // var stateFile = Path.Combine(Config.DataDir, ent.Id + ".state"); - // state = JsonConvert.DeserializeObject( - // File.ReadAllText(stateFile), - // new JsonSerializerSettings - // { - // MissingMemberHandling = MissingMemberHandling.Ignore, - // }); - // } - // catch { } - - // var propsDlg = new Win32PropertiesWindow - // { - // FileName = ent.Name, - // Folder = ent.TargetDir ?? XDM.Core.Lib.Util.Helpers.GetDownloadFolderByFileName(ent.Name), - // Address = ent.PrimaryUrl, - // FileSize = XDM.Core.Lib.Util.Helpers.FormatSize(ent.Size), - // DateAdded = ent.DateAdded.ToLongDateString() + " " + ent.DateAdded.ToLongTimeString(), - // DownloadType = ent.DownloadType, - // Referer = ent.RefererUrl, - // Cookies = state?.Cookies ?? state?.Cookies1 ?? new Dictionary(), - // Headers = state?.Headers ?? state?.Headers1 ?? new Dictionary>(), - // }; - // propsDlg.Visible = true; - //} - - public void ShowPropertiesDialog(BaseDownloadEntry ent, ShortState? state) - { - var propsDlg = new PropertiesWindow - { - FileName = ent.Name, - Folder = ent.TargetDir ?? Helpers.GetDownloadFolderByFileName(ent.Name), - Address = ent.PrimaryUrl, - FileSize = Helpers.FormatSize(ent.Size), - DateAdded = ent.DateAdded.ToLongDateString() + " " + ent.DateAdded.ToLongTimeString(), - DownloadType = ent.DownloadType, - Referer = ent.RefererUrl, - Cookies = state?.Cookies ?? state?.Cookies1 ?? new Dictionary(), - Headers = state?.Headers ?? state?.Headers1 ?? new Dictionary>(), - }; - propsDlg.Visible = true; - } - - //private void SetupMainMenu() - //{ - // //ctxMainMenu.Left = btnSettings.Left; - // //ctxMainMenu.Top = btnSettings.Bottom; - // //btnSettings.ContextMenuStrip = ctxMainMenu; - // //ctxMainMenu.Show() - - // //settingsToolStripMenuItem1.Click += (a, b) => - // //{ - // // using var dlg = new Win32SettingsWindow(); - // // dlg.App = App; - // // dlg.ShowDialog(this); - // //}; - //} - - //private void SetupDownloadMenu() - //{ - // newDownloadToolStripMenuItem.Click += (a, b) => - // { - // this.NewDownloadClicked?.Invoke(a, b); - // }; - //} - - //private void UpdateInprogressToolbarButtons() - //{ - // if (dgState.SelectedRows.Count == 1 && - // dgState.SelectedRows[0].Index == 0 && - // dgActiveList.SelectedRows.Count == 1) - // { - // var ent = GetSelectedInProgressEntry();//dgActiveList.SelectedRows[0].Cells[1].Value as InProgressDownloadEntry; - // if (ent == null) return; - // var isActive = ent.Status == DownloadStatus.Downloading; - - // DisableButton(btnPause); - // DisableButton(btnResume); - - // Log.Information("Selected item active: " + isActive); - - // if (isActive) - // { - // EnableButton(btnPause); - // } - // else - // { - // EnableButton(btnResume); - // } - // } - //} - - //public void UpdateUIButtons() - //{ - // if (InvokeRequired) - // { - // BeginInvoke(this.downloadStateChangeAction); - // } - // else - // { - // lock (this) - // { - // this.downloadStateChangeAction(); - // } - // } - //} - - - - //protected override void OnHandleCreated(EventArgs e) - //{ - // try - // { - // DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - // DarkModeHelper.AllowDarkModeForWindow(this.Handle, 1); - // DarkModeHelper.SetWindowTheme(this.Handle, "DarkMode_Explorer", null); - // } - // catch (Exception ex) - // { - // Log.Debug(ex, ex.Message); - // } - // base.OnHandleCreated(e); - //} - - //protected override void OnShown(EventArgs e) - //{ - // //AllowDarkModeForWindow(this.dgCompletedList.Handle, 1); - // SetWindowTheme(this.dgCompletedList.Handle, "DarkMode_Explorer", null); - // base.OnShown(e); - //} - - - private void exitToolStripMenuItem_Click(object sender, EventArgs e) - { - GlobalFontCollection.Dispose(); - Environment.Exit(0); - } - - public void ShowYoutubeDLDialog(IAppUI appUI, IApp app) - { - var dlg = new VideoDownloaderWindow(fa10Font, app, appUI); - dlg.Visible = true; - } - - private void videoDownloadToolStripMenuItem_Click(object sender, EventArgs e) - { - YoutubeDLDownloadClicked?.Invoke(sender, e); - } - - - public DownloadSchedule? ShowSchedulerDialog(DownloadSchedule schedule) - { - using var dlg = new SchedulerWindow(); - dlg.Schedule = schedule; - if (dlg.ShowDialog(this) == DialogResult.OK) - { - return dlg.Schedule; - } - return null; - } - - //private void scheduleToolStripMenuItem_Click(object sender, EventArgs e) - //{ - // using var dlg = new Win32SchedulerWindow(); - // if (dgActiveList.SelectedRows.Count == 1) - // { - // var list = this.GetInProgressSelectedItems();//dgActiveList.SelectedRows[0].Cells[1].Value as InProgressDownloadEntry; - // if (list.Count == 0) return; - // dlg.Schedule = list[0].DownloadEntry.Schedule.GetValueOrDefault(); - // if (dlg.ShowDialog(this) == DialogResult.OK) - // { - // var schedule = dlg.Schedule; - // foreach (var row in list) - // { - // var ent = row.DownloadEntry; - // ent.Schedule = schedule; - // } - // this.downloadsDB.InProgressItems.Save(); - // } - // } - //} - - //private static bool IsWindows10OrGreater(int build = -1) - //{ - // return Environment.OSVersion.Version.Major >= 10 && Environment.OSVersion.Version.Build >= build; - //} - - //private Image CreateFileTypeImageFromFont() - //{ - // var font = new Font(fcRemixIcon.Families[0], 12); - // var img = CreateFileIcon(font, - // ((char)Int32.Parse("eceb", System.Globalization.NumberStyles.HexNumber)).ToString(), - // Color.Orange, Color.White, 5); - // return img; - //} - - //private Image CreateFileTypeImageFromFont(string iconText, Color backColor) - //{ - // var font = new Font(fcFontAwesome.Families[0], 12); - // var img = CreateFileIcon(font, - // iconText, - // backColor, Color.White, 5); - // return img; - //} - - //private Bitmap Create(Font font, string text, int size) - //{ - // using var g1 = this.CreateGraphics(); - // var sizeF = g1.MeasureString(text, font); - // //var bmpDimension = LogicalToDeviceUnits(size); - // //Console.WriteLine(nameof(bmpDimension) + ": " + bmpDimension + " " + nameof(size) + ": " + size); - - // var width = (int)sizeF.Width; - // var height = (int)sizeF.Height; - - // var bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - // using Graphics g = Graphics.FromImage(bitmap); - // g.SmoothingMode = SmoothingMode.AntiAlias; - // g.InterpolationMode = InterpolationMode.HighQualityBicubic; - // g.PixelOffsetMode = PixelOffsetMode.HighQuality; - // g.TextRenderingHint = TextRenderingHint.AntiAlias; - - // TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter; - // TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), Color.Gray, flags); - // return bitmap; - //} - - private Bitmap CreateFileIcon(Font font, string text, Color backColor, Color foreColor, int padding) - { - using var g1 = this.CreateGraphics(); - var sizeF = g1.MeasureString(text, font); - - var width = (int)sizeF.Width + LogicalToDeviceUnits(padding); - var height = (int)sizeF.Height + LogicalToDeviceUnits(padding); - - var bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb); - using Graphics g = Graphics.FromImage(bitmap); - g.SmoothingMode = SmoothingMode.AntiAlias; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.PixelOffsetMode = PixelOffsetMode.HighQuality; - g.TextRenderingHint = TextRenderingHint.AntiAlias; - - using var bgBrush = new SolidBrush(backColor); - using var fgBrush = new SolidBrush(foreColor); - g.FillRectangle(bgBrush, 0, 0, width, height); - - StringFormat sf = new StringFormat(); - sf.LineAlignment = StringAlignment.Center; - sf.Alignment = StringAlignment.Center; - sf.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox | StringFormatFlags.FitBlackBox; - - g.DrawString(text, font, fgBrush, (sizeF.Width + LogicalToDeviceUnits(padding)) / 2 - sizeF.Width / 2, (sizeF.Height + LogicalToDeviceUnits(padding)) / 2 - sizeF.Height / 2); - - //TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter| TextFormatFlags.; - //g.DrawString(text, font, fgBrush, new Rectangle(0, 0, bitmap.Width, bitmap.Height), sf); - //TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), foreColor, flags); - return bitmap; - } - - private Bitmap CreateToolbarIcon(Font font, string text, Color foreColor, int paddingW = 0, int paddingH = 0) - { - using var g1 = this.CreateGraphics(); - var sizeF = g1.MeasureString(text, font); - - var width = (int)sizeF.Width + LogicalToDeviceUnits(paddingW); - var height = (int)sizeF.Height + LogicalToDeviceUnits(paddingH); - - var bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); - using Graphics g = Graphics.FromImage(bitmap); - g.SmoothingMode = SmoothingMode.AntiAlias; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.PixelOffsetMode = PixelOffsetMode.HighQuality; - g.TextRenderingHint = TextRenderingHint.AntiAlias; - - //using var bgBrush = new SolidBrush(backColor); - using var fgBrush = new SolidBrush(foreColor); - //g.FillRectangle(bgBrush, 0, 0, width, height); - - StringFormat sf = new StringFormat(); - sf.LineAlignment = StringAlignment.Center; - sf.Alignment = StringAlignment.Center; - sf.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox | StringFormatFlags.FitBlackBox; - - g.DrawString(text, font, fgBrush, (sizeF.Width + LogicalToDeviceUnits(paddingW)) / 2 - sizeF.Width / 2, (sizeF.Height + LogicalToDeviceUnits(paddingH)) / 2 - sizeF.Height / 2); - - //TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter| TextFormatFlags.; - //g.DrawString(text, font, fgBrush, new Rectangle(0, 0, bitmap.Width, bitmap.Height), sf); - //TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), foreColor, flags); - return bitmap; - } - - //public InProgressDownloadEntry? GetInProgressDownloadEntry(string downloadId) => - // this.downloadsDB.InProgressItems.FindDownload(downloadId)?.DownloadEntry; - - //public InProgressDownloadEntryBinder? GetInProgressDownloadEntryBinder(string downloadId) => - // this.downloadsDB.InProgressItems.FindDownload(downloadId); - - public void RunOnUIThread(Action action) - { - if (InvokeRequired) - { - BeginInvoke(action); - } - else - { - action.Invoke(); - } - } - - //public void RunOnNewThread(Action action) - //{ - // var t = new Thread(() => - // { - // try - // { - // action.Invoke(); - // } - // catch (Exception ex) - // { - // Log.Debug(ex, ex.Message); - // } - // }) - // { Name = "NEw threAD" }; - // t.SetApartmentState(ApartmentState.STA); - // t.Start(); - //} - - public void ShowBatchDownloadWindow(IApp app, IAppUI appUi) - { - using var dlg = new BatchDownloadWindow(app, appUi); - dlg.ShowDialog(this); - } - - private void batchDownloadToolStripMenuItem_Click(object sender, EventArgs e) - { - BatchDownloadClicked?.Invoke(sender, e); - } - - //public void SetDownloadStatusWaiting(string id) - //{ - // var ent = GetInProgressDownloadEntryBinder(id); - // if (ent != null) - // { - // ent.Status = DownloadStatus.Waiting; - // } - //} - - //public IEnumerable GetEnumerable() - //{ - // return this.downloadsDB.InProgressItems.GetDownloadEntries(); - //} - - //private InProgressDownloadEntry? GetSelectedInProgressEntry() - //{ - // if (dgActiveList.SelectedRows.Count < 1) return null; - // return this.downloadsDB.InProgressItems[dgActiveList.SelectedRows[0].Index].DownloadEntry;// dgActiveList.SelectedRows[0].Cells[1].Value as InProgressDownloadEntry; - //} - - //private FinishedDownloadEntry? GetSelectedFinishedEntry() - //{ - // if (dgCompletedList.SelectedRows.Count < 1) return null; - // return this.downloadsDB.FinishedItems[dgCompletedList.SelectedRows[0].Index]; - // //return dgCompletedList.SelectedRows[0].Cells[1].Value as FinishedDownloadEntry; - //} - - //private void ApplyFilter() - //{ - // ApplyFilter(false); - //} - - //private void ClearFilter() - //{ - // ApplyFilter(true); - //} - - //private void ApplyFilter(bool clear) - //{ - // //var index = dgCategories.SelectedRows[0].Index; - // //var category = (Category)dgCategories.Rows[index].Cells[1].Value; - // //Log.Debug("Selected category: " + category); - - // //dgActiveList.SuspendLayout(); - // //dgCompletedList.SuspendLayout(); - - // //var filter = new StringBuilder(); - - // //if (!clear) - // //{ - // // if (textBox1.Text.Length > 0) - // // { - // // filter.Append($"CONVERT( NameCol, System.String) LIKE '%{textBox1.Text}%'"); - // // } - // // if (category.FileExtensions.Count > 0) - // // { - // // if (filter.Length > 0) - // // { - // // filter.Append(" AND "); - // // } - // // filter.Append($"ImgCol IN ({string.Join(",", category.FileExtensions.Select(x => "'" + x + "'"))})"); - // // } - // //} - - // ////var filter = category.FileExtensions.Count > 0 ? $"ImgCol IN ({string.Join(",", category.FileExtensions.Select(x => "'" + x + "'"))})" : string.Empty; - // //Log.Debug("Setting row filter: " + filter); - // //tabComplete.DefaultView.RowFilter = filter.ToString(); - // ////this.categoryFilter = category; - // ////this.tabIncomplete.Clear(); - // ////this.tabComplete.Clear(); - // ////app.LoadDownloadList(); - - // //dgActiveList.ResumeLayout(); - // //dgCompletedList.ResumeLayout(); - - // //dgCompletedList.ClearSelection(); - // //if (dgCompletedList.Rows.Count > 0) - // //{ - // // dgCompletedList.FirstDisplayedScrollingRowIndex = 0; - // //} - //} - - private void ApplyCategoryFilter() - { - if (IsInProgressViewSelected) - { - this.downloadsDB.InProgressItems.UpdateView(this.searchText); - this.dgActiveList.SuspendLayout(); - this.dgActiveList.RowCount = 0; - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Refresh(); - this.dgActiveList.ClearSelection(); - this.dgActiveList.ResumeLayout(); - } - else - { - var index = dgCategories.SelectedRows[0].Index; - var category = (Category)dgCategories.Rows[index].Cells[1].Value; - Log.Debug("Updating view with category: " + category); - this.downloadsDB.FinishedItems.UpdateView(this.searchText, category); - this.dgCompletedList.SuspendLayout(); - this.dgCompletedList.RowCount = 0; - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Refresh(); - this.dgCompletedList.ClearSelection(); - this.dgCompletedList.ResumeLayout(); - } - //Log.Debug("Selected category: " + category); - - //dgActiveList.SuspendLayout(); - //dgCompletedList.SuspendLayout(); - - //var filter = new StringBuilder(); - //if (category.FileExtensions.Count > 0) - //{ - // filter.Append($"ImgCol IN ({string.Join(",", category.FileExtensions.Select(x => "'" + x + "'"))})"); - //} - ////filter.Append(category.FileExtensions.Count > 0 ? $"ImgCol IN ({string.Join(",", category.FileExtensions.Select(x => "'" + x + "'"))})" : string.Empty); - - //if (!string.IsNullOrEmpty(searchText)) - //{ - // if (filter.Length > 0) - // { - // filter.Append(" AND "); - // filter.Append($"CONVERT( NameCol, System.String) LIKE '%{searchText}%'"); - // } - //} - - //Log.Debug("Setting row filter: " + filter); - //tabComplete.DefaultView.RowFilter = filter.ToString(); - ////this.categoryFilter = category; - ////this.tabIncomplete.Clear(); - ////this.tabComplete.Clear(); - ////app.LoadDownloadList(); - - //dgActiveList.ResumeLayout(); - //dgCompletedList.ResumeLayout(); - - //dgCompletedList.ClearSelection(); - //if (dgCompletedList.Rows.Count > 0) - //{ - // dgCompletedList.FirstDisplayedScrollingRowIndex = 0; - //} - } - - private void ClearCategoryFilter() - { - if (IsInProgressViewSelected) - { - this.downloadsDB.InProgressItems.UpdateView(this.searchText); - this.dgActiveList.RowCount = 0; - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Refresh(); - this.dgActiveList.ClearSelection(); - } - else - { - this.downloadsDB.FinishedItems.UpdateView(this.searchText, null); - this.dgCompletedList.RowCount = 0; - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Refresh(); - this.dgCompletedList.ClearSelection(); - } - //dgActiveList.SuspendLayout(); - //dgCompletedList.SuspendLayout(); - //Log.Debug("clearing row filter"); - - //var filter = string.Empty; - //if (!string.IsNullOrEmpty(searchText)) - //{ - // filter = $"CONVERT( NameCol, System.String) LIKE '%{searchText}%'"; - //} - //tabComplete.DefaultView.RowFilter = filter; - - ////this.categoryFilter = null; - ////this.tabIncomplete.Clear(); - ////this.tabComplete.Clear(); - ////app.LoadDownloadList(); - - //dgActiveList.ResumeLayout(); - //dgCompletedList.ResumeLayout(); - - //dgCompletedList.ClearSelection(); - //if (dgCompletedList.Rows.Count > 0) - //{ - // dgCompletedList.FirstDisplayedScrollingRowIndex = 0; - //} - } - - private void LayoutMenuItems() - { - foreach (ContextMenuStrip menu in new[] { ctxMainMenu, ctxDownloadMenu, ctxMenuActiveList, ctxMenuCompletedList, ctxMenuNotifyIcon }) - { - MenuHelper.FixHiDpiMargin(menu); - //menu.ShowImageMargin = true; - //foreach (var item in menu.Items) - //{ - // if (item is ToolStripMenuItem menuItem) - // { - // menuItem.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; - // menuItem.Image = bmp; - // } - //} - } - } - - [DllImport("User32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer); - - [DllImport("User32.dll", CharSet = CharSet.Auto)] - public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); - - public void DeleteAllFinishedDownloads() - { - if (MessageBox.Show(this, "Remove all completed downloads?", "Confirm", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return; - } - downloadsDB.FinishedItems.Clear(); - dgCompletedList.RowCount = 0; - dgCompletedList.Refresh(); - } - - private void removeFinishedToolStripMenuItem_Click(object sender, EventArgs e) - { - this.ClearAllFinishedClicked?.Invoke(sender, e); - } - - public void ShowBrowserMonitoringDialog(IApp app) - { - ShowSettingsDialog(app, 0); - } - - private void browserMonitoringToolStripMenuItem_Click(object sender, EventArgs e) - { - BrowserMonitoringSettingsClicked?.Invoke(sender, e); - } - - public void ShowSettingsDialog(IApp app, int page = 1) - { - using var dlg = new SettingsWindow(app, page); - dlg.ShowDialog(this); - } - - private void settingsToolStripMenuItem1_Click(object sender, EventArgs e) - { - SettingsClicked?.Invoke(sender, e); - //using var dlg = new Win32SettingsWindow(fcRemixIcon, App); - //dlg.ShowDialog(this); - //ShowParallalism(); - } - - public void UpdateParallalismLabel() - { - //var maxParallalism = Config.Instance.MaxParallelDownloads; - //btnParallel.Text = "Queue and scheduler"; - } - - private void aboutXDMToolStripMenuItem_Click(object sender, EventArgs e) - { - using var aboutBox = new AboutBox(); - aboutBox.ShowDialog(this); - } - - private void btnParallel_Click(object sender, EventArgs e) - { - this.SchedulerClicked?.Invoke(sender, e); - //using var dlg = new Win32SettingsWindow(fcRemixIcon, App, 1); - //dlg.ShowDialog(this); - } - - // defined in winuser.h - const int WM_DRAWCLIPBOARD = 0x308; - - public IUpdaterUI CreateUpdateUIDialog(IAppUI ui) - { - return new UpdaterWindow(ui); - } - - private void btnHelp_Click(object sender, EventArgs e) - { - if (btnHelp.Tag != null) - { - UpdateClicked?.Invoke(sender, e); - } - else - { - HelpClicked?.Invoke(sender, e); - } - //if (btnHelp.Tag != null && App.Updates?.Count > 0) - //{ - // if (App.IsAppUpdateAvailable) - // { - // Helpers.OpenBrowser(App.UpdatePage); - // } - // else - // { - // if (MessageBox.Show(this, - // App.ComponentUpdateText, - // "Install/Update", - // MessageBoxButtons.YesNo) == DialogResult.Yes) - // { - // var updateDlg = new Win32ComponentUpdater(this); - // var commonUpdateUi = new ComponentUpdaterUI(updateDlg, App.Updates); - // updateDlg.Load += (_, _) => commonUpdateUi.StartUpdate(); - // updateDlg.Finished += (_, _) => - // { - // btnHelp.Image = CreateToolbarIcon(new Font(fcRemixIcon.Families[0], 12), - // RemixIcon.GetFontIcon(RemixIcon.HelpIcon), Color.DimGray); - // btnHelp.ForeColor = Color.DimGray; - // btnHelp.Text = "Help and support"; - // }; - // updateDlg.Visible = true; - // } - // } - //} - //else - //{ - // Helpers.OpenBrowser(App.HelpPage); - //} - } - - const int WM_CHANGECBCHAIN = 0x030D; - - public AuthenticationInfo? PromtForCredentials(string message) - { - using var dlg = new AuthenticationPrompt(); - dlg.PromptText = message ?? "Authentication required"; - if (dlg.ShowDialog() == DialogResult.OK) - { - return dlg.Credentials; - } - return null; - } - - private void helpAndSupportToolStripMenuItem_Click(object sender, EventArgs e) - { - Helpers.OpenBrowser("https://subhra74.github.io/xdm/redirect-support.html"); - } - - private void reportAProblemToolStripMenuItem_Click(object sender, EventArgs e) - { - Helpers.OpenBrowser("https://subhra74.github.io/xdm/redirect-issue.html"); - } - - private void checkForUpdateToolStripMenuItem_Click(object sender, EventArgs e) - { - - //Helpers.OpenBrowser(App.UpdatePage); - } - - public void ExportDownloads(IApp app) - { - using var fc = new SaveFileDialog(); - fc.FileName = "xdm-download-list.zip"; - fc.DefaultExt = "zip"; - fc.Filter = "All files (*.*)|*.*"; - if (fc.ShowDialog(this) == DialogResult.OK) - { - Log.Debug("Exporting to: " + fc.FileName); - app.Export(fc.FileName); - } - } - - private void exportToolStripMenuItem_Click(object sender, EventArgs e) - { - ExportClicked?.Invoke(sender, e); - } - - public void ImportDownloads(IApp app) - { - using var fc = new OpenFileDialog(); - fc.DefaultExt = "zip"; - if (fc.ShowDialog(this) == DialogResult.OK) - { - Log.Debug("Exporting to: " + fc.FileName); - app.Import(fc.FileName); - } - } - - private void importToolStripMenuItem_Click(object sender, EventArgs e) - { - ImportClicked?.Invoke(sender, e); - } - - public void UpdateBrowserMonitorButton() - { - btnMonitoring.Text = - Config.Instance.IsBrowserMonitoringEnabled ? - RemixIcon.GetFontIcon("f205") : - RemixIcon.GetFontIcon("f204"); - } - - private void btnMonitoring_Click(object sender, EventArgs e) - { - BrowserMonitoringButtonClicked?.Invoke(sender, e); - } - - //private void StopSelectedDownloads() - //{ - // App?.StopDownloads(this.GetInProgressSelectedItems().Select(x => x.DownloadEntry.Id), true); - //} - - // public int LogicalToDeviceUnits(int value) - // { - //#if NET472_OR_GREATER - // return base.LogicalToDeviceUnits(value); - //#else - // return WinFormsPolyfill.LogicalToDeviceUnits(value); - //#endif - // } - - private const int EM_SETCUEBANNER = 0x1501; - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); - - //public void LoadDownloadsDB() - //{ - // this.downloadsDB.FinishedItems.Load(); - // this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - // this.dgCompletedList.Columns["CompletedDateCol"].HeaderCell.SortGlyphDirection = SortOrder.Descending; - // this.dgCompletedList.ClearSelection(); - - // this.downloadsDB.InProgressItems.Load(); - // this.dgActiveList.AutoGenerateColumns = false; - // this.dgActiveList.DataSource = this.downloadsDB.InProgressItems.DataSource; - // this.dgActiveList.ClearSelection(); - //} - - public void ShowUpdateAvailableNotification() - { - btnHelp.Image = CreateToolbarIcon(ri12Font, - RemixIcon.GetFontIcon(RemixIcon.NotificationIcon), FormColors.IconColor); - btnHelp.Text = "Update(s) available"; - btnHelp.ForeColor = FormColors.IconColor; - btnHelp.Tag = new object(); - } - - public void ClearUpdateInformation() - { - RunOnUIThread(() => - { - btnHelp.Image = CreateToolbarIcon(ri12Font, - RemixIcon.GetFontIcon(RemixIcon.HelpIcon), FormColors.FooterForeColor); - btnHelp.ForeColor = FormColors.FooterForeColor; - btnHelp.Text = "Help and support"; - btnHelp.Tag = null; - }); - } - - private void LoadTexts() - { - dgActiveList.Columns["NameCol"].HeaderText = TextResource.GetText("SORT_NAME"); - dgActiveList.Columns["ActiveDateCol"].HeaderText = TextResource.GetText("SORT_DATE"); - dgActiveList.Columns["SizeCol"].HeaderText = TextResource.GetText("SORT_SIZE"); - dgActiveList.Columns["StatusCol"].HeaderText = TextResource.GetText("SORT_STATUS"); - - dgCompletedList.Columns["CompletedNameCol"].HeaderText = TextResource.GetText("SORT_NAME"); - dgCompletedList.Columns["CompletedDateCol"].HeaderText = TextResource.GetText("SORT_DATE"); - dgCompletedList.Columns["CompletedSizeCol"].HeaderText = TextResource.GetText("SORT_SIZE"); - - btnNew.Text = TextResource.GetText("DESC_NEW"); - btnDelete.Text = TextResource.GetText("DESC_DEL"); - btnOpenFile.Text = TextResource.GetText("CTX_OPEN_FILE"); - btnOpenFolder.Text = TextResource.GetText("CTX_OPEN_FOLDER"); - btnResume.Text = TextResource.GetText("MENU_RESUME"); - btnPause.Text = TextResource.GetText("MENU_PAUSE"); - - this.toolbarTooltip.SetToolTip(this.btnDelete, TextResource.GetText("MENU_DELETE_DWN")); - this.toolbarTooltip.SetToolTip(this.btnOpenFolder, TextResource.GetText("CTX_OPEN_FOLDER")); //"Open containing folder"); - this.toolbarTooltip.SetToolTip(this.btnOpenFile, TextResource.GetText("CTX_OPEN_FILE")); //"Open downloaded file"); - this.toolbarTooltip.SetToolTip(this.btnResume, TextResource.GetText("MENU_RESUME")); //"Resume selected downloads"); - this.toolbarTooltip.SetToolTip(this.btnPause, TextResource.GetText("MENU_PAUSE")); //"Pause selected downloads"); - this.toolbarTooltip.SetToolTip(this.btnMenu, TextResource.GetText("LBL_MENU")); //"Menu"); - - settingsToolStripMenuItem1.Text = TextResource.GetText("TITLE_SETTINGS"); - removeFinishedToolStripMenuItem.Text = TextResource.GetText("MENU_DELETE_COMPLETED"); - browserMonitoringToolStripMenuItem.Text = TextResource.GetText("SETTINGS_MONITORING"); - helpAndSupportToolStripMenuItem.Text = TextResource.GetText("LBL_SUPPORT_PAGE"); - reportAProblemToolStripMenuItem.Text = TextResource.GetText("LBL_REPORT_PROBLEM"); - checkForUpdateToolStripMenuItem.Text = TextResource.GetText("MENU_UPDATE"); - aboutXDMToolStripMenuItem.Text = TextResource.GetText("MENU_ABOUT"); - exitToolStripMenuItem.Text = TextResource.GetText("MENU_EXIT"); - exportToolStripMenuItem1.Text = TextResource.GetText("MENU_EXPORT"); - importToolStripMenuItem.Text = TextResource.GetText("MENU_IMPORT"); - langToolStripMenuItem1.Text = TextResource.GetText("MENU_LANG"); - -#if NET5_0_OR_GREATER - textBox1.PlaceholderText = TextResource.GetText("LBL_SEARCH"); -#endif - - dgState.Rows[0].Cells[1].Value = TextResource.GetText("ALL_UNFINISHED"); - dgState.Rows[1].Cells[1].Value = TextResource.GetText("ALL_FINISHED"); - - newDownloadToolStripMenuItem.Text = TextResource.GetText("LBL_NEW_DOWNLOAD"); - videoDownloadToolStripMenuItem.Text = TextResource.GetText("LBL_VIDEO_DOWNLOAD"); - batchDownloadToolStripMenuItem.Text = TextResource.GetText("MENU_BATCH_DOWNLOAD"); - - label3.Text = TextResource.GetText("SETTINGS_MONITORING"); - btnHelp.Text = TextResource.GetText("LBL_SUPPORT_PAGE"); - btnParallel.Text = TextResource.GetText("DESC_Q_TITLE"); - - pauseToolStripMenuItem.Text = TextResource.GetText("MENU_PAUSE"); - resumeToolStripMenuItem.Text = TextResource.GetText("MENU_RESUME"); - deleteToolStripMenuItem.Text = TextResource.GetText("DESC_DEL"); - saveAsToolStripMenuItem1.Text = TextResource.GetText("CTX_SAVE_AS"); - refreshLinkToolStripMenuItem.Text = TextResource.GetText("MENU_REFRESH_LINK"); - showProgressToolStripMenuItem.Text = TextResource.GetText("LBL_SHOW_PROGRESS"); - copyURLToolStripMenuItem.Text = TextResource.GetText("CTX_COPY_URL"); - propertiesToolStripMenuItem.Text = TextResource.GetText("MENU_PROPERTIES"); - openToolStripMenuItem.Text = TextResource.GetText("CTX_OPEN_FILE"); - openFolderToolStripMenuItem.Text = TextResource.GetText("CTX_OPEN_FOLDER"); - deleteDownloadsToolStripMenuItem.Text = TextResource.GetText("MENU_DELETE_DWN"); - copyURLToolStripMenuItem1.Text = TextResource.GetText("CTX_COPY_URL"); - copyFileToolStripMenuItem.Text = TextResource.GetText("CTX_COPY_FILE"); - propertiesToolStripMenuItem1.Text = TextResource.GetText("MENU_PROPERTIES"); - restartToolStripMenuItem.Text = TextResource.GetText("MENU_RESTART"); - scheduleToolStripMenuItem.Text = TextResource.GetText("Q_SCHEDULE_TXT"); - downloadAgainToolStripMenuItem1.Text = TextResource.GetText("MENU_RESTART"); - moveToQueueToolStripMenuItem.Text = TextResource.GetText("Q_MOVE_TO"); - } - - public IInProgressDownloadRow? FindInProgressItem(string id) - { - return this.downloadsDB.InProgressItems.FindDownload(id); - } - - public IFinishedDownloadRow? FindFinishedItem(string id) - { - foreach (var item in this.downloadsDB.FinishedItems.AllItems) - { - if (id == item.Id) - { - return new FinishedDownloadEntryBinder(item); - } - } - return null; - } - - public void AddToTop(InProgressDownloadEntry entry) - { - this.downloadsDB.InProgressItems.Add(entry); - this.dgActiveList.SuspendLayout(); - this.dgActiveList.RowCount = 0; - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Refresh(); - this.dgActiveList.ClearSelection(); - this.dgActiveList.ResumeLayout(); - } - - public void AddToTop(FinishedDownloadEntry entry) - { - this.downloadsDB.FinishedItems.Add(entry); - this.dgCompletedList.SuspendLayout(); - this.dgCompletedList.RowCount = 0; - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Refresh(); - this.dgCompletedList.ClearSelection(); - this.dgCompletedList.ResumeLayout(); - } - - public void SwitchToInProgressView() - { - dgState.Rows[0].Selected = true; - } - - public void ClearInProgressViewSelection() - { - dgActiveList.ClearSelection(); - } - - public void SwitchToFinishedView() - { - dgState.Rows[1].Selected = true; - } - - public void ClearFinishedViewSelection() - { - dgCompletedList.ClearSelection(); - } - - public void RunOnUIThread(Action action, string id, int progress, double speed, long eta) - { - if (InvokeRequired) - { - BeginInvoke(action, id, progress, speed, eta); - } - else - { - action.Invoke(id, progress, speed, eta); - } - } - - public void Delete(IInProgressDownloadRow row) - { - this.downloadsDB.InProgressItems.Delete(row.DownloadEntry); - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Refresh(); - } - - public void Delete(IFinishedDownloadRow row) - { - //var firstVisibleRowIndex = this.dgCompletedList.FirstDisplayedScrollingRowIndex; - this.downloadsDB.FinishedItems.Delete(row.DownloadEntry); - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Refresh(); - } - - public void Delete(IEnumerable rows) - { - this.downloadsDB.InProgressItems.Delete(rows.Select(x => (InProgressDownloadEntryBinder)x)); - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Refresh(); - } - - public void Delete(IEnumerable rows) - { - //var firstVisibleRowIndex = this.dgCompletedList.FirstDisplayedScrollingRowIndex; - this.downloadsDB.FinishedItems.Delete(rows); - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Refresh(); - } - - public IEnumerable FinishedDownloads - { - get => this.downloadsDB.FinishedItems.AllItems; - set - { - this.downloadsDB.FinishedItems.Load(value); - this.dgCompletedList.RowCount = this.downloadsDB.FinishedItems.RowCount; - this.dgCompletedList.Columns["CompletedDateCol"].HeaderCell.SortGlyphDirection = SortOrder.Descending; - this.dgCompletedList.ClearSelection(); - } - } - - public IEnumerable InProgressDownloads - { - get => this.downloadsDB.InProgressItems.AllItems; - set - { - this.downloadsDB.InProgressItems.Load(value); - this.dgActiveList.RowCount = this.downloadsDB.InProgressItems.RowCount; - this.dgActiveList.Columns["ActiveDateCol"].HeaderCell.SortGlyphDirection = SortOrder.Descending; - //this.dgActiveList.AutoGenerateColumns = false; - //this.dgActiveList.DataSource = this.downloadsDB.InProgressItems.DataSource; - this.dgActiveList.ClearSelection(); - } - } - - public IList SelectedInProgressRows - { - get - { - if (dgActiveList.SelectedRows.Count < 1) return new List(0); - var list = new List(dgActiveList.SelectedRows.Count); - for (var i = 0; i < dgActiveList.SelectedRows.Count; i++) - { - list.Add(this.downloadsDB.InProgressItems[dgActiveList.SelectedRows[i].Index]); - } - return list; - } - } - - public IList SelectedFinishedRows - { - get - { - if (dgCompletedList.SelectedRows.Count < 1) return new List(0); - var list = new List(dgCompletedList.SelectedRows.Count); - for (var i = 0; i < dgCompletedList.SelectedRows.Count; i++) - { - list.Add(new FinishedDownloadEntryBinder( - this.downloadsDB.FinishedItems[dgCompletedList.SelectedRows[i].Index])); - } - return list; - } - } - - public IButton NewButton { get => this.newButton; } - public IButton DeleteButton { get => this.deleteButton; } - public IButton PauseButton { get => this.pauseButton; } - - private void newDownloadToolStripMenuItem_Click(object sender, EventArgs e) - { - this.NewDownloadClicked?.Invoke(sender, e); - } - - public IButton ResumeButton { get => this.resumeButton; } - public IButton OpenFileButton { get => this.openFileButton; } - public IButton OpenFolderButton { get => this.openFolderButton; } - - private void importExportToolStripMenuItem_Click(object sender, EventArgs e) - { - ImportClicked?.Invoke(sender, e); - } - - private void toolStripMenuItem1_Click(object sender, EventArgs e) - { - ExportClicked?.Invoke(sender, e); - } - - private void langToolStripMenuItem1_Click(object sender, EventArgs e) - { - using (var langDlg = new LanguageSelectionDlg()) - { - langDlg.ShowDialog(this); - } - } - - public bool IsInProgressViewSelected => dgState.SelectedRows.Count == 1 && dgState.Rows[0].Selected; - - public bool Confirm(object? window, string text) - { - if (window is not IWin32Window owner) - { - owner = this; - } - return MessageBox.Show(owner, text, "XDM", MessageBoxButtons.YesNo) == DialogResult.Yes; - } - - public void ConfirmDelete(string text, out bool approved, out bool deleteFiles) - { - var deleteDialog = new DeleteConfirmDlg - { - DescriptionText = text - }; - approved = false; - deleteFiles = false; - if (deleteDialog.ShowDialog(this) == DialogResult.OK) - { - approved = true; - deleteFiles = deleteDialog.ShouldDeleteFile; - } - } - - public void OpenNewDownloadMenu() - { - ctxDownloadMenu.Show(this.btnNew, new Point(0, btnNew.Height)); - } - - public void ShowMessageBox(object? window, string message) - { - if (window is not IWin32Window owner) - { - owner = this; - } - MessageBox.Show(owner, message, "XDM"); - } - - private void CreateMenuItems() - { - menuItems = new IMenuItem[] - { - new MenuItemWrapper("pause",pauseToolStripMenuItem), - new MenuItemWrapper("resume",resumeToolStripMenuItem), - new MenuItemWrapper("delete",deleteToolStripMenuItem), - new MenuItemWrapper("saveAs",saveAsToolStripMenuItem1), - new MenuItemWrapper("refresh",refreshLinkToolStripMenuItem), - new MenuItemWrapper("showProgress",showProgressToolStripMenuItem), - new MenuItemWrapper("copyURL",copyURLToolStripMenuItem), - new MenuItemWrapper("properties",propertiesToolStripMenuItem), - new MenuItemWrapper("open",openToolStripMenuItem), - new MenuItemWrapper("openFolder",openFolderToolStripMenuItem), - new MenuItemWrapper("deleteDownloads",deleteDownloadsToolStripMenuItem), - new MenuItemWrapper("copyURL1",copyURLToolStripMenuItem1), - new MenuItemWrapper("copyFile",copyFileToolStripMenuItem), - new MenuItemWrapper("properties1",propertiesToolStripMenuItem1), - new MenuItemWrapper("restart",restartToolStripMenuItem), - new MenuItemWrapper("schedule",scheduleToolStripMenuItem), - new MenuItemWrapper("downloadAgain",downloadAgainToolStripMenuItem1), - new MenuItemWrapper("moveToQueue",moveToQueueToolStripMenuItem) - }; - - var dict = new Dictionary(); - foreach (var mi in menuItems) - { - dict[mi.Name] = mi; - } - - this.MenuItemMap = dict; - } - - public string? SaveFileDialog(string? initialPath) - { - using var fc = new SaveFileDialog(); - if (!string.IsNullOrEmpty(initialPath)) - { - fc.FileName = initialPath; - } - //Path.Combine(item.TargetDir ?? Helpers.GetDownloadFolderByFileName(item.Name), item.Name); - if (fc.ShowDialog(this) != DialogResult.OK) - { - return null; - } - return fc.FileName; - } - - public IQueuesWindow CreateQueuesAndSchedulerWindow(IAppUI appUi) - { - var queueWindow = new QueuesWindow(appUi); - return queueWindow; - } - - public IQueueSelectionDialog CreateQueueSelectionDialog() - { - return new QueueSelectionDialog(); - } - - private void EnableDarkMode() - { - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - try - { - DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - //DarkModeHelper.AllowDarkModeForWindow(this.dgCompletedList.Handle, 1); - //DarkModeHelper.SetWindowTheme(this.dgCompletedList.Handle, "DarkMode_Explorer", null); - DarkModeHelper.EnableDarkMode(dgCompletedList); - DarkModeHelper.EnableDarkMode(dgActiveList); - DarkModeHelper.EnableDarkMode(dgCategories); - } - catch (Exception ex) - { - Log.Debug(ex, ex.Message); - } - } - - //public void SetInProgressDownloads(List list) - //{ - // this.inprogressList = list; - // this.dgActiveList.RowCount = list.Count; - // //this.dgCompletedList.Columns["CompletedDateCol"].HeaderCell.SortGlyphDirection = SortOrder.Descending; - // this.dgActiveList.ClearSelection(); - //} - - //[DllImport("user32.dll")] - //static extern bool SetForegroundWindow(IntPtr hWnd); - } -} diff --git a/app/XDM/XDM.WinForm.UI/AppWinPeer.resx b/app/XDM/XDM.WinForm.UI/AppWinPeer.resx deleted file mode 100644 index 43e5e6e..0000000 --- a/app/XDM/XDM.WinForm.UI/AppWinPeer.resx +++ /dev/null @@ -1,18176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - True - - - 17, 17 - - - 172, 17 - - - 322, 17 - - - 499, 17 - - - 625, 17 - - - 779, 17 - - - - - AAABAAEAAAAAAAEAIAAogBAAFgAAACgAAAAAAgAAAAQAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABSqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/WKyW/1ms - l/9QqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/2Cv - mv+51c7/vtfR/2OwnP9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gp - kv9nsp7/yNvW//f39//5+fn/zt/a/220ov9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9QqZL/dLel/9Hg3f/7+vr////////////7+/v/1+Pg/3q5qf9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/4O9rv/a5eL//fz8///////////////////////9/f3/3+jm/4vBs/9SqZP/UaqS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/1Oqk/+Vxbn/5uzq//39/f/////////////////////////////////+/v7/6u7t/57J - vv9VqpT/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Gpkv9YrJb/pMzB/+/x8P/+/v7///////////////////////////////////////// - ///+/v7/8vTz/6zPxv9brZj/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqZL/Xq6a/7DRyP/19fX//v7+//////////////////////////////////// - ///////////////////+////9/f3/7jUzf9jsJz/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UKmS/2iyn/+/2NH/9/f3//////////////////////////////////// - ////////////////////////////////////////+fn5/8jb1v9ttaL/UKiR/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9ytqT/0eDc//n5+f////////////////////////////// - ////////////////////////////////////////////////////////+vr6/9bj3/95uaj/UamS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/frur/9/n5f/7+/v///////////////////////// - /////////////////////////////////////////////////////////////////////////Pz8/+Tq - 6P+Gv7D/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqpP/VKqU/47CtP/m7Or//f39//////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v39/+ru7f+Xxbn/VquV/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1arlf+hyr//7O/v//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+/+/x8f+qzsT/WayX/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9drpn/s9LK//Dz8v/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7///P09P+81s//Ya+b/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/ZLCc/8LZ0//39/b///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////j4+P/J3Nf/abOg/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UKmR/2+1o//M3dn/+vr6//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////v7 - +//S4d3/drin/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1Gpkv9/u6v/1uPf//z8 - /P////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////38/P/c5uP/hr+w/1Gpkv9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gqkv9SqpP/j8O1/+Tr - 6f/9/f3///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////39/f/p7ez/mMa6/1SqlP9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/V6uV/53I - vf/t8O///f39//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/w8vL/pczC/1msl/9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1yt - mP+qzsX/9PT0//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////7+/v/29vb/stHJ/2Cv - m/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Co - kf9ksZ3/vNbP//b29v///v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///39/f/xNnU/2izn/9QqJH/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9RqZL/bbWi/8ze2f/4+Pj///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////5+vn/0uHd/3S3pf9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/3m5qP/a5eL/+vr6//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////8/Pz/4ejm/4C8rP9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UaqS/1Oqk/+KwLL/4unn//39/f////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/f3/5uzq/5PEt/9UqpT/UamS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Gpkv9Vq5T/nMi8/+nt7P/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/7O/v/6TL - wf9XrJb/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqZL/Wq2X/67Qx//v8fH//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/v7/8vPz/7bUzP9drpn/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UamS/2Gvm/+81c//9fb2//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9/j3/8TZ1P9msZ7/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkv9stKH/xtvW//n5+f////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////+/r6/83e2v9ytqX/UKmS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/erqp/9Lh3f/7+/v///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////Pz8/9nk4f+Bva3/UKmR/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqpP/UqqT/4nAsv/h6ef//Pz8//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////f39/+bs - 6v+Sw7b/VKqT/1Gqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1WrlP+Xxbn/7O/u//39/f////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+/+/x8f+fyL3/V6uW/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9arZf/pczB//Hz8v/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//P09P+uz8b/Xq6Z/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/YK+a/7fUzP/09fX///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////b29v+/19H/ZbGd/1Cpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/2qzoP/J3Nf/9vf3//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////j4+P/Q4Nv/cLWj/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv90t6b/1uPf//r6 - +v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////v7 - +//c5uP/erqp/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gqk/9RqZL/hb6v/97n - 5f/8/Pz///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////39/f/j6uj/jsG0/1Kqk/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/VKqU/5fF - uf/l7Or//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/p7u3/oMq//1arlf9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1is - lv+ozcP/7vHw//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/x8/L/sNHJ/1qtl/9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cp - kv9frpr/ttPL//T19f/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////29vb/vdfQ/2Sw - nP9QqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9RqZL/Z7Kf/8DY0v/5+Pj///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///6+vr/yNvW/261ov9QqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UKiR/3e4p//Q39z/+vr6//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////7+/v/1uPg/327q/9QqZH/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kpk/+Evq7/3ufl//v8/P////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////8/Pz/5Oro/4vAs/9TqpP/UaqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9UqpT/kMK1/+ru7f/9/f3///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////9/f3/7fDv/5jGuv9Wq5X/UaqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqZL/WKyW/6DJv//u8fD//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/8PLy/6rO - xP9brZj/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UamS/12umf+z0sr/8vTz///+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////9PX1/7vVzv9hr5v/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkv9msZ3/xNrU//X29v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////9/j4/8zd2f9rs6D/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/cLWj/9Dg3P/6+vr///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////+/v7/9fj4P92uKb/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/UamS/4G8rf/b5eL//Pz8//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////fz9/+Do5v+KwLL/UqmT/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1Oqk/+SxLf/4+no//39/f////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////v39/+fs - 6/+ax7z/VKqU/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9Wq5X/ocq//+zw7//+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//Dy8f+qzsT/WayW/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/Xa6Z/6/Qx//z9PT//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////v7+//b29v+308v/YK+b/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UKmS/2Sxnf+81s//9/f3//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////n4+f/D2dP/a7Og/1Cpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkf9wtqP/zN7Z//n5 - +f////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////r6+v/S4d3/d7in/1Cp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqZL/frur/93m - 4//7+/v///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////z8 - /P/i6ef/hb6v/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/U6qT/4rA - sv/m7Or//f39//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////39/f/q7u3/ksO2/1WrlP9RqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1ar - lf+cyLz/6+/u//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/u8fD/pcvB/1mslv9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gp - kv9brZj/rtDH//Dy8f///v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////y8/P/ttPL/1+umv9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9QqZL/YrCb/7/Y0f/19fX///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////39/f/x9vW/2ey - nv9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UKmS/2y0ov/L3tn/+fn5//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///6+vr/0uHd/3O2pf9QqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Cpkv98u6r/1eLf//z8/P////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////9/Pz/2+Xj/4W+r/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Gpkv9SqZL/jMG0/+Dp5v/9/f3///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////9/f3/5evp/5TFuP9TqpP/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqpL/VquV/5vHvP/q7u3//f39//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7/7vHw/6PLwf9YrJb/UamS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UamS/1qtl/+ozMP/8/Pz//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/9fX1/7DQ - yP9erpn/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkv9jsJz/ttTM//X29v/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////9/j4/7/X0f9nsp7/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/bLSh/8jc1//4+Pj///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////+fn5/9Dg2/9ytqT/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/3m5qP/a5OL/+vr6//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////+/v7/9/n5v9/u6z/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Oqk/+Gvq//4unn//38/P////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////f39/+fs6v+NwbT/VKqU/1Gq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9Uq5T/l8a5/+jt7P/+/f3///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////v7+/+zv - 7v+gyb7/VquV/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/WayW/6rOxf/t8PD//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////v7+//Dz8v+y0sn/XK2Y/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1+umv+51c7/9PX0//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////b29v/B2dP/Y7Cc/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkv9qs6D/xtvV//n5 - +f////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////r6+v/M3dn/cLWj/1Cpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/eLmo/9Dg - 3P/8+/v///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////z7/P/X4+D/f7ys/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/4e/ - sP/f5+X//Pz8//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////39 - /f/j6uj/j8O1/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UaqS/1Wr - lP+Vxbn/6e3s//39/f////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////39/f/t8O//nci9/1erlf9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gq - kv9ZrJb/osq///Hy8v/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/z9PT/qs3E/1utmP9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9QqZL/X6+a/7LSyf/z9fT//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////7+/v/29vb/u9XO/2OxnP9QqZH/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/2iyn//E2tT/9vf3//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////4+Pj/y93Z/261 - ov9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Gpkv90t6X/1uLf//r6+v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///7+/v/2+bj/3q5qf9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqZL/gbyt/97n5f/8/Pz///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////9/P3/4+ro/4jAsf9TqpP/UaqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqZL/U6qT/5LDtv/l6+r//f39//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7/6e3s/5vHvP9Vq5T/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UamS/1erlf+ky8H/6+/u//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7/7vHw/63Pxv9ZrJb/UamS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9drpn/s9LK//Lz8//+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////9fX1/7vV - zv9hr5v/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/ZrGe/7/Y0f/4+Pj///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+vn5/8bb1v9ss6H/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UKmS/3O3pf/M3tn/+/r6//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////+/v7/9Th3v97uqn/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv+BvK3/2+Xj//v7+/////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////Pz8/+Do5v+JwLH/UqmT/1Gqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gqk/9TqpP/j8K1/+fs6//8/Pz///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////f39/+zv7v+Wxbn/VauU/1Gq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqpL/V6uV/5zHvP/u8O///v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////v7+//Hy - 8v+ky8H/Wq2X/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1yumf+uz8b/8fPz//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////T19f+108v/X6+a/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkv9ksZ3/wNjS//T2 - 9f////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////b39//I3Nf/abOf/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/b7Wi/9Hg - 3P/5+fn///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////r6+v/W49//dbem/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/327 - q//a5eL//Pv7//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////z8/P/f5+X/hb6v/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1Oq - k/+NwrT/4enn//39/f////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////79 - /f/l6+n/lcW4/1Sqk/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gp - kv9Vq5T/n8m+/+ru7f/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/t8PD/p8zC/1erlf9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9RqZL/W62Y/63Pxv/x8/P//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////7+/v/09fT/tdPL/1+umf9QqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/2OwnP+51c7/+Pf3//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////5+Pn/wNjR/2iyn/9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Cpkf9wtaP/ydzW//n5+f////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////6+vr/0ODc/3a4 - p/9QqZH/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqZL/e7qq/9jk4f/7+/v///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///8/Pz/3ufk/4O9rv9SqZP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/4jAsf/l6+n//Pz8//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////9/f3/6u7s/5DCtf9TqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UaqS/1arlf+Xxrr/6+7t//79/f////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7/7vDw/5/Jvv9YrJb/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9ZrZf/qM3D/+/y8f/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v//8vPz/7LRyf9drpn/UamS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/Ya+b/7zWz//z9fT///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////9fb2/8Ta - 1P9lsZ3/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/2uzoP/K3dj/+fn5//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+vr6/9Hg3P9xtqT/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkv94uaj/1OLe//z7+/////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////Pz8/9rl4v+AvKz/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9RqZL/ib+x/93n5P/9/f3///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////f39/+Lp6P+Rw7b/UqqT/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqpL/VKqU/5jGuv/o7ev//f39//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+/+zv7v+hysD/VquV/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1msl/+mzMP/8PLx//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////v7+//P0 - 9P+u0Mb/XK2Y/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9fr5r/s9LJ//b2 - 9v/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////j39/+71s//ZbGd/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZH/a7Oh/8Xb - 1f/4+Pj///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////n5+f/M3dn/cLak/1Cpkf9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/3e4 - p//V4t//+fr6//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////v7+//c5uP/fbur/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/+Cva7/4unn//z8/P////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////38/P/m6+r/icCy/1Oq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gq - k/9UqpT/kcO2/+js6//9/f3///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/s7+7/m8e7/1arlf9RqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9RqZL/WKyW/6XLwf/s8O///v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/v8fH/rM/G/1utl/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/12umf+31Mz/8vTz//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////09vX/vtfR/2Kwm/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Cpkv9osp7/xdrU//j4+P////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////5+fn/zN7Z/220ov9QqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9RqZL/dLem/8/f2//7+/v///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////8+/v/1eLf/3y6 - qv9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UKmS/4S+r//b5eL//Pz8//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///9/Pz/4Ojm/4vAsv9RqZL/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UaqT/1Sqk/+SxLf/5uvp//39/f////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////9/f3/6e3t/5rHvP9Vq5X/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9XrJX/oMm+/+/x8P/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7/8vPz/6jNw/9arZf/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/Xq6Z/67Qx//09fX//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////+/v7/9fb2/7bTzP9jsJz/UKmS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/2eynv/B2NL/9vf3//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////+Pj4/8nc - 1/9ttKL/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9ytqT/0uHd//j5+f////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+vr6/9nl4f94uaj/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqZP/fbur/93m5P/8+/v///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////Pz8/+Lp5/+Evq//U6qT/1Gqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqpP/U6qT/43Bs//k6+n//f39//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////f39/+nt7P+Wxbj/VKuU/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/1arlf+gyb7/6e7t//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+/+3w7/+ozcP/WayW/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9brZf/sdHI//Hz - 8v/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////T1 - 9P+51c7/X6+a/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9QqZL/ZbGd/7/X - 0f/39/f///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////j4+P/H29X/arOg/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UKmS/3C2 - o//K3dj/+vr6//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////v7+//R4Nz/eLmo/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cp - kv9+u6v/2OTg//v7+/////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////z8/P/d5uT/hr+w/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gq - k/9TqpP/jMGz/+Pq6P/8/Pz///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////39/f/o7ez/lMW4/1Sq - lP9RqpL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9RqpP/VquV/5nGuv/u8PD//f39//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/w8vH/ocq//1islv9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/1ytmP+nzcP/8fPz//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////7+/v/09fT/sdHJ/1+vmv9QqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Gpkv9jsJz/vdfQ//X29v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////29/f/xdrU/2izn/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9QqZL/bbSh/8/f2v/4+Pj///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////5+vr/1eLf/3K2pf9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UamS/3m5qP/Z5OH/+/v7//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////8/Pz/3ufl/4C8 - rP9SqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/+Iv7H/4Ojm//39/f////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///+/f3/5Orp/5HDtv9TqpP/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gpkv9UqpT/m8i8/+js6//+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////+/v7/6+/u/6PLwP9Wq5X/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/WayX/6vOxf/v8fH//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////+/v7/8vPz/7PSyv9drpj/UamS/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/2Kwm/+51M3/9vb2//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////+Pj4/8DY0v9nsp7/UKmS/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cpkf9ttaL/xtrV//n5+f////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////+vr6/87e - 2v9zt6X/UKmS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/ebmp/9Th3v/6+vr///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ////////+/v7/9rk4v+AvK3/UamS/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqmT/4a+sP/i6ef/+/z7//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////Pz9/+fs6/+OwrT/U6qT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UaqS/1WrlP+TxLf/6u7t//39 - /f////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////v7+/+7w8P+bx7z/V6uW/1Gpkv9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gqkv9ZrJb/o8vB/+/x - 8f/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////v7+//Lz8/+sz8b/XK6Y/1Gp - kv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9RqZL/YK+b/7nV - zv/y9PT///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////X2 - 9v/B2dP/ZbGd/1Cpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UamS/2iy - n//J3Nf/9/j3//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////n5+f/Q4Nz/brWi/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Cp - kv91t6b/1OLe//v6+v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////v7+//a5OL/e7qq/1Gpkv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Gq - k/9RqZL/g72u/9vl4//9/Pz///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////39/f/g6Ob/jMGz/1Kqk/9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9RqZL/U6mT/5XEuP/m6+r//f39//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////7+/v/p7uz/nci9/1Wr - lP9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UamS/1islv+lzMH/7vDv//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/x8/L/rc/G/1utl/9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Gpkv9fr5r/sdHJ//b19v/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////49/f/udTN/2OwnP9RqZL/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9QqZL/arOg/8LZ0//4+Pj///7///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////5+fn/ytzY/2+1o/9PqJH/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UamS/2myn//A1tD/3eTi/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Do5f/p6+v//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////+/v7/6uzs/+Do - 5f/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho - 5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/h6Ob/4ejm/+Ho5v/e5eP/xNfS/220of9RqZL/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/U6qT/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/UqmS/7jTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////7+ - /v/B19L/UqmS/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1ar - lf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/VquV/1arlf9Wq5X/U6qT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////////////////+ - /v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+ - /v////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06o - kP+308z//v7+//////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/TqiQ/7fTzP/+/v7///////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////+/v/A19H/TqiQ/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////7+/8DX - 0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fTzP/+/v7///////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9OqJD/t9PM//7+/v////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////7+/8DX0f9OqJD/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/06okP+308z//v7+//// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////v7/wNfR/06okP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7fT - zP/+/v7///////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////+/v/A19H/TqiQ/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9OqJD/t9PM//7+/v////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////7+/8DX0f9OqJD/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/06okP+308v//v7+//////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////v7/wNfR/06o - kP9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/TqiQ/7PRyf/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs7P/q7Oz/6uzs/+rs - 7P+71M7/TqiQ/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/V6yW/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qtl/9arZf/Wq2X/1qt - l/9arZf/Wq2X/1islv9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kqk/9SqpP/UqqT/1Kq - k/9SqpP/UqqT/1Kqk/9SqpP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.Designer.cs b/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.Designer.cs deleted file mode 100644 index 7f71acd..0000000 --- a/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.Designer.cs +++ /dev/null @@ -1,178 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class AuthenticationPrompt - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button1, 3, 4); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 4); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox3, 1, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 5; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(301, 183); - this.tableLayoutPanel1.TabIndex = 2; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 4); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(295, 15); - this.label1.TabIndex = 0; - this.label1.Text = "Message"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(3, 15); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(63, 29); - this.label2.TabIndex = 1; - this.label2.Text = "User name"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(225, 155); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.button1.Size = new System.Drawing.Size(73, 25); - this.button1.TabIndex = 2; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(146, 155); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(20, 0, 20, 0); - this.button2.Size = new System.Drawing.Size(73, 25); - this.button2.TabIndex = 3; - this.button2.Text = "OK"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // textBox2 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox2, 3); - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(72, 18); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(226, 23); - this.textBox2.TabIndex = 5; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(3, 44); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(63, 29); - this.label3.TabIndex = 6; - this.label3.Text = "Password"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox3 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox3, 3); - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(72, 47); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(226, 23); - this.textBox3.TabIndex = 7; - this.textBox3.UseSystemPasswordChar = true; - // - // Win32AuthenticationPrompt - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(301, 183); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Win32AuthenticationPrompt"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Authentication required"; - this.TopMost = true; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox3; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.cs b/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.cs deleted file mode 100644 index a9d9649..0000000 --- a/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; - -using System.Windows.Forms; -using XDM.Core.Lib.Common; - -namespace XDM.WinForm.UI -{ - public partial class AuthenticationPrompt : Form - { - public AuthenticationPrompt() - { - InitializeComponent(); - } - - public AuthenticationInfo? Credentials => new AuthenticationInfo { UserName = textBox2.Text, Password = textBox3.Text }; - - private void button2_Click(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(textBox2.Text)) - { - MessageBox.Show("User name is empty"); - return; - } - DialogResult = DialogResult.OK; - Visible = false; - } - - private void button1_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.Cancel; - Visible = false; - } - - public string PromptText { set => label1.Text = value; } - } -} diff --git a/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.resx b/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/AuthenticationPrompt.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.Designer.cs b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.Designer.cs deleted file mode 100644 index e6ae907..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.Designer.cs +++ /dev/null @@ -1,171 +0,0 @@ - -namespace XDM.WinForm.UI.BachDownloadPages -{ - partial class BatchDownloadPage1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.tabControl1, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 2; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(698, 485); - this.tableLayoutPanel1.TabIndex = 0; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(603, 457); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(33, 25); - this.button1.TabIndex = 0; - this.button1.Text = "OK"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(642, 457); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(53, 25); - this.button2.TabIndex = 1; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // tabControl1 - // - this.tableLayoutPanel1.SetColumnSpan(this.tabControl1, 3); - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(3, 3); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(692, 448); - this.tabControl1.TabIndex = 2; - // - // tabPage1 - // - this.tabPage1.Location = new System.Drawing.Point(4, 24); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(684, 420); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Pattern"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.textBox1); - this.tabPage2.Controls.Add(this.label1); - this.tabPage2.Location = new System.Drawing.Point(4, 24); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(684, 420); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Links"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(3, 18); - this.textBox1.Multiline = true; - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(678, 399); - this.textBox1.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Top; - this.label1.Location = new System.Drawing.Point(3, 3); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(189, 15); - this.label1.TabIndex = 1; - this.label1.Text = "Please paste download links below"; - // - // BatchDownloadPage1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "BatchDownloadPage1"; - this.Size = new System.Drawing.Size(698, 485); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tabControl1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - } -} diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.cs b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.cs deleted file mode 100644 index 614cc69..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.cs +++ /dev/null @@ -1,92 +0,0 @@ -using TraceLog; -using System; -using System.Drawing; -using System.Linq; -using System.Windows.Forms; -using Translations; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.BachDownloadPages -{ - public partial class BatchDownloadPage1 : UserControl - { - internal event EventHandler LinksAdded; - internal event EventHandler Cancelled; - private BatchDownloadSubPage1 subPage; - - public BatchDownloadPage1() - { - InitializeComponent(); - subPage = new BatchDownloadSubPage1 - { - Dock = DockStyle.Fill - }; - this.tabControl1.TabPages[0].Controls.Add(subPage); - this.tabControl1.Padding = new Point(LogicalToDeviceUnits(10), LogicalToDeviceUnits(5)); - this.tabControl1.Margin = new Padding(0, 0, 0, 10); - this.button1.Padding = this.button2.Padding = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(2) - , LogicalToDeviceUnits(10), LogicalToDeviceUnits(2)); - this.Padding = new Padding(LogicalToDeviceUnits(10)); - this.label1.Padding = new Padding(0, LogicalToDeviceUnits(10), 0, LogicalToDeviceUnits(10)); - LoadTexts(); - } - - private void button1_Click(object sender, EventArgs e) - { - if (tabControl1.SelectedIndex == 0) - { - if (subPage.BatchSize == 0) - { - MessageBox.Show(this, TextResource.GetText("BAT_NO_LINK")); - return; - } - LinksAdded?.Invoke(this, new BatchLinkEventArgs - { - Links = subPage.GenerateBatchLink() - }); - } - if (tabControl1.SelectedIndex == 1) - { - try - { - var uris = textBox1.Text.Split('\r', '\n').Where(x => x.Length > 0).Select(x => new Uri(x)).ToList(); - if (uris.Count < 1) - { - MessageBox.Show(this, TextResource.GetText("BAT_NO_LINK")); - return; - } - LinksAdded?.Invoke(this, new BatchLinkEventArgs - { - Links = uris - }); - } - catch (UriFormatException) - { - MessageBox.Show(this, TextResource.GetText("MSG_INVALID_URL")); - } - catch (Exception ex) - { - Log.Debug(ex, "Error"); - } - } - - } - - private void button2_Click(object sender, EventArgs e) - { - Cancelled?.Invoke(this, EventArgs.Empty); - } - - private void LoadTexts() - { - tabPage1.Text = TextResource.GetText("BAT_PATTERN"); - tabPage2.Text = TextResource.GetText("BAT_LINKS"); - button1.Text= TextResource.GetText("MSG_OK"); - button2.Text= TextResource.GetText("ND_CANCEL"); - label1.Text= TextResource.GetText("BAT_PASTE_LINK"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.resx b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.Designer.cs b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.Designer.cs deleted file mode 100644 index cc54a54..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.Designer.cs +++ /dev/null @@ -1,236 +0,0 @@ - -namespace XDM.WinForm.UI.BachDownloadPages -{ - partial class BatchDownloadPage2 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); - this.label2 = new System.Windows.Forms.Label(); - this.button4 = new System.Windows.Forms.Button(); - this.button5 = new System.Windows.Forms.Button(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.doNotAddToQueueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.manageQueueAndSchedulersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tableLayoutPanel1.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 7; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.button1, 5, 3); - this.tableLayoutPanel1.Controls.Add(this.button2, 4, 3); - this.tableLayoutPanel1.Controls.Add(this.button3, 6, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.checkedListBox1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.button4, 6, 3); - this.tableLayoutPanel1.Controls.Add(this.button5, 0, 3); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(649, 391); - this.tableLayoutPanel1.TabIndex = 0; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(487, 363); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(100, 25); - this.button1.TabIndex = 2; - this.button1.Text = "Download Later"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(382, 363); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(99, 25); - this.button2.TabIndex = 1; - this.button2.Text = "Download Now"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(593, 332); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(53, 25); - this.button3.TabIndex = 3; - this.button3.Text = "..."; - this.button3.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 5); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(79, 332); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(508, 23); - this.textBox1.TabIndex = 4; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 329); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(70, 31); - this.label1.TabIndex = 5; - this.label1.Text = "label1"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // checkedListBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.checkedListBox1, 7); - this.checkedListBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkedListBox1.FormattingEnabled = true; - this.checkedListBox1.Location = new System.Drawing.Point(3, 18); - this.checkedListBox1.Name = "checkedListBox1"; - this.checkedListBox1.Size = new System.Drawing.Size(643, 308); - this.checkedListBox1.TabIndex = 6; - // - // label2 - // - this.label2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 6); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(3, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(584, 15); - this.label2.TabIndex = 7; - this.label2.Text = "Select items to download"; - // - // button4 - // - this.button4.AutoSize = true; - this.button4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button4.Location = new System.Drawing.Point(593, 363); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(53, 25); - this.button4.TabIndex = 8; - this.button4.Text = "Cancel"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // button5 - // - this.button5.AutoSize = true; - this.button5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button5.Location = new System.Drawing.Point(3, 363); - this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(70, 25); - this.button5.TabIndex = 9; - this.button5.Text = "Advanced"; - this.button5.UseVisualStyleBackColor = true; - this.button5.Click += new System.EventHandler(this.button5_Click); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.doNotAddToQueueToolStripMenuItem, - this.manageQueueAndSchedulersToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(231, 48); - // - // doNotAddToQueueToolStripMenuItem - // - this.doNotAddToQueueToolStripMenuItem.Name = "doNotAddToQueueToolStripMenuItem"; - this.doNotAddToQueueToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.doNotAddToQueueToolStripMenuItem.Text = "Do not add to queue"; - this.doNotAddToQueueToolStripMenuItem.Click += new System.EventHandler(this.doNotAddToQueueToolStripMenuItem_Click); - // - // manageQueueAndSchedulersToolStripMenuItem - // - this.manageQueueAndSchedulersToolStripMenuItem.Name = "manageQueueAndSchedulersToolStripMenuItem"; - this.manageQueueAndSchedulersToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.manageQueueAndSchedulersToolStripMenuItem.Text = "Manage queue and scheduler"; - this.manageQueueAndSchedulersToolStripMenuItem.Click += new System.EventHandler(this.manageQueueAndSchedulersToolStripMenuItem_Click); - // - // BatchDownloadPage2 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "BatchDownloadPage2"; - this.Size = new System.Drawing.Size(649, 391); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.CheckedListBox checkedListBox1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem doNotAddToQueueToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem manageQueueAndSchedulersToolStripMenuItem; - } -} diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.cs b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.cs deleted file mode 100644 index 20b8cb6..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.cs +++ /dev/null @@ -1,147 +0,0 @@ -using TraceLog; -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using Translations; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.BachDownloadPages -{ - public partial class BatchDownloadPage2 : UserControl - { - internal event EventHandler DownloadNow; - internal event EventHandler DownloadLater; - internal event EventHandler Cancelled; - - private AuthenticationInfo? authentication; - private ProxyInfo? proxy = Config.Instance.Proxy; - private int speedLimit = Config.Instance.DefaltDownloadSpeed; - private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; - private IAppUI appUI; - - public BatchDownloadPage2(IAppUI appUI) - { - InitializeComponent(); - this.appUI = appUI; - textBox1.Text = Helpers.GetDownloadFolderByFileName(null); - var padding1 = new Padding(LogicalToDeviceUnits(5), LogicalToDeviceUnits(2), - LogicalToDeviceUnits(5), LogicalToDeviceUnits(2)); - var padding2 = new Padding(LogicalToDeviceUnits(5)); - label1.Padding = label2.Padding = textBox1.Margin = button3.Margin = padding2; - button1.Padding = button4.Padding = button5.Padding = button2.Padding = padding1; - this.Padding = new Padding(LogicalToDeviceUnits(10)); - LoadTexts(); - } - - public void SetBatchLinks(IEnumerable links) - { - try - { - foreach (var link in links) - { - checkedListBox1.Items.Add(link, true); - } - } - catch (UriFormatException) - { - MessageBox.Show(this, TextResource.GetText("MSG_INVALID_URL")); - } - catch (Exception ex) - { - Log.Debug(ex, "Error"); - } - } - - private IEnumerable GetSelectedLinks() - { - foreach (Uri item in checkedListBox1.CheckedItems) - { - yield return item; - } - } - - private void button2_Click(object sender, EventArgs e) - { - DownloadNow?.Invoke(this, new BatchLinkDownloadEventArgs - { - Links = GetSelectedLinks(), - TargetFolder = textBox1.Text, - Authentication = authentication, - QueueId = null, - EnableSpeedLimit = enableSpeedLimit, - SpeedLimit = speedLimit, - Proxy = proxy - }); - } - - private void button1_Click(object sender, EventArgs e) - { - DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( - contextMenuStrip1, - (s, e) => - { - DownloadLater?.Invoke(this, new BatchLinkDownloadEventArgs - { - Links = GetSelectedLinks(), - TargetFolder = textBox1.Text, - Authentication = authentication, - QueueId = e.QueueId, - EnableSpeedLimit = enableSpeedLimit, - SpeedLimit = speedLimit, - Proxy = proxy - }); - }, - doNotAddToQueueToolStripMenuItem, - manageQueueAndSchedulersToolStripMenuItem, - button2, - this); - } - - private void button4_Click(object sender, EventArgs e) - { - Cancelled?.Invoke(this, EventArgs.Empty); - } - - private void button5_Click(object sender, EventArgs e) - { - AdvancedDialogHelper.Show(ref authentication, ref proxy, ref enableSpeedLimit, ref speedLimit, this); - } - - private void doNotAddToQueueToolStripMenuItem_Click(object sender, EventArgs e) - { - DownloadLater?.Invoke(this, new BatchLinkDownloadEventArgs - { - Links = GetSelectedLinks(), - TargetFolder = textBox1.Text, - Authentication = authentication, - QueueId = null, - EnableSpeedLimit = enableSpeedLimit, - SpeedLimit = speedLimit, - Proxy = proxy - }); - } - - private void manageQueueAndSchedulersToolStripMenuItem_Click(object sender, EventArgs e) - { - appUI.ShowQueueWindow(this.ParentForm); - } - - private void LoadTexts() - { - label2.Text = TextResource.GetText("BAT_SELECT_ITEMS"); - label1.Text = TextResource.GetText("LBL_SAVE_IN"); - button1.Text = TextResource.GetText("ND_DOWNLOAD_LATER"); - button2.Text = TextResource.GetText("ND_DOWNLOAD_NOW"); - button4.Text = TextResource.GetText("ND_CANCEL"); - button5.Text = TextResource.GetText("ND_MORE"); - - doNotAddToQueueToolStripMenuItem.Text = TextResource.GetText("LBL_QUEUE_OPT3"); - manageQueueAndSchedulersToolStripMenuItem.Text = TextResource.GetText("DESC_Q_TITLE"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.resx b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.resx deleted file mode 100644 index 661dc11..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadPage2.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.Designer.cs b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.Designer.cs deleted file mode 100644 index 714bb6b..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.Designer.cs +++ /dev/null @@ -1,461 +0,0 @@ - -namespace XDM.WinForm.UI.BachDownloadPages -{ - partial class BatchDownloadSubPage1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.comboBox2 = new System.Windows.Forms.ComboBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.numericUpDown2 = new System.Windows.Forms.NumericUpDown(); - this.label8 = new System.Windows.Forms.Label(); - this.label9 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.numericUpDown3 = new System.Windows.Forms.NumericUpDown(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit(); - this.SuspendLayout(); - // - // comboBox2 - // - this.comboBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox2.FormattingEnabled = true; - this.comboBox2.Items.AddRange(new object[] { - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z"}); - this.comboBox2.Location = new System.Drawing.Point(136, 136); - this.comboBox2.Name = "comboBox2"; - this.comboBox2.Size = new System.Drawing.Size(121, 23); - this.comboBox2.TabIndex = 28; - this.comboBox2.Visible = false; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Dock = System.Windows.Forms.DockStyle.Fill; - this.label7.Location = new System.Drawing.Point(13, 133); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(117, 29); - this.label7.TabIndex = 27; - this.label7.Text = "To"; - this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.label7.Visible = false; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Dock = System.Windows.Forms.DockStyle.Fill; - this.label6.Location = new System.Drawing.Point(13, 104); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(117, 29); - this.label6.TabIndex = 25; - this.label6.Text = "From"; - this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.label6.Visible = false; - // - // label1 - // - this.label1.AutoEllipsis = true; - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 6); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(13, 10); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 10); - this.label1.Size = new System.Drawing.Size(582, 40); - this.label1.TabIndex = 0; - this.label1.Text = "Download a group of sequential files using asterisk wild card (example http://xdm" + - "an.sourceforge.net/images/edge*.png)"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(13, 50); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(117, 29); - this.label2.TabIndex = 1; - this.label2.Text = "Address"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(13, 79); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(117, 25); - this.label3.TabIndex = 2; - this.label3.Text = "Replace asterisk with"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 5); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(136, 53); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(459, 23); - this.textBox1.TabIndex = 5; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(13, 162); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(117, 29); - this.label4.TabIndex = 6; - this.label4.Text = "From"; - this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.Location = new System.Drawing.Point(13, 191); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(117, 29); - this.label5.TabIndex = 7; - this.label5.Text = "To"; - this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // numericUpDown1 - // - this.numericUpDown1.Location = new System.Drawing.Point(136, 165); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(120, 23); - this.numericUpDown1.TabIndex = 8; - this.numericUpDown1.Value = new decimal(new int[] { - 1, - 0, - 0, - 0}); - // - // numericUpDown2 - // - this.numericUpDown2.Location = new System.Drawing.Point(136, 194); - this.numericUpDown2.Name = "numericUpDown2"; - this.numericUpDown2.Size = new System.Drawing.Size(120, 23); - this.numericUpDown2.TabIndex = 9; - this.numericUpDown2.Value = new decimal(new int[] { - 10, - 0, - 0, - 0}); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Dock = System.Windows.Forms.DockStyle.Fill; - this.label8.Location = new System.Drawing.Point(13, 220); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(117, 29); - this.label8.TabIndex = 15; - this.label8.Text = "First Address"; - this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Dock = System.Windows.Forms.DockStyle.Fill; - this.label9.Location = new System.Drawing.Point(13, 249); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(117, 29); - this.label9.TabIndex = 16; - this.label9.Text = "Second Address"; - this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Dock = System.Windows.Forms.DockStyle.Fill; - this.label10.Location = new System.Drawing.Point(13, 278); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(117, 29); - this.label10.TabIndex = 17; - this.label10.Text = "Last Address"; - this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox5 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox5, 5); - this.textBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox5.Location = new System.Drawing.Point(136, 252); - this.textBox5.Name = "textBox5"; - this.textBox5.Size = new System.Drawing.Size(459, 23); - this.textBox5.TabIndex = 19; - // - // textBox6 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox6, 5); - this.textBox6.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox6.Location = new System.Drawing.Point(136, 281); - this.textBox6.Name = "textBox6"; - this.textBox6.Size = new System.Drawing.Size(459, 23); - this.textBox6.TabIndex = 20; - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Checked = true; - this.radioButton1.Dock = System.Windows.Forms.DockStyle.Fill; - this.radioButton1.Location = new System.Drawing.Point(136, 82); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(121, 19); - this.radioButton1.TabIndex = 21; - this.radioButton1.TabStop = true; - this.radioButton1.Text = "Numbers"; - this.radioButton1.UseVisualStyleBackColor = true; - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.radioButton2, 4); - this.radioButton2.Dock = System.Windows.Forms.DockStyle.Fill; - this.radioButton2.Location = new System.Drawing.Point(263, 82); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(332, 19); - this.radioButton2.TabIndex = 22; - this.radioButton2.Text = "Letters"; - this.radioButton2.UseVisualStyleBackColor = true; - // - // textBox4 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox4, 5); - this.textBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox4.Location = new System.Drawing.Point(136, 223); - this.textBox4.Name = "textBox4"; - this.textBox4.Size = new System.Drawing.Size(459, 23); - this.textBox4.TabIndex = 18; - // - // comboBox1 - // - this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Items.AddRange(new object[] { - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z"}); - this.comboBox1.Location = new System.Drawing.Point(136, 107); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(121, 23); - this.comboBox1.TabIndex = 26; - this.comboBox1.Visible = false; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 6; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.comboBox2, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.label7, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.label6, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.label4, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.label5, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown1, 1, 5); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown2, 1, 6); - this.tableLayoutPanel1.Controls.Add(this.label8, 0, 9); - this.tableLayoutPanel1.Controls.Add(this.label9, 0, 10); - this.tableLayoutPanel1.Controls.Add(this.label10, 0, 11); - this.tableLayoutPanel1.Controls.Add(this.textBox5, 1, 10); - this.tableLayoutPanel1.Controls.Add(this.textBox6, 1, 11); - this.tableLayoutPanel1.Controls.Add(this.radioButton1, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.radioButton2, 2, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox4, 1, 9); - this.tableLayoutPanel1.Controls.Add(this.comboBox1, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 12); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown3, 1, 12); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 14; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 413); - this.tableLayoutPanel1.TabIndex = 2; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(13, 310); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(117, 23); - this.checkBox1.TabIndex = 29; - this.checkBox1.Text = "Use leading zeros"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // numericUpDown3 - // - this.numericUpDown3.Location = new System.Drawing.Point(136, 310); - this.numericUpDown3.Name = "numericUpDown3"; - this.numericUpDown3.Size = new System.Drawing.Size(120, 23); - this.numericUpDown3.TabIndex = 30; - this.numericUpDown3.Value = new decimal(new int[] { - 1, - 0, - 0, - 0}); - // - // BatchDownloadSubPage1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.Controls.Add(this.tableLayoutPanel1); - this.DoubleBuffered = true; - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "BatchDownloadSubPage1"; - this.Size = new System.Drawing.Size(608, 413); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ComboBox comboBox2; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.NumericUpDown numericUpDown1; - private System.Windows.Forms.NumericUpDown numericUpDown2; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.RadioButton radioButton1; - private System.Windows.Forms.RadioButton radioButton2; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.NumericUpDown numericUpDown3; - } -} diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.cs b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.cs deleted file mode 100644 index b715337..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.cs +++ /dev/null @@ -1,176 +0,0 @@ -using TraceLog; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; -using Translations; - -namespace XDM.WinForm.UI.BachDownloadPages -{ - public partial class BatchDownloadSubPage1 : UserControl - { - private bool usingNumbers = true; - public int BatchSize { get; private set; } = 0; - public BatchDownloadSubPage1() - { - InitializeComponent(); - textBox1.TextChanged += (_, _) => - { - OnBatchPatternChange(); - }; - numericUpDown1.ValueChanged += (_, _) => - { - OnBatchPatternChange(); - }; - numericUpDown2.ValueChanged += (_, _) => - { - OnBatchPatternChange(); - }; - comboBox1.SelectedIndexChanged += (_, _) => - { - OnBatchPatternChange(); - }; - comboBox2.SelectedIndexChanged += (_, _) => - { - OnBatchPatternChange(); - }; - checkBox1.CheckedChanged += (_, _) => - { - OnBatchPatternChange(); - }; - numericUpDown3.ValueChanged += (_, _) => - { - OnBatchPatternChange(); - }; - radioButton1.CheckedChanged += (_, _) => - { - if (radioButton1.Checked) - { - usingNumbers = true; - label6.Visible = label7.Visible = comboBox1.Visible = comboBox2.Visible = false; - label5.Visible = label4.Visible = numericUpDown1.Visible = numericUpDown2.Visible = true; - checkBox1.Visible = numericUpDown3.Visible = true; - OnBatchPatternChange(); - } - }; - radioButton2.CheckedChanged += (_, _) => - { - if (radioButton2.Checked) - { - usingNumbers = false; - label6.Visible = label7.Visible = comboBox1.Visible = comboBox2.Visible = true; - label5.Visible = label4.Visible = numericUpDown1.Visible = numericUpDown2.Visible = false; - checkBox1.Visible = numericUpDown3.Visible = false; - OnBatchPatternChange(); - } - }; - comboBox1.SelectedIndex = 0; - comboBox2.SelectedIndex = comboBox2.Items.Count - 1; - LoadTexts(); - } - - private void OnBatchPatternChange() - { - try - { - textBox4.Text = textBox5.Text = textBox6.Text = string.Empty; - if (!textBox1.Text.Contains('*')) return; - var c = 0; - var last = string.Empty; - BatchSize = 0; - foreach (var url in GenerateBatchLink(textBox1.Text)) - { - if (c == 0) - { - textBox4.Text = url.ToString(); - } - else if (c == 1) - { - textBox5.Text = url.ToString(); - } - last = url.ToString(); - c++; - BatchSize++; - } - if (c > 1) - { - textBox6.Text = last; - } - } - catch (UriFormatException) - { - MessageBox.Show(this,TextResource.GetText("MSG_INVALID_URL")); - } - catch (Exception ex) - { - Log.Debug(ex, "Error"); - } - - } - - public IEnumerable GenerateBatchLink() - { - if (!textBox1.Text.Contains('*')) return Enumerable.Empty(); - try - { - return GenerateBatchLink(textBox1.Text); - } - catch (Exception ex) - { - Log.Debug(ex, "Error generating batch links"); - return Enumerable.Empty(); - } - } - - private IEnumerable GenerateBatchLink(string url) - { - if (usingNumbers) - { - var startNum = (int)numericUpDown1.Value; - var endNum = (int)numericUpDown2.Value; - - if (startNum >= endNum) - { - throw new ArgumentException(); - } - - for (var i = startNum; i <= endNum; i++) - { - yield return new Uri(url.Replace("*", - checkBox1.Checked ? i.ToString($"D{(int)numericUpDown3.Value}") : - i.ToString())); - } - } - else - { - var startChar = comboBox1.SelectedItem.ToString()[0]; - var endChar = comboBox2.SelectedItem.ToString()[0]; - - if (startChar >= endChar) - { - throw new ArgumentException(); - } - - for (var i = startChar; i <= endChar; i++) - { - yield return new Uri(url.Replace('*', i)); - } - } - } - - private void LoadTexts() - { - label1.Text = TextResource.GetText("LBL_BATCH_DESC"); - label2.Text = TextResource.GetText("ND_ADDRESS"); - label3.Text = TextResource.GetText("LBL_BATCH_ASTERISK"); - radioButton1.Text = TextResource.GetText("LBL_BATCH_NUM"); - radioButton2.Text = TextResource.GetText("LBL_BATCH_LETTER"); - label4.Text = TextResource.GetText("LBL_BATCH_FROM"); - label5.Text = TextResource.GetText("LBL_BATCH_TO"); - label8.Text = TextResource.GetText("LBL_BATCH_FILE1"); - label9.Text = TextResource.GetText("LBL_BATCH_FILE2"); - label10.Text = TextResource.GetText("LBL_BATCH_FILEN"); - checkBox1.Text = TextResource.GetText("BAT_LEADING_ZERO"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.resx b/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/BachDownloadPages/BatchDownloadSubPage1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.Designer.cs deleted file mode 100644 index 62222c8..0000000 --- a/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.Designer.cs +++ /dev/null @@ -1,53 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class BatchDownloadWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // BatchDownloadWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(624, 441); - this.DoubleBuffered = true; - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "BatchDownloadWindow"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Batch Download Window"; - this.ResumeLayout(false); - - } - - #endregion - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.cs b/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.cs deleted file mode 100644 index 64b0152..0000000 --- a/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; -using System.Text; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Downloader; -using XDM.Core.Lib.Downloader.Progressive.SingleHttp; -using XDM.Core.Lib.Util; -using XDM.WinForm.UI.BachDownloadPages; - -namespace XDM.WinForm.UI -{ - public partial class BatchDownloadWindow : Form - { - BatchDownloadPage1 page1; - BatchDownloadPage2 page2; - public BatchDownloadWindow(IApp app, IAppUI appUi) - { - InitializeComponent(); - - page1 = new BatchDownloadPage1 - { - Dock = DockStyle.Fill, - }; - - page1.LinksAdded += (sender, args) => - { - page2.BringToFront(); - page2.SetBatchLinks(args.Links); - }; - - page1.Cancelled += (_, _) => - { - Dispose(); - }; - - page2 = new BatchDownloadPage2(appUi) - { - Dock = DockStyle.Fill, - }; - - page2.DownloadNow += (sender, args) => - { - var list = new List(); - foreach (var link in args.Links) - { - list.Add(app.StartDownload( - new SingleSourceHTTPDownloadInfo - { - Uri = link.ToString() - }, - Helpers.GetFileName(link), - FileNameFetchMode.FileNameAndExtension, - args.TargetFolder, - true, args.Authentication, args.Proxy, - args.EnableSpeedLimit ? args.SpeedLimit : 0, args.QueueId - )); - } - - foreach (var id in list) - { - app.ResumeNonInteractiveDownloads(list); - } - - Dispose(); - }; - - page2.Cancelled += (_, _) => - { - Dispose(); - }; - - page2.DownloadLater += (sender, args) => - { - foreach (var link in args.Links) - { - app.StartDownload( - new SingleSourceHTTPDownloadInfo - { - Uri = link.ToString() - }, - Helpers.GetFileName(link), - FileNameFetchMode.FileNameAndExtension, - args.TargetFolder, - true, args.Authentication, args.Proxy, - args.EnableSpeedLimit ? args.SpeedLimit : 0, args.QueueId - ); - } - - Dispose(); - }; - - this.Controls.Add(page1); - this.Controls.Add(page2); - page1.BringToFront(); - - Text = TextResource.GetText("MENU_BATCH_DOWNLOAD"); - } - } - - internal class BatchLinkEventArgs : EventArgs - { - public IEnumerable Links { get; set; } - } - - internal class BatchLinkDownloadEventArgs : EventArgs - { - public IEnumerable Links { get; set; } - public string TargetFolder { get; set; } - public string? QueueId { get; set; } - public AuthenticationInfo? Authentication { get; set; } - public ProxyInfo? Proxy { get; set; } - public int SpeedLimit { get; set; } - public bool EnableSpeedLimit { get; set; } - } -} diff --git a/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.resx b/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/BatchDownloadWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/ButtonHelper.cs b/app/XDM/XDM.WinForm.UI/ButtonHelper.cs deleted file mode 100644 index 6cb7db8..0000000 --- a/app/XDM/XDM.WinForm.UI/ButtonHelper.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; - -namespace XDM.WinForm.UI -{ - internal static class ButtonHelper - { - public static Color ParentBackColor { get; set; } - - public static void SetFlatStyle(Button button, IFormColors formColors) - { - button.FlatAppearance.MouseOverBackColor = formColors.ToolbarButtonMouseOverBackColor; - button.FlatAppearance.MouseDownBackColor = formColors.ToolbarButtonMouseDownBackColor; - } - - public static Dictionary ButtonStateIcons { get; set; } = new(); - - public static void DisableButton(Button button, IFormColors formColors) - { - button.ForeColor = formColors.ToolbarButtonDisabledForeColor;//Color.DarkGray; - button.Image = ButtonStateIcons[button].ImgDisabled; - button.FlatAppearance.MouseOverBackColor = ParentBackColor; - button.FlatAppearance.MouseDownBackColor = ParentBackColor; - button.Tag = "disabled"; - } - - public static void EnableButton(Button button, IFormColors formColors) - { - button.ForeColor = formColors.ToolbarButtonForeColor; //Color.DimGray; - SetFlatStyle(button, formColors); - button.Image = ButtonStateIcons[button].ImgEnabled; - button.Tag = "enabled"; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/ButtonWrapper.cs b/app/XDM/XDM.WinForm.UI/ButtonWrapper.cs deleted file mode 100644 index d12b70e..0000000 --- a/app/XDM/XDM.WinForm.UI/ButtonWrapper.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Windows.Forms; -using XDM.Core.Lib.UI; - -namespace XDM.WinForm.UI -{ - internal class ButtonWrapper : IButton - { - private readonly Button button; - private readonly IFormColors formColors; - - public ButtonWrapper(Button button, IFormColors formColors) - { - this.button = button; - this.formColors = formColors; - button.Click += (s, e) => - { - if ("enabled" == (string)button.Tag) - { - this.Clicked?.Invoke(s, e); - } - }; - } - - public bool Visible { get => button.Visible; set => button.Visible = value; } - - public bool Enable - { - get => "enabled" == (string)button.Tag; - set - { - if (value) - { - ButtonHelper.EnableButton(button, formColors); - } - else - { - ButtonHelper.DisableButton(button, formColors); - } - } - } - - public event EventHandler? Clicked; - } -} diff --git a/app/XDM/XDM.WinForm.UI/DarkMenuColorTable.cs b/app/XDM/XDM.WinForm.UI/DarkMenuColorTable.cs deleted file mode 100644 index 110c8d4..0000000 --- a/app/XDM/XDM.WinForm.UI/DarkMenuColorTable.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace XDM.WinForm.UI -{ - internal class DarkMenuColorTable : ProfessionalColorTable - { - private Color backColor = Color.FromArgb(34, 34, 34); - public DarkMenuColorTable(Color backColor) - { - this.backColor = backColor; - } - - public override Color MenuItemSelected => Color.DodgerBlue; - public override Color MenuItemBorder => Color.DodgerBlue; - public override Color SeparatorDark => Color.Black; - public override Color SeparatorLight => Color.Black; - public override Color MenuBorder => Color.Black; - - public override Color ImageMarginGradientBegin => this.backColor; - public override Color ImageMarginGradientEnd => this.backColor; - public override Color ImageMarginGradientMiddle => this.backColor; - public override Color MenuItemPressedGradientMiddle => this.backColor; - } -} diff --git a/app/XDM/XDM.WinForm.UI/DarkProgressBar.cs b/app/XDM/XDM.WinForm.UI/DarkProgressBar.cs deleted file mode 100644 index c0b0dbe..0000000 --- a/app/XDM/XDM.WinForm.UI/DarkProgressBar.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using System.Drawing; - -namespace XDM.WinForm.UI -{ - public class DarkProgressBar : ProgressBar - { - private Brush bgBrush, fgBrush; - - public DarkProgressBar() - { - this.SetStyle(ControlStyles.UserPaint, true); - bgBrush = new SolidBrush(this.BackColor); - fgBrush = new SolidBrush(this.ForeColor); - } - - public override Color BackColor - { - get => base.BackColor; - set - { - bgBrush = new SolidBrush(value); - base.BackColor = value; - } - } - - public override Color ForeColor - { - get => base.ForeColor; - set - { - fgBrush = new SolidBrush(value); - base.ForeColor = value; - } - } - - protected override void OnPaint(PaintEventArgs e) - { - Rectangle rec = new Rectangle(0, 0, this.Width, this.Height); - double scaleFactor = (((double)Value - (double)Minimum) / ((double)Maximum - (double)Minimum)); - e.Graphics.FillRectangle(this.bgBrush, rec); - rec.Width = (int)((rec.Width * scaleFactor)); - e.Graphics.FillRectangle(fgBrush, 0, 0, rec.Width, rec.Height); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DataGridViewProgressCell.cs b/app/XDM/XDM.WinForm.UI/DataGridViewProgressCell.cs deleted file mode 100644 index 4bdb6a0..0000000 --- a/app/XDM/XDM.WinForm.UI/DataGridViewProgressCell.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; - -namespace XDM.WinForm.UI -{ - //https://social.msdn.microsoft.com/Forums/en-US/769ca9d6-1e9d-4d76-8c23-db535b2f19c2/sample-code-datagridview-progress-bar-column?forum=winformsdatacontrols - - class DataGridViewProgressCell : DataGridViewImageCell - { - // Used to make custom cell consistent with a DataGridViewImageCell - static Image emptyImage = new Bitmap(1, 1, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - static SolidBrush b1 = new SolidBrush(AppWinPeer.ProgressBackColor), - b2 = new SolidBrush(AppWinPeer.ProgressForeColor); - - public int ScaleFactor { get; set; } - - public DataGridViewProgressCell() - { - this.ValueType = typeof(int); - this.ScaleFactor = 1; - } - // Method required to make the Progress Cell consistent with the default Image Cell. - // The default Image Cell assumes an Image as a value, although the value of the Progress Cell is an int. - protected override object GetFormattedValue(object value, - int rowIndex, ref DataGridViewCellStyle cellStyle, - TypeConverter valueTypeConverter, - TypeConverter formattedValueTypeConverter, - DataGridViewDataErrorContexts context) - { - return emptyImage; - } - - protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) - { - - int progressVal = value == null ? 0 : (int)value; - - float percentage = ((float)progressVal / 100.0f); // Need to convert to float before division; otherwise C# returns int which is 0 for anything but 100%. - // Draws the cell grid - base.Paint(g, clipBounds, cellBounds, - rowIndex, cellState, value, formattedValue, errorText, - cellStyle, advancedBorderStyle, (paintParts & ~DataGridViewPaintParts.ContentForeground)); - var height = Math.Min(cellBounds.Height, ((int)Math.Ceiling(cellBounds.Height*0.1))); - var y = cellBounds.Height / 2 - height / 2; - - // Create a TextFormatFlags with word wrapping, horizontal center and - // vertical center specified. - //TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter; - - var w1 = cellBounds.Width - cellStyle.Padding.Left - cellStyle.Padding.Right; - - g.FillRectangle(b1, cellBounds.X + cellStyle.Padding.Left, cellBounds.Y + y, - w1, height); - - var w = Math.Min(w1, - Convert.ToInt32((percentage * (cellBounds.Width - cellStyle.Padding.Left - cellStyle.Padding.Right)))); - - g.FillRectangle(b2, cellBounds.X + cellStyle.Padding.Left, cellBounds.Y + y, - w, height); - //TextRenderer.DrawText(g, progressVal.ToString() + "%", cellStyle.Font, cellBounds, Color.Black, flags); - - //if (percentage > 0.0) - //{ - // // Draw the progress bar and the text - // g.FillRectangle(new SolidBrush(Color.FromArgb(163, 189, 242)), cellBounds.X + cellStyle.Padding.Left, cellBounds.Y + y, Convert.ToInt32((percentage * cellBounds.Width - 4)), height); - // TextRenderer.DrawText(g, progressVal.ToString() + "%", cellStyle.Font, cellBounds, cellStyle.ForeColor, flags); - // //g.DrawString(progressVal.ToString() + "%", cellStyle.Font, foreColorBrush, cellBounds.X + cellStyle.Padding.Left, cellBounds.Y + 2); - //} - //else - //{ - // // draw the text - // if (this.DataGridView.CurrentRow.Index == rowIndex) - // g.DrawString(progressVal.ToString() + "%", cellStyle.Font, new SolidBrush(cellStyle.SelectionForeColor), cellBounds.X + 6, cellBounds.Y + 2); - // else - // g.DrawString(progressVal.ToString() + "%", cellStyle.Font, foreColorBrush, cellBounds.X + 6, cellBounds.Y + 2); - //} - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DataGridViewProgressColumn.cs b/app/XDM/XDM.WinForm.UI/DataGridViewProgressColumn.cs deleted file mode 100644 index 587a1fd..0000000 --- a/app/XDM/XDM.WinForm.UI/DataGridViewProgressColumn.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Windows.Forms; - -namespace XDM.WinForm.UI -{ - public class DataGridViewProgressColumn : DataGridViewImageColumn - { - public DataGridViewProgressColumn(int scaleFactor) - { - CellTemplate = new DataGridViewProgressCell() { ScaleFactor = scaleFactor }; - } - - public int ScaleFactor - { - set => (CellTemplate as DataGridViewProgressCell).ScaleFactor = value; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.Designer.cs b/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.Designer.cs deleted file mode 100644 index 2b20433..0000000 --- a/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.Designer.cs +++ /dev/null @@ -1,136 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class DeleteConfirmDlg - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 2); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(343, 133); - this.tableLayoutPanel1.TabIndex = 0; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(231, 105); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(50, 25); - this.button1.TabIndex = 0; - this.button1.Text = "Delete"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(287, 105); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(53, 25); - this.button2.TabIndex = 1; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox1, 3); - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(3, 80); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(337, 19); - this.checkBox1.TabIndex = 2; - this.checkBox1.Text = "Delete file from disk"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 3); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(337, 77); - this.label1.TabIndex = 3; - this.label1.Text = "label1"; - // - // DeleteConfirmDlg - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(343, 133); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "DeleteConfirmDlg"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Confirm Delete"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Label label1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.cs b/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.cs deleted file mode 100644 index 6cdb349..0000000 --- a/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Windows.Forms; -using Translations; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class DeleteConfirmDlg : Form - { - public DeleteConfirmDlg() - { - InitializeComponent(); - DialogResult = DialogResult.Cancel; - tableLayoutPanel1.Padding = - label1.Padding = - checkBox1.Padding = - button1.Margin = - button2.Margin = new Padding(LogicalToDeviceUnits(5)); - LoadTexts(); - } - - public string DescriptionText - { - set - { - label1.Text = value; - } - } - - public bool ShouldDeleteFile => checkBox1.Checked; - - private void button1_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.OK; - } - - private void button2_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.Cancel; - } - - private void LoadTexts() - { - Text = TextResource.GetText("MENU_DELETE_DWN"); - checkBox1.Text = TextResource.GetText("LBL_DELETE_FILE"); - button1.Text = TextResource.GetText("DESC_DEL"); - button2.Text = TextResource.GetText("ND_CANCEL"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.resx b/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/DeleteConfirmDlg.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.Designer.cs b/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.Designer.cs deleted file mode 100644 index 53a9e39..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.Designer.cs +++ /dev/null @@ -1,224 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class DownloadCompleteDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.lblMainIcon = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.tableLayoutPanel2.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 4; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.button1, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.button2, 3, 0); - this.tableLayoutPanel2.Controls.Add(this.button3, 2, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 111); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(394, 51); - this.tableLayoutPanel2.TabIndex = 6; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(10, 10); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(15, 3, 15, 3); - this.button1.Size = new System.Drawing.Size(75, 31); - this.button1.TabIndex = 0; - this.button1.Text = "More"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(290, 10); - this.button2.Margin = new System.Windows.Forms.Padding(10); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(24, 3, 24, 3); - this.button2.Size = new System.Drawing.Size(94, 31); - this.button2.TabIndex = 1; - this.button2.Text = "Open"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(168, 10); - this.button3.Margin = new System.Windows.Forms.Padding(10, 10, 0, 10); - this.button3.Name = "button3"; - this.button3.Padding = new System.Windows.Forms.Padding(15, 3, 15, 3); - this.button3.Size = new System.Drawing.Size(112, 31); - this.button3.TabIndex = 2; - this.button3.Text = "Open Folder"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33334F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel1.Controls.Add(this.lblMainIcon, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.label3, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.ForeColor = System.Drawing.Color.Black; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 20, 10, 0); - this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(394, 111); - this.tableLayoutPanel1.TabIndex = 7; - // - // lblMainIcon - // - this.lblMainIcon.AutoSize = true; - this.lblMainIcon.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblMainIcon.ForeColor = System.Drawing.Color.LightGray; - this.lblMainIcon.Location = new System.Drawing.Point(3, 20); - this.lblMainIcon.Name = "lblMainIcon"; - this.tableLayoutPanel1.SetRowSpan(this.lblMainIcon, 2); - this.lblMainIcon.Size = new System.Drawing.Size(56, 51); - this.lblMainIcon.TabIndex = 0; - this.lblMainIcon.Text = "icon"; - this.lblMainIcon.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // label2 - // - this.label2.AutoEllipsis = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 3); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Font = new System.Drawing.Font("Segoe UI", 12F); - this.label2.ForeColor = System.Drawing.Color.DodgerBlue; - this.label2.Location = new System.Drawing.Point(65, 20); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(316, 21); - this.label2.TabIndex = 1; - this.label2.Text = "Sample file name"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label3 - // - this.label3.AutoEllipsis = true; - this.tableLayoutPanel1.SetColumnSpan(this.label3, 3); - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.ForeColor = System.Drawing.Color.Gray; - this.label3.Location = new System.Drawing.Point(65, 41); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(0, 5, 0, 10); - this.label3.Size = new System.Drawing.Size(316, 30); - this.label3.TabIndex = 2; - this.label3.Text = "sample text"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.ForeColor = System.Drawing.Color.DimGray; - this.label1.Location = new System.Drawing.Point(3, 71); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(56, 40); - this.label1.TabIndex = 3; - this.label1.Text = "dragdrop"; - this.label1.TextAlign = System.Drawing.ContentAlignment.TopCenter; - this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown); - // - // DownloadCompleteDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(394, 162); - this.Controls.Add(this.tableLayoutPanel1); - this.Controls.Add(this.tableLayoutPanel2); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "DownloadCompleteDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Download Complete"; - this.TopMost = true; - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label lblMainIcon; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.cs b/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.cs deleted file mode 100644 index ff714f1..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Text; -using System.IO; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.WinForm.UI.FormHelper; -using XDMApp; - -namespace XDM.WinForm.UI -{ - public partial class DownloadCompleteDialog : Form, IDownloadCompleteDialog - { - private PrivateFontCollection fontCollection; - private Font fontAwesomeFont; - private string downloadId; - private IFormColors colors; - - public IApp App { get; set; } - public event EventHandler FileOpenClicked; - public event EventHandler FolderOpenClicked; - - public string FileNameText - { - get => label2.Text; - set => label2.Text = value; - } - - public string FolderText - { - get => label3.Text; - set => label3.Text = value; - } - - public DownloadCompleteDialog() - { - InitializeComponent(); - fontCollection = new PrivateFontCollection(); - //fontCollection.AddFontFile("fontawesome-webfont.ttf"); - - fontCollection.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\remixicon.ttf")); - //fontCollection.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FontAwesome", "fa-solid-900.ttf")); - fontAwesomeFont = new Font(fontCollection.Families[0], 32); - - lblMainIcon.Font = fontAwesomeFont; - lblMainIcon.Text = RemixIcon.GetFontIcon("ecd9");// ((char)Int32.Parse("ecd9"/*"ec28"*//*"eb99"*/, System.Globalization.NumberStyles.HexNumber)).ToString(); - - label1.Font = new Font(fontCollection.Families[0], 16); ; - label1.Text = RemixIcon.GetFontIcon("ec60"); //ri-drag-move-2-line - - if (!AppWinPeer.AppsUseLightTheme) - { - colors = new FormColorsDark(); - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - - DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - this.lblMainIcon.ForeColor = colors.SearchButtonColor; - this.lblMainIcon.BackColor = colors.ToolbarBackColor; - label2.ForeColor = label3.ForeColor = colors.ToolbarButtonForeColor; - label2.BackColor = label3.BackColor = colors.ToolbarBackColor; - DarkModeHelper.StyleFlatButton(button1, colors); - DarkModeHelper.StyleFlatButton(button2, colors); - DarkModeHelper.StyleFlatButton(button3, colors); - tableLayoutPanel2.BackColor = colors.DataGridViewBackColor; - tableLayoutPanel1.BackColor = colors.ToolbarBackColor; - } - - LoadTexts(); - } - - private void button2_Click(object sender, EventArgs e) - { - FileOpenClicked?.Invoke(sender, new DownloadCompleteDialogEventArgs - { - Path = Path.Combine(label3.Text, label2.Text) - }); - Dispose(); - } - - private void button3_Click(object sender, EventArgs e) - { - FolderOpenClicked?.Invoke(sender, new DownloadCompleteDialogEventArgs - { - Path = label3.Text, - FileName = label2.Text - }); - Dispose(); - } - - public void ShowDownloadCompleteDialog() - { - this.Show(); - } - - private void label1_MouseDown(object sender, MouseEventArgs e) - { - label1.DoDragDrop(new DataObject(DataFormats.FileDrop, - new string[] { Path.Combine(FolderText, FileNameText) }), DragDropEffects.Copy); - } - - private void button1_Click(object sender, EventArgs e) - { - Close(); - } - - private void LoadTexts() - { - button1.Text = TextResource.GetText("ND_CANCEL"); - button3.Text = TextResource.GetText("CTX_OPEN_FOLDER"); - button2.Text = TextResource.GetText("CTX_OPEN_FILE"); - Text = TextResource.GetText("CD_TITLE"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.resx b/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadCompleteDialog.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/DownloadDB.cs b/app/XDM/XDM.WinForm.UI/DownloadDB.cs deleted file mode 100644 index 8ed0df8..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadDB.cs +++ /dev/null @@ -1,504 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Windows.Forms; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.UI; -using XDM.Core.Lib.Util; -using XDMApp; - -namespace XDM.WinForm.UI -{ - internal interface IVirtualList - { - public int IndexOf(T binder); - - public void UpdateDataGridView(int row, int col); - } - - internal class DownloadDB - { - internal DownloadDB(DataGridView dgActive, DataGridView dgComplete) - { - InProgressItems = new(dgActive); - } - public FinishedDownloadsDB FinishedItems { get; } = new(); - public InProgressDownloadsDB InProgressItems { get; } - - internal class InProgressDownloadsDB : IVirtualList - { - private DataGridView dataGrid; - private List inProgressItems = new(0); - private List inProgressItemsView = new(0); - private readonly InProgressDownloadComparer comparer = new(); - private string? searchKeyword; - private SortParam sortParam = new SortParam { SortField = SortField.Modified, IsAscending = false }; - - public InProgressDownloadEntryBinder this[int index] => inProgressItemsView[index]; - - public int RowCount => inProgressItemsView.Count; - - internal InProgressDownloadsDB(DataGridView dataGrid) - { - this.dataGrid = dataGrid; - } - - public void UpdateView() - { - lock (this) - { - UpdateView(searchKeyword, this.sortParam); - } - } - - public void UpdateView(string? searchKeyword = null) - { - lock (this) - { - UpdateView(searchKeyword, this.sortParam); - } - } - - public void UpdateView(string? searchKeyword, SortParam sortParam) - { - lock (this) - { - this.searchKeyword = searchKeyword; - this.sortParam = sortParam; - inProgressItemsView.Clear(); - inProgressItemsView.Capacity = inProgressItems.Count; - inProgressItemsView.AddRange(this.inProgressItems.Where(x => string.IsNullOrEmpty(searchKeyword) || - x.Name.ToLowerInvariant().Contains(searchKeyword?.ToLowerInvariant()))); - this.comparer.SortParam = sortParam; - inProgressItemsView.Sort(this.comparer); - } - } - - - public int IndexOf(InProgressDownloadEntryBinder binder) - { - return inProgressItemsView.IndexOf(binder); - } - - public void UpdateDataGridView(int row, int col) - { - if (row < 0) return; - dataGrid.InvalidateCell(col, row); - } - - public InProgressDownloadEntryBinder? FindDownload(string id) - { - lock (this) - { - foreach (var item in inProgressItems) - { - if (id == item.DownloadEntry.Id) - { - return item; - } - } - } - return null; - } - - public void Add(InProgressDownloadEntry download) - { - Add(new InProgressDownloadEntryBinder(download, this)); - } - - public void Add(InProgressDownloadEntryBinder binder) - { - lock (this) - { - this.inProgressItems.Insert(0, binder); - UpdateView(); - } - } - - public void Delete(InProgressDownloadEntryBinder item) - { - lock (this) - { - this.inProgressItems.Remove(item); - UpdateView(); - } - } - - public void Delete(InProgressDownloadEntry download) - { - lock (this) - { - foreach (var item in this.inProgressItems) - { - if (item.DownloadEntry == download) - { - this.inProgressItems.Remove(item); - break; - } - } - UpdateView(); - } - } - - public void Delete(IEnumerable items) - { - lock (this) - { - foreach (var item in items) - { - this.inProgressItems.Remove(item); - } - UpdateView(); - } - } - - public void Clear() - { - lock (this) - { - this.inProgressItems.Clear(); - UpdateView(); - } - } - - public IEnumerable AllItems - { - get - { - lock (this) - { - foreach (var item in this.inProgressItems) - { - yield return item.DownloadEntry; - } - } - } - } - - public void Load(IEnumerable list) - { - lock (this) - { - this.inProgressItems = new List( - list.Select(x => new InProgressDownloadEntryBinder(x, this)).ToList()); - UpdateView(); - } - } - } - - internal class FinishedDownloadsDB - { - private List finishedDownloads = new(0); - private List finishedDownloadsView = new(0); - private readonly DownloadComparer comparer = new(); - private string? searchKeyword; - private Category? category; - private SortParam sortParam = new SortParam { SortField = SortField.Modified, IsAscending = false }; - - public int RowCount => finishedDownloadsView.Count; - - public FinishedDownloadEntry this[int index] => finishedDownloadsView[index]; - - public void UpdateView() - { - lock (this) - { - UpdateView(searchKeyword, category, this.sortParam); - } - } - - public void UpdateView(string? searchKeyword = null, Category? category = null) - { - lock (this) - { - UpdateView(searchKeyword, category, this.sortParam); - } - } - - public void UpdateView(string? searchKeyword, Category? category, SortParam sortParam) - { - lock (this) - { - this.searchKeyword = searchKeyword; - this.category = category; - this.sortParam = sortParam; - finishedDownloadsView.Clear(); - finishedDownloadsView.Capacity = finishedDownloads.Count; - finishedDownloadsView.AddRange(Helpers.FilterByCategoryOrKeyword( - finishedDownloads, searchKeyword, category)); - this.comparer.SortParam = sortParam; - finishedDownloadsView.Sort(this.comparer); - } - } - - public void Load(IEnumerable list) - { - lock (this) - { - finishedDownloads.AddRange(list); - UpdateView(); - } - } - - public void Add(FinishedDownloadEntry finishedDownload) - { - lock (this) - { - finishedDownloads.Add(finishedDownload); - UpdateView(); - } - } - - public void Delete(int index) - { - lock (this) - { - finishedDownloads.Remove(finishedDownloadsView[index]); - UpdateView(); - } - } - - public void Delete(int[] indexes) - { - lock (this) - { - foreach (var index in indexes) - { - finishedDownloads.Remove(finishedDownloadsView[index]); - } - UpdateView(); - } - } - - public void Delete(FinishedDownloadEntry download) - { - lock (this) - { - this.finishedDownloads.Remove(download); - UpdateView(); - } - } - - public void Delete(IEnumerable downloads) - { - lock (this) - { - foreach (var item in downloads) - { - this.finishedDownloads.Remove(item); - } - UpdateView(); - } - } - - public void Delete(IEnumerable downloads) - { - lock (this) - { - foreach (var item in downloads) - { - this.finishedDownloads.Remove(item.DownloadEntry); - } - UpdateView(); - } - } - - public void Clear() - { - lock (this) - { - finishedDownloads.Clear(); - UpdateView(); - } - } - - public IEnumerable AllItems - { - get - { - foreach (var item in finishedDownloads) - { - yield return item; - } - } - } - } - - class DownloadComparer : IComparer where T : BaseDownloadEntry - { - public SortParam SortParam { get; set; } - public int Compare(T? x, T? y) - { - if (x == null && y == null) return 0; - if (x == null) return -1; - if (y == null) return 1; - var res = 0; - switch (SortParam.SortField) - { - case SortField.Name: - res = x.Name.CompareTo(y.Name); - break; - case SortField.Size: - res = x.Size.CompareTo(y.Size); - break; - case SortField.Modified: - res = x.DateAdded.CompareTo(y.DateAdded); - break; - } - return SortParam.IsAscending ? res : -res; - } - } - - class InProgressDownloadComparer : IComparer where T : InProgressDownloadEntryBinder - { - public SortParam SortParam { get; set; } - public int Compare(T? x, T? y) - { - if (x == null && y == null) return 0; - if (x == null) return -1; - if (y == null) return 1; - var res = 0; - switch (SortParam.SortField) - { - case SortField.Name: - res = x.Name.CompareTo(y.Name); - break; - case SortField.Size: - res = x.Size.CompareTo(y.Size); - break; - case SortField.Modified: - res = x.DateAdded.CompareTo(y.DateAdded); - break; - } - return SortParam.IsAscending ? res : -res; - } - } - - } - - internal class FinishedDownloadEntryBinder : IFinishedDownloadRow - { - public FinishedDownloadEntry DownloadEntry { get; } - - public string FileIconText => IconResource.GetFontIconForFileType(DownloadEntry.Name); - - public string Name => DownloadEntry.Name; - - public long Size => DownloadEntry.Size; - - public DateTime DateAdded => DownloadEntry.DateAdded; - - FinishedDownloadEntry IFinishedDownloadRow.DownloadEntry => DownloadEntry; - - public FinishedDownloadEntryBinder(FinishedDownloadEntry entry) - { - this.DownloadEntry = entry; - } - } - - internal class InProgressDownloadEntryBinder : IInProgressDownloadRow - { - public InProgressDownloadEntry DownloadEntry { get; set; } - private IVirtualList downloadsDB; - - public InProgressDownloadEntryBinder(InProgressDownloadEntry downloadEntry, IVirtualList downloadsDB) - { - DownloadEntry = downloadEntry; - this.downloadsDB = downloadsDB; - } - - public string FileIconText - { - get => IconResource.GetFontIconForFileType(DownloadEntry.Name); - } - - public string Name - { - get => DownloadEntry.Name; - set - { - this.DownloadEntry.Name = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 1); - } - } - - public long Size - { - get => this.DownloadEntry.Size; - set - { - this.DownloadEntry.Size = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 3); - } - } - - public DateTime DateAdded - { - get => this.DownloadEntry.DateAdded; - set - { - this.DownloadEntry.DateAdded = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 2); - } - } - - public int Progress - { - get => this.DownloadEntry.Progress; - set - { - this.DownloadEntry.Progress = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 4); - } - } - - public DownloadStatus Status - { - get => this.DownloadEntry.Status; - set - { - this.DownloadEntry.Status = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 6); - } - } - - public string DownloadSpeed - { - get => DownloadEntry.DownloadSpeed ?? string.Empty; - set - { - this.DownloadEntry.DownloadSpeed = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 6); - } - } - - public string ETA - { - get => DownloadEntry.ETA ?? string.Empty; - set - { - this.DownloadEntry.ETA = value; - var index = downloadsDB.IndexOf(this); - downloadsDB.UpdateDataGridView(index, 6); - } - } - } - - internal enum SortField - { - Name, Modified, Size - } - - internal struct SortParam - { - public SortField SortField { get; set; } - public bool IsAscending { get; set; } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DownloadInputForm.Designer.cs b/app/XDM/XDM.WinForm.UI/DownloadInputForm.Designer.cs deleted file mode 100644 index 3505921..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadInputForm.Designer.cs +++ /dev/null @@ -1,122 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class DownloadInputForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(10, 15); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(38, 15); - this.label1.TabIndex = 1; - this.label1.Text = "label1"; - // - // textBox1 - // - this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBox1.Location = new System.Drawing.Point(12, 35); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(329, 23); - this.textBox1.TabIndex = 0; - // - // button1 - // - this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.button1.AutoSize = true; - this.button1.Location = new System.Drawing.Point(262, 115); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(79, 27); - this.button1.TabIndex = 2; - this.button1.Text = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.button2.AutoSize = true; - this.button2.Location = new System.Drawing.Point(12, 115); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(79, 27); - this.button2.TabIndex = 3; - this.button2.Text = "button2"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // panel1 - // - this.panel1.BackColor = System.Drawing.Color.White; - this.panel1.Controls.Add(this.label1); - this.panel1.Controls.Add(this.textBox1); - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(355, 109); - this.panel1.TabIndex = 4; - // - // DownloadInputForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(353, 152); - this.Controls.Add(this.panel1); - this.Controls.Add(this.button2); - this.Controls.Add(this.button1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "DownloadInputForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "New Download"; - this.Load += new System.EventHandler(this.DownloadInputForm_Load); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Panel panel1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/DownloadInputForm.cs b/app/XDM/XDM.WinForm.UI/DownloadInputForm.cs deleted file mode 100644 index 4ab5ab4..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadInputForm.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Windows.Forms; -using XDM.Core.Lib.Util; - -namespace XDM.WinForm.UI -{ - public partial class DownloadInputForm : Form - { - public string Url { get; private set; } - public DownloadInputForm() - { - InitializeComponent(); - } - - private void button1_Click(object sender, EventArgs e) - { - if (!Helpers.IsUriValid(textBox1.Text)) - { - MessageBox.Show("Please enter valid address"); - return; - } - this.Url = textBox1.Text; - DialogResult = DialogResult.OK; - Dispose(); - } - - private void button2_Click(object sender, EventArgs e) - { - this.Url = string.Empty; - DialogResult = DialogResult.Cancel; - Dispose(); - } - - private void DownloadInputForm_Load(object sender, EventArgs e) - { - label1.Text = "Address"; - button1.Text = "Download"; - button2.Text = "Cancel"; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/DownloadInputForm.resx b/app/XDM/XDM.WinForm.UI/DownloadInputForm.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadInputForm.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/DownloadLaterMenuHelper.cs b/app/XDM/XDM.WinForm.UI/DownloadLaterMenuHelper.cs deleted file mode 100644 index 5879586..0000000 --- a/app/XDM/XDM.WinForm.UI/DownloadLaterMenuHelper.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Drawing; -using System.Windows.Forms; -using XDM.Core.Lib.UI; -using XDMApp; - -namespace XDM.WinForm.UI -{ - internal static class DownloadLaterMenuHelper - { - internal static void PopulateMenuAndAttachEvents( - ContextMenuStrip popupMenu, - EventHandler? DownloadLaterClicked, - ToolStripMenuItem doNotAddToQueueToolStripMenuItem, - ToolStripMenuItem manageQueueAndSchedulersToolStripMenuItem, - Button button2, - IWin32Window window) - { - popupMenu.Items.Clear(); - foreach (var queue in QueueManager.Queues) - { - var menuItem = new ToolStripMenuItem - { - Name = queue.ID, - Text = queue.Name - }; - menuItem.Click += (s, _) => - { - ToolStripMenuItem m = (ToolStripMenuItem)s; - var args = new DownloadLaterEventArgs(m.Name); - DownloadLaterClicked?.Invoke(window, args); - }; - popupMenu.Items.Add(menuItem); - } - popupMenu.Items.Add(new ToolStripSeparator()); - popupMenu.Items.Add(doNotAddToQueueToolStripMenuItem); - popupMenu.Items.Add(manageQueueAndSchedulersToolStripMenuItem); - popupMenu.Show(button2, new Point(0, button2.Height)); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome.cs b/app/XDM/XDM.WinForm.UI/FontAwesome.cs deleted file mode 100644 index 690b25d..0000000 --- a/app/XDM/XDM.WinForm.UI/FontAwesome.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; - -namespace XDM.WinForm.UI -{ - internal static class FontAwesome - { - /// - /// fa-file-archive-o - /// - public static readonly string ArchiveIcon = "f1c6"; - - /// - /// fa-file-text-o - /// - public static readonly string DocumentIcon = "f0f6"; - - /// - /// fa-music - /// - public static readonly string MusicIcon = "f001"; - - /// - /// fa-film - /// - public static readonly string VideoIcon = "f008"; - - /// - /// fa-window-maximize - /// - public static readonly string AppIcon = "f2d0"; - - /// - /// fa-file-o - /// - public static readonly string OtherFileIcon = "f016"; - - /// - /// fa-calendar-check-o - /// - public static readonly string ScheduledFileIcon = "f274"; - - /// - /// fa-pause - /// - public static readonly string PausedIcon = "f04c"; - - /// - /// fa-download - /// - public static readonly string DownloadIcon = "f019"; - - /// - /// fa-hourglass-half - /// - public static readonly string WaitingIcon = "f252"; - - /// - /// fa-calendar - /// - public static readonly string ScheduleIcon = "f073"; - - /// - /// - /// - /// - /// - public static string GetFontIcon(string code) => ((char)Int32.Parse(code, System.Globalization.NumberStyles.HexNumber)).ToString(); - - } -} diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/brave-logo.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/brave-logo.ttf deleted file mode 100644 index c739e37..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/brave-logo.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/fa-regular-400.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/fa-regular-400.ttf deleted file mode 100644 index 932df4a..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/fa-regular-400.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/fa-solid-900.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/fa-solid-900.ttf deleted file mode 100644 index e074608..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/fa-solid-900.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/fontawesome-webfont.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/fontawesome-webfont.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/icomoon-2.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/icomoon-2.ttf deleted file mode 100644 index e390a69..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/icomoon-2.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/icomoon.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/icomoon.ttf deleted file mode 100644 index e390a69..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/icomoon.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontAwesome/remixicon.ttf b/app/XDM/XDM.WinForm.UI/FontAwesome/remixicon.ttf deleted file mode 100644 index c461f40..0000000 Binary files a/app/XDM/XDM.WinForm.UI/FontAwesome/remixicon.ttf and /dev/null differ diff --git a/app/XDM/XDM.WinForm.UI/FontIcon.cs b/app/XDM/XDM.WinForm.UI/FontIcon.cs deleted file mode 100644 index eece0cc..0000000 --- a/app/XDM/XDM.WinForm.UI/FontIcon.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Text; -using System.Windows.Forms; -using XDM.WinForm.UI.FormHelper; - -namespace XDM.WinForm.UI -{ - internal static class FontIcon - { - public static Bitmap Create(Control control, Font font, string text, Color foreColor, int paddingW = 0, int paddingH = 0) - { - using var g1 = control.CreateGraphics(); - var sizeF = g1.MeasureString(text, font); - - var width = (int)Math.Ceiling(sizeF.Width + DpiCompat.ToDeviceUnits(control, paddingW)); - var height = (int)Math.Ceiling(sizeF.Height + DpiCompat.ToDeviceUnits(control, paddingH)); - - var bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); - using Graphics g = Graphics.FromImage(bitmap); - g.SmoothingMode = SmoothingMode.AntiAlias; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.PixelOffsetMode = PixelOffsetMode.HighQuality; - g.TextRenderingHint = TextRenderingHint.AntiAlias; - - //Console.WriteLine(height + " " + sizeF.Height); - //Console.WriteLine((int)Math.Ceiling((height - sizeF.Height) / 2)); - - //using var bgBrush = new SolidBrush(backColor); - using var fgBrush = new SolidBrush(foreColor); - //g.FillRectangle(bgBrush, 0, 0, width, height); - - //StringFormat sf = new StringFormat(); - //sf.LineAlignment = StringAlignment.Center; - //sf.Alignment = StringAlignment.Center; - //sf.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox | StringFormatFlags.FitBlackBox; - - g.DrawString(text, font, fgBrush, - (int)Math.Ceiling((width - sizeF.Width) / 2), - (int)Math.Ceiling((height - sizeF.Height) / 2 + DpiCompat.ToDeviceUnits(control, 1))); - - //TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter| TextFormatFlags.; - //g.DrawString(text, font, fgBrush, new Rectangle(0, 0, bitmap.Width, bitmap.Height), sf); - //TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), foreColor, flags); - return bitmap; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormColorsDark.cs b/app/XDM/XDM.WinForm.UI/FormColorsDark.cs deleted file mode 100644 index 8a8a734..0000000 --- a/app/XDM/XDM.WinForm.UI/FormColorsDark.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace XDM.WinForm.UI -{ - internal class FormColorsDark : IFormColors - { - public Color ToolbarButtonForeColor { get; } = Color.Gray; - public Color ToolbarButtonMouseOverBackColor { get; } = Color.FromArgb(50, 55, 57); - public Color ToolbarButtonMouseDownBackColor { get; } = Color.FromArgb(32, 35, 32); - public Color ToolbarButtonDisabledForeColor { get; } = Color.DimGray; - public Color ToolbarBackColor { get; } = Color.FromArgb(29, 33, 37);//Color.FromArgb(20, 22, 24); - - public Color SearchButtonColor { get; } = Color.DimGray; - - public Color DataGridViewForeColor { get; } = Color.DarkGray; - public Color DataGridViewBackColor { get; } = Color.FromArgb(24, 26, 28);//Color.FromArgb(29, 33, 37); - public Color DataGridViewSelectionBackColor { get; } = Color.FromArgb(59, 63, 67); - public Color DataGridViewSelectionForeColor { get; } = Color.LightGray; - public Color DataGridViewHeaderForeColor { get; } = Color.DimGray; - public Color FooterBackColor { get; } = Color.FromArgb(29, 33, 37); - public Color FooterForeColor { get; } = Color.DarkGray; - public Color BorderColor { get; } = Color.Black; - - public Color TextForeColor { get; } = Color.White; - public Color TextBackColor { get; } = Color.FromArgb(36, 41, 46); - - public Color IconColor { get; } = Color.Gray; - - public Color ProgressBarBackColor { get; } = Color.FromArgb(50, 50, 50); - public Color ProgressBarForeColor { get; } = Color.DodgerBlue; - - public Color BackColor { get; } = Color.FromArgb(36, 41, 46); - public Color ButtonColor { get; } = Color.FromArgb(47, 54, 61); - public Color ForeColor { get; } = Color.White; - - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormColorsLight.cs b/app/XDM/XDM.WinForm.UI/FormColorsLight.cs deleted file mode 100644 index aec44b8..0000000 --- a/app/XDM/XDM.WinForm.UI/FormColorsLight.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace XDM.WinForm.UI -{ - internal class FormColorsLight : IFormColors - { - public Color ToolbarButtonForeColor { get; } = Color.DimGray; - public Color ToolbarButtonMouseOverBackColor { get; } = Color.FromArgb(230, 230, 230); - public Color ToolbarButtonMouseDownBackColor { get; } = Color.FromArgb(226, 226, 226); - public Color ToolbarButtonDisabledForeColor { get; } = Color.DarkGray; - public Color ToolbarBackColor { get; } = Color.FromArgb(246, 246, 246); - - public Color SearchButtonColor { get; } = Color.DarkGray; - - public Color DataGridViewForeColor { get; } = Color.DimGray; - public Color DataGridViewBackColor { get; } = Color.White; - public Color DataGridViewSelectionBackColor { get; } = Color.FromArgb(242, 242, 242); - public Color DataGridViewSelectionForeColor { get; } = Color.Black; - public Color DataGridViewHeaderForeColor { get; } = Color.DarkGray; - public Color BorderColor { get; } = Color.FromArgb(235, 235, 235); - - public Color FooterBackColor { get; } = Color.White; - public Color FooterForeColor { get; } = Color.DimGray; - - public Color TextForeColor { get; } = Color.DimGray; - public Color TextBackColor { get; } = Color.White; - - public Color IconColor { get; } = Color.DodgerBlue; - - public Color ProgressBarBackColor { get; } = Color.FromArgb(230, 230, 230); - public Color ProgressBarForeColor { get; } = Color.DodgerBlue; - - public Color BackColor => SystemColors.Control; - - public Color ButtonColor => SystemColors.ButtonFace; - - public Color ForeColor => SystemColors.ControlText; - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/DarkModeHelper.cs b/app/XDM/XDM.WinForm.UI/FormHelper/DarkModeHelper.cs deleted file mode 100644 index 9a5611f..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/DarkModeHelper.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Text; -using System.Windows.Forms; - -namespace XDM.WinForm.UI.FormHelper -{ - internal static class DarkModeHelper - { - public static void StyleFlatTextBox(TextBox textBox, IFormColors colors) - { - textBox.BackColor = colors.TextBackColor; - textBox.ForeColor = colors.TextForeColor; - textBox.BorderStyle = BorderStyle.Fixed3D; - textBox.Dock = DockStyle.Fill; - } - - public static void StyleFlatTextBox(TextBox textBox, Color bg, Color fg) - { - textBox.BackColor = bg; - textBox.ForeColor = fg; - } - - public static void StyleFlatButton(Button button, IFormColors colors) - { - button.FlatStyle = FlatStyle.Flat; - button.BackColor = colors.ButtonColor; - button.ForeColor = colors.TextForeColor; - //button.FlatAppearance.BorderSize = 0; - } - - public static void StyleFlatButton(Button button, Color bg, Color fg) - { - button.FlatStyle = FlatStyle.Flat; - button.BackColor = bg; - button.ForeColor = fg; - //button.FlatAppearance.BorderSize = 0; - } - - public static void EnabledDarkMode(ComboBox comboBox, Color bg, Color fg) - { - //comboBox.DrawMode = DrawMode.OwnerDrawFixed; - //comboBox.DrawItem += ComboBox_DrawItem; - comboBox.FlatStyle = FlatStyle.Flat; - comboBox.ForeColor = fg; - comboBox.BackColor = bg; - } - - public static void EnableDarkMode(ComboBox comboBox, Color bg, Color fg) - { - comboBox.FlatStyle = FlatStyle.Flat; - comboBox.BackColor = bg; - comboBox.ForeColor = fg; - } - - private static void ComboBox_DrawItem(object sender, DrawItemEventArgs e) - { - e.DrawBackground(); - e.DrawFocusRectangle(); - if (sender is ComboBox comboBox) - { - TextRenderer.DrawText(e.Graphics, (string)comboBox.Items[e.Index], - e.Font, e.Bounds, comboBox.ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); - } - } - - public static void EnableDarkMode(DataGridView dataGridView) - { -#if !NET35 - var dgvType = dataGridView.GetType(); - var vs = dgvType.GetProperty("VerticalScrollBar", - BindingFlags.Instance | BindingFlags.NonPublic); - var vScroll = vs.GetValue(dataGridView) as VScrollBar; - vScroll.HandleCreated += (a, b) => - { - //https://stackoverflow.com/questions/53501268/win10-dark-theme-how-to-use-in-winapi - SetWindowTheme(vScroll.Handle, "DarkMode_Explorer", null); - }; - - var hs = dgvType.GetProperty("VerticalScrollBar", - BindingFlags.Instance | BindingFlags.NonPublic); - var hScroll = vs.GetValue(dataGridView) as VScrollBar; - vScroll.HandleCreated += (a, b) => - { - //https://stackoverflow.com/questions/53501268/win10-dark-theme-how-to-use-in-winapi - SetWindowTheme(hScroll.Handle, "DarkMode_Explorer", null); - }; -#endif - } - - [DllImport("uxtheme.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "#133")] - public static extern int AllowDarkModeForWindow(IntPtr hWnd, int allow); - - [DllImport("uxtheme.dll", SetLastError = true, ExactSpelling = true, CharSet = CharSet.Unicode)] - public static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); - - [DllImport("dwmapi.dll")] - private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); - - private const int DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19; - private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; - - public static bool UseImmersiveDarkMode(IntPtr handle, bool enabled) - { - if (IsWindows10OrGreater(17763)) - { - var attribute = DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1; - if (IsWindows10OrGreater(18985)) - { - attribute = DWMWA_USE_IMMERSIVE_DARK_MODE; - } - - int useImmersiveDarkMode = enabled ? 1 : 0; - return DwmSetWindowAttribute(handle, (int)attribute, ref useImmersiveDarkMode, sizeof(int)) == 0; - } - - return false; - } - - private static bool IsWindows10OrGreater(int build = -1) - { - return Environment.OSVersion.Version.Major >= 10 && Environment.OSVersion.Version.Build >= build; - } - - - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/DpiCompat.cs b/app/XDM/XDM.WinForm.UI/FormHelper/DpiCompat.cs deleted file mode 100644 index 64061b7..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/DpiCompat.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Windows.Forms; - -namespace XDM.WinForm.UI.FormHelper -{ - internal static class DpiCompat - { - public static int ToDeviceUnits(Control control, int value) - { -#if !(NET47_OR_GREATER || NET) - return WinFormsPolyfill.LogicalToDeviceUnits(value); -#else - return control.LogicalToDeviceUnits(value); -#endif - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/FolderPicker.cs b/app/XDM/XDM.WinForm.UI/FormHelper/FolderPicker.cs deleted file mode 100644 index 8008ede..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/FolderPicker.cs +++ /dev/null @@ -1,205 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Diagnostics; -//using System.Linq; -//using System.Runtime.InteropServices; -//using System.Runtime.InteropServices.ComTypes; -//using System.Text; -// - -//namespace XDM.WinForm.UI.Helpers -//{ -// internal class FolderPicker -// { -// public virtual string ResultPath { get; protected set; } -// public virtual string ResultName { get; protected set; } -// public virtual string InputPath { get; set; } -// public virtual bool ForceFileSystem { get; set; } -// public virtual string Title { get; set; } -// public virtual string OkButtonLabel { get; set; } -// public virtual string FileNameLabel { get; set; } - -// protected virtual int SetOptions(int options) -// { -// if (ForceFileSystem) -// { -// options |= (int)FOS.FOS_FORCEFILESYSTEM; -// } -// return options; -// } - - - -// // for all .NET -// public virtual bool ShowDialog(IntPtr owner, bool throwOnError = false) -// { -// var dialog = (IFileOpenDialog)new FileOpenDialog(); -// if (!string.IsNullOrEmpty(InputPath)) -// { -// if (CheckHr(SHCreateItemFromParsingName(InputPath, null, typeof(IShellItem).GUID, out var item), throwOnError) != 0) -// return false; - -// dialog.SetFolder(item); -// } - -// var options = FOS.FOS_PICKFOLDERS; -// options = (FOS)SetOptions((int)options); -// dialog.SetOptions(options); - -// if (Title != null) -// { -// dialog.SetTitle(Title); -// } - -// if (OkButtonLabel != null) -// { -// dialog.SetOkButtonLabel(OkButtonLabel); -// } - -// if (FileNameLabel != null) -// { -// dialog.SetFileName(FileNameLabel); -// } - -// if (owner == IntPtr.Zero) -// { -// owner = Process.GetCurrentProcess().MainWindowHandle; -// if (owner == IntPtr.Zero) -// { -// owner = GetDesktopWindow(); -// } -// } - -// var hr = dialog.Show(owner); -// if (hr == ERROR_CANCELLED) -// return false; - -// if (CheckHr(hr, throwOnError) != 0) -// return false; - -// if (CheckHr(dialog.GetResult(out var result), throwOnError) != 0) -// return false; - -// if (CheckHr(result.GetDisplayName(SIGDN.SIGDN_DESKTOPABSOLUTEPARSING, out var path), throwOnError) != 0) -// return false; - -// ResultPath = path; - -// if (CheckHr(result.GetDisplayName(SIGDN.SIGDN_DESKTOPABSOLUTEEDITING, out path), false) == 0) -// { -// ResultName = path; -// } -// return true; -// } - -// private static int CheckHr(int hr, bool throwOnError) -// { -// if (hr != 0) -// { -// if (throwOnError) -// Marshal.ThrowExceptionForHR(hr); -// } -// return hr; -// } - -// [DllImport("shell32")] -// private static extern int SHCreateItemFromParsingName([MarshalAs(UnmanagedType.LPWStr)] string pszPath, IBindCtx pbc, [MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IShellItem ppv); - -// [DllImport("user32")] -// private static extern IntPtr GetDesktopWindow(); - -//#pragma warning disable IDE1006 // Naming Styles -// private const int ERROR_CANCELLED = unchecked((int)0x800704C7); -//#pragma warning restore IDE1006 // Naming Styles - -// [ComImport, Guid("DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7")] // CLSID_FileOpenDialog -// private class FileOpenDialog -// { -// } - -// [ComImport, Guid("42f85136-db7e-439c-85f1-e4075d135fc8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] -// private interface IFileOpenDialog -// { -// [PreserveSig] int Show(IntPtr parent); // IModalWindow -// [PreserveSig] int SetFileTypes(); // not fully defined -// [PreserveSig] int SetFileTypeIndex(int iFileType); -// [PreserveSig] int GetFileTypeIndex(out int piFileType); -// [PreserveSig] int Advise(); // not fully defined -// [PreserveSig] int Unadvise(); -// [PreserveSig] int SetOptions(FOS fos); -// [PreserveSig] int GetOptions(out FOS pfos); -// [PreserveSig] int SetDefaultFolder(IShellItem psi); -// [PreserveSig] int SetFolder(IShellItem psi); -// [PreserveSig] int GetFolder(out IShellItem ppsi); -// [PreserveSig] int GetCurrentSelection(out IShellItem ppsi); -// [PreserveSig] int SetFileName([MarshalAs(UnmanagedType.LPWStr)] string pszName); -// [PreserveSig] int GetFileName([MarshalAs(UnmanagedType.LPWStr)] out string pszName); -// [PreserveSig] int SetTitle([MarshalAs(UnmanagedType.LPWStr)] string pszTitle); -// [PreserveSig] int SetOkButtonLabel([MarshalAs(UnmanagedType.LPWStr)] string pszText); -// [PreserveSig] int SetFileNameLabel([MarshalAs(UnmanagedType.LPWStr)] string pszLabel); -// [PreserveSig] int GetResult(out IShellItem ppsi); -// [PreserveSig] int AddPlace(IShellItem psi, int alignment); -// [PreserveSig] int SetDefaultExtension([MarshalAs(UnmanagedType.LPWStr)] string pszDefaultExtension); -// [PreserveSig] int Close(int hr); -// [PreserveSig] int SetClientGuid(); // not fully defined -// [PreserveSig] int ClearClientData(); -// [PreserveSig] int SetFilter([MarshalAs(UnmanagedType.IUnknown)] object pFilter); -// [PreserveSig] int GetResults([MarshalAs(UnmanagedType.IUnknown)] out object ppenum); -// [PreserveSig] int GetSelectedItems([MarshalAs(UnmanagedType.IUnknown)] out object ppsai); -// } - -// [ComImport, Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] -// private interface IShellItem -// { -// [PreserveSig] int BindToHandler(); // not fully defined -// [PreserveSig] int GetParent(); // not fully defined -// [PreserveSig] int GetDisplayName(SIGDN sigdnName, [MarshalAs(UnmanagedType.LPWStr)] out string ppszName); -// [PreserveSig] int GetAttributes(); // not fully defined -// [PreserveSig] int Compare(); // not fully defined -// } - -//#pragma warning disable CA1712 // Do not prefix enum values with type name -// private enum SIGDN : uint -// { -// SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000, -// SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000, -// SIGDN_FILESYSPATH = 0x80058000, -// SIGDN_NORMALDISPLAY = 0, -// SIGDN_PARENTRELATIVE = 0x80080001, -// SIGDN_PARENTRELATIVEEDITING = 0x80031001, -// SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001, -// SIGDN_PARENTRELATIVEPARSING = 0x80018001, -// SIGDN_URL = 0x80068000 -// } - -// [Flags] -// private enum FOS -// { -// FOS_OVERWRITEPROMPT = 0x2, -// FOS_STRICTFILETYPES = 0x4, -// FOS_NOCHANGEDIR = 0x8, -// FOS_PICKFOLDERS = 0x20, -// FOS_FORCEFILESYSTEM = 0x40, -// FOS_ALLNONSTORAGEITEMS = 0x80, -// FOS_NOVALIDATE = 0x100, -// FOS_ALLOWMULTISELECT = 0x200, -// FOS_PATHMUSTEXIST = 0x800, -// FOS_FILEMUSTEXIST = 0x1000, -// FOS_CREATEPROMPT = 0x2000, -// FOS_SHAREAWARE = 0x4000, -// FOS_NOREADONLYRETURN = 0x8000, -// FOS_NOTESTFILECREATE = 0x10000, -// FOS_HIDEMRUPLACES = 0x20000, -// FOS_HIDEPINNEDPLACES = 0x40000, -// FOS_NODEREFERENCELINKS = 0x100000, -// FOS_OKBUTTONNEEDSINTERACTION = 0x200000, -// FOS_DONTADDTORECENT = 0x2000000, -// FOS_FORCESHOWHIDDEN = 0x10000000, -// FOS_DEFAULTNOMINIMODE = 0x20000000, -// FOS_FORCEPREVIEWPANEON = 0x40000000, -// FOS_SUPPORTSTREAMABLEITEMS = unchecked((int)0x80000000) -// } -//#pragma warning restore CA1712 // Do not prefix enum values with type name - -// } -//} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/FontImageHelper.cs b/app/XDM/XDM.WinForm.UI/FormHelper/FontImageHelper.cs deleted file mode 100644 index 1856f32..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/FontImageHelper.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Drawing.Text; -using System.Windows.Forms; - -namespace XDM.WinForm.UI.FormHelper -{ - internal class FontImageHelper - { - public static Bitmap FontToBitmap(Control control, Font font, string text, Color foreColor, int paddingW = 0, int paddingH = 0) - { - using var g1 = control.CreateGraphics(); - var sizeF = g1.MeasureString(text, font); - - var width = (int)sizeF.Width + DpiCompat.ToDeviceUnits(control, paddingW); - var height = (int)sizeF.Height + DpiCompat.ToDeviceUnits(control, paddingH); - - var bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); - using Graphics g = Graphics.FromImage(bitmap); - g.SmoothingMode = SmoothingMode.AntiAlias; - g.InterpolationMode = InterpolationMode.HighQualityBicubic; - g.PixelOffsetMode = PixelOffsetMode.HighQuality; - g.TextRenderingHint = TextRenderingHint.AntiAlias; - - //using var bgBrush = new SolidBrush(backColor); - using var fgBrush = new SolidBrush(foreColor); - //g.FillRectangle(bgBrush, 0, 0, width, height); - - StringFormat sf = new StringFormat(); - sf.LineAlignment = StringAlignment.Center; - sf.Alignment = StringAlignment.Center; - sf.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox | StringFormatFlags.FitBlackBox; - - g.DrawString(text, font, fgBrush, (sizeF.Width + DpiCompat.ToDeviceUnits(control, paddingW)) / 2 - sizeF.Width / 2, - (sizeF.Height + DpiCompat.ToDeviceUnits(control, paddingH)) / 2 - sizeF.Height / 2); - - //TextFormatFlags flags = TextFormatFlags.HorizontalCenter | - // TextFormatFlags.VerticalCenter| TextFormatFlags.; - //g.DrawString(text, font, fgBrush, new Rectangle(0, 0, bitmap.Width, bitmap.Height), sf); - //TextRenderer.DrawText(g, text, font, new Rectangle(0, 0, bitmap.Width, bitmap.Height), foreColor, flags); - return bitmap; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/ImmersiveThemeHelper.cs b/app/XDM/XDM.WinForm.UI/FormHelper/ImmersiveThemeHelper.cs deleted file mode 100644 index 8d93ae6..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/ImmersiveThemeHelper.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.Win32; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace XDM.WinForm.UI.FormHelper -{ - internal static class ImmersiveThemeHelper - { - public static bool IsDarkThemeActive() - { - //return false; - try - { - using var rk = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"); - if (rk == null) return false; - var appsUseLightTheme = (Int32)rk.GetValue("AppsUseLightTheme"); - return appsUseLightTheme == 0; - } - catch { } - return false; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/UIRunner.cs b/app/XDM/XDM.WinForm.UI/FormHelper/UIRunner.cs deleted file mode 100644 index 8e5e5ed..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/UIRunner.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Windows.Forms; - -namespace XDM.WinForm.UI.FormHelper -{ - public static class UIRunner - { - public static void RunOnUiThread(Control control, Action callback) - { - if (control.InvokeRequired) - { - control.BeginInvoke(callback); - } - else - { - callback.Invoke(); - } - } - - public static void RunOnUiThread(Control control, Action callback, T value) - { - if (control.InvokeRequired) - { - control.BeginInvoke(callback, value); - } - else - { - callback.Invoke(value); - } - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/FormHelper/darkmode.txt b/app/XDM/XDM.WinForm.UI/FormHelper/darkmode.txt deleted file mode 100644 index eb0f956..0000000 --- a/app/XDM/XDM.WinForm.UI/FormHelper/darkmode.txt +++ /dev/null @@ -1,112 +0,0 @@ -private void SetMenuToDarkMode(ContextMenuStrip ctx, Color bg, Color fg) - { - foreach (ToolStripItem item in ctx.Items) - { - item.BackColor = bg; - item.ForeColor = fg; - } - } - - private void DarkModeDataGridView(DataGridView dataGridView, Color bg1, Color fg1) - { - var dgvType = dataGridView.GetType(); - var vs = dgvType.GetProperty("VerticalScrollBar", - BindingFlags.Instance | BindingFlags.NonPublic); - var vScroll = vs.GetValue(dataGridView) as VScrollBar; - vScroll.HandleCreated += (a, b) => - { - //https://stackoverflow.com/questions/53501268/win10-dark-theme-how-to-use-in-winapi - SetWindowTheme(vScroll.Handle, "DarkMode_Explorer", null); - }; - - var hs = dgvType.GetProperty("VerticalScrollBar", - BindingFlags.Instance | BindingFlags.NonPublic); - var hScroll = vs.GetValue(dataGridView) as VScrollBar; - vScroll.HandleCreated += (a, b) => - { - //https://stackoverflow.com/questions/53501268/win10-dark-theme-how-to-use-in-winapi - SetWindowTheme(hScroll.Handle, "DarkMode_Explorer", null); - }; - - dataGridView.BackgroundColor = bg1; - dataGridView.GridColor = bg1; - dataGridView.DefaultCellStyle.BackColor = bg1; - dataGridView.DefaultCellStyle.ForeColor = fg1; - dataGridView.DefaultCellStyle.SelectionForeColor = Color.Gray; - dataGridView.DefaultCellStyle.SelectionBackColor = Color.FromArgb(60, 60, 60); - dataGridView.ColumnHeadersDefaultCellStyle.BackColor = bg1; - dataGridView.ColumnHeadersDefaultCellStyle.ForeColor = fg1; - dataGridView.ColumnHeadersDefaultCellStyle.SelectionForeColor = Color.Gray; - dataGridView.ColumnHeadersDefaultCellStyle.SelectionBackColor = bg1; - } - - private void EnableDarkStyles() - { - var bg1 = Color.FromArgb(15, 15, 15); - var fg1 = Color.Gray; - - var bg2 = Color.FromArgb(35, 35, 35); - var fg2 = Color.Gray; - - DarkModeDataGridView(dgActiveList, bg1, fg1); - DarkModeDataGridView(dgCompletedList, bg1, fg1); - - DarkModeDataGridView(dgState, bg2, fg2); - DarkModeDataGridView(dgCategories, bg2, fg2); - - tableLayoutPanel1.BackColor = bg1; - - panel1.BackColor = panel3.BackColor = panel2.BackColor = bg2; - - this.HandleCreated += (a, b) => - { - UseImmersiveDarkMode(this.Handle, true); - }; - - panel9.BackColor = tableLayoutPanel3.BackColor = textBox1.BackColor = bg2; - - textBox1.ForeColor = Color.DimGray; - - ctxDownloadMenu.BackColor = ctxMenuActiveList.BackColor = - ctxMenuCompletedList.BackColor = - ctxMainMenu.BackColor = bg1; - SetMenuToDarkMode(ctxDownloadMenu, bg1, fg1); - SetMenuToDarkMode(ctxMenuActiveList, bg1, fg1); - SetMenuToDarkMode(ctxMenuCompletedList, bg1, fg1); - SetMenuToDarkMode(ctxMainMenu, bg1, fg1); - } - - - [DllImport("uxtheme.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "#133")] - public static extern int AllowDarkModeForWindow(IntPtr hWnd, int allow); - - [DllImport("uxtheme.dll", SetLastError = true, ExactSpelling = true, CharSet = CharSet.Unicode)] - public static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); - - [DllImport("dwmapi.dll")] - private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); - - private const int DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19; - private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; - - private static bool UseImmersiveDarkMode(IntPtr handle, bool enabled) - { - if (IsWindows10OrGreater(17763)) - { - var attribute = DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1; - if (IsWindows10OrGreater(18985)) - { - attribute = DWMWA_USE_IMMERSIVE_DARK_MODE; - } - - int useImmersiveDarkMode = enabled ? 1 : 0; - return DwmSetWindowAttribute(handle, (int)attribute, ref useImmersiveDarkMode, sizeof(int)) == 0; - } - - return false; - } - - private static bool IsWindows10OrGreater(int build = -1) - { - return Environment.OSVersion.Version.Major >= 10 && Environment.OSVersion.Version.Build >= build; - } \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/GlobalFontCollection.cs b/app/XDM/XDM.WinForm.UI/GlobalFontCollection.cs deleted file mode 100644 index 11ff8f9..0000000 --- a/app/XDM/XDM.WinForm.UI/GlobalFontCollection.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing.Text; -using System.IO; -using System.Linq; -using System.Text; - -namespace XDM.WinForm.UI -{ - public static class GlobalFontCollection - { - public static readonly PrivateFontCollection FaFontInstance; - public static readonly PrivateFontCollection RiFontInstance; - public static readonly PrivateFontCollection ImFontInstance; - - static GlobalFontCollection() - { - FaFontInstance = new PrivateFontCollection(); - RiFontInstance = new PrivateFontCollection(); - ImFontInstance = new PrivateFontCollection(); - - FaFontInstance.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\fontawesome-webfont.ttf")); - RiFontInstance.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\remixicon.ttf")); - ImFontInstance.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\icomoon.ttf")); - } - - public static void Dispose() - { - FaFontInstance.Dispose(); - RiFontInstance.Dispose(); - ImFontInstance.Dispose(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/IFormColors.cs b/app/XDM/XDM.WinForm.UI/IFormColors.cs deleted file mode 100644 index 346abed..0000000 --- a/app/XDM/XDM.WinForm.UI/IFormColors.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; - -namespace XDM.WinForm.UI -{ - internal interface IFormColors - { - public Color ToolbarButtonForeColor { get; } - public Color ToolbarButtonMouseOverBackColor { get; } - public Color ToolbarButtonMouseDownBackColor { get; } - public Color ToolbarButtonDisabledForeColor { get; } - public Color ToolbarBackColor { get; } - - public Color SearchButtonColor { get; } - - public Color DataGridViewForeColor { get; } - public Color DataGridViewBackColor { get; } - public Color DataGridViewSelectionBackColor { get; } - public Color DataGridViewSelectionForeColor { get; } - public Color DataGridViewHeaderForeColor { get; } - public Color BorderColor { get; } - - public Color FooterBackColor { get; } - public Color FooterForeColor { get; } - - public Color TextForeColor { get; } - public Color TextBackColor { get; } - - public Color IconColor { get; } - - public Color ProgressBarBackColor { get; } - public Color ProgressBarForeColor { get; } - - public Color BackColor { get; } - public Color ButtonColor { get; } - public Color ForeColor { get; } - } -} diff --git a/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.Designer.cs b/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.Designer.cs deleted file mode 100644 index d1e80e4..0000000 --- a/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.Designer.cs +++ /dev/null @@ -1,151 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class LanguageSelectionDlg - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.comboBox1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(373, 133); - this.tableLayoutPanel1.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 3); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(13, 10); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(347, 15); - this.label1.TabIndex = 0; - this.label1.Text = "label1"; - // - // comboBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.comboBox1, 3); - this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Location = new System.Drawing.Point(13, 28); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(347, 23); - this.comboBox1.TabIndex = 1; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(229, 95); - this.button1.Margin = new System.Windows.Forms.Padding(3, 3, 10, 3); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(59, 25); - this.button1.TabIndex = 2; - this.button1.Text = "button1"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(301, 95); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(59, 25); - this.button2.TabIndex = 3; - this.button2.Text = "button2"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // label2 - // - this.label2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 3); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(13, 54); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(347, 38); - this.label2.TabIndex = 4; - this.label2.Text = "label2"; - // - // LanguageSelectionDlg - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(373, 133); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "LanguageSelectionDlg"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Language"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label2; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.cs b/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.cs deleted file mode 100644 index 548c760..0000000 --- a/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.IO; -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class LanguageSelectionDlg : Form - { - public LanguageSelectionDlg() - { - InitializeComponent(); - - Text = TextResource.GetText("MENU_LANG"); - label1.Text = TextResource.GetText("MSG_LANG1"); - label2.Text = TextResource.GetText("MSG_LANG2"); - button1.Text = TextResource.GetText("MSG_OK"); - button2.Text = TextResource.GetText("ND_CANCEL"); - - label1.Margin = new Padding(0, 0, 0, LogicalToDeviceUnits(5)); - label2.Margin = new Padding(0, 0, 0, LogicalToDeviceUnits(5)); - comboBox1.Margin = new Padding(0, 0, 0, LogicalToDeviceUnits(5)); - button1.Margin = new Padding(0, 0, LogicalToDeviceUnits(5), 0); - button2.Margin = new Padding(LogicalToDeviceUnits(5), 0, 0, 0); - button1.Padding = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(5), LogicalToDeviceUnits(10), LogicalToDeviceUnits(5)); - button2.Padding = new Padding(LogicalToDeviceUnits(5)); - - foreach (var file in Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lang"))) - { - comboBox1.Items.Add(Path.GetFileNameWithoutExtension(file)); - } - - comboBox1.SelectedItem = Config.Instance.Language; - } - - private void button1_Click(object sender, EventArgs e) - { - if (comboBox1.SelectedIndex >= 0) - { - Config.Instance.Language = comboBox1.SelectedItem.ToString(); - Config.SaveConfig(); - Close(); - } - } - - private void button2_Click(object sender, EventArgs e) - { - Close(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.resx b/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/LanguageSelectionDlg.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.Designer.cs deleted file mode 100644 index 8552a1d..0000000 --- a/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.Designer.cs +++ /dev/null @@ -1,106 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class LinkRefreshWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.label1, 1, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 42.15247F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 57.84753F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(311, 123); - this.tableLayoutPanel1.TabIndex = 0; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(71, 50); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(169, 25); - this.button1.TabIndex = 0; - this.button1.Text = "Stop waiting"; - this.button1.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(71, 32); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(169, 15); - this.label1.TabIndex = 1; - this.label1.Text = "Waiting for new download link"; - // - // Win32LinkRefreshWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(311, 123); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; - this.Name = "Win32LinkRefreshWindow"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Refresh Link"; - this.TopMost = true; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Label label1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.cs b/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.cs deleted file mode 100644 index e973345..0000000 --- a/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; - -namespace XDM.WinForm.UI -{ - public partial class LinkRefreshWindow : Form, IRefreshLinkDialogSkeleton - { - public LinkRefreshWindow() - { - InitializeComponent(); - Text = TextResource.GetText("MENU_REFRESH_LINK"); - label1.Text = TextResource.GetText("REF_WAITING_FOR_LINK"); - button1.Text = TextResource.GetText("BTN_STOP_PROCESSING"); - } - - public event EventHandler WatchingStopped; - - public void ShowWindow() - { - ShowDialog(); - } - - protected override void OnClosed(EventArgs e) - { - base.OnClosed(e); - WatchingStopped?.Invoke(this, e); - } - - public void LinkReceived() - { - BeginInvoke(new Action(() => Dispose())); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.resx b/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/LinkRefreshWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/MenuHelper.cs b/app/XDM/XDM.WinForm.UI/MenuHelper.cs deleted file mode 100644 index 88bfa8c..0000000 --- a/app/XDM/XDM.WinForm.UI/MenuHelper.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -namespace XDM.WinForm.UI -{ - internal static class MenuHelper - { - internal static void CustomizeMenuAppearance(ContextMenuStrip menu) - { - if (!AppWinPeer.AppsUseLightTheme) - { - var backColor = Color.FromArgb(29, 33, 37); - menu.Renderer = new ToolStripProfessionalRenderer(new DarkMenuColorTable(backColor)); - if (!AppWinPeer.AppsUseLightTheme) - { - menu.BackColor = backColor; - menu.ForeColor = Color.WhiteSmoke; - } - } - } - - internal static void FixHiDpiMargin(ContextMenuStrip menu) - { - menu.ShowImageMargin = true; - foreach (var item in menu.Items) - { - if (item is ToolStripMenuItem menuItem) - { - menuItem.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; - menuItem.Image = AppWinPeer.MenuMargin; - } - } - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/MenuItemWrapper.cs b/app/XDM/XDM.WinForm.UI/MenuItemWrapper.cs deleted file mode 100644 index bf27bb6..0000000 --- a/app/XDM/XDM.WinForm.UI/MenuItemWrapper.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Windows.Forms; -using XDM.Core.Lib.UI; - -namespace XDM.WinForm.UI -{ - public class MenuItemWrapper : IMenuItem - { - private ToolStripMenuItem menuItem; - private string name; - public string Name => name; - public bool Enabled - { - get => menuItem.Enabled; - set => menuItem.Enabled = value; - } - public event EventHandler? Clicked; - - public MenuItemWrapper(string name, ToolStripMenuItem menuItem) - { - this.name = name; - this.menuItem = menuItem; - menuItem.Click += (s, e) => Clicked?.Invoke(s, e); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.Designer.cs b/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.Designer.cs deleted file mode 100644 index f78b711..0000000 --- a/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.Designer.cs +++ /dev/null @@ -1,376 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class NewDownloadDialogView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.doNotAddToQueueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.manageQueueAndSchedulersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.Control; - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Controls.Add(this.button1, 3, 0); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.button4, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel1.ForeColor = System.Drawing.Color.Black; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 184); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(534, 57); - this.tableLayoutPanel1.TabIndex = 0; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button1.Location = new System.Drawing.Point(402, 13); - this.button1.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3); - this.button1.Size = new System.Drawing.Size(119, 31); - this.button1.TabIndex = 0; - this.button1.Text = "Download Now"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button2.Location = new System.Drawing.Point(269, 13); - this.button2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3); - this.button2.Size = new System.Drawing.Size(120, 31); - this.button2.TabIndex = 1; - this.button2.Text = "Download Later"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button4 - // - this.button4.AutoSize = true; - this.button4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button4.Location = new System.Drawing.Point(12, 13); - this.button4.Margin = new System.Windows.Forms.Padding(2, 3, 3, 3); - this.button4.Name = "button4"; - this.button4.Padding = new System.Windows.Forms.Padding(20, 3, 20, 3); - this.button4.Size = new System.Drawing.Size(110, 31); - this.button4.TabIndex = 3; - this.button4.Text = "Advanced"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel2.ColumnCount = 4; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.textBox2, 1, 1); - this.tableLayoutPanel2.Controls.Add(this.textBox1, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.label3, 0, 2); - this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 3, 0); - this.tableLayoutPanel2.Controls.Add(this.linkLabel1, 1, 3); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel2.ForeColor = System.Drawing.Color.Black; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(30, 20, 10, 10); - this.tableLayoutPanel2.RowCount = 10; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(534, 184); - this.tableLayoutPanel2.TabIndex = 1; - // - // textBox2 - // - this.textBox2.BackColor = System.Drawing.Color.White; - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tableLayoutPanel2.SetColumnSpan(this.textBox2, 2); - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox2.ForeColor = System.Drawing.Color.Black; - this.textBox2.Location = new System.Drawing.Point(105, 58); - this.textBox2.Margin = new System.Windows.Forms.Padding(5); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(354, 23); - this.textBox2.TabIndex = 16; - // - // textBox1 - // - this.textBox1.BackColor = System.Drawing.Color.White; - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tableLayoutPanel2.SetColumnSpan(this.textBox1, 2); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox1.ForeColor = System.Drawing.Color.Black; - this.textBox1.Location = new System.Drawing.Point(105, 25); - this.textBox1.Margin = new System.Windows.Forms.Padding(5); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(354, 23); - this.textBox1.TabIndex = 15; - this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.BackColor = System.Drawing.Color.Transparent; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label1.ForeColor = System.Drawing.Color.Black; - this.label1.Location = new System.Drawing.Point(35, 25); - this.label1.Margin = new System.Windows.Forms.Padding(5); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(60, 23); - this.label1.TabIndex = 0; - this.label1.Text = "Address"; - this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.BackColor = System.Drawing.Color.Transparent; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label2.ForeColor = System.Drawing.Color.Black; - this.label2.Location = new System.Drawing.Point(35, 58); - this.label2.Margin = new System.Windows.Forms.Padding(5); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(60, 23); - this.label2.TabIndex = 2; - this.label2.Text = "File Name"; - this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.BackColor = System.Drawing.Color.Transparent; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label3.ForeColor = System.Drawing.Color.Black; - this.label3.Location = new System.Drawing.Point(35, 91); - this.label3.Margin = new System.Windows.Forms.Padding(5); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(60, 15); - this.label3.TabIndex = 4; - this.label3.Text = "Save In"; - this.label3.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.AutoSize = true; - this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; - this.tableLayoutPanel3.ColumnCount = 1; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.Controls.Add(this.label5, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.label6, 0, 1); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel3.ForeColor = System.Drawing.Color.Black; - this.tableLayoutPanel3.Location = new System.Drawing.Point(467, 23); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.Padding = new System.Windows.Forms.Padding(5, 20, 5, 20); - this.tableLayoutPanel3.RowCount = 4; - this.tableLayoutPanel2.SetRowSpan(this.tableLayoutPanel3, 5); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(54, 105); - this.tableLayoutPanel3.TabIndex = 9; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.BackColor = System.Drawing.Color.Transparent; - this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label5.ForeColor = System.Drawing.Color.Silver; - this.label5.Location = new System.Drawing.Point(8, 20); - this.label5.Margin = new System.Windows.Forms.Padding(3, 0, 3, 10); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(38, 15); - this.label5.TabIndex = 0; - this.label5.Text = "label5"; - this.label5.TextAlign = System.Drawing.ContentAlignment.BottomCenter; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.BackColor = System.Drawing.Color.Transparent; - this.label6.Dock = System.Windows.Forms.DockStyle.Fill; - this.label6.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label6.ForeColor = System.Drawing.Color.Black; - this.label6.Location = new System.Drawing.Point(8, 45); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(38, 15); - this.label6.TabIndex = 1; - this.label6.Text = "---"; - this.label6.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.BackColor = System.Drawing.Color.Transparent; - this.tableLayoutPanel2.SetColumnSpan(this.linkLabel1, 2); - this.linkLabel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.linkLabel1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue; - this.linkLabel1.Location = new System.Drawing.Point(103, 111); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.linkLabel1.Size = new System.Drawing.Size(358, 20); - this.linkLabel1.TabIndex = 10; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "Do not capture download from this address"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.doNotAddToQueueToolStripMenuItem, - this.manageQueueAndSchedulersToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(231, 48); - // - // doNotAddToQueueToolStripMenuItem - // - this.doNotAddToQueueToolStripMenuItem.Name = "doNotAddToQueueToolStripMenuItem"; - this.doNotAddToQueueToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.doNotAddToQueueToolStripMenuItem.Text = "Do not add to queue"; - this.doNotAddToQueueToolStripMenuItem.Click += new System.EventHandler(this.doNotAddToQueueToolStripMenuItem_Click); - // - // manageQueueAndSchedulersToolStripMenuItem - // - this.manageQueueAndSchedulersToolStripMenuItem.Name = "manageQueueAndSchedulersToolStripMenuItem"; - this.manageQueueAndSchedulersToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.manageQueueAndSchedulersToolStripMenuItem.Text = "Manage queue and scheduler"; - this.manageQueueAndSchedulersToolStripMenuItem.Click += new System.EventHandler(this.manageQueueAndSchedulersToolStripMenuItem_Click); - // - // NewDownloadDialogView - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.ClientSize = new System.Drawing.Size(534, 241); - this.Controls.Add(this.tableLayoutPanel2); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "NewDownloadDialogView"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "New Download"; - this.TopMost = true; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.LinkLabel linkLabel1; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem doNotAddToQueueToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem manageQueueAndSchedulersToolStripMenuItem; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.cs b/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.cs deleted file mode 100644 index e40b28f..0000000 --- a/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.cs +++ /dev/null @@ -1,400 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Text; -using System.IO; -using System.Threading; -using System.Windows.Forms; -using TraceLog; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.UI; -using XDM.WinForm.UI.FormHelper; -using XDM.WinForm.UI.Win32; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class NewDownloadDialogView : Form, INewDownloadDialogSkeleton - { - private PrivateFontCollection fontCollection; - private Font fontAwesomeFont; - private QueueSelectionDialog dlg; - private int previousIndex = 0; - private bool empty; - - public event EventHandler DownloadLaterClicked; - public event EventHandler DownloadClicked; - public event EventHandler CancelClicked; - public event EventHandler DestroyEvent; - public event EventHandler BlockHostEvent; - public event EventHandler UrlChangedEvent; - public event EventHandler UrlBlockedEvent; - public event EventHandler QueueSchedulerClicked; - public event EventHandler DropdownSelectionChangedEvent; - public event EventHandler FileBrowsedEvent; - - public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } - public ProxyInfo? Proxy { get => proxy; set => proxy = value; } - public int SpeedLimit { get => speedLimit; set => speedLimit = value; } - public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } - - private AuthenticationInfo? authentication; - private ProxyInfo? proxy = Config.Instance.Proxy; - private int speedLimit = Config.Instance.DefaltDownloadSpeed; - private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; - - private IFormColors colors; - private ComboBox comboBox1; - - public NewDownloadDialogView(bool empty) - { - Log.Debug("Thread name: " + Thread.CurrentThread.Name); - InitializeComponent(); - this.TopMost = true; - - comboBox1 = new ComboBox(); - this.tableLayoutPanel2.SetColumnSpan(this.comboBox1, 2); - comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; - comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; - comboBox1.Dock = DockStyle.Fill; - this.tableLayoutPanel2.Controls.Add(this.comboBox1, 1, 2); - - textBox1.Margin = new Padding(5); - textBox2.Margin = new Padding(5); - linkLabel1.Margin = new Padding(5); - comboBox1.Margin = new Padding(5); - - this.empty = empty; - fontCollection = new PrivateFontCollection(); - fontCollection.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\remixicon.ttf")); - fontAwesomeFont = new Font(fontCollection.Families[0], 32); - - label5.Font = fontAwesomeFont; - label5.Text = ((char)Int32.Parse("ecd9"/*"ec28"*//*"eb99"*/, System.Globalization.NumberStyles.HexNumber)).ToString(); - - if (this.empty) - { - textBox1.ReadOnly = true; - } - - textBox1.ReadOnly = !empty; - - if (!AppWinPeer.AppsUseLightTheme) - { - colors = new FormColorsDark(); - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - - DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - tableLayoutPanel2.BackColor = colors.BackColor; - tableLayoutPanel1.BackColor = colors.ButtonColor; - DarkModeHelper.EnabledDarkMode(comboBox1, colors.TextBackColor, colors.TextForeColor); - //comboBox1.BackColor = colors.TextBackColor; - //comboBox1.ForeColor = colors.ToolbarButtonForeColor; - //((SkinnableComboBox)comboBox1).BorderColor = colors.ToolbarBackColor; - //((SkinnableComboBox)comboBox1).ButtonColor = colors.BorderColor; - - DarkModeHelper.StyleFlatTextBox(textBox1, colors); - DarkModeHelper.StyleFlatTextBox(textBox2, colors); - - DarkModeHelper.StyleFlatButton(button1, colors); - DarkModeHelper.StyleFlatButton(button2, colors); - DarkModeHelper.StyleFlatButton(button4, colors); - - label1.ForeColor = label2.ForeColor = - label3.ForeColor = label6.ForeColor = - colors.TextForeColor; - - label5.ForeColor = colors.TextForeColor; - - //panel1.BackColor = colors.TextBackColor; - //panel2.BackColor = colors.TextBackColor; - //panel1.Padding = panel2.Padding = new Padding(LogicalToDeviceUnits(3)); - //panel1.Margin = panel2.Margin = new Padding(LogicalToDeviceUnits(3)); - //textBox1.Location = new Point(LogicalToDeviceUnits(5), LogicalToDeviceUnits(5)); - //textBox2.Location = new Point(LogicalToDeviceUnits(5), LogicalToDeviceUnits(5)); - linkLabel1.LinkColor = Color.DodgerBlue; - //panel1.Padding = panel2.Padding = new Padding(LogicalToDeviceUnits(0)); - //panel1.Margin = panel2.Margin = new Padding(LogicalToDeviceUnits(0)); - - MenuHelper.CustomizeMenuAppearance(contextMenuStrip1); - MenuHelper.FixHiDpiMargin(contextMenuStrip1); - } - - this.FormClosed += (a, b) => - { - this.DestroyEvent?.Invoke(this, EventArgs.Empty); - }; - - LoadTexts(); - } - - public void DisposeWindow() - { - this.Close(); - } - - //private string? SelectFile() - //{ - // using var fc = new SaveFileDialog(); - // fc.FileName = textBox2.Text; - // if (fc.ShowDialog(this) == DialogResult.OK) - // { - // return fc.FileName; - // } - // return null; - //} - - public void SetFileSizeText(string text) - { - this.label6.Text = text; - } - - public string Url { get => textBox1.Text; set => textBox1.Text = value; } - public string SelectedFileName { get => textBox2.Text; set => textBox2.Text = value; } - - - //public FolderSelectionMode FolderSelectionMode - //{ - // get - // { - // return comboBox1.SelectedIndex == 0 ? FolderSelectionMode.Auto : FolderSelectionMode.Manual; - // } - // set - // { - // //comboBox1.Items.Clear(); - // //comboBox1.Items.AddRange(new string[] { AutoSelectText, BrowseText }); - // //comboBox1.Items.AddRange(Config.Instance.RecentFolders.ToArray()); - // //comboBox1.Items.Add(Config.Instance.DefaultDownloadFolder); - - // if (value == FolderSelectionMode.Auto) - // { - // comboBox1.SelectedIndex = 0; - // } - // else - // { - // comboBox1.SelectedIndex = 2; - // } - // } - //} - //public FileConflictResolution ConflictResolution - //{ - // get => /*comboBox2.SelectedIndex == 0 ?*/ FileConflictResolution.AutoRename /*: FileConflictResolution.Overwrite*/; - // set => /*comboBox2.SelectedIndex = value == FileConflictResolution.AutoRename ?*/ value = 0 /*: 1*/; - //} - - //[STAThread] - public void ShowWindow() - { - this.Show(); - //var f = new Form(); - //f.TopMost = true; - //f.Show(); - //Log.Debug("Thread: " + Thread.CurrentThread.Name); - //if (!IsHandleCreated) - //{ - // CreateHandle(); - //} - //NativeMethods.SetWindowTopMost(this); - //NativeMethods.SetForegroundWindow(this.Handle); - //this.Shown += (_, _) => - //{ - // TopLevel = true; - // TopMost = true; - // NativeMethods.SetForegroundWindow(this.Handle); - // NativeMethods.SetWindowTopMost(this); - // NativeMethods.SetForegroundWindow(this.Handle); - //}; - //TopMost = true; - //Application.DoEvents(); - //this.BringToFront(); - //Log.Debug("Thread name: " + Thread.CurrentThread.Name); - //this.Visible = true; - //this.Activate(); - //Application.Run(this); - } - - void INewDownloadDialogSkeleton.Invoke(Action callback) - { - if (this.InvokeRequired) - { - this.BeginInvoke(callback); - } - else - { - callback(); - } - } - - //private void textBox1_TextChanged(object sender, EventArgs e) - //{ - // if (empty) - // { - // UrlChangedEvent?.Invoke(sender, e); - // } - //} - - private void textBox1_TextChanged(object sender, EventArgs e) - { - if (empty) - { - UrlChangedEvent?.Invoke(sender, e); - } - } - - private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) - { - if (comboBox1.SelectedIndex == 1) - { - comboBox1.SelectedIndex = previousIndex; - using var fc = new SaveFileDialog(); - fc.Filter = "All files (*.*)|*.*"; - fc.FileName = textBox2.Text; - if (fc.ShowDialog(this) == DialogResult.OK) - { - this.FileBrowsedEvent?.Invoke(this, new FileBrowsedEventArgs(fc.FileName)); - } - } - else - { - previousIndex = comboBox1.SelectedIndex; - this.DropdownSelectionChangedEvent?.Invoke(this, new FileBrowsedEventArgs(comboBox1.Text)); - } - } - - //private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) - //{ - // if (comboBox1.SelectedIndex == 1) - // { - // comboBox1.SelectedIndex = previousIndex; - // using var fc = new SaveFileDialog(); - // fc.Filter = "All files (*.*)|*.*"; - // fc.FileName = textBox2.Text; - // if (fc.ShowDialog(this) == DialogResult.OK) - // { - // this.FileBrowsedEvent?.Invoke(this, new FileBrowsedEventArgs(fc.FileName)); - // } - // } - // else - // { - // previousIndex = comboBox1.SelectedIndex; - // this.DropdownSelectionChangedEvent?.Invoke(this, new FileBrowsedEventArgs(comboBox1.Text)); - // } - //} - - private void button1_Click(object sender, EventArgs e) - { - DownloadClicked?.Invoke(sender, e); - } - - private void button2_Click(object sender, EventArgs e) - { - DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( - contextMenuStrip1, - this.DownloadLaterClicked, - doNotAddToQueueToolStripMenuItem, - manageQueueAndSchedulersToolStripMenuItem, - button2, - this); - //contextMenuStrip1.Items.Clear(); - //foreach (var queue in QueueManager.Queues) - //{ - // var menuItem = new ToolStripMenuItem - // { - // Name = queue.ID, - // Text = queue.Name - // }; - // menuItem.Click += (s, _) => - // { - // ToolStripMenuItem m = (ToolStripMenuItem)s; - // var args = new DownloadLaterEventArgs(m.Name); - // this.DownloadLaterClicked?.Invoke(this, args); - // }; - // contextMenuStrip1.Items.Add(menuItem); - //} - //contextMenuStrip1.Items.Add(new ToolStripSeparator()); - //contextMenuStrip1.Items.Add(doNotAddToQueueToolStripMenuItem); - //contextMenuStrip1.Items.Add(manageQueueAndSchedulersToolStripMenuItem); - //contextMenuStrip1.Show(button2, new Point(0, button2.Height)); - ////DownloadLaterClicked?.Invoke(sender, e); - } - - private void button4_Click(object sender, EventArgs e) - { - AdvancedDialogHelper.Show(ref authentication, ref proxy, ref enableSpeedLimit, ref speedLimit, this); - //using var dlg = new AdvancedDownloadDialog(); - //dlg.Authentication = Authentication; - //dlg.Proxy = Proxy; - //dlg.EnableSpeedLimit = EnableSpeedLimit; - //dlg.SpeedLimit = SpeedLimit; - //if (dlg.ShowDialog(this) == DialogResult.OK) - //{ - // Authentication = dlg.Authentication; - // Proxy = dlg.Proxy; - // EnableSpeedLimit = dlg.EnableSpeedLimit; - // SpeedLimit = dlg.SpeedLimit; - //} - } - - private void checkBox1_CheckedChanged(object sender, EventArgs e) - { - BlockHostEvent?.Invoke(sender, e); - } - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - UrlBlockedEvent?.Invoke(sender, EventArgs.Empty); - } - - public void SetFolderValues(string[] values) - { - previousIndex = 0; - comboBox1.Items.Clear(); - comboBox1.Items.AddRange(values); - } - - public int SeletedFolderIndex - { - get => comboBox1.SelectedIndex; - set - { - comboBox1.SelectedIndex = value; - previousIndex = value; - } - } - - private void doNotAddToQueueToolStripMenuItem_Click(object sender, EventArgs e) - { - this.DownloadLaterClicked?.Invoke(this, new DownloadLaterEventArgs(string.Empty)); - } - - private void manageQueueAndSchedulersToolStripMenuItem_Click(object sender, EventArgs e) - { - this.QueueSchedulerClicked?.Invoke(this, EventArgs.Empty); - } - - private void LoadTexts() - { - label1.Text = TextResource.GetText("ND_ADDRESS"); - label2.Text = TextResource.GetText("ND_FILE"); - label3.Text = TextResource.GetText("LBL_SAVE_IN"); - linkLabel1.Text = TextResource.GetText("ND_IGNORE_URL"); - button4.Text = TextResource.GetText("ND_MORE"); - button2.Text = TextResource.GetText("ND_DOWNLOAD_LATER"); - button1.Text = TextResource.GetText("ND_DOWNLOAD_NOW"); - Text = TextResource.GetText("ND_TITLE"); - doNotAddToQueueToolStripMenuItem.Text= TextResource.GetText("LBL_QUEUE_OPT3"); - manageQueueAndSchedulersToolStripMenuItem.Text= TextResource.GetText("DESC_Q_TITLE"); - } - - public void ShowMessageBox(string text) - { - MessageBox.Show(this, text); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.resx b/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.resx deleted file mode 100644 index 661dc11..0000000 --- a/app/XDM/XDM.WinForm.UI/NewDownloadDialogView.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/NewQueueDialog.Designer.cs b/app/XDM/XDM.WinForm.UI/NewQueueDialog.Designer.cs deleted file mode 100644 index a27cd38..0000000 --- a/app/XDM/XDM.WinForm.UI/NewQueueDialog.Designer.cs +++ /dev/null @@ -1,216 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class NewQueueDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.listView1 = new System.Windows.Forms.ListView(); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.button2 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 6; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.listView1, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.button2, 5, 4); - this.tableLayoutPanel1.Controls.Add(this.button1, 4, 4); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 4); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(12); - this.tableLayoutPanel1.RowCount = 5; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(584, 411); - this.tableLayoutPanel1.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 6); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(15, 12); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 6); - this.label1.Size = new System.Drawing.Size(554, 21); - this.label1.TabIndex = 0; - this.label1.Text = "Queue name"; - // - // textBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 6); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(15, 36); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(554, 23); - this.textBox1.TabIndex = 1; - // - // listView1 - // - this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2, - this.columnHeader3, - this.columnHeader4}); - this.tableLayoutPanel1.SetColumnSpan(this.listView1, 6); - this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listView1.HideSelection = false; - this.listView1.Location = new System.Drawing.Point(15, 93); - this.listView1.Margin = new System.Windows.Forms.Padding(3, 6, 3, 3); - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(554, 261); - this.listView1.TabIndex = 2; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.View = System.Windows.Forms.View.Details; - // - // columnHeader1 - // - this.columnHeader1.Text = "Name"; - this.columnHeader1.Width = 170; - // - // columnHeader2 - // - this.columnHeader2.Text = "Date added"; - this.columnHeader2.Width = 103; - // - // columnHeader3 - // - this.columnHeader3.Text = "Size"; - this.columnHeader3.Width = 88; - // - // columnHeader4 - // - this.columnHeader4.Text = "Status"; - this.columnHeader4.Width = 103; - // - // button2 - // - this.button2.AutoSize = true; - this.button2.Location = new System.Drawing.Point(473, 369); - this.button2.Margin = new System.Windows.Forms.Padding(3, 12, 12, 3); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(87, 27); - this.button2.TabIndex = 4; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click_1); - // - // button1 - // - this.button1.AutoSize = true; - this.button1.Location = new System.Drawing.Point(371, 369); - this.button1.Margin = new System.Windows.Forms.Padding(3, 12, 12, 3); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(87, 25); - this.button1.TabIndex = 3; - this.button1.Text = "OK"; - this.button1.UseVisualStyleBackColor = true; - // - // label2 - // - this.label2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 6); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(15, 62); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(0, 5, 5, 5); - this.label2.Size = new System.Drawing.Size(554, 25); - this.label2.TabIndex = 5; - this.label2.Text = "Select downloads to add to queue"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox1, 4); - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(15, 360); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(350, 36); - this.checkBox1.TabIndex = 7; - this.checkBox1.Text = "checkBox1"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); - // - // NewQueueDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(584, 411); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "NewQueueDialog"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "New Queue"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.ColumnHeader columnHeader4; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.CheckBox checkBox1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/NewQueueDialog.cs b/app/XDM/XDM.WinForm.UI/NewQueueDialog.cs deleted file mode 100644 index 8f05dc0..0000000 --- a/app/XDM/XDM.WinForm.UI/NewQueueDialog.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using XDMApp; - -#if !(NET472_OR_GREATER||NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class NewQueueDialog : Form - { - public NewQueueDialog(IAppUI ui, Action okAction, DownloadQueue? modifyingQueue) - { - InitializeComponent(); - if (modifyingQueue == null) - { - this.textBox1.Text = "New queue #" + QueueManager.QueueAutoNumber; - QueueManager.QueueAutoNumber++; - } - else - { - this.textBox1.Text = modifyingQueue.Name; - } - listView1.Items.Clear(); - listView1.CheckBoxes = true; - var list = new List(ui.GetAllInProgressDownloads()); - var set = new HashSet(); - - foreach (var queue in QueueManager.Queues) - { - foreach (var id in queue.DownloadIds) - { - set.Add(id); - } - } - - foreach (var ent in list) - { - if (!set.Contains(ent.Id)) - { - var arr = new string[] - { - ent.Name, - ent.DateAdded.ToShortDateString(), - Helpers.FormatSize(ent.Size), - ent.Status==DownloadStatus.Downloading?$"{ent.Progress}%":ent.Status.ToString() - }; - listView1.Items.Add(new ListViewItem(arr) { Checked = false, Tag = ent }); - } - } - - button1.Click += (a, b) => - { - if (string.IsNullOrEmpty(textBox1.Text)) - { - MessageBox.Show(TextResource.GetText("MSG_QUEUE_NAME_MISSING")); - return; - } - var list = new List(listView1.CheckedItems.Count); - foreach (ListViewItem lvi in listView1.CheckedItems) - { - list.Add(((InProgressDownloadEntry)lvi.Tag).Id); - } - if (modifyingQueue == null) - { - okAction.Invoke(new DownloadQueue(Guid.NewGuid().ToString(), textBox1.Text) { DownloadIds = list }, true); - } - else - { - modifyingQueue.DownloadIds.AddRange(list); - okAction.Invoke(modifyingQueue, false); - } - Close(); - }; - - button1.Margin = button2.Margin = checkBox1.Margin = - new Padding(LogicalToDeviceUnits(3), - LogicalToDeviceUnits(12), - LogicalToDeviceUnits(12), - LogicalToDeviceUnits(3)); - - foreach (ColumnHeader col in listView1.Columns) - { - col.Width = col.Index == 0 ? LogicalToDeviceUnits(200) : LogicalToDeviceUnits(100); - } - - LoadTexts(); - } - - private void button2_Click_1(object sender, EventArgs e) - { - Close(); - } - - private void LoadTexts() - { - Text = TextResource.GetText("LBL_QUEUE_OPT1"); - label1.Text = TextResource.GetText("MSG_QUEUE_NAME"); - label2.Text = TextResource.GetText("MSG_QUEUE_SELECT_ITEMS"); - listView1.Columns[0].Text = TextResource.GetText("SORT_NAME"); - listView1.Columns[1].Text = TextResource.GetText("SORT_DATE"); - listView1.Columns[2].Text = TextResource.GetText("SORT_SIZE"); - listView1.Columns[3].Text = TextResource.GetText("SORT_STATUS"); - checkBox1.Text = TextResource.GetText("VID_CHK"); - button1.Text = TextResource.GetText("MSG_OK"); - button2.Text = TextResource.GetText("ND_CANCEL"); - } - - private void checkBox1_CheckedChanged(object sender, EventArgs e) - { - foreach (ListViewItem lvi in listView1.Items) - { - lvi.Checked = checkBox1.Checked; - } - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/NewQueueDialog.resx b/app/XDM/XDM.WinForm.UI/NewQueueDialog.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/NewQueueDialog.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.Designer.cs b/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.Designer.cs deleted file mode 100644 index 65385f2..0000000 --- a/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.Designer.cs +++ /dev/null @@ -1,256 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class NewVideoDownloadDialogView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.btnCancel = new System.Windows.Forms.Button(); - this.btnLater = new System.Windows.Forms.Button(); - this.btnDownload = new System.Windows.Forms.Button(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.lblAddress = new System.Windows.Forms.Label(); - this.lblFile = new System.Windows.Forms.Label(); - this.lblFileIcon = new System.Windows.Forms.Label(); - this.lblFileSize = new System.Windows.Forms.Label(); - this.txtFileName = new System.Windows.Forms.TextBox(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.doNotAddToQueueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.manageQueueAndSchedulerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.btnCancel, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.btnLater, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.btnDownload, 3, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 107); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(419, 57); - this.tableLayoutPanel1.TabIndex = 4; - // - // btnCancel - // - this.btnCancel.AutoSize = true; - this.btnCancel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnCancel.Location = new System.Drawing.Point(13, 13); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3); - this.btnCancel.Size = new System.Drawing.Size(90, 31); - this.btnCancel.TabIndex = 2; - this.btnCancel.Text = "Advanced"; - this.btnCancel.UseVisualStyleBackColor = true; - this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); - // - // btnLater - // - this.btnLater.AutoSize = true; - this.btnLater.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnLater.Location = new System.Drawing.Point(161, 13); - this.btnLater.Name = "btnLater"; - this.btnLater.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3); - this.btnLater.Size = new System.Drawing.Size(120, 31); - this.btnLater.TabIndex = 1; - this.btnLater.Text = "Download Later"; - this.btnLater.UseVisualStyleBackColor = true; - this.btnLater.Click += new System.EventHandler(this.btnDownloadLater_Click); - // - // btnDownload - // - this.btnDownload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnDownload.AutoSize = true; - this.btnDownload.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnDownload.Location = new System.Drawing.Point(287, 13); - this.btnDownload.Name = "btnDownload"; - this.btnDownload.Padding = new System.Windows.Forms.Padding(10, 3, 10, 3); - this.btnDownload.Size = new System.Drawing.Size(119, 31); - this.btnDownload.TabIndex = 0; - this.btnDownload.Text = "Download Now"; - this.btnDownload.UseVisualStyleBackColor = true; - this.btnDownload.Click += new System.EventHandler(this.btnDownload_Click); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel2.ColumnCount = 4; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.lblAddress, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.lblFile, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.lblFileIcon, 3, 0); - this.tableLayoutPanel2.Controls.Add(this.lblFileSize, 3, 2); - this.tableLayoutPanel2.Controls.Add(this.txtFileName, 1, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel2.RowCount = 3; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(419, 107); - this.tableLayoutPanel2.TabIndex = 5; - // - // lblAddress - // - this.lblAddress.AutoSize = true; - this.lblAddress.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblAddress.Location = new System.Drawing.Point(13, 10); - this.lblAddress.Name = "lblAddress"; - this.lblAddress.Padding = new System.Windows.Forms.Padding(15, 5, 5, 5); - this.lblAddress.Size = new System.Drawing.Size(64, 29); - this.lblAddress.TabIndex = 0; - this.lblAddress.Text = "Name"; - this.lblAddress.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // lblFile - // - this.lblFile.AutoSize = true; - this.lblFile.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblFile.Location = new System.Drawing.Point(13, 39); - this.lblFile.Name = "lblFile"; - this.lblFile.Padding = new System.Windows.Forms.Padding(15, 5, 5, 5); - this.lblFile.Size = new System.Drawing.Size(64, 25); - this.lblFile.TabIndex = 1; - this.lblFile.Text = "Save In"; - this.lblFile.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // lblFileIcon - // - this.lblFileIcon.AutoSize = true; - this.lblFileIcon.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblFileIcon.ForeColor = System.Drawing.Color.Silver; - this.lblFileIcon.Location = new System.Drawing.Point(358, 10); - this.lblFileIcon.Name = "lblFileIcon"; - this.lblFileIcon.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel2.SetRowSpan(this.lblFileIcon, 2); - this.lblFileIcon.Size = new System.Drawing.Size(48, 54); - this.lblFileIcon.TabIndex = 5; - this.lblFileIcon.Text = "label5"; - this.lblFileIcon.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // lblFileSize - // - this.lblFileSize.AutoSize = true; - this.lblFileSize.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblFileSize.Location = new System.Drawing.Point(358, 64); - this.lblFileSize.Name = "lblFileSize"; - this.lblFileSize.Size = new System.Drawing.Size(48, 33); - this.lblFileSize.TabIndex = 6; - this.lblFileSize.Text = "label6"; - this.lblFileSize.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // txtFileName - // - this.tableLayoutPanel2.SetColumnSpan(this.txtFileName, 2); - this.txtFileName.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtFileName.Location = new System.Drawing.Point(83, 13); - this.txtFileName.Name = "txtFileName"; - this.txtFileName.Size = new System.Drawing.Size(269, 23); - this.txtFileName.TabIndex = 7; - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.doNotAddToQueueToolStripMenuItem, - this.manageQueueAndSchedulerToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(231, 48); - // - // doNotAddToQueueToolStripMenuItem - // - this.doNotAddToQueueToolStripMenuItem.Name = "doNotAddToQueueToolStripMenuItem"; - this.doNotAddToQueueToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.doNotAddToQueueToolStripMenuItem.Text = "Do not add to queue"; - this.doNotAddToQueueToolStripMenuItem.Click += new System.EventHandler(this.doNotAddToQueueToolStripMenuItem_Click); - // - // manageQueueAndSchedulerToolStripMenuItem - // - this.manageQueueAndSchedulerToolStripMenuItem.Name = "manageQueueAndSchedulerToolStripMenuItem"; - this.manageQueueAndSchedulerToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.manageQueueAndSchedulerToolStripMenuItem.Text = "Manage queue and scheduler"; - this.manageQueueAndSchedulerToolStripMenuItem.Click += new System.EventHandler(this.manageQueueAndSchedulerToolStripMenuItem_Click); - // - // NewVideoDownloadDialogView - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(419, 164); - this.Controls.Add(this.tableLayoutPanel2); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "NewVideoDownloadDialogView"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "New Download"; - this.TopMost = true; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.Button btnDownload; - private System.Windows.Forms.Button btnLater; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Label lblAddress; - private System.Windows.Forms.Label lblFile; - private System.Windows.Forms.Label lblFileIcon; - private System.Windows.Forms.Label lblFileSize; - private System.Windows.Forms.TextBox txtFileName; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem doNotAddToQueueToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem manageQueueAndSchedulerToolStripMenuItem; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.cs b/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.cs deleted file mode 100644 index 1a1dbfe..0000000 --- a/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Text; -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.UI; -using XDM.WinForm.UI.FormHelper; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif -namespace XDM.WinForm.UI -{ - public partial class NewVideoDownloadDialogView : Form, INewVideoDownloadDialog - { - private PrivateFontCollection fontCollection; - private Font fontAwesomeFont; - private int previousIndex = 0; - - public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } - public ProxyInfo? Proxy { get => proxy; set => proxy = value; } - public int SpeedLimit { get => speedLimit; set => speedLimit = value; } - public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } - - private AuthenticationInfo? authentication; - private ProxyInfo? proxy = Config.Instance.Proxy; - private int speedLimit = Config.Instance.DefaltDownloadSpeed; - private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; - - private IFormColors colors; - private ComboBox comboBox1; - - public DownloadSchedule? DownloadSchedule { get; set; } - - public NewVideoDownloadDialogView(PrivateFontCollection fc) - { - InitializeComponent(); - - comboBox1 = new ComboBox(); /*AppWinPeer.AppsUseLightTheme ? new ComboBox() : new SkinnableComboBox();*/ - this.tableLayoutPanel2.SetColumnSpan(this.comboBox1, 2); - comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; - comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; - comboBox1.Dock = DockStyle.Fill; - this.tableLayoutPanel2.Controls.Add(this.comboBox1, 1, 1); - - txtFileName.Margin = new Padding(5); - comboBox1.Margin = new Padding(5); - - fontCollection = fc; - fontAwesomeFont = new Font(fontCollection.Families[0], 32); - lblFileIcon.Font = fontAwesomeFont; - lblFileIcon.Text = ((char)Int32.Parse("ecd9"/*"ec28"*//*"eb99"*/, - System.Globalization.NumberStyles.HexNumber)).ToString(); - - if (!AppWinPeer.AppsUseLightTheme) - { - colors = new FormColorsDark(); - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - - DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - tableLayoutPanel2.BackColor = colors.BackColor; - tableLayoutPanel1.BackColor = colors.ButtonColor; - DarkModeHelper.EnabledDarkMode(comboBox1, colors.TextBackColor, colors.TextForeColor); - //comboBox1.BackColor = colors.TextBackColor; - //comboBox1.ForeColor = colors.ToolbarButtonForeColor; - //((SkinnableComboBox)comboBox1).BorderColor = colors.ToolbarBackColor; - //((SkinnableComboBox)comboBox1).ButtonColor = colors.BorderColor; - DarkModeHelper.StyleFlatTextBox(txtFileName, colors); - //DarkModeHelper.StyleFlatTextBox(textBox2); - - DarkModeHelper.StyleFlatButton(btnCancel, colors); - DarkModeHelper.StyleFlatButton(btnDownload, colors); - DarkModeHelper.StyleFlatButton(btnLater, colors); - - lblAddress.ForeColor = lblFile.ForeColor = - lblFileIcon.ForeColor = lblFileSize.ForeColor = - colors.TextForeColor; - - // label5.ForeColor = Color.FromArgb(50, 50, 50); - } - LoadTexts(); - } - - public event EventHandler DownloadClicked; - public event EventHandler DownloadLaterClicked; - public event EventHandler CancelClicked, DestroyEvent, QueueSchedulerClicked; - public event EventHandler DropdownSelectionChangedEvent; - public event EventHandler FileBrowsedEvent; - - public string SelectedFileName { get => txtFileName.Text; set => txtFileName.Text = value; } - - public string FileSize { get => lblFileSize.Text; set => lblFileSize.Text = value; } - - //public FolderSelectionMode FolderSelectionMode - //{ - // get - // { - // return comboBox1.SelectedIndex == 0 ? FolderSelectionMode.Auto : FolderSelectionMode.Manual; - // } - // set - // { - // comboBox1.Items.Clear(); - // comboBox1.Items.AddRange(new string[] { AutoSelectText, BrowseText, Config.Instance.DefaultDownloadFolder }); - // comboBox1.Items.AddRange(Config.Instance.RecentFolders.ToArray()); - - // if (value == FolderSelectionMode.Auto) - // { - // comboBox1.SelectedIndex = 0; - // } - // else - // { - // comboBox1.SelectedIndex = 2; - // } - // } - //} - - private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) - { - if (comboBox1.SelectedIndex == 1) - { - comboBox1.SelectedIndex = previousIndex; - using var fc = new SaveFileDialog(); - fc.Filter = "All files (*.*)|*.*"; - fc.FileName = txtFileName.Text; - if (fc.ShowDialog(this) == DialogResult.OK) - { - this.FileBrowsedEvent?.Invoke(this, new FileBrowsedEventArgs(fc.FileName)); - } - } - else - { - previousIndex = comboBox1.SelectedIndex; - this.DropdownSelectionChangedEvent?.Invoke(this, new FileBrowsedEventArgs(comboBox1.Text)); - } - } - - public void DisposeWindow() - { - this.Dispose(); - } - - public void Invoke(Action callback) - { - if (this.InvokeRequired) - { - this.BeginInvoke(callback); - } - else - { - callback(); - } - } - - //public string SelectFile() - //{ - // using var fc = new SaveFileDialog(); - // fc.FileName = txtFileName.Text; - // if (fc.ShowDialog(this) == DialogResult.OK) - // { - // return fc.FileName; - // } - // else - // { - // comboBox1.SelectedIndex = previousIndex; - // } - // return null; - //} - - //[STAThread] - public void ShowWindow() - { - this.Show(); - //var t = new Thread(() => - //{ - // this.Load += (_, _) => - // { - // this.TopMost = true; - // }; - // Application.Run(this); - //}); - //t.SetApartmentState(ApartmentState.STA); - //t.Start(); - } - - private void btnDownload_Click(object sender, EventArgs e) - { - DownloadClicked?.Invoke(sender, e); - } - - private void btnDownloadLater_Click(object sender, EventArgs e) - { - DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( - contextMenuStrip1, - this.DownloadLaterClicked, - doNotAddToQueueToolStripMenuItem, - manageQueueAndSchedulerToolStripMenuItem, - btnLater, - this); - - //contextMenuStrip1.Items.Clear(); - //foreach (var queue in QueueManager.Queues) - //{ - // var menuItem = new ToolStripMenuItem - // { - // Name = queue.ID, - // Text = queue.Name - // }; - // menuItem.Click += (s, _) => - // { - // ToolStripMenuItem m = (ToolStripMenuItem)s; - // var args = new DownloadLaterEventArgs(m.Name); - // this.DownloadLaterClicked?.Invoke(this, args); - // }; - // contextMenuStrip1.Items.Add(menuItem); - //} - //contextMenuStrip1.Items.Add(new ToolStripSeparator()); - //contextMenuStrip1.Items.Add(doNotAddToQueueToolStripMenuItem); - //contextMenuStrip1.Items.Add(manageQueueAndSchedulerToolStripMenuItem); - //contextMenuStrip1.Show(btnLater, new Point(0, btnLater.Height)); - ////DownloadLaterClicked?.Invoke(sender, e); - } - - private void btnCancel_Click(object sender, EventArgs e) - { - AdvancedDialogHelper.Show(ref authentication, ref proxy, ref enableSpeedLimit, ref speedLimit, this); - - //using var dlg = new AdvancedDownloadDialog(); - //dlg.Authentication = Authentication; - //dlg.Proxy = Proxy; - //dlg.EnableSpeedLimit = EnableSpeedLimit; - //dlg.SpeedLimit = SpeedLimit; - //if (dlg.ShowDialog(this) == DialogResult.OK) - //{ - // Authentication = dlg.Authentication; - // Proxy = dlg.Proxy; - // EnableSpeedLimit = dlg.EnableSpeedLimit; - // SpeedLimit = dlg.SpeedLimit; - //} - } - - public void SetFolderValues(string[] values) - { - previousIndex = 0; - comboBox1.Items.Clear(); - comboBox1.Items.AddRange(values); - } - - public int SeletedFolderIndex - { - get => comboBox1.SelectedIndex; - set - { - comboBox1.SelectedIndex = value; - previousIndex = value; - } - } - - private void doNotAddToQueueToolStripMenuItem_Click(object sender, EventArgs e) - { - this.DownloadLaterClicked?.Invoke(this, new DownloadLaterEventArgs(string.Empty)); - } - - private void manageQueueAndSchedulerToolStripMenuItem_Click(object sender, EventArgs e) - { - this.QueueSchedulerClicked?.Invoke(this, EventArgs.Empty); - } - - public void ShowMessageBox(string text) - { - MessageBox.Show(this, text); - } - - private void LoadTexts() - { - lblAddress.Text = TextResource.GetText("LBL_NEW_QUEUE"); - lblFile.Text = TextResource.GetText("LBL_SAVE_IN"); - btnCancel.Text = TextResource.GetText("ND_MORE"); - btnLater.Text = TextResource.GetText("ND_DOWNLOAD_LATER"); - btnDownload.Text = TextResource.GetText("ND_DOWNLOAD_NOW"); - Text = TextResource.GetText("ND_TITLE"); - doNotAddToQueueToolStripMenuItem.Text = TextResource.GetText("LBL_QUEUE_OPT3"); - manageQueueAndSchedulerToolStripMenuItem.Text = TextResource.GetText("DESC_Q_TITLE"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.resx b/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.resx deleted file mode 100644 index 661dc11..0000000 --- a/app/XDM/XDM.WinForm.UI/NewVideoDownloadDialogView.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/DpiHelper.cs b/app/XDM/XDM.WinForm.UI/Polyfill/DpiHelper.cs deleted file mode 100644 index cc688db..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/DpiHelper.cs +++ /dev/null @@ -1,497 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; -using System.Drawing; -using System.Drawing.Drawing2D; -using System.Windows.Forms; -using Microsoft.Win32; - -namespace XDM.WinForm.UI -{ - /// - /// Helper class for scaling coordinates and images according to current DPI scaling set in Windows for the primary screen. - /// - internal static partial class DpiHelper - { - // The default(100) and max(225) text scale factor is value what Settings display text scale - // applies and also clamps the text scale factor value between 100 and 225 value. - // See https://docs.microsoft.com/windows/uwp/design/input/text-scaling. - internal const short MinTextScaleValue = 100; - internal const short MaxTextScaleValue = 225; - internal const float MinTextScaleFactorValue = 1.00f; - internal const float MaxTextScaleFactorValue = 2.25f; - - internal const double LogicalDpi = 96.0; - private static InterpolationMode s_interpolationMode; - - // Backing field, indicating that we will need to send a PerMonitorV2 query in due course. - private static bool s_perMonitorAware; - - internal static int DeviceDpi { get; private set; } - - static DpiHelper() => Initialize(); - - private static void Initialize() - { - s_interpolationMode = InterpolationMode.Invalid; - s_perMonitorAware = GetPerMonitorAware(); - DeviceDpi = GetDeviceDPI(); - } - - private static int GetDeviceDPI() - { - // This will only change when the first call to set the process DPI awareness is made. Multiple calls to - // set the DPI have no effect after making the first call. Depending on what the DPI awareness settings are - // we'll get either the actual DPI of the primary display at process startup or the default LogicalDpi; - - if (!OsVersion.IsWindows10_1607OrGreater) - { - using var dc = User32.GetDcScope.ScreenDC; - return Gdi32.GetDeviceCaps(dc, Gdi32.DeviceCapability.LOGPIXELSX); - } - - // This avoids needing to create a DC - return (int)User32.GetDpiForSystem(); - } - - private static bool GetPerMonitorAware() - { - if (!OsVersion.IsWindows10_1607OrGreater) - { - return false; - } - - HRESULT result = SHCore.GetProcessDpiAwareness( - IntPtr.Zero, - out SHCore.PROCESS_DPI_AWARENESS processDpiAwareness); - - Debug.Assert(result.Succeeded(), $"Failed to get ProcessDpi HRESULT: {result}"); - Debug.Assert(Enum.IsDefined(typeof(SHCore.PROCESS_DPI_AWARENESS), processDpiAwareness)); - - return result.Succeeded() && processDpiAwareness switch - { - SHCore.PROCESS_DPI_AWARENESS.UNAWARE => false, - SHCore.PROCESS_DPI_AWARENESS.SYSTEM_AWARE => false, - SHCore.PROCESS_DPI_AWARENESS.PER_MONITOR_AWARE => true, - _ => true - }; - } - - /// - /// Returns a boolean to specify if we should enable processing of WM_DPICHANGED and related messages - /// - internal static bool IsPerMonitorV2Awareness - { - get - { - if (s_perMonitorAware) - { - // We can't cache this value because different top level windows can have different DPI awareness context - // for mixed mode applications. - IntPtr dpiAwareness = User32.GetThreadDpiAwarenessContext(); - return User32.AreDpiAwarenessContextsEqual(dpiAwareness, User32.DPI_AWARENESS_CONTEXT.PER_MONITOR_AWARE_V2); - } - else - { - return false; - } - } - } - - /// - /// Indicates, if rescaling becomes necessary, either because we are not 96 DPI or we're PerMonitorV2Aware. - /// - internal static bool IsScalingRequirementMet => IsScalingRequired || s_perMonitorAware; - - /// - /// Returns the ratio of to . - /// - internal static double LogicalToDeviceUnitsScalingFactor => DeviceDpi / LogicalDpi; - - private static InterpolationMode InterpolationMode - { - get - { - if (s_interpolationMode == InterpolationMode.Invalid) - { - int dpiScalePercent = (int)Math.Round(LogicalToDeviceUnitsScalingFactor * 100); - - // We will prefer NearestNeighbor algorithm for 200, 300, 400, etc zoom factors, in which each pixel become a 2x2, 3x3, 4x4, etc rectangle. - // This produces sharp edges in the scaled image and doesn't cause distortions of the original image. - // For any other scale factors we will prefer a high quality resizing algorithm. While that introduces fuzziness in the resulting image, - // it will not distort the original (which is extremely important for small zoom factors like 125%, 150%). - // We'll use Bicubic in those cases, except on reducing (zoom < 100, which we shouldn't have anyway), in which case Linear produces better - // results because it uses less neighboring pixels. - if ((dpiScalePercent % 100) == 0) - { - s_interpolationMode = InterpolationMode.NearestNeighbor; - } - else if (dpiScalePercent < 100) - { - s_interpolationMode = InterpolationMode.HighQualityBilinear; - } - else - { - s_interpolationMode = InterpolationMode.HighQualityBicubic; - } - } - - return s_interpolationMode; - } - } - - private static Bitmap ScaleBitmapToSize(Bitmap logicalImage, Size deviceImageSize) - { - Bitmap deviceImage; - deviceImage = new Bitmap(deviceImageSize.Width, deviceImageSize.Height, logicalImage.PixelFormat); - - using (Graphics graphics = Graphics.FromImage(deviceImage)) - { - graphics.InterpolationMode = InterpolationMode; - - RectangleF sourceRect = new RectangleF(0, 0, logicalImage.Size.Width, logicalImage.Size.Height); - RectangleF destRect = new RectangleF(0, 0, deviceImageSize.Width, deviceImageSize.Height); - - // Specify a source rectangle shifted by half of pixel to account for GDI+ considering the source origin the center of top-left pixel - // Failing to do so will result in the right and bottom of the bitmap lines being interpolated with the graphics' background color, - // and will appear black even if we cleared the background with transparent color. - // The apparition of these artifacts depends on the interpolation mode, on the dpi scaling factor, etc. - // E.g. at 150% DPI, Bicubic produces them and NearestNeighbor is fine, but at 200% DPI NearestNeighbor also shows them. - sourceRect.Offset(-0.5f, -0.5f); - - graphics.DrawImage(logicalImage, destRect, sourceRect, GraphicsUnit.Pixel); - } - - return deviceImage; - } - - public static Bitmap CreateScaledBitmap(Bitmap logicalImage, int deviceDpi = 0) - { - Size deviceImageSize = LogicalToDeviceUnits(logicalImage.Size, deviceDpi); - return ScaleBitmapToSize(logicalImage, deviceImageSize); - } - - /// - /// Returns whether scaling is required when converting between logical-device units, - /// if the application opted in the automatic scaling in the .config file. - /// - public static bool IsScalingRequired => DeviceDpi != LogicalDpi; - - /// - /// Retrieve the text scale factor, which is set via Settings > Display > Make Text Bigger. - /// The settings are stored in the registry under HKCU\Software\Microsoft\Accessibility in (DWORD)TextScaleFactor. - /// - /// The scaling factor in the range [1.0, 2.25]. - /// Windows Text scaling - public static float GetTextScaleFactor() - { - short textScaleValue = MinTextScaleValue; - try - { - RegistryKey? key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Accessibility"); - if (key is not null && key.GetValue("TextScaleFactor") is int _textScaleValue) - { - textScaleValue = (short)_textScaleValue; - } - } - catch - { - // Failed to read the registry for whatever reason. -#if DEBUG - throw; -#endif - } - - // Restore the text scale if it isn't the default value in the valid text scale factor value - if (textScaleValue > MinTextScaleValue && textScaleValue <= MaxTextScaleValue) - { - return (float)textScaleValue / MinTextScaleValue; - } - - return MinTextScaleFactorValue; - } - - /// - /// scale logical pixel to the factor - /// - public static int ConvertToGivenDpiPixel(int value, double pixelFactor) - { - var scaledValue = (int)Math.Round(value * pixelFactor); - return scaledValue == 0 ? 1 : scaledValue; - } - - /// - /// Transforms a horizontal or vertical integer coordinate from logical to device units - /// by scaling it up for current DPI and rounding to nearest integer value - /// - /// value in logical units - /// value in device units - public static int LogicalToDeviceUnits(int value, int devicePixels = 0) - { - if (devicePixels == 0) - { - return (int)Math.Round(LogicalToDeviceUnitsScalingFactor * value); - } - - double scalingFactor = devicePixels / LogicalDpi; - return (int)Math.Round(scalingFactor * value); - } - - /// - /// Returns a new Padding with the input's - /// dimensions converted from logical units to device units. - /// - /// Padding in logical units - /// Padding in device units - public static Padding LogicalToDeviceUnits(Padding logicalPadding, int deviceDpi = 0) - { - return new Padding( - LogicalToDeviceUnits(logicalPadding.Left, deviceDpi), - LogicalToDeviceUnits(logicalPadding.Top, deviceDpi), - LogicalToDeviceUnits(logicalPadding.Right, deviceDpi), - LogicalToDeviceUnits(logicalPadding.Bottom, deviceDpi)); - } - - /// - /// Transforms a horizontal integer coordinate from logical to device units - /// by scaling it up for current DPI and rounding to nearest integer value - /// - /// The horizontal value in logical units - /// The horizontal value in device units - public static int LogicalToDeviceUnitsX(int value) - { - return LogicalToDeviceUnits(value, 0); - } - - /// - /// Transforms a vertical integer coordinate from logical to device units - /// by scaling it up for current DPI and rounding to nearest integer value - /// - /// The vertical value in logical units - /// The vertical value in device units - public static int LogicalToDeviceUnitsY(int value) - { - return LogicalToDeviceUnits(value, 0); - } - - /// - /// Returns a new Size with the input's - /// dimensions converted from logical units to device units. - /// - /// Size in logical units - /// Size in device units - public static Size LogicalToDeviceUnits(Size logicalSize, int deviceDpi = 0) - { - return new Size(LogicalToDeviceUnits(logicalSize.Width, deviceDpi), - LogicalToDeviceUnits(logicalSize.Height, deviceDpi)); - } - - /// - /// Create and return a new bitmap scaled to the specified size. - /// - /// The image to scale from logical units to device units - /// The size to scale image to - - public static Bitmap? CreateResizedBitmap(Bitmap? logicalImage, Size targetImageSize) - { - if (logicalImage is null) - { - return null; - } - - return ScaleBitmapToSize(logicalImage, targetImageSize); - } - - /// - /// Creating bitmap from Icon resource - /// - public static Bitmap GetBitmapFromIcon(Type t, string name) - { - Icon b = new Icon(t, name); - Bitmap bitmap = b.ToBitmap(); - b.Dispose(); - return bitmap; - } - - /// - /// Create a new bitmap scaled for the device units. - /// When displayed on the device, the scaled image will have same size as the original image would have when displayed at 96dpi. - /// - /// The image to scale from logical units to device units - public static void ScaleBitmapLogicalToDevice(ref Bitmap logicalBitmap, int deviceDpi = 0) - { - if (logicalBitmap is null) - { - return; - } - - Bitmap deviceBitmap = CreateScaledBitmap(logicalBitmap, deviceDpi); - if (deviceBitmap is not null) - { - logicalBitmap.Dispose(); - logicalBitmap = deviceBitmap; - } - } - - /// - /// Indicates whether the first (Parking)Window has been created. From that moment on, - /// we will not be able nor allowed to change the Process' DpiMode. - /// - internal static bool FirstParkingWindowCreated { get; set; } - - /// - /// Gets the DPI awareness. - /// - /// The thread's/process' current HighDpi mode - internal static HighDpiMode GetWinformsApplicationDpiAwareness() - { - // For Windows 10 RS2 and above - if (OsVersion.IsWindows10_1607OrGreater) - { - IntPtr dpiAwareness = User32.GetThreadDpiAwarenessContext(); - - if (User32.AreDpiAwarenessContextsEqual(dpiAwareness, User32.DPI_AWARENESS_CONTEXT.SYSTEM_AWARE)) - { - return HighDpiMode.SystemAware; - } - - if (User32.AreDpiAwarenessContextsEqual(dpiAwareness, User32.DPI_AWARENESS_CONTEXT.UNAWARE)) - { - return HighDpiMode.DpiUnaware; - } - - if (User32.AreDpiAwarenessContextsEqual(dpiAwareness, User32.DPI_AWARENESS_CONTEXT.PER_MONITOR_AWARE_V2)) - { - return HighDpiMode.PerMonitorV2; - } - - if (User32.AreDpiAwarenessContextsEqual(dpiAwareness, User32.DPI_AWARENESS_CONTEXT.PER_MONITOR_AWARE)) - { - return HighDpiMode.PerMonitor; - } - - if (User32.AreDpiAwarenessContextsEqual(dpiAwareness, User32.DPI_AWARENESS_CONTEXT.UNAWARE_GDISCALED)) - { - return HighDpiMode.DpiUnawareGdiScaled; - } - } - else if (OsVersion.IsWindows8_1OrGreater) - { - SHCore.GetProcessDpiAwareness(IntPtr.Zero, out SHCore.PROCESS_DPI_AWARENESS processDpiAwareness); - switch (processDpiAwareness) - { - case SHCore.PROCESS_DPI_AWARENESS.UNAWARE: - return HighDpiMode.DpiUnaware; - case SHCore.PROCESS_DPI_AWARENESS.SYSTEM_AWARE: - return HighDpiMode.SystemAware; - case SHCore.PROCESS_DPI_AWARENESS.PER_MONITOR_AWARE: - return HighDpiMode.PerMonitor; - } - } - else - { - // Available on Vista and higher - return User32.IsProcessDPIAware() ? HighDpiMode.SystemAware : HighDpiMode.DpiUnaware; - } - - // We should never get here, except someone ported this with force to < Windows 7. - return HighDpiMode.DpiUnaware; - } - - /// - /// Sets the DPI awareness. If not available on the current OS, it falls back to the next possible. - /// - /// true/false - If the process DPI awareness is successfully set, returns true. Otherwise false. - internal static bool SetWinformsApplicationDpiAwareness(HighDpiMode highDpiMode) - { - bool success = false; - - if (OsVersion.IsWindows10_1703OrGreater) - { - // SetProcessIntPtr needs Windows 10 RS2 and above - IntPtr rs2AndAboveDpiFlag; - switch (highDpiMode) - { - case HighDpiMode.SystemAware: - rs2AndAboveDpiFlag = User32.DPI_AWARENESS_CONTEXT.SYSTEM_AWARE; - break; - case HighDpiMode.PerMonitor: - rs2AndAboveDpiFlag = User32.DPI_AWARENESS_CONTEXT.PER_MONITOR_AWARE; - break; - case HighDpiMode.PerMonitorV2: - // Necessary for RS1, since this SetProcessIntPtr IS available here. - rs2AndAboveDpiFlag = User32.IsValidDpiAwarenessContext(User32.DPI_AWARENESS_CONTEXT.PER_MONITOR_AWARE_V2) - ? User32.DPI_AWARENESS_CONTEXT.PER_MONITOR_AWARE_V2 - : User32.DPI_AWARENESS_CONTEXT.SYSTEM_AWARE; - break; - case HighDpiMode.DpiUnawareGdiScaled: - // Let's make sure, we do not try to set a value which has been introduced in later Windows releases. - rs2AndAboveDpiFlag = User32.IsValidDpiAwarenessContext(User32.DPI_AWARENESS_CONTEXT.UNAWARE_GDISCALED) - ? User32.DPI_AWARENESS_CONTEXT.UNAWARE_GDISCALED - : User32.DPI_AWARENESS_CONTEXT.UNAWARE; - break; - default: - rs2AndAboveDpiFlag = User32.DPI_AWARENESS_CONTEXT.UNAWARE; - break; - } - - success = User32.SetProcessDpiAwarenessContext(rs2AndAboveDpiFlag); - } - else if (OsVersion.IsWindows8_1OrGreater) - { - // 8.1 introduced SetProcessDpiAwareness - SHCore.PROCESS_DPI_AWARENESS dpiFlag; - switch (highDpiMode) - { - case HighDpiMode.DpiUnaware: - case HighDpiMode.DpiUnawareGdiScaled: - dpiFlag = SHCore.PROCESS_DPI_AWARENESS.UNAWARE; - break; - case HighDpiMode.SystemAware: - dpiFlag = SHCore.PROCESS_DPI_AWARENESS.SYSTEM_AWARE; - break; - case HighDpiMode.PerMonitor: - case HighDpiMode.PerMonitorV2: - dpiFlag = SHCore.PROCESS_DPI_AWARENESS.PER_MONITOR_AWARE; - break; - default: - dpiFlag = SHCore.PROCESS_DPI_AWARENESS.SYSTEM_AWARE; - break; - } - - success = SHCore.SetProcessDpiAwareness(dpiFlag) == HRESULT.S_OK; - } - else - { - // Vista or higher has SetProcessDPIAware - SHCore.PROCESS_DPI_AWARENESS dpiFlag = (SHCore.PROCESS_DPI_AWARENESS)(-1); - switch (highDpiMode) - { - case HighDpiMode.DpiUnaware: - case HighDpiMode.DpiUnawareGdiScaled: - // We can return, there is nothing to set if we assume we're already in DpiUnaware. - return true; - case HighDpiMode.SystemAware: - case HighDpiMode.PerMonitor: - case HighDpiMode.PerMonitorV2: - dpiFlag = SHCore.PROCESS_DPI_AWARENESS.SYSTEM_AWARE; - break; - } - - if (dpiFlag == SHCore.PROCESS_DPI_AWARENESS.SYSTEM_AWARE) - { - success = User32.SetProcessDPIAware(); - } - } - - // Need to reset as our DPI will change if this was the first call to set the DPI context for the process. - Initialize(); - - return success; - } - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/Gdi32.cs b/app/XDM/XDM.WinForm.UI/Polyfill/Gdi32.cs deleted file mode 100644 index 45c61a3..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/Gdi32.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace XDM.WinForm.UI -{ - static partial class Gdi32 - { - public enum DeviceCapability : int - { - BITSPIXEL = 12, - PLANES = 14, - LOGPIXELSX = 88, - LOGPIXELSY = 90 - } - - [DllImport("Gdi32.dll", SetLastError = true, ExactSpelling = true)] - public static extern int GetDeviceCaps(HDC hDC, DeviceCapability nIndex); - - public enum OBJ : int - { - PEN = 1, - BRUSH = 2, - DC = 3, - METADC = 4, - PAL = 5, - FONT = 6, - BITMAP = 7, - REGION = 8, - METAFILE = 9, - MEMDC = 10, - EXTPEN = 11, - ENHMETADC = 12, - ENHMETAFILE = 13, - COLORSPACE = 14 - } - - [DllImport("Gdi32.dll", ExactSpelling = true)] - public static extern OBJ GetObjectType(HGDIOBJ h); - - public static OBJ GetObjectType(HandleRef h) - { - OBJ result = GetObjectType((HGDIOBJ)h.Handle); - GC.KeepAlive(h.Wrapper); - return result; - } - - public struct HGDIOBJ - { - public IntPtr Handle { get; } - - public HGDIOBJ(IntPtr handle) => Handle = handle; - - public bool IsNull => Handle == IntPtr.Zero; - - public static explicit operator IntPtr(HGDIOBJ hgdiobj) => hgdiobj.Handle; - public static explicit operator HGDIOBJ(IntPtr hgdiobj) => new HGDIOBJ(hgdiobj); - - public static bool operator ==(HGDIOBJ value1, HGDIOBJ value2) => value1.Handle == value2.Handle; - public static bool operator !=(HGDIOBJ value1, HGDIOBJ value2) => value1.Handle != value2.Handle; - public override bool Equals(object? obj) => obj is HGDIOBJ hgdiobj && hgdiobj.Handle == Handle; - public override int GetHashCode() => Handle.GetHashCode(); - - public OBJ ObjectType => GetObjectType(this); - } - - public readonly struct HDC - { - public IntPtr Handle { get; } - - public HDC(IntPtr handle) => Handle = handle; - - public bool IsNull => Handle == IntPtr.Zero; - - public static explicit operator IntPtr(HDC hdc) => hdc.Handle; - public static explicit operator HDC(IntPtr hdc) => new HDC(hdc); - public static implicit operator HGDIOBJ(HDC hdc) => new HGDIOBJ(hdc.Handle); - - public static bool operator ==(HDC value1, HDC value2) => value1.Handle == value2.Handle; - public static bool operator !=(HDC value1, HDC value2) => value1.Handle != value2.Handle; - public override bool Equals(object? obj) => obj is HDC hdc && hdc.Handle == Handle; - public override int GetHashCode() => Handle.GetHashCode(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/HighDpiMode.cs b/app/XDM/XDM.WinForm.UI/Polyfill/HighDpiMode.cs deleted file mode 100644 index f675c2b..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/HighDpiMode.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace XDM.WinForm.UI -{ - public enum HighDpiMode - { - /// - /// The window does not scale for DPI changes and always assumes a scale factor of 100%. - /// - DpiUnaware, - - /// - /// The window queries for the DPI of the primary monitor once and uses this for the application on all monitors. - /// - SystemAware, - - /// - /// The window checks for DPI when it's created and adjusts scale factor when the DPI changes. - /// - PerMonitor, - - /// - /// Similar to , but enables child window DPI change notification, improved scaling of comctl32 controls and dialog scaling. - /// - PerMonitorV2, - - /// - /// Similar to , but improves the quality of GDI/GDI+ based content. - /// - DpiUnawareGdiScaled - } -} diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/Interop.cs b/app/XDM/XDM.WinForm.UI/Polyfill/Interop.cs deleted file mode 100644 index 4d955c7..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/Interop.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System; -using System.Runtime.InteropServices; - -namespace XDM.WinForm.UI -{ - internal interface IHandle - { - public IntPtr Handle { get; } - } - internal class Interop - { - - - - - - } - - internal class NtDll - { - /// - /// Version info structure for - /// - /// - /// Note that this structure is the exact same defintion as OSVERSIONINFOEX. - /// - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] - internal unsafe struct RTL_OSVERSIONINFOEX - { - internal uint dwOSVersionInfoSize; - internal uint dwMajorVersion; - internal uint dwMinorVersion; - internal uint dwBuildNumber; - internal uint dwPlatformId; - internal fixed char szCSDVersion[128]; - internal ushort wServicePackMajor; - internal ushort wServicePackMinor; - internal ushort wSuiteMask; - internal byte wProductType; - internal byte wReserved; - } - - [DllImport("ntdll.dll", EntryPoint = "RtlGetVersion", ExactSpelling = true)] - private static extern int RtlGetVersionInternal(ref RTL_OSVERSIONINFOEX lpVersionInformation); - - internal static unsafe int RtlGetVersion(out RTL_OSVERSIONINFOEX versionInfo) - { - versionInfo = new RTL_OSVERSIONINFOEX - { - dwOSVersionInfoSize = (uint)sizeof(RTL_OSVERSIONINFOEX) - }; - return RtlGetVersionInternal(ref versionInfo); - } - - [DllImport("ntdll.dll", ExactSpelling = true)] - public unsafe static extern uint RtlNtStatusToDosError(int Status); - } - - internal enum HRESULT : int - { - S_OK = 0, - S_FALSE = 1, - DRAGDROP_S_DROP = 0x00040100, - DRAGDROP_S_CANCEL = 0x00040101, - DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102, - - E_NOTIMPL = unchecked((int)0x80004001), - E_NOINTERFACE = unchecked((int)0x80004002), - E_POINTER = unchecked((int)0x80004003), - E_ABORT = unchecked((int)0x80004004), - E_FAIL = unchecked((int)0x80004005), - - // These are CLR HRESULTs - InvalidArgFailure = unchecked((int)0x80008081), - CoreHostLibLoadFailure = unchecked((int)0x80008082), - CoreHostLibMissingFailure = unchecked((int)0x80008083), - CoreHostEntryPointFailure = unchecked((int)0x80008084), - CoreHostCurHostFindFailure = unchecked((int)0x80008085), - CoreClrResolveFailure = unchecked((int)0x80008087), - CoreClrBindFailure = unchecked((int)0x80008088), - CoreClrInitFailure = unchecked((int)0x80008089), - CoreClrExeFailure = unchecked((int)0x8000808a), - LibHostExecModeFailure = unchecked((int)0x80008090), - LibHostSdkFindFailure = unchecked((int)0x80008091), - LibHostInvalidArgs = unchecked((int)0x80008092), - InvalidConfigFile = unchecked((int)0x80008093), - AppArgNotRunnable = unchecked((int)0x80008094), - AppHostExeNotBoundFailure = unchecked((int)0x80008095), - FrameworkMissingFailure = unchecked((int)0x80008096), - HostApiFailed = unchecked((int)0x80008097), - HostApiBufferTooSmall = unchecked((int)0x80008098), - LibHostUnknownCommand = unchecked((int)0x80008099), - LibHostAppRootFindFailure = unchecked((int)0x8000809a), - SdkResolverResolveFailure = unchecked((int)0x8000809b), - FrameworkCompatFailure = unchecked((int)0x8000809c), - FrameworkCompatRetry = unchecked((int)0x8000809d), - - RPC_E_CHANGED_MODE = unchecked((int)0x80010106), - DISP_E_MEMBERNOTFOUND = unchecked((int)0x80020003), - DISP_E_PARAMNOTFOUND = unchecked((int)0x80020004), - DISP_E_UNKNOWNNAME = unchecked((int)0x80020006), - DISP_E_EXCEPTION = unchecked((int)0x80020009), - DISP_E_UNKNOWNLCID = unchecked((int)0x8002000C), - DISP_E_DIVBYZERO = unchecked((int)0x80020012), - TYPE_E_BADMODULEKIND = unchecked((int)0x800288BD), - STG_E_INVALIDFUNCTION = unchecked((int)0x80030001), - STG_E_FILENOTFOUND = unchecked((int)0x80030002), - STG_E_ACCESSDENIED = unchecked((int)0x80030005), - STG_E_INVALIDPARAMETER = unchecked((int)0x80030057), - STG_E_INVALIDFLAG = unchecked((int)0x800300FF), - OLE_E_ADVISENOTSUPPORTED = unchecked((int)0x80040003), - OLE_E_NOCONNECTION = unchecked((int)0x80040004), - OLE_E_PROMPTSAVECANCELLED = unchecked((int)0x8004000C), - OLE_E_INVALIDRECT = unchecked((int)0x8004000D), - DV_E_FORMATETC = unchecked((int)0x80040064), - DV_E_TYMED = unchecked((int)0x80040069), - DV_E_DVASPECT = unchecked((int)0x8004006B), - DRAGDROP_E_NOTREGISTERED = unchecked((int)0x80040100), - DRAGDROP_E_ALREADYREGISTERED = unchecked((int)0x80040101), - VIEW_E_DRAW = unchecked((int)0x80040140), - INPLACE_E_NOTOOLSPACE = unchecked((int)0x800401A1), - CO_E_OBJNOTREG = unchecked((int)0x800401FB), - CO_E_OBJISREG = unchecked((int)0x800401FC), - E_ACCESSDENIED = unchecked((int)0x80070005), - E_OUTOFMEMORY = unchecked((int)0x8007000E), - E_INVALIDARG = unchecked((int)0x80070057), - ERROR_CANCELLED = unchecked((int)0x800704C7), - } - - internal static class HResultExtensions - { - public static bool Succeeded(this HRESULT hr) => hr >= 0; - - public static bool Failed(this HRESULT hr) => hr < 0; - - public static string AsString(this HRESULT hr) - => Enum.IsDefined(typeof(HRESULT), hr) - ? $"HRESULT {hr} [0x{(int)hr:X} ({(int)hr:D})]" - : $"HRESULT [0x{(int)hr:X} ({(int)hr:D})]"; - } -} - diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/OsVersion.cs b/app/XDM/XDM.WinForm.UI/Polyfill/OsVersion.cs deleted file mode 100644 index fefcc72..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/OsVersion.cs +++ /dev/null @@ -1,54 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - - - -namespace XDM.WinForm.UI -{ - internal static class OsVersion - { - private static NtDll.RTL_OSVERSIONINFOEX s_versionInfo = InitVersion(); - - private static NtDll.RTL_OSVERSIONINFOEX InitVersion() - { - // We use RtlGetVersion as it isn't subject to version lie. GetVersion - // won't tell you the real version unless the launching exe is manifested - // with the latest OS version. - - NtDll.RtlGetVersion(out NtDll.RTL_OSVERSIONINFOEX info); - return info; - } - - /// - /// Is Windows 10 first release or later. (Threshold 1, build 10240, version 1507) - /// - public static bool IsWindows10_1507OrGreater - => s_versionInfo.dwMajorVersion >= 10 && s_versionInfo.dwBuildNumber >= 10240; - - /// - /// Is Windows 10 Anniversary Update or later. (Redstone 1, build 14393, version 1607) - /// - public static bool IsWindows10_1607OrGreater - => s_versionInfo.dwMajorVersion >= 10 && s_versionInfo.dwBuildNumber >= 14393; - - /// - /// Is Windows 10 Creators Update or later. (Redstone 2, build 15063, version 1703) - /// - public static bool IsWindows10_1703OrGreater - => s_versionInfo.dwMajorVersion >= 10 && s_versionInfo.dwBuildNumber >= 15063; - - /// - /// Is Windows 8.1 or later. - /// - public static bool IsWindows8_1OrGreater - => s_versionInfo.dwMajorVersion >= 10 - || (s_versionInfo.dwMajorVersion == 6 && s_versionInfo.dwMinorVersion == 3); - - /// - /// Is Windows 8 or later. - /// - public static bool IsWindows8OrGreater - => s_versionInfo.dwMajorVersion >= 8; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/SHCore.cs b/app/XDM/XDM.WinForm.UI/Polyfill/SHCore.cs deleted file mode 100644 index 8c9ce82..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/SHCore.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; - - -namespace XDM.WinForm.UI -{ - internal static partial class SHCore - { - [DllImport(Libraries.SHCore, ExactSpelling = true)] - public static extern HRESULT GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS value); - - public enum PROCESS_DPI_AWARENESS : int - { - UNAWARE = 0, - SYSTEM_AWARE = 1, - PER_MONITOR_AWARE = 2 - } - - [DllImport(Libraries.SHCore, ExactSpelling = true)] - public static extern HRESULT SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value); - } - - class Libraries - { - public const string SHCore = "SHCore.dll"; - } -} - - diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/User32.cs b/app/XDM/XDM.WinForm.UI/Polyfill/User32.cs deleted file mode 100644 index 77bd294..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/User32.cs +++ /dev/null @@ -1,180 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace XDM.WinForm.UI -{ - internal class User32 - { - // This is only available on Windows 1607 and later. Avoids needing a DC to get the DPI. - [DllImport("user32.dll", ExactSpelling = true)] - public static extern uint GetDpiForSystem(); - - [Flags] - public enum DCX : uint - { - WINDOW = 0x00000001, - CACHE = 0x00000002, - NORESETATTRS = 0x00000004, - CLIPCHILDREN = 0x00000008, - CLIPSIBLINGS = 0x00000010, - PARENTCLIP = 0x00000020, - EXCLUDERGN = 0x00000040, - INTERSECTRGN = 0x00000080, - EXCLUDEUPDATE = 0x00000100, - INTERSECTUPDATE = 0x00000200, - LOCKWINDOWUPDATE = 0x00000400, - USESTYLE = 0x00010000, - VALIDATE = 0x00200000, - } - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern Gdi32.HDC GetDC(IntPtr hWnd); - - public static Gdi32.HDC GetDC(HandleRef hWnd) - { - Gdi32.HDC dc = GetDC(hWnd.Handle); - GC.KeepAlive(hWnd.Wrapper); - return dc; - } - - /// - /// Helper to scope lifetime of an retrieved via and - /// . Releases the (if any) when disposed. - /// - /// - /// Use in a statement. If you must pass this around, always pass by - /// to avoid duplicating the handle and risking a double release. - /// - public readonly ref struct GetDcScope - { - [DllImport("user32.dll", ExactSpelling = true)] - public static extern Gdi32.HDC GetDCEx(IntPtr hWnd, IntPtr hrgnClip, DCX flags); - - public static Gdi32.HDC GetDCEx(IHandle hWnd, IntPtr hrgnClip, DCX flags) - { - Gdi32.HDC result = GetDCEx(hWnd.Handle, hrgnClip, flags); - GC.KeepAlive(hWnd); - return result; - } - - public Gdi32.HDC HDC { get; } - public IntPtr HWND { get; } - - public GetDcScope(IntPtr hwnd) - { - HWND = hwnd; - HDC = GetDC(hwnd); - } - - /// - /// Creates a using . - /// - /// - /// GetWindowDC calls GetDCEx(hwnd, null, DCX_WINDOW | DCX_USESTYLE). - /// - /// GetDC calls GetDCEx(hwnd, null, DCX_USESTYLE) when given a handle. (When given null it has additional - /// logic, and can't be replaced directly by GetDCEx. - /// - public GetDcScope(IntPtr hwnd, IntPtr hrgnClip, DCX flags) - { - HWND = hwnd; - HDC = GetDCEx(hwnd, hrgnClip, flags); - } - - /// - /// Creates a DC scope for the primary monitor (not the entire desktop). - /// - /// - /// is the API to get the DC for the - /// entire desktop. - /// - public static GetDcScope ScreenDC => new GetDcScope(IntPtr.Zero); - - public bool IsNull => HDC.IsNull; - - public static implicit operator IntPtr(in GetDcScope dcScope) => dcScope.HDC.Handle; - public static implicit operator Gdi32.HDC(in GetDcScope dcScope) => dcScope.HDC; - - public void Dispose() - { - if (!HDC.IsNull) - { - ReleaseDC(HWND, HDC); - } - } - } - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern int ReleaseDC(IntPtr hWnd, Gdi32.HDC hDC); - - public static int ReleaseDC(HandleRef hWnd, Gdi32.HDC hDC) - { - int result = ReleaseDC(hWnd.Handle, hDC); - GC.KeepAlive(hWnd.Wrapper); - return result; - } - - [DllImport("user32.dll", ExactSpelling = true, EntryPoint = "GetThreadDpiAwarenessContext", SetLastError = true)] - private static extern IntPtr GetThreadDpiAwarenessContextInternal(); - - /// - /// Tries to get thread dpi awareness context - /// - /// Returns thread dpi awareness context if API is available in this version of OS. otherwise, return IntPtr.Zero. - public static IntPtr GetThreadDpiAwarenessContext() - { - if (OsVersion.IsWindows10_1607OrGreater) - { - return GetThreadDpiAwarenessContextInternal(); - } - - // legacy OS that does not have this API available. - return UNSPECIFIED_DPI_AWARENESS_CONTEXT; - } - - public static IntPtr UNSPECIFIED_DPI_AWARENESS_CONTEXT = IntPtr.Zero; - [DllImport("user32.dll", ExactSpelling = true)] - public static extern bool SetProcessDPIAware(); - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern bool SetProcessDpiAwarenessContext(IntPtr value); - - public static class DPI_AWARENESS_CONTEXT - { - public static readonly IntPtr UNAWARE = (IntPtr)(-1); - public static readonly IntPtr SYSTEM_AWARE = (IntPtr)(-2); - public static readonly IntPtr PER_MONITOR_AWARE = (IntPtr)(-3); - public static readonly IntPtr PER_MONITOR_AWARE_V2 = (IntPtr)(-4); - public static readonly IntPtr UNAWARE_GDISCALED = (IntPtr)(-5); - } - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern bool IsValidDpiAwarenessContext(IntPtr value); - - [DllImport("user32.dll", ExactSpelling = true)] - public static extern bool IsProcessDPIAware(); - - [DllImport("user32.dll", ExactSpelling = true, EntryPoint = "AreDpiAwarenessContextsEqual", SetLastError = true)] - private static extern bool AreDpiAwarenessContextsEqualInternal(IntPtr dpiContextA, IntPtr dpiContextB); - - /// - /// Tries to compare two DPIawareness context values. Return true if they were equal. - /// Return false when they are not equal or underlying OS does not support this API. - /// - /// true/false - public static bool AreDpiAwarenessContextsEqual(IntPtr dpiContextA, IntPtr dpiContextB) - { - if (dpiContextA == UNSPECIFIED_DPI_AWARENESS_CONTEXT && dpiContextB == UNSPECIFIED_DPI_AWARENESS_CONTEXT) - { - return true; - } - - if (OsVersion.IsWindows10_1607OrGreater) - { - return AreDpiAwarenessContextsEqualInternal(dpiContextA, dpiContextB); - } - - return false; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/Polyfill/WinFormsPolyfill.cs b/app/XDM/XDM.WinForm.UI/Polyfill/WinFormsPolyfill.cs deleted file mode 100644 index b205b66..0000000 --- a/app/XDM/XDM.WinForm.UI/Polyfill/WinFormsPolyfill.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using System.Windows.Forms; - -namespace XDM.WinForm.UI -{ - internal static class WinFormsPolyfill - { - public static int LogicalToDeviceUnits(int value) - { - return DpiHelper.LogicalToDeviceUnits(value, DpiHelper.DeviceDpi); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/Program.cs b/app/XDM/XDM.WinForm.UI/Program.cs deleted file mode 100644 index 74ee878..0000000 --- a/app/XDM/XDM.WinForm.UI/Program.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Windows.Forms; -using TraceLog; -using Translations; -using XDM.Core.Lib.Common; -using XDMApp; - -namespace XDM.WinForm.UI -{ - //to support tls1.2 in net3.5 use following - //https://stackoverflow.com/questions/43240611/net-framework-3-5-and-tls-1-2 - static class Program - { - - private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; - private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto"; - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main(string[] args) - { - if (Environment.OSVersion.Version.Major >= 6) - { - SetProcessDPIAware(); - } - Application.ThreadException += Application_ThreadException; - Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); - AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - //Log.Debug(Environment.Version.ToString()); - //ThreadPool.GetMinThreads(out int wt, out int cpt); - //Log.Debug("cpt: " + cpt + " wt: " + wt); - //ThreadPool.SetMaxThreads(4, 4); - //ThreadPool.GetMinThreads(out wt, out cpt); - //Log.Debug("cpt: " + cpt + " wt: " + wt); - ServicePointManager.ServerCertificateValidationCallback += (a, b, c, d) => - { - return true; - }; - //foreach (var attr in new object().GetType().Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true)) - //{ - // var version = ((AssemblyFileVersionAttribute)attr).Version; - // Console.WriteLine(version); - //} - //Console.WriteLine(new object().GetType().Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute),true)); - ServicePointManager.DefaultConnectionLimit = 100; - //SetTls(); - -#if NET45 - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; -#elif !NET35 - ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault; -#endif -#if NET46_OR_GREATER - - AppContext.SetSwitch(DisableCachingName, true); - AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true); -#endif - - var commandOptions = ArgsProcessor.ParseArgs(args); - //Application.SetHighDpiMode(HighDpiMode.SystemAware); - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - var app = new XDMApp.XDMApp(); - app.Args = args; - TextResource.Load(Config.Instance.Language); - var appWin = new AppWinPeer(); - app.AppUI = new XDMApp.AppWin(appWin, app); - //if (commandOptions.ContainsKey("-m")) - //{ - // appWin.Visible = false; - //} - ////appWin.Visible = !commandOptions.ContainsKey("-m"); - ////app.LoadDownloadList(); - app.StartClipboardMonitor(); - app.StartScheduler(); - app.StartNativeMessagingHost(); - appWin.Visible = !commandOptions.ContainsKey("-m"); - Application.Run(new ApplicationContext()); - } - - private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - Log.Debug(string.Format("Unhandled exception caught {0} and will {1}", - e.ExceptionObject, - e.IsTerminating ? "Terminating" : "Continue")); - } - - private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) - { - Log.Debug(string.Format("Unhandled exception caught {0}", e.Exception)); - } - - [DllImport("user32.dll", SetLastError = true)] - static extern bool SetProcessDPIAware(); - - //private static void SetTls() - //{ - // //foreach(var s in typeof(ServicePointManager) - // //.GetFields(BindingFlags.Static | BindingFlags.NonPublic)) - // //{ - // // Console.WriteLine(s); - // //} - // //Console.WriteLine(typeof(Application)); - // //var fields = typeof(Application).GetType().GetFields( BindingFlags.Static | BindingFlags.NonPublic); - // //foreach (var item in fields) - // //{ - // // Console.WriteLine("Name: " + item.Name); - // //} - // //Console.WriteLine("Name: " + fields.Length); - // var field = typeof(ServicePointManager).GetField("s_SecurityProtocolType", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy); - // field.SetValue(null, (SecurityProtocolType)3072); - // Console.WriteLine("Name: " + field); - //} - } -} diff --git a/app/XDM/XDM.WinForm.UI/ProgressWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/ProgressWindow.Designer.cs deleted file mode 100644 index 1cdbb74..0000000 --- a/app/XDM/XDM.WinForm.UI/ProgressWindow.Designer.cs +++ /dev/null @@ -1,324 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class ProgressWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.lblMainIcon = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.previewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.hideProgressWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tableLayoutPanel2.SuspendLayout(); - this.panel1.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 4; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.button1, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.button2, 3, 0); - this.tableLayoutPanel2.Controls.Add(this.button3, 2, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 190); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(451, 51); - this.tableLayoutPanel2.TabIndex = 5; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(10, 10); - this.button1.Margin = new System.Windows.Forms.Padding(10); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(15, 3, 15, 3); - this.button1.Size = new System.Drawing.Size(72, 31); - this.button1.TabIndex = 0; - this.button1.Text = "Hide"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(363, 10); - this.button2.Margin = new System.Windows.Forms.Padding(10); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(15, 3, 15, 3); - this.button2.Size = new System.Drawing.Size(78, 31); - this.button2.TabIndex = 1; - this.button2.Text = "Pause"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(282, 10); - this.button3.Margin = new System.Windows.Forms.Padding(10, 10, 0, 10); - this.button3.Name = "button3"; - this.button3.Padding = new System.Windows.Forms.Padding(15, 3, 15, 3); - this.button3.Size = new System.Drawing.Size(71, 31); - this.button3.TabIndex = 2; - this.button3.Text = "Stop"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // panel1 - // - this.panel1.BackColor = System.Drawing.Color.White; - this.panel1.Controls.Add(this.tableLayoutPanel1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Name = "panel1"; - this.panel1.Padding = new System.Windows.Forms.Padding(10); - this.panel1.Size = new System.Drawing.Size(451, 190); - this.panel1.TabIndex = 6; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.lblMainIcon, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.label3, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.label4, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.label6, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.label5, 3, 2); - this.tableLayoutPanel1.Controls.Add(this.linkLabel1, 3, 4); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.ForeColor = System.Drawing.Color.Black; - this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 10); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 10, 10, 0); - this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(431, 170); - this.tableLayoutPanel1.TabIndex = 0; - // - // lblMainIcon - // - this.lblMainIcon.AutoSize = true; - this.lblMainIcon.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblMainIcon.ForeColor = System.Drawing.Color.LightGray; - this.lblMainIcon.Location = new System.Drawing.Point(3, 10); - this.lblMainIcon.Name = "lblMainIcon"; - this.tableLayoutPanel1.SetRowSpan(this.lblMainIcon, 2); - this.lblMainIcon.Size = new System.Drawing.Size(30, 51); - this.lblMainIcon.TabIndex = 0; - this.lblMainIcon.Text = "icon"; - this.lblMainIcon.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - // - // label2 - // - this.label2.AutoEllipsis = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 3); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Font = new System.Drawing.Font("Segoe UI", 12F); - this.label2.ForeColor = System.Drawing.Color.DodgerBlue; - this.label2.Location = new System.Drawing.Point(39, 10); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(379, 21); - this.label2.TabIndex = 1; - this.label2.Text = "Sample file name"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label3 - // - this.label3.AutoEllipsis = true; - this.tableLayoutPanel1.SetColumnSpan(this.label3, 3); - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.ForeColor = System.Drawing.Color.Gray; - this.label3.Location = new System.Drawing.Point(39, 31); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(0, 5, 0, 10); - this.label3.Size = new System.Drawing.Size(379, 30); - this.label3.TabIndex = 2; - this.label3.Text = "----"; - // - // label4 - // - this.label4.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label4, 2); - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); - this.label4.Location = new System.Drawing.Point(39, 86); - this.label4.Margin = new System.Windows.Forms.Padding(3, 25, 3, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(289, 15); - this.label4.TabIndex = 3; - this.label4.Text = "----"; - // - // label6 - // - this.label6.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label6, 2); - this.label6.Dock = System.Windows.Forms.DockStyle.Fill; - this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); - this.label6.Location = new System.Drawing.Point(39, 101); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(289, 15); - this.label6.TabIndex = 6; - this.label6.Text = "----"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60))))); - this.label5.Location = new System.Drawing.Point(334, 86); - this.label5.Margin = new System.Windows.Forms.Padding(3, 25, 3, 0); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(84, 15); - this.label5.TabIndex = 4; - this.label5.Text = "----"; - this.label5.TextAlign = System.Drawing.ContentAlignment.TopRight; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue; - this.linkLabel1.Location = new System.Drawing.Point(334, 101); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(84, 15); - this.linkLabel1.TabIndex = 7; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "No speed limit"; - this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.TopRight; - this.linkLabel1.VisitedLinkColor = System.Drawing.Color.DodgerBlue; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.saveAsToolStripMenuItem, - this.previewToolStripMenuItem, - this.hideProgressWindowToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(195, 70); - // - // saveAsToolStripMenuItem - // - this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; - this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(194, 22); - this.saveAsToolStripMenuItem.Text = "Save As..."; - // - // previewToolStripMenuItem - // - this.previewToolStripMenuItem.Name = "previewToolStripMenuItem"; - this.previewToolStripMenuItem.Size = new System.Drawing.Size(194, 22); - this.previewToolStripMenuItem.Text = "Preview"; - // - // hideProgressWindowToolStripMenuItem - // - this.hideProgressWindowToolStripMenuItem.Name = "hideProgressWindowToolStripMenuItem"; - this.hideProgressWindowToolStripMenuItem.Size = new System.Drawing.Size(194, 22); - this.hideProgressWindowToolStripMenuItem.Text = "Hide Progress Window"; - // - // ProgressWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(451, 241); - this.Controls.Add(this.panel1); - this.Controls.Add(this.tableLayoutPanel2); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.Name = "ProgressWindow"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "ProgressWindow"; - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.panel1.ResumeLayout(false); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label lblMainIcon; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem previewToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem hideProgressWindowToolStripMenuItem; - private System.Windows.Forms.LinkLabel linkLabel1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/ProgressWindow.cs b/app/XDM/XDM.WinForm.UI/ProgressWindow.cs deleted file mode 100644 index fd1d202..0000000 --- a/app/XDM/XDM.WinForm.UI/ProgressWindow.cs +++ /dev/null @@ -1,370 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Text; -using System.IO; - -using System.Windows.Forms; -using Translations; -using XDM.Common.UI; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using XDM.WinForm.UI.FormHelper; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class ProgressWindow : Form, IProgressWindow - { - private PrivateFontCollection fontCollection; - private Font fontAwesomeFont; - private string downloadId; - private Action actSetProgress; - - public IApp App { get; set; } - public IAppUI AppUI { get; set; } - - private IFormColors colors; - private ProgressBar progressBar1; - private SpeedLimiterDialog? speedLimiterDlg; - - public string FileNameText - { - get => label2.Text; - set - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(() => SetFileText(value))); - } - else - { - SetFileText(value); - } - } - } - - public string UrlText - { - get => label3.Text; - set - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(() => SetFileUrl(value))); - } - else - { - SetFileUrl(value); - } - } - } - - public string FileSizeText - { - get => label4.Text; - set - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(() => SetFileSize(value))); - } - else - { - SetFileSize(value); - } - } - } - - public string DownloadSpeedText - { - get => label5.Text; - set - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(() => SetSpeed(value))); - } - else - { - SetSpeed(value); - } - } - } - - public string DownloadETAText - { - get => label6.Text; - set - { - UIRunner.RunOnUiThread(this, SetETA, value); - } - } - - public int DownloadProgress - { - get => progressBar1.Value; - set - { - UIRunner.RunOnUiThread(this, actSetProgress, value); - } - } - - public string DownloadId - { - get => this.downloadId; - set => this.downloadId = value; - } - - public ProgressWindow() - { - InitializeComponent(); - progressBar1 = AppWinPeer.AppsUseLightTheme ? new ProgressBar() : new DarkProgressBar(); - progressBar1.Dock = DockStyle.Fill; - this.tableLayoutPanel1.SetColumnSpan(this.progressBar1, 3); - this.tableLayoutPanel1.Controls.Add(this.progressBar1, 1, 3); - this.progressBar1.Margin = new Padding(LogicalToDeviceUnits(3), LogicalToDeviceUnits(10), - LogicalToDeviceUnits(3), LogicalToDeviceUnits(10)); - this.progressBar1.Size = new Size(LogicalToDeviceUnits(351), LogicalToDeviceUnits(5)); - fontCollection = new PrivateFontCollection(); - //fontCollection.AddFontFile("fontawesome-webfont.ttf"); - - fontCollection.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\remixicon.ttf")); - //fontCollection.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FontAwesome", "fa-solid-900.ttf")); - fontAwesomeFont = new Font(fontCollection.Families[0], 32); - - lblMainIcon.Font = fontAwesomeFont; - lblMainIcon.Text = ((char)Int32.Parse("ecd9"/*"ec28"*//*"eb99"*/, System.Globalization.NumberStyles.HexNumber)).ToString(); - - FormClosing += Win32ProgressWindow_FormClosing; - - actSetProgress = new Action(SetProgress); - - if (!AppWinPeer.AppsUseLightTheme) - { - colors = new FormColorsDark(); - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - - DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - this.lblMainIcon.ForeColor = colors.SearchButtonColor; - this.lblMainIcon.BackColor = colors.ToolbarBackColor; - label2.ForeColor = label3.ForeColor = label4.ForeColor = - label5.ForeColor = label6.ForeColor = linkLabel1.ForeColor = colors.ToolbarButtonForeColor; - label2.BackColor = label3.BackColor = label4.BackColor = - label5.BackColor = label6.BackColor = linkLabel1.BackColor = colors.ToolbarBackColor; - panel1.BackColor = tableLayoutPanel1.BackColor = colors.ToolbarBackColor; - tableLayoutPanel2.BackColor = colors.DataGridViewBackColor; - DarkModeHelper.StyleFlatButton(button1, colors); - DarkModeHelper.StyleFlatButton(button2, colors); - DarkModeHelper.StyleFlatButton(button3, colors); - progressBar1.BackColor = colors.DataGridViewBackColor; - progressBar1.ForeColor = Color.DodgerBlue; - } - - LoadTexts(); - } - - private void Win32ProgressWindow_FormClosing(object? sender, FormClosingEventArgs e) - { - StopDownload(true); - speedLimiterDlg?.Close(); - speedLimiterDlg = null; - } - - private void button2_Click(object sender, EventArgs e) - { - if (button2.Tag != null) - { - AppUI.ResumeDownload(downloadId); - button2.Text = TextResource.GetText("MENU_PAUSE"); - button2.Tag = null; - } - else - { - StopDownload(false); - button2.Text = TextResource.GetText("MENU_RESUME"); - button2.Tag = new(); - } - } - - private void button3_Click(object sender, EventArgs e) - { - StopDownload(true); - } - - private void button1_Click(object sender, EventArgs e) - { - //contextMenuStrip1.Show(button1, new Point(button1.Left, button1.Height)); - FormClosing -= Win32ProgressWindow_FormClosing; - App.HideProgressWindow(downloadId); - Dispose(); - } - - private void StopDownload(bool close) - { - App?.StopDownloads(new List { downloadId }, close); - } - - public void Destroy() - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(() => this.Dispose())); - } - else - { - this.Dispose(); - } - } - - public void ShowProgressWindow() - { - if (this.InvokeRequired) - { - this.BeginInvoke(new Action(() => this.Show())); - } - else - { - this.Show(); - } - } - - private void SetProgress(int value) - { - progressBar1.Value = value >= 0 && value <= 100 ? value : 0; - var prg = value >= 0 && value <= 100 ? value + "% " : ""; - this.Text = $"{prg}{FileNameText}"; - } - - private void SetFileText(string value) - { - label2.Text = value; - var prg = progressBar1.Value >= 0 && progressBar1.Value <= 100 ? progressBar1.Value + "% " : ""; - this.Text = $"{prg}{value}"; - } - - private void SetFileUrl(string value) - { - label3.Text = value; - } - - private void SetFileSize(string value) - { - label4.Text = value; - } - - private void SetETA(string value) - { - label6.Text = value; - } - - private void SetSpeed(string value) - { - label5.Text = value; - } - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - if (speedLimiterDlg == null) - { - speedLimiterDlg = new SpeedLimiterDialog(); - if (App.GetLiveDownloadSpeedLimit(downloadId, out bool enable, out int limit)) - { - speedLimiterDlg.EnableSpeedLimit = enable; - speedLimiterDlg.SpeedLimit = limit; - } - speedLimiterDlg.FormClosed += (a, b) => - { - speedLimiterDlg = null; - }; - speedLimiterDlg.OkClicked += (a, b) => - { - var limit2 = speedLimiterDlg.SpeedLimit; - App.UpdateSpeedLimit(DownloadId, speedLimiterDlg.EnableSpeedLimit, limit2); - SetSpeedLimitText(speedLimiterDlg.EnableSpeedLimit, limit2); - }; - } - - if (!speedLimiterDlg.Visible) - { - speedLimiterDlg.Show(this); - } - else - { - speedLimiterDlg.BringToFront(); - } - } - - public void DownloadFailed(ErrorDetails error) - { - UIRunner.RunOnUiThread(this, - new Action(error => - { - label4.Text = error.Message; - button2.Text = TextResource.GetText("MENU_RESUME"); - label6.Text = string.Empty; - button2.Tag = new(); - linkLabel1.Visible = false; - speedLimiterDlg?.Close(); - speedLimiterDlg = null; - }), error); - } - - public void DownloadCancelled() - { - UIRunner.RunOnUiThread(this, - new Action(() => - { - label4.Text = TextResource.GetText("MSG_DWN_STOP"); - label6.Text = string.Empty; - button2.Text = TextResource.GetText("MENU_RESUME"); - button2.Tag = new(); - linkLabel1.Visible = false; - speedLimiterDlg?.Close(); - speedLimiterDlg = null; - })); - } - - public void DownloadStarted() - { - UIRunner.RunOnUiThread(this, () => - { - button2.Text = TextResource.GetText("MENU_PAUSE"); - button2.Tag = null; - linkLabel1.Visible = true; - - if(App.GetLiveDownloadSpeedLimit(downloadId, out bool enable, out int limit)) - { - SetSpeedLimitText(enable, limit); - } - }); - } - - private void SetSpeedLimitText(bool enable, int limit) - { - if (enable && limit > 0) - { - linkLabel1.Text = $"{TextResource.GetText("SPEED_LIMIT_TITLE")} - {limit}K/S"; - } - else - { - linkLabel1.Text = TextResource.GetText("MSG_NO_SPEED_LIMIT"); - } - } - - private void LoadTexts() - { - linkLabel1.Text = TextResource.GetText("MSG_NO_SPEED_LIMIT"); - button2.Text = TextResource.GetText("MENU_PAUSE"); - //button2.Text = TextResource.GetText("MENU_RESUME"); - button3.Text = TextResource.GetText("BTN_STOP_PROCESSING"); - button1.Text = TextResource.GetText("DWN_HIDE"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/ProgressWindow.resx b/app/XDM/XDM.WinForm.UI/ProgressWindow.resx deleted file mode 100644 index 661dc11..0000000 --- a/app/XDM/XDM.WinForm.UI/ProgressWindow.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/Properties/Resources.Designer.cs b/app/XDM/XDM.WinForm.UI/Properties/Resources.Designer.cs deleted file mode 100644 index 7814b7f..0000000 --- a/app/XDM/XDM.WinForm.UI/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace XDM.WinForm.UI.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XDM.WinForm.UI.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] icomoon_2 { - get { - object obj = ResourceManager.GetObject("icomoon_2", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/Properties/Resources.resx b/app/XDM/XDM.WinForm.UI/Properties/Resources.resx deleted file mode 100644 index 86bdf95..0000000 --- a/app/XDM/XDM.WinForm.UI/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\FontAwesome\icomoon-2.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/Properties/launchSettings.json b/app/XDM/XDM.WinForm.UI/Properties/launchSettings.json deleted file mode 100644 index d75ea0f..0000000 --- a/app/XDM/XDM.WinForm.UI/Properties/launchSettings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "profiles": { - "XDM.WinForm.UI": { - "commandName": "Project" - } - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/PropertiesWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/PropertiesWindow.Designer.cs deleted file mode 100644 index 07f712a..0000000 --- a/app/XDM/XDM.WinForm.UI/PropertiesWindow.Designer.cs +++ /dev/null @@ -1,377 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class PropertiesWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.lblFile = new System.Windows.Forms.Label(); - this.txtFile = new System.Windows.Forms.TextBox(); - this.txtFolder = new System.Windows.Forms.TextBox(); - this.txtUrl = new System.Windows.Forms.TextBox(); - this.lblFolder = new System.Windows.Forms.Label(); - this.lblUrl = new System.Windows.Forms.Label(); - this.lblSize = new System.Windows.Forms.Label(); - this.lblDate = new System.Windows.Forms.Label(); - this.lblType = new System.Windows.Forms.Label(); - this.lblReferer = new System.Windows.Forms.Label(); - this.lblCookies = new System.Windows.Forms.Label(); - this.lblSizeValue = new System.Windows.Forms.Label(); - this.lblDateValue = new System.Windows.Forms.Label(); - this.lblTypeValue = new System.Windows.Forms.Label(); - this.txtReferer = new System.Windows.Forms.TextBox(); - this.lvCookies = new System.Windows.Forms.ListView(); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.lblHeader = new System.Windows.Forms.Label(); - this.lvHeaders = new System.Windows.Forms.ListView(); - this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.lblFile, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.txtFile, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.txtFolder, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.txtUrl, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.lblFolder, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.lblUrl, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.lblSize, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.lblDate, 0, 7); - this.tableLayoutPanel1.Controls.Add(this.lblType, 0, 8); - this.tableLayoutPanel1.Controls.Add(this.lblReferer, 0, 9); - this.tableLayoutPanel1.Controls.Add(this.lblCookies, 0, 11); - this.tableLayoutPanel1.Controls.Add(this.lblSizeValue, 1, 6); - this.tableLayoutPanel1.Controls.Add(this.lblDateValue, 1, 7); - this.tableLayoutPanel1.Controls.Add(this.lblTypeValue, 1, 8); - this.tableLayoutPanel1.Controls.Add(this.txtReferer, 0, 10); - this.tableLayoutPanel1.Controls.Add(this.lvCookies, 0, 12); - this.tableLayoutPanel1.Controls.Add(this.lblHeader, 0, 13); - this.tableLayoutPanel1.Controls.Add(this.lvHeaders, 0, 14); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel1.RowCount = 15; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(469, 511); - this.tableLayoutPanel1.TabIndex = 0; - // - // lblFile - // - this.lblFile.AutoSize = true; - this.lblFile.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblFile.Location = new System.Drawing.Point(13, 10); - this.lblFile.Name = "lblFile"; - this.lblFile.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.lblFile.Size = new System.Drawing.Size(53, 20); - this.lblFile.TabIndex = 0; - this.lblFile.Text = "File"; - // - // txtFile - // - this.txtFile.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.SetColumnSpan(this.txtFile, 2); - this.txtFile.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtFile.Location = new System.Drawing.Point(13, 33); - this.txtFile.Name = "txtFile"; - this.txtFile.ReadOnly = true; - this.txtFile.Size = new System.Drawing.Size(443, 23); - this.txtFile.TabIndex = 1; - // - // txtFolder - // - this.txtFolder.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.SetColumnSpan(this.txtFolder, 2); - this.txtFolder.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtFolder.Location = new System.Drawing.Point(13, 82); - this.txtFolder.Name = "txtFolder"; - this.txtFolder.ReadOnly = true; - this.txtFolder.Size = new System.Drawing.Size(443, 23); - this.txtFolder.TabIndex = 2; - // - // txtUrl - // - this.txtUrl.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.SetColumnSpan(this.txtUrl, 2); - this.txtUrl.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtUrl.Location = new System.Drawing.Point(13, 131); - this.txtUrl.Name = "txtUrl"; - this.txtUrl.ReadOnly = true; - this.txtUrl.Size = new System.Drawing.Size(443, 23); - this.txtUrl.TabIndex = 3; - // - // lblFolder - // - this.lblFolder.AutoSize = true; - this.lblFolder.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblFolder.Location = new System.Drawing.Point(13, 59); - this.lblFolder.Name = "lblFolder"; - this.lblFolder.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.lblFolder.Size = new System.Drawing.Size(53, 20); - this.lblFolder.TabIndex = 4; - this.lblFolder.Text = "Location"; - // - // lblUrl - // - this.lblUrl.AutoSize = true; - this.lblUrl.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblUrl.Location = new System.Drawing.Point(13, 108); - this.lblUrl.Name = "lblUrl"; - this.lblUrl.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.lblUrl.Size = new System.Drawing.Size(53, 20); - this.lblUrl.TabIndex = 5; - this.lblUrl.Text = "Address"; - // - // lblSize - // - this.lblSize.AutoSize = true; - this.lblSize.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblSize.Location = new System.Drawing.Point(13, 157); - this.lblSize.Name = "lblSize"; - this.lblSize.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); - this.lblSize.Size = new System.Drawing.Size(53, 25); - this.lblSize.TabIndex = 6; - this.lblSize.Text = "Size"; - this.lblSize.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblDate - // - this.lblDate.AutoSize = true; - this.lblDate.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblDate.Location = new System.Drawing.Point(13, 182); - this.lblDate.Name = "lblDate"; - this.lblDate.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); - this.lblDate.Size = new System.Drawing.Size(53, 25); - this.lblDate.TabIndex = 7; - this.lblDate.Text = "Date"; - this.lblDate.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblType - // - this.lblType.AutoSize = true; - this.lblType.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblType.Location = new System.Drawing.Point(13, 207); - this.lblType.Name = "lblType"; - this.lblType.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); - this.lblType.Size = new System.Drawing.Size(53, 25); - this.lblType.TabIndex = 8; - this.lblType.Text = "Type"; - this.lblType.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblReferer - // - this.lblReferer.AutoSize = true; - this.lblReferer.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblReferer.Location = new System.Drawing.Point(13, 232); - this.lblReferer.Name = "lblReferer"; - this.lblReferer.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); - this.lblReferer.Size = new System.Drawing.Size(53, 25); - this.lblReferer.TabIndex = 9; - this.lblReferer.Text = "Referer"; - this.lblReferer.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblCookies - // - this.lblCookies.AutoSize = true; - this.lblCookies.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblCookies.Location = new System.Drawing.Point(13, 286); - this.lblCookies.Name = "lblCookies"; - this.lblCookies.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); - this.lblCookies.Size = new System.Drawing.Size(53, 25); - this.lblCookies.TabIndex = 10; - this.lblCookies.Text = "Cookies"; - this.lblCookies.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblSizeValue - // - this.lblSizeValue.AutoSize = true; - this.lblSizeValue.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblSizeValue.Location = new System.Drawing.Point(72, 157); - this.lblSizeValue.Name = "lblSizeValue"; - this.lblSizeValue.Size = new System.Drawing.Size(384, 25); - this.lblSizeValue.TabIndex = 12; - this.lblSizeValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblDateValue - // - this.lblDateValue.AutoSize = true; - this.lblDateValue.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblDateValue.Location = new System.Drawing.Point(72, 182); - this.lblDateValue.Name = "lblDateValue"; - this.lblDateValue.Size = new System.Drawing.Size(384, 25); - this.lblDateValue.TabIndex = 13; - this.lblDateValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lblTypeValue - // - this.lblTypeValue.AutoSize = true; - this.lblTypeValue.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblTypeValue.Location = new System.Drawing.Point(72, 207); - this.lblTypeValue.Name = "lblTypeValue"; - this.lblTypeValue.Size = new System.Drawing.Size(384, 25); - this.lblTypeValue.TabIndex = 14; - this.lblTypeValue.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // txtReferer - // - this.txtReferer.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.SetColumnSpan(this.txtReferer, 2); - this.txtReferer.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtReferer.Location = new System.Drawing.Point(13, 260); - this.txtReferer.Name = "txtReferer"; - this.txtReferer.ReadOnly = true; - this.txtReferer.Size = new System.Drawing.Size(443, 23); - this.txtReferer.TabIndex = 18; - // - // lvCookies - // - this.lvCookies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2}); - this.tableLayoutPanel1.SetColumnSpan(this.lvCookies, 2); - this.lvCookies.Dock = System.Windows.Forms.DockStyle.Fill; - this.lvCookies.HideSelection = false; - this.lvCookies.Location = new System.Drawing.Point(13, 314); - this.lvCookies.Name = "lvCookies"; - this.lvCookies.Size = new System.Drawing.Size(443, 76); - this.lvCookies.TabIndex = 19; - this.lvCookies.UseCompatibleStateImageBehavior = false; - this.lvCookies.View = System.Windows.Forms.View.Details; - // - // columnHeader1 - // - this.columnHeader1.Text = "Name"; - // - // columnHeader2 - // - this.columnHeader2.Text = "Value"; - // - // lblHeader - // - this.lblHeader.AutoSize = true; - this.lblHeader.Dock = System.Windows.Forms.DockStyle.Fill; - this.lblHeader.Location = new System.Drawing.Point(13, 393); - this.lblHeader.Name = "lblHeader"; - this.lblHeader.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5); - this.lblHeader.Size = new System.Drawing.Size(53, 25); - this.lblHeader.TabIndex = 20; - this.lblHeader.Text = "Headers"; - this.lblHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // lvHeaders - // - this.lvHeaders.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader3, - this.columnHeader4}); - this.tableLayoutPanel1.SetColumnSpan(this.lvHeaders, 2); - this.lvHeaders.Dock = System.Windows.Forms.DockStyle.Fill; - this.lvHeaders.HideSelection = false; - this.lvHeaders.Location = new System.Drawing.Point(13, 421); - this.lvHeaders.Name = "lvHeaders"; - this.lvHeaders.Size = new System.Drawing.Size(443, 77); - this.lvHeaders.TabIndex = 21; - this.lvHeaders.UseCompatibleStateImageBehavior = false; - this.lvHeaders.View = System.Windows.Forms.View.Details; - // - // columnHeader3 - // - this.columnHeader3.Text = "Name"; - // - // columnHeader4 - // - this.columnHeader4.Text = "Value"; - // - // Win32PropertiesWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.AutoScroll = true; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(469, 511); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Win32PropertiesWindow"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Properties"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label lblFile; - private System.Windows.Forms.TextBox txtFile; - private System.Windows.Forms.TextBox txtFolder; - private System.Windows.Forms.TextBox txtUrl; - private System.Windows.Forms.Label lblFolder; - private System.Windows.Forms.Label lblUrl; - private System.Windows.Forms.Label lblSize; - private System.Windows.Forms.Label lblDate; - private System.Windows.Forms.Label lblType; - private System.Windows.Forms.Label lblReferer; - private System.Windows.Forms.Label lblSizeValue; - private System.Windows.Forms.Label lblDateValue; - private System.Windows.Forms.Label lblTypeValue; - private System.Windows.Forms.Label lblCookies; - private System.Windows.Forms.TextBox txtReferer; - private System.Windows.Forms.ListView lvCookies; - private System.Windows.Forms.Label lblHeader; - private System.Windows.Forms.ListView lvHeaders; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.ColumnHeader columnHeader4; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/PropertiesWindow.cs b/app/XDM/XDM.WinForm.UI/PropertiesWindow.cs deleted file mode 100644 index 81671f4..0000000 --- a/app/XDM/XDM.WinForm.UI/PropertiesWindow.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections.Generic; -using System.Windows.Forms; -using Translations; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class PropertiesWindow : Form - { - public PropertiesWindow() - { - InitializeComponent(); - lvCookies.Columns[0].Width = LogicalToDeviceUnits(200); - lvCookies.Columns[1].Width = LogicalToDeviceUnits(200); - - lvHeaders.Columns[0].Width = LogicalToDeviceUnits(200); - lvHeaders.Columns[1].Width = LogicalToDeviceUnits(200); - - LoadTexts(); - } - - public string FileName { set => txtFile.Text = value; } - public string Folder { set => txtFolder.Text = value; } - public string Address { set => txtUrl.Text = value; } - public string FileSize { set => lblSizeValue.Text = value; } - public string DateAdded { set => lblDateValue.Text = value; } - public string DownloadType { set => lblTypeValue.Text = value; } - public string Referer { set => txtReferer.Text = value; } - public Dictionary Cookies - { - set - { - if (value != null) - { - foreach (var key in value.Keys) - { - var item = new ListViewItem - { - Text = key - }; - item.SubItems.Add(value[key]); - lvCookies.Items.Add(item); - } - } - } - } - public Dictionary> Headers - { - set - { - if (value != null) - { - foreach (var key in value.Keys) - { - foreach (var val in value[key]) - { - var item = new ListViewItem - { - Text = key - }; - item.SubItems.Add(val); - lvHeaders.Items.Add(item); - } - } - } - } - } - - private void LoadTexts() - { - Text = TextResource.GetText("MENU_PROPERTIES"); - lblFile.Text = TextResource.GetText("SORT_NAME"); - lblFolder.Text = TextResource.GetText("LBL_SAVE_IN"); - lblUrl.Text = TextResource.GetText("ND_ADDRESS"); - lblSize.Text = TextResource.GetText("SORT_SIZE"); - lblDate.Text = TextResource.GetText("SORT_DATE"); - lblType.Text = TextResource.GetText("SORT_TYPE"); - lblReferer.Text = TextResource.GetText("PROP_REFERER"); - lblCookies.Text = TextResource.GetText("PROP_COOKIE"); - lblHeader.Text = TextResource.GetText("MSG_HEADERS"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/PropertiesWindow.resx b/app/XDM/XDM.WinForm.UI/PropertiesWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/PropertiesWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.Designer.cs b/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.Designer.cs deleted file mode 100644 index c337075..0000000 --- a/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.Designer.cs +++ /dev/null @@ -1,163 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class QueueSelectionDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.label1 = new System.Windows.Forms.Label(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.listBox1 = new System.Windows.Forms.ListBox(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.flowLayoutPanel1.SuspendLayout(); - this.panel1.SuspendLayout(); - this.SuspendLayout(); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Top; - this.label1.Location = new System.Drawing.Point(0, 0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(5); - this.label1.Size = new System.Drawing.Size(133, 25); - this.label1.TabIndex = 0; - this.label1.Text = "Move download(s) to "; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(246)))), ((int)(((byte)(246)))), ((int)(((byte)(246))))); - this.flowLayoutPanel1.Controls.Add(this.button1); - this.flowLayoutPanel1.Controls.Add(this.button2); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 217); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(5); - this.flowLayoutPanel1.Size = new System.Drawing.Size(372, 41); - this.flowLayoutPanel1.TabIndex = 1; - this.flowLayoutPanel1.WrapContents = false; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.Location = new System.Drawing.Point(284, 8); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 25); - this.button1.TabIndex = 1; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.Location = new System.Drawing.Point(203, 8); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 25); - this.button2.TabIndex = 0; - this.button2.Text = "OK"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // panel1 - // - this.panel1.Controls.Add(this.listBox1); - this.panel1.Controls.Add(this.linkLabel1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 25); - this.panel1.Name = "panel1"; - this.panel1.Padding = new System.Windows.Forms.Padding(5); - this.panel1.Size = new System.Drawing.Size(372, 192); - this.panel1.TabIndex = 2; - // - // listBox1 - // - this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listBox1.FormattingEnabled = true; - this.listBox1.ItemHeight = 15; - this.listBox1.Location = new System.Drawing.Point(5, 5); - this.listBox1.Margin = new System.Windows.Forms.Padding(5); - this.listBox1.Name = "listBox1"; - this.listBox1.Size = new System.Drawing.Size(362, 157); - this.listBox1.TabIndex = 3; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline; - this.linkLabel1.LinkColor = System.Drawing.Color.DodgerBlue; - this.linkLabel1.Location = new System.Drawing.Point(5, 162); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Padding = new System.Windows.Forms.Padding(5); - this.linkLabel1.Size = new System.Drawing.Size(161, 25); - this.linkLabel1.TabIndex = 4; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "Create and manage queues"; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // QueueSelectionDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(372, 258); - this.Controls.Add(this.panel1); - this.Controls.Add(this.flowLayoutPanel1); - this.Controls.Add(this.label1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "QueueSelectionDialog"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Move to queue"; - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label label1; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.ListBox listBox1; - private System.Windows.Forms.LinkLabel linkLabel1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.cs b/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.cs deleted file mode 100644 index 475662f..0000000 --- a/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; - -using System.Windows.Forms; -using XDM.Core.Lib.UI; - -namespace XDM.WinForm.UI -{ - public partial class QueueSelectionDialog : Form, IQueueSelectionDialog - { - public event EventHandler? QueueSelected; - public event EventHandler? ManageQueuesClicked; - private string[] downloadIds = new string[0]; - - public bool ShowManageQueueOption { get => linkLabel1.Visible; set => linkLabel1.Visible = value; } - - public QueueSelectionDialog() - { - InitializeComponent(); - } - - public void SetData(IEnumerable items, string[] downloadIds) - { - this.downloadIds = downloadIds; - foreach (var item in items) - { - listBox1.Items.Add(item); - } - - listBox1.SelectedIndex = 0; - } - - public void ShowWindow(IAppWinPeer peer) - { - Show((IWin32Window)peer); - } - - private void button1_Click(object sender, EventArgs e) - { - QueueSelected = null; - Close(); - } - - private void button2_Click(object sender, EventArgs e) - { - QueueSelected?.Invoke(this, new QueueSelectionEventArgs(listBox1.SelectedIndex, downloadIds)); - QueueSelected = null; - Close(); - } - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - ManageQueuesClicked?.Invoke(this, EventArgs.Empty); - Close(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.resx b/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/QueueSelectionDialog.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/QueueWindowManager.cs b/app/XDM/XDM.WinForm.UI/QueueWindowManager.cs deleted file mode 100644 index f661a36..0000000 --- a/app/XDM/XDM.WinForm.UI/QueueWindowManager.cs +++ /dev/null @@ -1,82 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Windows.Forms; -//using XDM.Core.Lib.Common; -//using XDM.Core.Lib.UI; -//using XDMApp; - -//namespace XDM.WinForm.UI -//{ -// internal static class QueueWindowManager -// { -// private static IQueuesWindow? queueWindow; -// private static Action>? onQueueModified; -// private static Action>? onQueueStart; -// private static Action>? onQueueStop; - -// internal static void RefreshView() -// { -// if (queueWindow != null) -// { -// queueWindow.RefreshView(); -// } -// } - -// internal static void ShowWindow( -// IWin32Window window, -// Action>? queueModified, -// Action>? queueStart, -// Action>? queueStop, -// QueuesWindow qwin -// ) -// { -// if (queueWindow != null) -// { -// queueWindow.ShowWindow(window); -// return; -// } - -// var queuesCopy = QueueManager.Queues.Select(q => new DownloadQueue(q.ID, q.Name) -// { -// DownloadIds = q.DownloadIds.Select(d => d).ToList(), -// Schedule = q.Schedule -// }); - -// onQueueModified = queueModified; -// onQueueStart = queueStart; -// onQueueStop = queueStop; - -// queueWindow = qwin; -// queueWindow.SetData(queuesCopy); -// queueWindow.QueuesModified += QueueWindow_QueuesModified; -// queueWindow.QueueStartRequested += QueueWindow_QueueStartRequested; -// queueWindow.QueueStopRequested += QueueWindow_QueueStopRequested; -// queueWindow.WindowClosing += QueueWindow_WindowClosing; -// queueWindow.ShowWindow(window); -// } - -// private static void QueueWindow_WindowClosing(object sender, EventArgs e) -// { -// queueWindow = null; -// onQueueModified = null; -// onQueueStop = null; -// onQueueStart = null; -// } - -// private static void QueueWindow_QueueStopRequested(object sender, DownloadListEventArgs e) -// { -// onQueueStop?.Invoke(e.Downloads); -// } - -// private static void QueueWindow_QueueStartRequested(object sender, DownloadListEventArgs e) -// { -// onQueueStart?.Invoke(e.Downloads); -// } - -// private static void QueueWindow_QueuesModified(object sender, QueueListEventArgs e) -// { -// onQueueModified?.Invoke(e.Queues); -// } -// } -//} diff --git a/app/XDM/XDM.WinForm.UI/QueuesWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/QueuesWindow.Designer.cs deleted file mode 100644 index 6c060d6..0000000 --- a/app/XDM/XDM.WinForm.UI/QueuesWindow.Designer.cs +++ /dev/null @@ -1,407 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class QueuesWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.listView1 = new System.Windows.Forms.ListView(); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.button7 = new System.Windows.Forms.Button(); - this.button9 = new System.Windows.Forms.Button(); - this.btnUp = new System.Windows.Forms.Button(); - this.btnDown = new System.Windows.Forms.Button(); - this.button10 = new System.Windows.Forms.Button(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.panel1 = new System.Windows.Forms.Panel(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.button5 = new System.Windows.Forms.Button(); - this.button6 = new System.Windows.Forms.Button(); - this.tableLayoutPanel1.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.flowLayoutPanel1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 8; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.treeView1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.tabControl1, 3, 0); - this.tableLayoutPanel1.Controls.Add(this.button1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.button3, 3, 1); - this.tableLayoutPanel1.Controls.Add(this.button4, 4, 1); - this.tableLayoutPanel1.Controls.Add(this.button5, 6, 1); - this.tableLayoutPanel1.Controls.Add(this.button6, 7, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 2; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(704, 450); - this.tableLayoutPanel1.TabIndex = 0; - // - // treeView1 - // - this.treeView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tableLayoutPanel1.SetColumnSpan(this.treeView1, 3); - this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.treeView1.FullRowSelect = true; - this.treeView1.HideSelection = false; - this.treeView1.Location = new System.Drawing.Point(12, 12); - this.treeView1.Margin = new System.Windows.Forms.Padding(12, 12, 6, 6); - this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(233, 392); - this.treeView1.TabIndex = 0; - // - // tabControl1 - // - this.tableLayoutPanel1.SetColumnSpan(this.tabControl1, 5); - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(257, 12); - this.tabControl1.Margin = new System.Windows.Forms.Padding(6, 12, 12, 6); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.Padding = new System.Drawing.Point(10, 5); - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(435, 392); - this.tabControl1.TabIndex = 1; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.listView1); - this.tabPage1.Controls.Add(this.flowLayoutPanel1); - this.tabPage1.Location = new System.Drawing.Point(4, 28); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(6); - this.tabPage1.Size = new System.Drawing.Size(427, 360); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Files in queue"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // listView1 - // - this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2, - this.columnHeader3}); - this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listView1.FullRowSelect = true; - this.listView1.HideSelection = false; - this.listView1.Location = new System.Drawing.Point(6, 6); - this.listView1.Margin = new System.Windows.Forms.Padding(6); - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(415, 305); - this.listView1.TabIndex = 0; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.View = System.Windows.Forms.View.Details; - // - // columnHeader1 - // - this.columnHeader1.Text = "File"; - this.columnHeader1.Width = 142; - // - // columnHeader2 - // - this.columnHeader2.Text = "Size"; - this.columnHeader2.Width = 96; - // - // columnHeader3 - // - this.columnHeader3.Text = "Status"; - this.columnHeader3.Width = 107; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.Controls.Add(this.button7); - this.flowLayoutPanel1.Controls.Add(this.button9); - this.flowLayoutPanel1.Controls.Add(this.btnUp); - this.flowLayoutPanel1.Controls.Add(this.btnDown); - this.flowLayoutPanel1.Controls.Add(this.button10); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.Location = new System.Drawing.Point(6, 311); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 6, 0, 6); - this.flowLayoutPanel1.Size = new System.Drawing.Size(415, 43); - this.flowLayoutPanel1.TabIndex = 2; - this.flowLayoutPanel1.WrapContents = false; - // - // button7 - // - this.button7.AutoSize = true; - this.button7.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button7.Location = new System.Drawing.Point(3, 9); - this.button7.Name = "button7"; - this.button7.Size = new System.Drawing.Size(39, 25); - this.button7.TabIndex = 4; - this.button7.Text = "Add"; - this.button7.UseVisualStyleBackColor = true; - this.button7.Click += new System.EventHandler(this.button7_Click); - // - // button9 - // - this.button9.AutoSize = true; - this.button9.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button9.Location = new System.Drawing.Point(48, 9); - this.button9.Name = "button9"; - this.button9.Size = new System.Drawing.Size(60, 25); - this.button9.TabIndex = 2; - this.button9.Text = "Remove"; - this.button9.UseVisualStyleBackColor = true; - this.button9.Click += new System.EventHandler(this.button9_Click); - // - // btnUp - // - this.btnUp.AutoSize = true; - this.btnUp.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnUp.Location = new System.Drawing.Point(114, 9); - this.btnUp.Name = "btnUp"; - this.btnUp.Size = new System.Drawing.Size(32, 25); - this.btnUp.TabIndex = 0; - this.btnUp.Text = "Up"; - this.btnUp.UseVisualStyleBackColor = true; - this.btnUp.Click += new System.EventHandler(this.btnUp_Click); - // - // btnDown - // - this.btnDown.AutoSize = true; - this.btnDown.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.btnDown.Location = new System.Drawing.Point(152, 9); - this.btnDown.Name = "btnDown"; - this.btnDown.Size = new System.Drawing.Size(48, 25); - this.btnDown.TabIndex = 1; - this.btnDown.Text = "Down"; - this.btnDown.UseVisualStyleBackColor = true; - this.btnDown.Click += new System.EventHandler(this.btnDown_Click); - // - // button10 - // - this.button10.AutoSize = true; - this.button10.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button10.Location = new System.Drawing.Point(206, 9); - this.button10.Name = "button10"; - this.button10.Size = new System.Drawing.Size(70, 25); - this.button10.TabIndex = 3; - this.button10.Text = "Move to..."; - this.button10.UseVisualStyleBackColor = true; - this.button10.Click += new System.EventHandler(this.button10_Click); - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.panel1); - this.tabPage2.Controls.Add(this.checkBox1); - this.tabPage2.Location = new System.Drawing.Point(4, 28); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(6); - this.tabPage2.Size = new System.Drawing.Size(427, 360); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Schedule"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // panel1 - // - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(6, 35); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(415, 319); - this.panel1.TabIndex = 1; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Top; - this.checkBox1.Location = new System.Drawing.Point(6, 6); - this.checkBox1.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Padding = new System.Windows.Forms.Padding(5); - this.checkBox1.Size = new System.Drawing.Size(415, 29); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "Enable scheduler"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(12, 413); - this.button1.Margin = new System.Windows.Forms.Padding(12, 3, 3, 12); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(41, 25); - this.button1.TabIndex = 2; - this.button1.Text = "New"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(59, 413); - this.button2.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(50, 25); - this.button2.TabIndex = 3; - this.button2.Text = "Delete"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(254, 413); - this.button3.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(41, 25); - this.button3.TabIndex = 4; - this.button3.Text = "Start"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button4 - // - this.button4.AutoSize = true; - this.button4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button4.Dock = System.Windows.Forms.DockStyle.Fill; - this.button4.Location = new System.Drawing.Point(301, 413); - this.button4.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(48, 25); - this.button4.TabIndex = 5; - this.button4.Text = "Pause"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // button5 - // - this.button5.AutoSize = true; - this.button5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button5.Dock = System.Windows.Forms.DockStyle.Fill; - this.button5.Location = new System.Drawing.Point(592, 413); - this.button5.Margin = new System.Windows.Forms.Padding(3, 3, 3, 12); - this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(41, 25); - this.button5.TabIndex = 6; - this.button5.Text = "Save"; - this.button5.UseVisualStyleBackColor = true; - this.button5.Click += new System.EventHandler(this.button5_Click); - // - // button6 - // - this.button6.AutoSize = true; - this.button6.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button6.Dock = System.Windows.Forms.DockStyle.Fill; - this.button6.Location = new System.Drawing.Point(639, 413); - this.button6.Margin = new System.Windows.Forms.Padding(3, 3, 12, 12); - this.button6.Name = "button6"; - this.button6.Size = new System.Drawing.Size(53, 25); - this.button6.TabIndex = 7; - this.button6.Text = "Cancel"; - this.button6.UseVisualStyleBackColor = true; - this.button6.Click += new System.EventHandler(this.button6_Click); - // - // QueuesWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(704, 450); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "QueuesWindow"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Queues and scheduler"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage1.PerformLayout(); - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.TreeView treeView1; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button button6; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button btnUp; - private System.Windows.Forms.Button btnDown; - private System.Windows.Forms.Button button9; - private System.Windows.Forms.Button button10; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Button button7; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/QueuesWindow.cs b/app/XDM/XDM.WinForm.UI/QueuesWindow.cs deleted file mode 100644 index 64cf2ab..0000000 --- a/app/XDM/XDM.WinForm.UI/QueuesWindow.cs +++ /dev/null @@ -1,468 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.UI; -using XDM.Core.Lib.Util; -using XDMApp; - -#if !(NET472_OR_GREATER||NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class QueuesWindow : Form, IQueuesWindow - { - private IAppUI appUI; - private SchedulerPanel schedulerPanel; - private DownloadSchedule defaultSchedule; - - public event EventHandler? QueuesModified; - public event EventHandler? QueueStartRequested; - public event EventHandler? QueueStopRequested; - public event EventHandler? WindowClosing; - - private NewQueueDialog? newQueueDialog; - private QueueSelectionDialog? queueSelectionDialog; - - public QueuesWindow(IAppUI appUI) - { - InitializeComponent(); - this.appUI = appUI; - this.defaultSchedule = new DownloadSchedule - { - StartTime = DateTime.Now.TimeOfDay, - EndTime = DateTime.Now.Date.AddHours(23).AddMinutes(59).TimeOfDay - }; - schedulerPanel = new SchedulerPanel() - { - Dock = DockStyle.Fill, - Enabled = false, - Schedule = defaultSchedule - }; - schedulerPanel.ValueChanged += SchedulerPanel_ValueChanged; - panel1.Controls.Add(schedulerPanel); - treeView1.AfterSelect += TreeView1_AfterSelect; - listView1.SelectedIndexChanged += ListView1_SelectedIndexChanged; - listView1.ItemSelectionChanged += ListView1_ItemSelectionChanged; - - checkBox1.CheckedChanged += (_, _) => - { - schedulerPanel.Enabled = checkBox1.Checked; - - if (this.treeView1.SelectedNode?.Tag is DownloadQueue queue) - { - queue.Schedule = checkBox1.Checked ? this.schedulerPanel.Schedule : null; - } - }; - - this.FormClosing += (s, e) => - { - this.newQueueDialog?.Close(); - this.newQueueDialog = null; - this.queueSelectionDialog?.Close(); - this.queueSelectionDialog = null; - this.WindowClosing?.Invoke(this, EventArgs.Empty); - }; - - treeView1.Margin = new Padding(LogicalToDeviceUnits(12), - LogicalToDeviceUnits(12), - LogicalToDeviceUnits(6), - LogicalToDeviceUnits(6)); - tabPage1.Padding = new Padding(LogicalToDeviceUnits(6)); - tabPage1.Margin = new Padding(LogicalToDeviceUnits(3)); - tabPage2.Padding = new Padding(LogicalToDeviceUnits(6)); - tabPage2.Margin = new Padding(LogicalToDeviceUnits(3)); - tabControl1.Padding = new Point(LogicalToDeviceUnits(10), LogicalToDeviceUnits(5)); - columnHeader1.Width = LogicalToDeviceUnits(150); - columnHeader2.Width = LogicalToDeviceUnits(100); - columnHeader3.Width = LogicalToDeviceUnits(100); - - var buttonMargin = new Padding(LogicalToDeviceUnits(6), LogicalToDeviceUnits(2), - LogicalToDeviceUnits(6), LogicalToDeviceUnits(2)); - button1.Padding = button2.Padding = button3.Padding = button3.Padding = - button4.Padding = button5.Padding = button6.Padding = button7.Padding = - button9.Padding = button10.Padding = btnUp.Padding = btnDown.Padding = buttonMargin; - - LoadTexts(); - } - - private void ListSelectionChanged() - { - button9.Enabled = button10.Enabled = btnUp.Enabled = btnDown.Enabled = listView1.SelectedItems.Count > 0; - } - - private void ListView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) - { - ListSelectionChanged(); - } - - private void ListView1_SelectedIndexChanged(object sender, EventArgs e) - { - ListSelectionChanged(); - } - - private void SchedulerPanel_ValueChanged(object sender, EventArgs e) - { - if (this.treeView1.SelectedNode?.Tag is DownloadQueue queue && checkBox1.Checked) - { - queue.Schedule = this.schedulerPanel.Schedule; - } - } - - public void RefreshView() - { - if (treeView1.SelectedNode.Tag is DownloadQueue queue) - { - listView1.SuspendLayout(); - - var set1 = new HashSet(); - var set2 = new HashSet(); - var toRemove = new HashSet(); - - var realQueue = QueueManager.GetQueue(queue.ID); - - if (realQueue != null) - { - foreach (var id in realQueue.DownloadIds) - { - set1.Add(id); - } - } - - foreach (ListViewItem lvi in this.listView1.Items) - { - var id = ((InProgressDownloadEntry)lvi.Tag).Id; - set2.Add(id); - if (set1.Contains(id)) - { - continue; - } - toRemove.Add(lvi); - } - - foreach (var lvi in toRemove) - { - listView1.Items.Remove(lvi); - } - - foreach (var id in set1) - { - if (!set2.Contains(id)) - { - var ent = appUI.GetInProgressDownloadEntry(id); - if (ent != null) - { - var listViewItem = new ListViewItem(new string[] { ent.Name, - ent.DateAdded.ToShortDateString(), Helpers.FormatSize(ent.Size) }) - { Tag = ent }; - listView1.Items.Add(listViewItem); - } - } - } - - listView1.ResumeLayout(); - } - } - - public void SetData(IEnumerable queues) - { - var rootNode = new TreeNode("Queues"); - treeView1.Nodes.Add(rootNode); - foreach (var q in queues) - { - rootNode.Nodes.Add(new TreeNode(q.Name) { Tag = q }); - } - rootNode.ExpandAll(); - if (rootNode.Nodes.Count > 0) - { - treeView1.SelectedNode = rootNode.Nodes[0]; - } - } - - private void LoadQueueDetails(DownloadQueue queue) - { - listView1.Items.Clear(); - listView1.SuspendLayout(); - ListSelectionChanged(); - foreach (var id in queue.DownloadIds) - { - var ent = appUI.GetInProgressDownloadEntry(id); - if (ent != null) - { - var listViewItem = new ListViewItem(new string[] { ent.Name, - ent.DateAdded.ToShortDateString(), Helpers.FormatSize(ent.Size) }) - { Tag = ent }; - listView1.Items.Add(listViewItem); - } - } - checkBox1.Checked = queue.Schedule.HasValue; - if (queue.Schedule.HasValue) - { - this.schedulerPanel.Schedule = queue.Schedule.Value; - } - else - { - this.schedulerPanel.Schedule = this.defaultSchedule; - } - listView1.ResumeLayout(); - this.schedulerPanel.Schedule = queue.Schedule ?? default; - } - - private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e) - { - UpdateControls((DownloadQueue)e.Node.Tag); - //var node = e.Node; - - //if (node.Tag is DownloadQueue queue) - //{ - // LoadQueueDetails(queue); - // EnableControls(true); - //} - //else - //{ - // this.schedulerPanel.Schedule = defaultSchedule; - // this.listView1.Items.Clear(); - // EnableControls(false); - //} - } - - private void EnableControls(bool enable) - { - this.tabControl1.Enabled = enable; - this.button1.Enabled = this.button2.Enabled = this.button3.Enabled = this.button4.Enabled = enable; - } - - private void UpdateControls(DownloadQueue? queue) - { - if (queue != null) - { - LoadQueueDetails(queue); - EnableControls(true); - } - else - { - this.schedulerPanel.Schedule = defaultSchedule; - this.listView1.Items.Clear(); - EnableControls(false); - } - } - - private void button5_Click(object sender, EventArgs e) - { - SaveQueues(); - Close(); - } - - private void SaveQueues() - { - QueuesModified?.Invoke(this, new QueueListEventArgs(GetQueues())); - } - - private List GetQueues() - { - var list = new List(this.treeView1.Nodes[0].Nodes.Count); - foreach (TreeNode node in this.treeView1.Nodes[0].Nodes) - { - list.Add((DownloadQueue)node.Tag); - } - return list; - } - - private void button3_Click(object sender, EventArgs e) - { - SaveQueues(); - var node = treeView1.SelectedNode; - QueueStartRequested?.Invoke(this, new DownloadListEventArgs(((DownloadQueue)node.Tag).DownloadIds)); - } - - private void button4_Click(object sender, EventArgs e) - { - SaveQueues(); - var node = treeView1.SelectedNode; - QueueStopRequested?.Invoke(this, new DownloadListEventArgs(((DownloadQueue)node.Tag).DownloadIds)); - } - - public void ShowWindow(object window) - { - if (!this.Visible) - { - this.Show((IWin32Window)window); - } - } - - private void button1_Click(object sender, EventArgs e) - { - if (this.newQueueDialog != null) - { - this.newQueueDialog.BringToFront(); - return; - } - this.newQueueDialog = new NewQueueDialog(appUI, (queue, newQueue) => - { - var node = new TreeNode(queue.Name) - { - Tag = queue - }; - treeView1.Nodes[0].Nodes.Add(node); - }, null); - this.newQueueDialog.FormClosing += NewQueueDialog_FormClosed; - newQueueDialog.Show(this); - tableLayoutPanel1.Enabled = false; - //var queue = new DownloadQueue(Guid.NewGuid().ToString(), "New queue #" + QueueManager.QueueAutoNumber); - //QueueManager.QueueAutoNumber++; - //var node = new TreeNode(queue.Name) - //{ - // Tag = queue - //}; - //treeView1.Nodes[0].Nodes.Add(node); - //QueueStopRequested?.Invoke(this, new DownloadListEventArgs(((DownloadQueue)node.Tag).DownloadIds)); - } - - private void NewQueueDialog_FormClosed(object sender, FormClosingEventArgs e) - { - this.newQueueDialog!.FormClosing -= NewQueueDialog_FormClosed; - this.newQueueDialog = null; - tableLayoutPanel1.Enabled = true; - } - - private void button2_Click(object sender, EventArgs e) - { - var queue = (DownloadQueue)treeView1.SelectedNode.Tag; - if (queue != null) - { - var parent = treeView1.SelectedNode.Parent; - parent.Nodes.Remove(treeView1.SelectedNode); - } - } - - private void button6_Click(object sender, EventArgs e) - { - Close(); - } - - private void button7_Click(object sender, EventArgs e) - { - if (this.newQueueDialog != null) - { - this.newQueueDialog.BringToFront(); - return; - } - var selectedNode = treeView1.SelectedNode; - if (selectedNode.Tag is not DownloadQueue queue) return; - this.newQueueDialog = new NewQueueDialog(appUI, (queue, newQueue) => - { - treeView1.SelectedNode = selectedNode; - LoadQueueDetails(queue); - }, queue); - this.newQueueDialog.FormClosing += NewQueueDialog_FormClosed; - newQueueDialog.Show(this); - tableLayoutPanel1.Enabled = false; - } - - private void button9_Click(object sender, EventArgs e) - { - var selectedQueue = (DownloadQueue)treeView1.SelectedNode.Tag; - if (selectedQueue == null) return; - foreach (ListViewItem lvi in listView1.SelectedItems) - { - var id = ((InProgressDownloadEntry)lvi.Tag).Id; - selectedQueue.DownloadIds.Remove(id); - } - LoadQueueDetails(selectedQueue); - } - - private void btnUp_Click(object sender, EventArgs e) - { - if (listView1.SelectedIndices.Count > 0 && listView1.SelectedIndices[0] > 0) - { - var lvi = listView1.Items[listView1.SelectedIndices[0] - 1]; - listView1.Items.Remove(lvi); - listView1.Items.Insert(listView1.SelectedIndices[listView1.SelectedIndices.Count - 1] + 1, lvi); - } - } - - private void btnDown_Click(object sender, EventArgs e) - { - if (listView1.SelectedIndices.Count > 0 && listView1.SelectedIndices[listView1.SelectedIndices.Count - 1] < listView1.Items.Count - 1) - { - var lvi = listView1.Items[listView1.SelectedIndices[listView1.SelectedIndices.Count - 1] + 1]; - listView1.Items.Remove(lvi); - listView1.Items.Insert(listView1.SelectedIndices[0], lvi); - } - } - - private void button10_Click(object sender, EventArgs e) - { - if (listView1.SelectedItems.Count > 0 && treeView1.Nodes[0].Nodes.Count > 1) - { - tableLayoutPanel1.Enabled = false; - this.queueSelectionDialog = new QueueSelectionDialog() { ShowManageQueueOption = false }; - var queues = new List(this.treeView1.Nodes[0].Nodes.Count); - foreach (TreeNode node in this.treeView1.Nodes[0].Nodes) - { - if (!node.IsSelected) - { - queues.Add(((DownloadQueue)node.Tag).Name); - } - } - var downloadIds = new string[this.listView1.SelectedIndices.Count]; - var index = 0; - foreach (ListViewItem lvi in this.listView1.SelectedItems) - { - downloadIds[index++] = ((InProgressDownloadEntry)lvi.Tag).Id; - } - this.queueSelectionDialog.SetData(queues, downloadIds); - this.queueSelectionDialog.FormClosing += QueueSelectionDialog_FormClosing; - this.queueSelectionDialog.QueueSelected += QueueSelectionDialog_QueueSelected; - this.queueSelectionDialog.Show(this); - } - } - - private void QueueSelectionDialog_QueueSelected(object sender, QueueSelectionEventArgs e) - { - var node = treeView1.Nodes[0].Nodes[e.SelectedQueueIndex]; - var queue = (DownloadQueue)node.Tag; - var downloadIds = e.DownloadIds; - var selectedQueue = (DownloadQueue)treeView1.SelectedNode.Tag; - foreach (var id in downloadIds) - { - selectedQueue.DownloadIds.Remove(id); - queue.DownloadIds.Add(id); - } - treeView1.SelectedNode = node; - } - - private void QueueSelectionDialog_FormClosing(object sender, FormClosingEventArgs e) - { - this.queueSelectionDialog!.FormClosing -= QueueSelectionDialog_FormClosing; - this.queueSelectionDialog = null; - this.tableLayoutPanel1.Enabled = true; - } - - private void LoadTexts() - { - Text = TextResource.GetText("DESC_Q_TITLE"); - button1.Text = TextResource.GetText("DESC_NEW"); - button2.Text = TextResource.GetText("DESC_DEL"); - button3.Text = TextResource.GetText("MENU_START_Q"); - button4.Text = TextResource.GetText("MENU_PAUSE"); - button5.Text = TextResource.GetText("DESC_SAVE_Q"); - button6.Text = TextResource.GetText("ND_CANCEL"); - button7.Text = TextResource.GetText("Q_ADD"); - button9.Text = TextResource.GetText("Q_REMOVE"); - btnUp.Text = TextResource.GetText("Q_MOVE_UP"); - btnDown.Text = TextResource.GetText("Q_MOVE_DN"); - button10.Text = TextResource.GetText("Q_MOVE_TO"); - tabPage1.Text = TextResource.GetText("Q_LIST_FILES"); - tabPage2.Text = TextResource.GetText("Q_SCHEDULE_TXT"); - checkBox1.Text = TextResource.GetText("Q_ENABLE"); - listView1.Columns[0].Text = TextResource.GetText("ND_FILE"); - listView1.Columns[1].Text = TextResource.GetText("SORT_SIZE"); - listView1.Columns[2].Text = TextResource.GetText("SORT_STATUS"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/QueuesWindow.resx b/app/XDM/XDM.WinForm.UI/QueuesWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/QueuesWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SchedulerPanel.Designer.cs b/app/XDM/XDM.WinForm.UI/SchedulerPanel.Designer.cs deleted file mode 100644 index d392a43..0000000 --- a/app/XDM/XDM.WinForm.UI/SchedulerPanel.Designer.cs +++ /dev/null @@ -1,249 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class SchedulerPanel - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); - this.dateTimePicker2 = new System.Windows.Forms.DateTimePicker(); - this.chkTue = new System.Windows.Forms.CheckBox(); - this.chkWed = new System.Windows.Forms.CheckBox(); - this.chkThu = new System.Windows.Forms.CheckBox(); - this.chkFri = new System.Windows.Forms.CheckBox(); - this.chkSat = new System.Windows.Forms.CheckBox(); - this.chkSun = new System.Windows.Forms.CheckBox(); - this.chkMon = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.chkEveryday = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.dateTimePicker1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.dateTimePicker2, 1, 6); - this.tableLayoutPanel1.Controls.Add(this.chkTue, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.chkWed, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.chkThu, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.chkFri, 2, 4); - this.tableLayoutPanel1.Controls.Add(this.chkSat, 1, 5); - this.tableLayoutPanel1.Controls.Add(this.chkSun, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.chkMon, 2, 2); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.chkEveryday, 0, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(17); - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(528, 355); - this.tableLayoutPanel1.TabIndex = 4; - // - // dateTimePicker1 - // - this.dateTimePicker1.CustomFormat = "hh:mm"; - this.dateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Time; - this.dateTimePicker1.Location = new System.Drawing.Point(96, 20); - this.dateTimePicker1.Name = "dateTimePicker1"; - this.dateTimePicker1.ShowUpDown = true; - this.dateTimePicker1.Size = new System.Drawing.Size(101, 20); - this.dateTimePicker1.TabIndex = 2; - this.dateTimePicker1.Value = new System.DateTime(2021, 7, 2, 0, 0, 0, 0); - // - // dateTimePicker2 - // - this.dateTimePicker2.Format = System.Windows.Forms.DateTimePickerFormat.Time; - this.dateTimePicker2.Location = new System.Drawing.Point(96, 156); - this.dateTimePicker2.Name = "dateTimePicker2"; - this.dateTimePicker2.ShowUpDown = true; - this.dateTimePicker2.Size = new System.Drawing.Size(101, 20); - this.dateTimePicker2.TabIndex = 4; - this.dateTimePicker2.Value = new System.DateTime(2021, 7, 2, 0, 0, 0, 0); - // - // chkTue - // - this.chkTue.AutoSize = true; - this.chkTue.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkTue.Location = new System.Drawing.Point(96, 78); - this.chkTue.Name = "chkTue"; - this.chkTue.Size = new System.Drawing.Size(101, 17); - this.chkTue.TabIndex = 11; - this.chkTue.Text = "Tuesday"; - this.chkTue.UseVisualStyleBackColor = true; - // - // chkWed - // - this.chkWed.AutoSize = true; - this.chkWed.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkWed.Location = new System.Drawing.Point(203, 78); - this.chkWed.Name = "chkWed"; - this.chkWed.Size = new System.Drawing.Size(305, 17); - this.chkWed.TabIndex = 12; - this.chkWed.Text = "Wednesday"; - this.chkWed.UseVisualStyleBackColor = true; - // - // chkThu - // - this.chkThu.AutoSize = true; - this.chkThu.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkThu.Location = new System.Drawing.Point(96, 101); - this.chkThu.Name = "chkThu"; - this.chkThu.Size = new System.Drawing.Size(101, 17); - this.chkThu.TabIndex = 14; - this.chkThu.Text = "Thursday"; - this.chkThu.UseVisualStyleBackColor = true; - // - // chkFri - // - this.chkFri.AutoSize = true; - this.chkFri.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkFri.Location = new System.Drawing.Point(203, 101); - this.chkFri.Name = "chkFri"; - this.chkFri.Size = new System.Drawing.Size(305, 17); - this.chkFri.TabIndex = 15; - this.chkFri.Text = "Friday"; - this.chkFri.UseVisualStyleBackColor = true; - // - // chkSat - // - this.chkSat.AutoSize = true; - this.chkSat.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkSat.Location = new System.Drawing.Point(96, 124); - this.chkSat.Name = "chkSat"; - this.chkSat.Padding = new System.Windows.Forms.Padding(0, 0, 0, 9); - this.chkSat.Size = new System.Drawing.Size(101, 26); - this.chkSat.TabIndex = 16; - this.chkSat.Text = "Saturday"; - this.chkSat.UseVisualStyleBackColor = true; - // - // chkSun - // - this.chkSun.AutoSize = true; - this.chkSun.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkSun.Location = new System.Drawing.Point(96, 46); - this.chkSun.Name = "chkSun"; - this.chkSun.Padding = new System.Windows.Forms.Padding(0, 9, 0, 0); - this.chkSun.Size = new System.Drawing.Size(101, 26); - this.chkSun.TabIndex = 17; - this.chkSun.Text = "Sunday"; - this.chkSun.UseVisualStyleBackColor = true; - // - // chkMon - // - this.chkMon.AutoSize = true; - this.chkMon.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkMon.Location = new System.Drawing.Point(203, 46); - this.chkMon.Name = "chkMon"; - this.chkMon.Padding = new System.Windows.Forms.Padding(0, 9, 0, 0); - this.chkMon.Size = new System.Drawing.Size(305, 26); - this.chkMon.TabIndex = 18; - this.chkMon.Text = "Monday"; - this.chkMon.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(20, 153); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(70, 26); - this.label1.TabIndex = 19; - this.label1.Text = "Stop at"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(20, 17); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(70, 26); - this.label2.TabIndex = 20; - this.label2.Text = "Start at"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // chkEveryday - // - this.chkEveryday.AutoSize = true; - this.chkEveryday.Dock = System.Windows.Forms.DockStyle.Fill; - this.chkEveryday.Location = new System.Drawing.Point(20, 46); - this.chkEveryday.Name = "chkEveryday"; - this.chkEveryday.Padding = new System.Windows.Forms.Padding(0, 9, 0, 0); - this.chkEveryday.Size = new System.Drawing.Size(70, 26); - this.chkEveryday.TabIndex = 21; - this.chkEveryday.Text = "Everyday"; - this.chkEveryday.UseVisualStyleBackColor = true; - this.chkEveryday.CheckedChanged += new System.EventHandler(this.chkEveryday_CheckedChanged); - // - // SchedulerPanel - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.tableLayoutPanel1); - this.Name = "SchedulerPanel"; - this.Size = new System.Drawing.Size(528, 355); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.DateTimePicker dateTimePicker1; - private System.Windows.Forms.DateTimePicker dateTimePicker2; - private System.Windows.Forms.CheckBox chkTue; - private System.Windows.Forms.CheckBox chkWed; - private System.Windows.Forms.CheckBox chkThu; - private System.Windows.Forms.CheckBox chkFri; - private System.Windows.Forms.CheckBox chkSat; - private System.Windows.Forms.CheckBox chkSun; - private System.Windows.Forms.CheckBox chkMon; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.CheckBox chkEveryday; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SchedulerPanel.cs b/app/XDM/XDM.WinForm.UI/SchedulerPanel.cs deleted file mode 100644 index 22bc00c..0000000 --- a/app/XDM/XDM.WinForm.UI/SchedulerPanel.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; - -namespace XDM.WinForm.UI -{ - public partial class SchedulerPanel : UserControl - { - public event EventHandler? ValueChanged; - public SchedulerPanel() - { - InitializeComponent(); - - checkBoxes = new CheckBox[] - { - chkSun, chkMon, chkTue, chkWed, chkThu, chkFri, - chkSat - }; - - bits = new byte[] - { - 0, 1, 2, 4, 8, 16, 32, 64 - }; - - foreach (var chk in checkBoxes) - { - chk.CheckedChanged += (a, b) => - { - if (!chk.Checked) - { - chkEveryday.Checked = false; - } - this.ValueChanged?.Invoke(this, EventArgs.Empty); - }; - } - - dateTimePicker1.ValueChanged += (_, _) => this.ValueChanged?.Invoke(this, EventArgs.Empty); - dateTimePicker2.ValueChanged += (_, _) => this.ValueChanged?.Invoke(this, EventArgs.Empty); - - LoadTexts(); - } - - private CheckBox[] checkBoxes; - private byte[] bits; - public DownloadSchedule Schedule - { - get - { - return new DownloadSchedule - { - StartTime = dateTimePicker1.Value.TimeOfDay, - EndTime = dateTimePicker2.Value.TimeOfDay, - Days = GetDaysOfWeek() - }; - } - set - { - SetDays(value.Days); - dateTimePicker1.Value = DateTime.Now.Date + value.StartTime; - dateTimePicker2.Value = DateTime.Now.Date + value.EndTime; - } - } - - private WeekDays GetDaysOfWeek() - { - var index = 1; - var weekdays = WeekDays.None; - foreach (var chk in checkBoxes) - { - if (chk.Checked) - { - weekdays |= (WeekDays)bits[index]; - } - index++; - } - return weekdays; - } - - private void SetDays(WeekDays days) - { - var index = 1; - var allChecked = true; - - foreach (var chk in checkBoxes) - { - var day = (WeekDays)bits[index]; - if (((byte)days & (byte)day) == (byte)day) - { - chk.Checked = true; - } - else - { - allChecked = false; - } - index++; - } - - chkEveryday.Checked = allChecked; - } - - private void chkEveryday_CheckedChanged(object sender, EventArgs e) - { - if (chkEveryday.Checked) - { - foreach (var chk in checkBoxes) - { - chk.Checked = true; - } - } - } - - private void LoadTexts() - { - label2.Text = TextResource.GetText("MSG_Q_START"); - label1.Text = TextResource.GetText("MSG_Q_STOP"); - chkEveryday.Text = TextResource.GetText("MSG_Q_DAILY"); - chkSun.Text = TextResource.GetText("MSG_Q_D1"); - chkMon.Text = TextResource.GetText("MSG_Q_D2"); - chkTue.Text = TextResource.GetText("MSG_Q_D3"); - chkWed.Text = TextResource.GetText("MSG_Q_D4"); - chkThu.Text = TextResource.GetText("MSG_Q_D5"); - chkFri.Text = TextResource.GetText("MSG_Q_D6"); - chkSat.Text = TextResource.GetText("MSG_Q_D7"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SchedulerPanel.resx b/app/XDM/XDM.WinForm.UI/SchedulerPanel.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SchedulerPanel.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SchedulerWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/SchedulerWindow.Designer.cs deleted file mode 100644 index 028a08d..0000000 --- a/app/XDM/XDM.WinForm.UI/SchedulerWindow.Designer.cs +++ /dev/null @@ -1,110 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class SchedulerWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.tableLayoutPanel2.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.BackColor = System.Drawing.Color.WhiteSmoke; - this.tableLayoutPanel2.ColumnCount = 3; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel2.Controls.Add(this.button1, 2, 0); - this.tableLayoutPanel2.Controls.Add(this.button2, 1, 0); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 265); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(463, 41); - this.tableLayoutPanel2.TabIndex = 2; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(372, 8); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(15, 0, 15, 0); - this.button1.Size = new System.Drawing.Size(83, 25); - this.button1.TabIndex = 0; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(285, 8); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(20, 0, 20, 0); - this.button2.Size = new System.Drawing.Size(81, 25); - this.button2.TabIndex = 1; - this.button2.Text = "Save"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // Win32SchedulerWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(463, 306); - this.Controls.Add(this.tableLayoutPanel2); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Win32SchedulerWindow"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Scheduler"; - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SchedulerWindow.cs b/app/XDM/XDM.WinForm.UI/SchedulerWindow.cs deleted file mode 100644 index 3e5cea4..0000000 --- a/app/XDM/XDM.WinForm.UI/SchedulerWindow.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Windows.Forms; -using XDM.Core.Lib.Common; - -namespace XDM.WinForm.UI -{ - public partial class SchedulerWindow : Form - { - private SchedulerPanel schedulerPanel; - public DownloadSchedule Schedule - { - get => schedulerPanel.Schedule; - set => schedulerPanel.Schedule = value; - } - - public SchedulerWindow() - { - InitializeComponent(); - this.schedulerPanel = new SchedulerPanel { Dock = DockStyle.Fill }; - this.Controls.Add(this.schedulerPanel); - } - - private void button2_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.OK; - this.Dispose(); - } - - private void button1_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - this.Dispose(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SchedulerWindow.resx b/app/XDM/XDM.WinForm.UI/SchedulerWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SchedulerWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.Designer.cs deleted file mode 100644 index fe65cec..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.Designer.cs +++ /dev/null @@ -1,239 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class AdvancedSettingsPage - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.checkBox5 = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.checkBox2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.checkBox3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.checkBox4, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 6); - this.tableLayoutPanel1.Controls.Add(this.textBox3, 0, 8); - this.tableLayoutPanel1.Controls.Add(this.checkBox5, 0, 9); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 7); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 5); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 10); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 11; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(329, 309); - this.tableLayoutPanel1.TabIndex = 0; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox1, 2); - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(3, 3); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.checkBox1.Size = new System.Drawing.Size(323, 24); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "Shutdown computer after all download completed"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox2, 2); - this.checkBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox2.Location = new System.Drawing.Point(3, 33); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 5); - this.checkBox2.Size = new System.Drawing.Size(323, 24); - this.checkBox2.TabIndex = 1; - this.checkBox2.Text = "Prevent hibernate or sleep during downloads"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox3, 2); - this.checkBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox3.Location = new System.Drawing.Point(3, 63); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Size = new System.Drawing.Size(323, 19); - this.checkBox3.TabIndex = 2; - this.checkBox3.Text = "Run a program after all download finishes"; - this.checkBox3.UseVisualStyleBackColor = true; - // - // textBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 2); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(3, 88); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(323, 23); - this.textBox1.TabIndex = 3; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox4, 2); - this.checkBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox4.Location = new System.Drawing.Point(3, 117); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.checkBox4.Size = new System.Drawing.Size(323, 24); - this.checkBox4.TabIndex = 4; - this.checkBox4.Text = "Scan file with antivirus after download"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // textBox2 - // - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(3, 167); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(291, 23); - this.textBox2.TabIndex = 5; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(300, 167); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(26, 25); - this.button1.TabIndex = 6; - this.button1.Text = "..."; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // textBox3 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox3, 2); - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(3, 218); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(323, 23); - this.textBox3.TabIndex = 7; - // - // checkBox5 - // - this.checkBox5.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox5, 2); - this.checkBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox5.Location = new System.Drawing.Point(3, 247); - this.checkBox5.Name = "checkBox5"; - this.checkBox5.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.checkBox5.Size = new System.Drawing.Size(323, 24); - this.checkBox5.TabIndex = 8; - this.checkBox5.Text = "Launch XDM after after login"; - this.checkBox5.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 2); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 195); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label1.Size = new System.Drawing.Size(323, 20); - this.label1.TabIndex = 9; - this.label1.Text = "Antivirus command line parameter"; - // - // label2 - // - this.label2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label2, 2); - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(3, 144); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.label2.Size = new System.Drawing.Size(323, 20); - this.label2.TabIndex = 10; - this.label2.Text = "Antivirus executable path"; - // - // AdvancedSettingsPage - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "AdvancedSettingsPage"; - this.Padding = new System.Windows.Forms.Padding(10); - this.Size = new System.Drawing.Size(349, 329); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.CheckBox checkBox4; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.CheckBox checkBox5; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.cs deleted file mode 100644 index 30ecbc1..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Text; -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using XDMApp; - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class AdvancedSettingsPage : UserControl, ISettingsPage - { - private Font ri16Font; - public AdvancedSettingsPage() - { - InitializeComponent(); - AutoScrollMinSize = tableLayoutPanel1.Size; - this.ri16Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 12); - button1.Font = this.ri16Font; - button1.Text = RemixIcon.GetFontIcon("ed70"); - - LoadTexts(); - } - - public void PopulateUI() - { - checkBox1.Checked = Config.Instance.ShutdownAfterAllFinished; - checkBox2.Checked = Config.Instance.KeepPCAwake; - checkBox3.Checked = Config.Instance.RunCommandAfterCompletion; - checkBox4.Checked = Config.Instance.ScanWithAntiVirus; - checkBox5.Checked = Helpers.IsAutoStartEnabled();//Config.Instance.RunOnLogon; - - textBox1.Text = Config.Instance.AfterCompletionCommand; - textBox2.Text = Config.Instance.AntiVirusExecutable; - textBox3.Text = Config.Instance.AntiVirusArgs; - } - - public void UpdateConfig() - { - Config.Instance.ShutdownAfterAllFinished = checkBox1.Checked; - Config.Instance.KeepPCAwake = checkBox2.Checked; - Config.Instance.RunCommandAfterCompletion = checkBox3.Checked; - Config.Instance.ScanWithAntiVirus = checkBox4.Checked; - Helpers.EnableAutoStart(checkBox5.Checked); - //Config.Instance.RunOnLogon = checkBox5.Checked; - - Config.Instance.AfterCompletionCommand = textBox1.Text; - Config.Instance.AntiVirusExecutable = textBox2.Text; - Config.Instance.AntiVirusArgs = textBox3.Text; - } - - private void button1_Click(object sender, EventArgs e) - { - using var fc = new OpenFileDialog(); - if (fc.ShowDialog(this) == DialogResult.OK) - { - textBox2.Text = fc.FileName; - } - } - - private void LoadTexts() - { - checkBox1.Text = TextResource.GetText("MSG_HALT"); - checkBox2.Text = TextResource.GetText("MSG_AWAKE"); - checkBox3.Text = TextResource.GetText("EXEC_CMD"); - checkBox4.Text = TextResource.GetText("EXE_ANTI_VIR"); - checkBox5.Text = TextResource.GetText("AUTO_START"); - label2.Text = TextResource.GetText("ANTIVIR_CMD"); - label1.Text = TextResource.GetText("ANTIVIR_ARGS"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/AdvancedSettingsPage.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.Designer.cs deleted file mode 100644 index 5398add..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.Designer.cs +++ /dev/null @@ -1,713 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class BrowserMonitoringPage - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.tableLayoutPanel7 = new System.Windows.Forms.TableLayoutPanel(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.button10 = new System.Windows.Forms.Button(); - this.label9 = new System.Windows.Forms.Label(); - this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.button11 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.button5 = new System.Windows.Forms.Button(); - this.button6 = new System.Windows.Forms.Button(); - this.label2 = new System.Windows.Forms.Label(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.label3 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.button7 = new System.Windows.Forms.Button(); - this.button8 = new System.Windows.Forms.Button(); - this.label5 = new System.Windows.Forms.Label(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.label6 = new System.Windows.Forms.Label(); - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.label7 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.button9 = new System.Windows.Forms.Button(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel7.SuspendLayout(); - this.tableLayoutPanel6.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - this.tableLayoutPanel4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); - this.tableLayoutPanel5.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 1; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Controls.Add(this.checkBox4, 0, 13); - this.tableLayoutPanel1.Controls.Add(this.checkBox2, 0, 12); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel7, 0, 11); - this.tableLayoutPanel1.Controls.Add(this.label9, 0, 10); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel6, 0, 8); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.label5, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.label6, 0, 7); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 0, 9); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel5, 0, 5); - this.tableLayoutPanel1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 16; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(340, 1194); - this.tableLayoutPanel1.TabIndex = 0; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.checkBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.checkBox4.Location = new System.Drawing.Point(3, 985); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Padding = new System.Windows.Forms.Padding(10); - this.checkBox4.Size = new System.Drawing.Size(334, 39); - this.checkBox4.TabIndex = 16; - this.checkBox4.Text = "Get timestamp from server"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.checkBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.checkBox2.Location = new System.Drawing.Point(3, 940); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Padding = new System.Windows.Forms.Padding(10); - this.checkBox2.Size = new System.Drawing.Size(334, 39); - this.checkBox2.TabIndex = 14; - this.checkBox2.Text = "Monitor clipboard"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // tableLayoutPanel7 - // - this.tableLayoutPanel7.ColumnCount = 1; - this.tableLayoutPanel7.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel7.Controls.Add(this.textBox4, 0, 0); - this.tableLayoutPanel7.Controls.Add(this.button10, 0, 1); - this.tableLayoutPanel7.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel7.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel7.Location = new System.Drawing.Point(3, 814); - this.tableLayoutPanel7.Name = "tableLayoutPanel7"; - this.tableLayoutPanel7.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel7.RowCount = 2; - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel7.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel7.Size = new System.Drawing.Size(334, 120); - this.tableLayoutPanel7.TabIndex = 13; - // - // textBox4 - // - this.textBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox4.Location = new System.Drawing.Point(13, 13); - this.textBox4.Multiline = true; - this.textBox4.Name = "textBox4"; - this.textBox4.Size = new System.Drawing.Size(308, 63); - this.textBox4.TabIndex = 8; - // - // button10 - // - this.button10.AutoSize = true; - this.button10.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button10.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button10.Location = new System.Drawing.Point(13, 82); - this.button10.Name = "button10"; - this.button10.Size = new System.Drawing.Size(60, 25); - this.button10.TabIndex = 9; - this.button10.Text = "Defaults"; - this.button10.UseVisualStyleBackColor = true; - this.button10.Click += new System.EventHandler(this.button10_Click); - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Dock = System.Windows.Forms.DockStyle.Fill; - this.label9.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label9.Location = new System.Drawing.Point(3, 771); - this.label9.Name = "label9"; - this.label9.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.label9.Size = new System.Drawing.Size(334, 40); - this.label9.TabIndex = 12; - this.label9.Text = "Do not automatically capture downloads from below websites"; - // - // tableLayoutPanel6 - // - this.tableLayoutPanel6.ColumnCount = 1; - this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel6.Controls.Add(this.textBox5, 0, 0); - this.tableLayoutPanel6.Controls.Add(this.button11, 0, 1); - this.tableLayoutPanel6.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel6.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel6.Location = new System.Drawing.Point(3, 573); - this.tableLayoutPanel6.Name = "tableLayoutPanel6"; - this.tableLayoutPanel6.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel6.RowCount = 2; - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel6.Size = new System.Drawing.Size(334, 140); - this.tableLayoutPanel6.TabIndex = 11; - // - // textBox5 - // - this.textBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox5.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox5.Location = new System.Drawing.Point(13, 13); - this.textBox5.Multiline = true; - this.textBox5.Name = "textBox5"; - this.textBox5.Size = new System.Drawing.Size(308, 83); - this.textBox5.TabIndex = 8; - // - // button11 - // - this.button11.AutoSize = true; - this.button11.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button11.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button11.Location = new System.Drawing.Point(13, 102); - this.button11.Name = "button11"; - this.button11.Size = new System.Drawing.Size(60, 25); - this.button11.TabIndex = 9; - this.button11.Text = "Defaults"; - this.button11.UseVisualStyleBackColor = true; - this.button11.Click += new System.EventHandler(this.button11_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(10); - this.label1.Size = new System.Drawing.Size(334, 50); - this.label1.TabIndex = 0; - this.label1.Text = "Please make sure browser addon is installed and enabled in respective browser"; - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 3; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableLayoutPanel2.Controls.Add(this.button1, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.button2, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.button3, 1, 0); - this.tableLayoutPanel2.Controls.Add(this.button4, 1, 1); - this.tableLayoutPanel2.Controls.Add(this.button5, 2, 0); - this.tableLayoutPanel2.Controls.Add(this.button6, 2, 1); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel2.Location = new System.Drawing.Point(1, 51); - this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(1); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel2.RowCount = 2; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.Size = new System.Drawing.Size(338, 114); - this.tableLayoutPanel2.TabIndex = 1; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.FlatAppearance.BorderSize = 0; - this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button1.Location = new System.Drawing.Point(11, 11); - this.button1.Margin = new System.Windows.Forms.Padding(1); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.button1.Size = new System.Drawing.Size(104, 45); - this.button1.TabIndex = 0; - this.button1.Text = "Chrome"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.FlatAppearance.BorderSize = 0; - this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button2.Location = new System.Drawing.Point(11, 58); - this.button2.Margin = new System.Windows.Forms.Padding(1); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.button2.Size = new System.Drawing.Size(104, 45); - this.button2.TabIndex = 1; - this.button2.Text = "Vivaldi"; - this.button2.UseVisualStyleBackColor = false; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.FlatAppearance.BorderSize = 0; - this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button3.Location = new System.Drawing.Point(117, 11); - this.button3.Margin = new System.Windows.Forms.Padding(1); - this.button3.Name = "button3"; - this.button3.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.button3.Size = new System.Drawing.Size(104, 45); - this.button3.TabIndex = 2; - this.button3.Text = "Edge"; - this.button3.UseVisualStyleBackColor = false; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button4 - // - this.button4.AutoSize = true; - this.button4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.button4.Dock = System.Windows.Forms.DockStyle.Fill; - this.button4.FlatAppearance.BorderSize = 0; - this.button4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button4.Location = new System.Drawing.Point(117, 58); - this.button4.Margin = new System.Windows.Forms.Padding(1); - this.button4.Name = "button4"; - this.button4.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.button4.Size = new System.Drawing.Size(104, 45); - this.button4.TabIndex = 3; - this.button4.Text = "Brave"; - this.button4.UseVisualStyleBackColor = false; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // button5 - // - this.button5.AutoSize = true; - this.button5.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.button5.Dock = System.Windows.Forms.DockStyle.Fill; - this.button5.FlatAppearance.BorderSize = 0; - this.button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button5.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button5.Location = new System.Drawing.Point(223, 11); - this.button5.Margin = new System.Windows.Forms.Padding(1); - this.button5.Name = "button5"; - this.button5.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.button5.Size = new System.Drawing.Size(104, 45); - this.button5.TabIndex = 4; - this.button5.Text = "Firefox"; - this.button5.UseVisualStyleBackColor = false; - this.button5.Click += new System.EventHandler(this.button5_Click); - // - // button6 - // - this.button6.AutoSize = true; - this.button6.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); - this.button6.Dock = System.Windows.Forms.DockStyle.Fill; - this.button6.FlatAppearance.BorderSize = 0; - this.button6.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button6.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button6.Location = new System.Drawing.Point(223, 58); - this.button6.Margin = new System.Windows.Forms.Padding(1); - this.button6.Name = "button6"; - this.button6.Padding = new System.Windows.Forms.Padding(0, 10, 0, 10); - this.button6.Size = new System.Drawing.Size(104, 45); - this.button6.TabIndex = 5; - this.button6.Text = "Opera"; - this.button6.UseVisualStyleBackColor = false; - this.button6.Click += new System.EventHandler(this.button6_Click); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label2.Location = new System.Drawing.Point(3, 166); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(10); - this.label2.Size = new System.Drawing.Size(334, 65); - this.label2.TabIndex = 2; - this.label2.Text = "XDM can also be integrated into other Chromium and Firefox based browsers. Please" + - " copy below link into your browser"; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.AutoSize = true; - this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel3.ColumnCount = 3; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.Controls.Add(this.label3, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.label4, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.textBox1, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.textBox2, 1, 1); - this.tableLayoutPanel3.Controls.Add(this.button7, 2, 0); - this.tableLayoutPanel3.Controls.Add(this.button8, 2, 1); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 234); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel3.RowCount = 2; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.Size = new System.Drawing.Size(334, 82); - this.tableLayoutPanel3.TabIndex = 3; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label3.Location = new System.Drawing.Point(13, 10); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(149, 31); - this.label3.TabIndex = 0; - this.label3.Text = "Firefox based browsers"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label4.Location = new System.Drawing.Point(13, 41); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(149, 31); - this.label4.TabIndex = 1; - this.label4.Text = "Chromium based browsers"; - this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox1 - // - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox1.Location = new System.Drawing.Point(168, 13); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(102, 23); - this.textBox1.TabIndex = 2; - this.textBox1.Text = "https://chrome.google.com/webstore/detail/xtreme-download-manager/dkckaoghoiffdbo" + - "mfbbodbbgmhjblecj"; - // - // textBox2 - // - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox2.Location = new System.Drawing.Point(168, 44); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(102, 23); - this.textBox2.TabIndex = 3; - this.textBox2.Text = "https://addons.mozilla.org/en-US/firefox/addon/xdm-browser-monitor/"; - // - // button7 - // - this.button7.AutoSize = true; - this.button7.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button7.Dock = System.Windows.Forms.DockStyle.Fill; - this.button7.FlatAppearance.BorderSize = 0; - this.button7.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button7.Location = new System.Drawing.Point(276, 13); - this.button7.Name = "button7"; - this.button7.Size = new System.Drawing.Size(45, 25); - this.button7.TabIndex = 4; - this.button7.Text = "Copy"; - this.button7.UseVisualStyleBackColor = true; - this.button7.Click += new System.EventHandler(this.button7_Click); - // - // button8 - // - this.button8.AutoSize = true; - this.button8.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button8.Dock = System.Windows.Forms.DockStyle.Fill; - this.button8.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button8.Location = new System.Drawing.Point(276, 44); - this.button8.Name = "button8"; - this.button8.Size = new System.Drawing.Size(45, 25); - this.button8.TabIndex = 5; - this.button8.Text = "Copy"; - this.button8.UseVisualStyleBackColor = true; - this.button8.Click += new System.EventHandler(this.button8_Click); - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label5.Location = new System.Drawing.Point(3, 319); - this.label5.Name = "label5"; - this.label5.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.label5.Size = new System.Drawing.Size(334, 40); - this.label5.TabIndex = 4; - this.label5.Text = "XDM will automatically takeover downloads from browsers for below file types"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.checkBox1.Location = new System.Drawing.Point(3, 488); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Padding = new System.Windows.Forms.Padding(10); - this.checkBox1.Size = new System.Drawing.Size(334, 39); - this.checkBox1.TabIndex = 6; - this.checkBox1.Text = "Show option to download streaming video"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.Visible = false; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Dock = System.Windows.Forms.DockStyle.Fill; - this.label6.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label6.Location = new System.Drawing.Point(3, 530); - this.label6.Name = "label6"; - this.label6.Padding = new System.Windows.Forms.Padding(10, 10, 10, 0); - this.label6.Size = new System.Drawing.Size(334, 40); - this.label6.TabIndex = 7; - this.label6.Text = "XDM will show download option when below video formats are played in browser"; - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.AutoSize = true; - this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel4.ColumnCount = 3; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel4.Controls.Add(this.label7, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.label8, 2, 0); - this.tableLayoutPanel4.Controls.Add(this.numericUpDown1, 1, 0); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 719); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel4.RowCount = 1; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.Size = new System.Drawing.Size(334, 49); - this.tableLayoutPanel4.TabIndex = 9; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Dock = System.Windows.Forms.DockStyle.Fill; - this.label7.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label7.Location = new System.Drawing.Point(13, 10); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(155, 29); - this.label7.TabIndex = 0; - this.label7.Text = "Download video larger than"; - this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Dock = System.Windows.Forms.DockStyle.Fill; - this.label8.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label8.Location = new System.Drawing.Point(300, 10); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(21, 29); - this.label8.TabIndex = 2; - this.label8.Text = "KB"; - this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // numericUpDown1 - // - this.numericUpDown1.Dock = System.Windows.Forms.DockStyle.Fill; - this.numericUpDown1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.numericUpDown1.Location = new System.Drawing.Point(174, 13); - this.numericUpDown1.Maximum = new decimal(new int[] { - 1316134912, - 2328, - 0, - 0}); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(120, 23); - this.numericUpDown1.TabIndex = 3; - // - // tableLayoutPanel5 - // - this.tableLayoutPanel5.ColumnCount = 1; - this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel5.Controls.Add(this.textBox3, 0, 0); - this.tableLayoutPanel5.Controls.Add(this.button9, 0, 1); - this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel5.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 362); - this.tableLayoutPanel5.Name = "tableLayoutPanel5"; - this.tableLayoutPanel5.Padding = new System.Windows.Forms.Padding(10); - this.tableLayoutPanel5.RowCount = 2; - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel5.Size = new System.Drawing.Size(334, 120); - this.tableLayoutPanel5.TabIndex = 10; - // - // textBox3 - // - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.textBox3.Location = new System.Drawing.Point(13, 13); - this.textBox3.Multiline = true; - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(308, 63); - this.textBox3.TabIndex = 8; - // - // button9 - // - this.button9.AutoSize = true; - this.button9.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button9.Font = new System.Drawing.Font("Segoe UI", 9F); - this.button9.Location = new System.Drawing.Point(13, 82); - this.button9.Name = "button9"; - this.button9.Size = new System.Drawing.Size(60, 25); - this.button9.TabIndex = 9; - this.button9.Text = "Defaults"; - this.button9.UseVisualStyleBackColor = true; - this.button9.Click += new System.EventHandler(this.button9_Click); - // - // BrowserMonitoringPage - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.AutoScroll = true; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "BrowserMonitoringPage"; - this.Size = new System.Drawing.Size(340, 1194); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel7.ResumeLayout(false); - this.tableLayoutPanel7.PerformLayout(); - this.tableLayoutPanel6.ResumeLayout(false); - this.tableLayoutPanel6.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.tableLayoutPanel2.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - this.tableLayoutPanel4.ResumeLayout(false); - this.tableLayoutPanel4.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - this.tableLayoutPanel5.ResumeLayout(false); - this.tableLayoutPanel5.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.Button button6; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button button7; - private System.Windows.Forms.Button button8; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Button button11; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.Button button9; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.CheckBox checkBox4; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel7; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Button button10; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.NumericUpDown numericUpDown1; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.cs deleted file mode 100644 index f10233d..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.cs +++ /dev/null @@ -1,300 +0,0 @@ -using System; -using System.Drawing; -using System.Linq; -using System.Windows.Forms; -using XDM.Core.Lib.Util; -using TraceLog; -using XDM.Core.Lib.Common; -using System.Drawing.Text; -using XDM.WinForm.UI.FormHelper; -using System.IO; -using XDMApp; -using Translations; - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class BrowserMonitoringPage : UserControl, ISettingsPage - { - private Font ri64Font, ri16Font; - private IApp app; - private PrivateFontCollection fc1; - - public BrowserMonitoringPage(IApp app) - { - InitializeComponent(); - this.app = app; - AutoScrollMinSize = tableLayoutPanel1.Size; - ri64Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 32); - - button1.Image = FontImageHelper.FontToBitmap(this, ri64Font, RemixIcon.GetFontIcon("eb8c"), Color.Gray); - button1.TextImageRelation = TextImageRelation.ImageAboveText; - button1.Text = "Google Chrome"; - - button3.Image = FontImageHelper.FontToBitmap(this, ri64Font, RemixIcon.GetFontIcon("ec7d"), Color.Gray); - button3.TextImageRelation = TextImageRelation.ImageAboveText; - button3.Text = "Microsoft Edge"; - - button5.Image = FontImageHelper.FontToBitmap(this, ri64Font, RemixIcon.GetFontIcon("ed34"), Color.Gray); - button5.TextImageRelation = TextImageRelation.ImageAboveText; - button5.Text = "Mozilla Firefox"; - - button6.Image = FontImageHelper.FontToBitmap(this, ri64Font, RemixIcon.GetFontIcon("efb4"), Color.Gray); - button6.TextImageRelation = TextImageRelation.ImageAboveText; - button6.Text = "Opera"; - - button2.Image = FontImageHelper.FontToBitmap(this, ri64Font, RemixIcon.GetFontIcon("f289"), Color.Gray); - button2.TextImageRelation = TextImageRelation.ImageAboveText; - button2.Text = "Vivaldi"; - - fc1 = new PrivateFontCollection(); - fc1.AddFontFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"FontAwesome\brave-logo.ttf")); - - button4.Image = FontImageHelper.FontToBitmap(this, new Font(fc1.Families[0], 32), - RemixIcon.GetFontIcon("e900"), Color.Gray); - button4.TextImageRelation = TextImageRelation.ImageAboveText; - button4.Text = "Brave"; - - ri16Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 12); - button7.Font = ri16Font; - button7.Text = RemixIcon.GetFontIcon("ecd5"); - - button8.Font = ri16Font; - button8.Text = RemixIcon.GetFontIcon("ecd5"); - - //button5.Font = ri64Font; - //button5.Text = RemixIcon.GetFontIcon("ed34") + "\nFirefox"; - - //button3.Font = ri64Font; - //button3.Text = RemixIcon.GetFontIcon("ec7d") + "\nEdge"; - - LoadTexts(); - } - - protected override void OnHandleCreated(EventArgs e) - { - //AllowDarkModeForWindow(this.Handle, 1); - //SetWindowTheme(this.Handle, "Explorer", null); - //SetWindowTheme(this.Handle, "DarkMode_Explorer", null); - //base.OnHandleCreated(e); - } - - //protected override void OnShown(EventArgs e) - //{ - // AllowDarkModeForWindow(this.Handle, 1); - // SetWindowTheme(this.Handle, "Explorer", null); - // base.OnShown(e); - //} - - //[DllImport("uxtheme.dll", SetLastError = true, CharSet = CharSet.Unicode, EntryPoint = "#133")] - //public static extern int AllowDarkModeForWindow(IntPtr hWnd, int allow); - - //[DllImport("uxtheme.dll", SetLastError = true, ExactSpelling = true, CharSet = CharSet.Unicode)] - //public static extern int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList); - - private void button1_Click(object sender, EventArgs e) - { - try - { - Helpers.InstallNativeMessagingHost(NativeHostBrowser.Chrome); - } - catch (Exception ex) - { - Log.Debug(ex, "Error installing native host"); - MessageBox.Show(TextResource.GetText("MSG_NATIVE_HOST_FAILED")); - return; - } - - try - { - BrowserLauncher.LaunchGoogleChrome(app.ChromeExtensionUrl); - } - catch (Exception ex) - { - Log.Debug(ex, "Error launching Google Chrome"); - MessageBox.Show($"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Google Chrome"); - } - } - - private void button5_Click(object sender, EventArgs e) - { - try - { - Helpers.InstallNativeMessagingHost(NativeHostBrowser.Firefox); - } - catch (Exception ex) - { - Log.Debug(ex, "Error installing native host"); - MessageBox.Show(TextResource.GetText("MSG_NATIVE_HOST_FAILED")); - return; - } - - try - { - BrowserLauncher.LaunchFirefox(app.FirefoxExtensionUrl); - } - catch (Exception ex) - { - Log.Debug(ex, "Error launching Firefox"); - MessageBox.Show($"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Firefox"); - } - } - - private void button3_Click(object sender, EventArgs e) - { - try - { - Helpers.InstallNativeMessagingHost(NativeHostBrowser.Chrome); - } - catch (Exception ex) - { - Log.Debug(ex, "Error installing native host"); - MessageBox.Show(TextResource.GetText("MSG_NATIVE_HOST_FAILED")); - return; - } - - try - { - BrowserLauncher.LaunchMicrosoftEdge(app.ChromeExtensionUrl); - } - catch (Exception ex) - { - Log.Debug(ex, "Error Microsoft Edge"); - MessageBox.Show($"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Microsoft Edge"); - } - } - - private void button7_Click(object sender, EventArgs e) - { - Clipboard.SetText(textBox1.Text); - } - - private void button8_Click(object sender, EventArgs e) - { - Clipboard.SetText(textBox2.Text); - } - - private void button9_Click(object sender, EventArgs e) - { - textBox3.Text = string.Join(",", Config.DefaultFileExtensions); - } - - private void button11_Click(object sender, EventArgs e) - { - textBox5.Text = string.Join(",", Config.DefaultVideoExtensions); - } - - private void button10_Click(object sender, EventArgs e) - { - textBox4.Text = string.Join(",", Config.DefaultBlockedHosts); - } - - public void PopulateUI() - { - textBox3.Text = string.Join(",", Config.Instance.FileExtensions); - textBox5.Text = string.Join(",", Config.Instance.VideoExtensions); - textBox4.Text = string.Join(",", Config.Instance.BlockedHosts); - checkBox4.Checked = Config.Instance.FetchServerTimeStamp; - checkBox2.Checked = Config.Instance.MonitorClipboard; - numericUpDown1.Value = Config.Instance.MinVideoSize; - } - - private void button6_Click(object sender, EventArgs e) - { - try - { - Helpers.InstallNativeMessagingHost(NativeHostBrowser.Chrome); - } - catch (Exception ex) - { - Log.Debug(ex, "Error installing native host"); - MessageBox.Show(TextResource.GetText("MSG_NATIVE_HOST_FAILED")); - return; - } - - try - { - BrowserLauncher.LaunchOperaBrowser(app.ChromeExtensionUrl); - } - catch (Exception ex) - { - Log.Debug(ex, "Error launching Opera"); - MessageBox.Show($"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Opera"); - } - } - - private void button4_Click(object sender, EventArgs e) - { - try - { - Helpers.InstallNativeMessagingHost(NativeHostBrowser.Chrome); - } - catch (Exception ex) - { - Log.Debug(ex, "Error installing native host"); - MessageBox.Show(TextResource.GetText("MSG_NATIVE_HOST_FAILED")); - return; - } - - try - { - BrowserLauncher.LaunchBraveBrowser(app.ChromeExtensionUrl); - } - catch (Exception ex) - { - Log.Debug(ex, "Error launching Brave"); - MessageBox.Show($"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Brave"); - } - } - - private void button2_Click(object sender, EventArgs e) - { - try - { - Helpers.InstallNativeMessagingHost(NativeHostBrowser.Chrome); - } - catch (Exception ex) - { - Log.Debug(ex, "Error installing native host"); - MessageBox.Show(TextResource.GetText("MSG_NATIVE_HOST_FAILED")); - return; - } - - try - { - BrowserLauncher.LaunchVivaldi(app.ChromeExtensionUrl); - } - catch (Exception ex) - { - Log.Debug(ex, "Error launching Vivaldi"); - MessageBox.Show($"{TextResource.GetText("MSG_BROWSER_LAUNCH_FAILED")} Vivaldi"); - } - } - - public void UpdateConfig() - { - Config.Instance.FileExtensions = textBox3.Text.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToArray(); - Config.Instance.VideoExtensions = textBox5.Text.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToArray(); - Config.Instance.BlockedHosts = textBox4.Text.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToArray(); - Config.Instance.FetchServerTimeStamp = checkBox4.Checked; - Config.Instance.MonitorClipboard = checkBox2.Checked; - Config.Instance.MinVideoSize = (int)numericUpDown1.Value; - } - - private void LoadTexts() - { - label1.Text = TextResource.GetText("DESC_MONITORING_1"); - label2.Text = TextResource.GetText("DESC_OTHER_BROWSERS"); - label4.Text = TextResource.GetText("DESC_MOZ"); - label3.Text = TextResource.GetText("DESC_CHROME"); - label5.Text = TextResource.GetText("DESC_FILETYPES"); - button9.Text = TextResource.GetText("DESC_DEF"); - button11.Text = TextResource.GetText("DESC_DEF"); - button10.Text = TextResource.GetText("DESC_DEF"); - label6.Text = TextResource.GetText("DESC_VIDEOTYPES"); - label7.Text = TextResource.GetText("LBL_MIN_VIDEO_SIZE"); - label9.Text = TextResource.GetText("DESC_SITEEXCEPTIONS"); - checkBox2.Text = TextResource.GetText("MENU_CLIP_ADD"); - checkBox4.Text = TextResource.GetText("LBL_GET_TIMESTAMP"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/BrowserMonitoringPage.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.Designer.cs deleted file mode 100644 index ff5cfb6..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.Designer.cs +++ /dev/null @@ -1,200 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class CategoryDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.button3 = new System.Windows.Forms.Button(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button1, 3, 3); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox3, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.button3, 3, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(384, 211); - this.tableLayoutPanel1.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(81, 29); - this.label1.TabIndex = 0; - this.label1.Text = "Name"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(3, 29); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(81, 120); - this.label2.TabIndex = 1; - this.label2.Text = "File Types"; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(308, 183); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.button1.Size = new System.Drawing.Size(73, 25); - this.button1.TabIndex = 2; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(229, 183); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(20, 0, 20, 0); - this.button2.Size = new System.Drawing.Size(73, 25); - this.button2.TabIndex = 3; - this.button2.Text = "OK"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // textBox2 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox2, 3); - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(90, 32); - this.textBox2.Multiline = true; - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(291, 114); - this.textBox2.TabIndex = 5; - // - // textBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 3); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox1.Location = new System.Drawing.Point(90, 3); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(291, 23); - this.textBox1.TabIndex = 4; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(3, 149); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(81, 15); - this.label3.TabIndex = 6; - this.label3.Text = "Default Folder"; - // - // textBox3 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox3, 2); - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(90, 152); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(212, 23); - this.textBox3.TabIndex = 7; - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(308, 152); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(73, 25); - this.button3.TabIndex = 8; - this.button3.Text = "..."; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // CategoryDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(384, 211); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "CategoryDialog"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Category"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.Button button3; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.cs deleted file mode 100644 index 026992d..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; -using Translations; -using XDM.WinForm.UI.FormHelper; - -#if !(NET472_OR_GREATER||NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class CategoryDialog : Form - { - public CategoryDialog() - { - InitializeComponent(); - Width = LogicalToDeviceUnits(400); - Height = LogicalToDeviceUnits(250); - Padding = new Padding(LogicalToDeviceUnits(10)); - LoadTexts(); - } - - public string CategoryName - { - get => textBox1.Text; - set => textBox1.Text = value; - } - - public string DefaultDownloadFolder - { - get => textBox3.Text; - set => textBox3.Text = value; - } - - public IEnumerable FileTypes - { - get => textBox2.Text.Replace("\r\n", "").Split(',').Select(x => x.Trim()).Where(x => x.Length > 0); - set => textBox2.Text = string.Join(",", value.ToArray()); - } - - private void button2_Click(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(textBox1.Text.Trim())) - { - MessageBox.Show("Missing name"); - return; - } - if (string.IsNullOrEmpty(textBox2.Text.Trim())) - { - MessageBox.Show("Missing name"); - return; - } - DialogResult = DialogResult.OK; - Visible = false; - } - - private void button1_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.Cancel; - Visible = false; - } - - private void button3_Click(object sender, EventArgs e) - { - using var fb = new FolderBrowserDialog(); - if (fb.ShowDialog(this) == DialogResult.OK) - { - textBox3.Text = fb.SelectedPath; - } - } - - private void LoadTexts() - { - label1.Text = TextResource.GetText("SORT_NAME"); - label2.Text = TextResource.GetText("SETTINGS_CAT_TYPES"); - label3.Text = TextResource.GetText("SETTINGS_CAT_FOLDER"); - button2.Text = TextResource.GetText("MSG_OK"); - button1.Text = TextResource.GetText("ND_CANCEL"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/CategoryDialog.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.Designer.cs deleted file mode 100644 index 0d16183..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.Designer.cs +++ /dev/null @@ -1,436 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class GeneralSettingsPage - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox6 = new System.Windows.Forms.CheckBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.checkBox4 = new System.Windows.Forms.CheckBox(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.panel1 = new System.Windows.Forms.Panel(); - this.listView1 = new System.Windows.Forms.ListView(); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.button2 = new System.Windows.Forms.Button(); - this.button3 = new System.Windows.Forms.Button(); - this.button4 = new System.Windows.Forms.Button(); - this.button5 = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.button6 = new System.Windows.Forms.Button(); - this.checkBox5 = new System.Windows.Forms.CheckBox(); - this.label4 = new System.Windows.Forms.Label(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); - this.panel1.SuspendLayout(); - this.flowLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.checkBox6, 0, 13); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 7); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.checkBox4, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.checkBox2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.checkBox3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 5); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown1, 1, 6); - this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 8); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 0, 11); - this.tableLayoutPanel1.Controls.Add(this.button6, 1, 11); - this.tableLayoutPanel1.Controls.Add(this.checkBox5, 0, 9); - this.tableLayoutPanel1.Controls.Add(this.label4, 0, 10); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); - this.tableLayoutPanel1.RowCount = 15; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 160F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(410, 620); - this.tableLayoutPanel1.TabIndex = 0; - // - // checkBox6 - // - this.checkBox6.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox6, 2); - this.checkBox6.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox6.Location = new System.Drawing.Point(8, 528); - this.checkBox6.Name = "checkBox6"; - this.checkBox6.Padding = new System.Windows.Forms.Padding(5); - this.checkBox6.Size = new System.Drawing.Size(399, 44); - this.checkBox6.TabIndex = 31; - this.checkBox6.Text = "Use dark theme if possible (Require app restart)"; - this.checkBox6.UseVisualStyleBackColor = true; - // - // label3 - // - this.label3.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label3, 2); - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(8, 234); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(10, 10, 10, 5); - this.label3.Size = new System.Drawing.Size(399, 30); - this.label3.TabIndex = 22; - this.label3.Text = "Download categories"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(8, 199); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(10); - this.label2.Size = new System.Drawing.Size(318, 35); - this.label2.TabIndex = 20; - this.label2.Text = "Maximum simultanious downloads"; - // - // checkBox4 - // - this.checkBox4.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox4, 2); - this.checkBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox4.Location = new System.Drawing.Point(8, 108); - this.checkBox4.Name = "checkBox4"; - this.checkBox4.Padding = new System.Windows.Forms.Padding(5); - this.checkBox4.Size = new System.Drawing.Size(399, 29); - this.checkBox4.TabIndex = 16; - this.checkBox4.Text = "Overwrite existing files"; - this.checkBox4.UseVisualStyleBackColor = true; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox1, 2); - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(8, 3); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Padding = new System.Windows.Forms.Padding(5); - this.checkBox1.Size = new System.Drawing.Size(399, 29); - this.checkBox1.TabIndex = 0; - this.checkBox1.Text = "Show download progress window"; - this.checkBox1.UseVisualStyleBackColor = true; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox2, 2); - this.checkBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox2.Location = new System.Drawing.Point(8, 38); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Padding = new System.Windows.Forms.Padding(5); - this.checkBox2.Size = new System.Drawing.Size(399, 29); - this.checkBox2.TabIndex = 1; - this.checkBox2.Text = "Show download complete dialog"; - this.checkBox2.UseVisualStyleBackColor = true; - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox3, 2); - this.checkBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox3.Location = new System.Drawing.Point(8, 73); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Padding = new System.Windows.Forms.Padding(5); - this.checkBox3.Size = new System.Drawing.Size(399, 29); - this.checkBox3.TabIndex = 2; - this.checkBox3.Text = "Automatically start downloads"; - this.checkBox3.UseVisualStyleBackColor = true; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 2); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(8, 140); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(10, 10, 10, 5); - this.label1.Size = new System.Drawing.Size(399, 30); - this.label1.TabIndex = 17; - this.label1.Text = "Temporary folder"; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(332, 170); - this.button1.Margin = new System.Windows.Forms.Padding(3, 0, 10, 3); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(68, 26); - this.button1.TabIndex = 18; - this.button1.Text = "..."; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // textBox1 - // - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(15, 173); - this.textBox1.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(311, 23); - this.textBox1.TabIndex = 19; - // - // numericUpDown1 - // - this.numericUpDown1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.numericUpDown1.Location = new System.Drawing.Point(334, 204); - this.numericUpDown1.Margin = new System.Windows.Forms.Padding(5, 5, 10, 5); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(66, 23); - this.numericUpDown1.TabIndex = 21; - // - // panel1 - // - this.tableLayoutPanel1.SetColumnSpan(this.panel1, 2); - this.panel1.Controls.Add(this.listView1); - this.panel1.Controls.Add(this.flowLayoutPanel1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(8, 267); - this.panel1.Name = "panel1"; - this.panel1.Padding = new System.Windows.Forms.Padding(5, 0, 10, 0); - this.panel1.Size = new System.Drawing.Size(399, 154); - this.panel1.TabIndex = 23; - // - // listView1 - // - this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2, - this.columnHeader3}); - this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listView1.FullRowSelect = true; - this.listView1.HideSelection = false; - this.listView1.Location = new System.Drawing.Point(5, 0); - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(384, 125); - this.listView1.TabIndex = 1; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.View = System.Windows.Forms.View.Details; - // - // columnHeader1 - // - this.columnHeader1.Text = "Category name"; - this.columnHeader1.Width = 120; - // - // columnHeader2 - // - this.columnHeader2.Text = "File types"; - this.columnHeader2.Width = 150; - // - // columnHeader3 - // - this.columnHeader3.Text = "Download folder"; - this.columnHeader3.Width = 200; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.Controls.Add(this.button2); - this.flowLayoutPanel1.Controls.Add(this.button3); - this.flowLayoutPanel1.Controls.Add(this.button4); - this.flowLayoutPanel1.Controls.Add(this.button5); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(5, 125); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.flowLayoutPanel1.Size = new System.Drawing.Size(384, 29); - this.flowLayoutPanel1.TabIndex = 2; - // - // button2 - // - this.button2.Location = new System.Drawing.Point(306, 3); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 0; - this.button2.Text = "Defaults"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button3 - // - this.button3.Location = new System.Drawing.Point(225, 3); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(75, 23); - this.button3.TabIndex = 1; - this.button3.Text = "Delete"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button4 - // - this.button4.Location = new System.Drawing.Point(144, 3); - this.button4.Name = "button4"; - this.button4.Size = new System.Drawing.Size(75, 23); - this.button4.TabIndex = 2; - this.button4.Text = "Edit"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // button5 - // - this.button5.Location = new System.Drawing.Point(63, 3); - this.button5.Name = "button5"; - this.button5.Size = new System.Drawing.Size(75, 23); - this.button5.TabIndex = 3; - this.button5.Text = "Add"; - this.button5.UseVisualStyleBackColor = true; - this.button5.Click += new System.EventHandler(this.button5_Click); - // - // textBox2 - // - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(15, 497); - this.textBox2.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(311, 23); - this.textBox2.TabIndex = 27; - // - // button6 - // - this.button6.AutoSize = true; - this.button6.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button6.Dock = System.Windows.Forms.DockStyle.Fill; - this.button6.Location = new System.Drawing.Point(332, 497); - this.button6.Margin = new System.Windows.Forms.Padding(3, 3, 10, 3); - this.button6.Name = "button6"; - this.button6.Size = new System.Drawing.Size(68, 25); - this.button6.TabIndex = 28; - this.button6.Text = "..."; - this.button6.UseVisualStyleBackColor = true; - this.button6.Click += new System.EventHandler(this.button6_Click); - // - // checkBox5 - // - this.checkBox5.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox5, 2); - this.checkBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox5.Location = new System.Drawing.Point(8, 427); - this.checkBox5.Name = "checkBox5"; - this.checkBox5.Padding = new System.Windows.Forms.Padding(5, 10, 5, 5); - this.checkBox5.Size = new System.Drawing.Size(399, 34); - this.checkBox5.TabIndex = 29; - this.checkBox5.Text = "Automatically select download folder based on file type"; - this.checkBox5.UseVisualStyleBackColor = true; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(8, 464); - this.label4.Name = "label4"; - this.label4.Padding = new System.Windows.Forms.Padding(5, 10, 5, 5); - this.label4.Size = new System.Drawing.Size(318, 30); - this.label4.TabIndex = 30; - this.label4.Text = "Default download folder"; - // - // GeneralSettingsPage - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.AutoScroll = true; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "GeneralSettingsPage"; - this.Size = new System.Drawing.Size(410, 620); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.flowLayoutPanel1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.CheckBox checkBox4; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.NumericUpDown numericUpDown1; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.Button button5; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.Button button6; - private System.Windows.Forms.CheckBox checkBox5; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.CheckBox checkBox6; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.cs deleted file mode 100644 index 6a00e00..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.cs +++ /dev/null @@ -1,225 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.WinForm.UI.FormHelper; -using XDMApp; - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class GeneralSettingsPage : UserControl, ISettingsPage - { - private Font ri16Font; - public GeneralSettingsPage() - { - InitializeComponent(); - this.ri16Font = new Font(GlobalFontCollection.RiFontInstance.Families[0], 12); - AutoScrollMinSize = tableLayoutPanel1.Size; - listView1.Columns[0].Width = DpiCompat.ToDeviceUnits(this, 150); - listView1.Columns[1].Width = DpiCompat.ToDeviceUnits(this, 150); - button1.Font = this.ri16Font; - button1.Text = RemixIcon.GetFontIcon("ed70"); - button6.Font = this.ri16Font; - button6.Text = RemixIcon.GetFontIcon("ed70"); - LoadTexts(); - } - - public void PopulateUI() - { - checkBox1.Checked = Config.Instance.ShowProgressWindow; - checkBox2.Checked = Config.Instance.ShowDownloadCompleteWindow; - checkBox3.Checked = Config.Instance.StartDownloadAutomatically; - checkBox4.Checked = Config.Instance.FileConflictResolution == FileConflictResolution.Overwrite; - checkBox6.Checked = Config.Instance.AllowSystemDarkTheme; - textBox1.Text = Config.Instance.TempDir; - numericUpDown1.Value = Config.Instance.MaxParallelDownloads; - - listView1.SuspendLayout(); - foreach (var cat in Config.Instance.Categories) - { - var lvi = new ListViewItem - { - Text = cat.DisplayName - }; - lvi.SubItems.Add(string.Join(",", cat.FileExtensions.ToArray())); - lvi.SubItems.Add(cat.DefaultFolder); - lvi.Tag = cat; - listView1.Items.Add(lvi); - } - listView1.ResumeLayout(); - - checkBox5.Checked = Config.Instance.FolderSelectionMode == FolderSelectionMode.Auto; - - //radioButton1.CheckedChanged += (_, _) => - //{ - // if (radioButton1.Checked) - // { - // textBox2.Enabled = false; - // button6.Enabled = false; - // } - //}; - - //radioButton2.CheckedChanged += (_, _) => - //{ - // if (radioButton2.Checked) - // { - // textBox2.Enabled = true; - // button6.Enabled = true; - // } - //}; - - //if (Config.Instance.FolderSelectionMode == FolderSelectionMode.SingleFolder) - //{ - // radioButton2.Checked = true; - // radioButton1.Checked = false; - //} - //else - //{ - // radioButton2.Checked = false; - // radioButton1.Checked = true; - //} - - this.textBox2.Text = Config.Instance.DefaultDownloadFolder; - } - - public void UpdateConfig() - { - Config.Instance.ShowProgressWindow = checkBox1.Checked; - Config.Instance.ShowDownloadCompleteWindow = checkBox2.Checked; - Config.Instance.StartDownloadAutomatically = checkBox3.Checked; - Config.Instance.FileConflictResolution = - checkBox4.Checked ? FileConflictResolution.Overwrite : FileConflictResolution.AutoRename; - Config.Instance.TempDir = textBox1.Text; - Config.Instance.MaxParallelDownloads = (int)numericUpDown1.Value; - - var categories = new List(); - foreach (ListViewItem lvi in listView1.Items) - { - categories.Add((Category)lvi.Tag); - } - - Config.Instance.Categories = categories; - Config.Instance.FolderSelectionMode = checkBox5.Checked ? FolderSelectionMode.Auto : FolderSelectionMode.Manual; - Config.Instance.DefaultDownloadFolder = textBox2.Text; - Config.Instance.AllowSystemDarkTheme = checkBox6.Checked; - } - - private void button2_Click(object sender, EventArgs e) - { - listView1.Items.Clear(); - listView1.SuspendLayout(); - foreach (var cat in Config.DefaultCategories) - { - var lvi = new ListViewItem - { - Text = cat.DisplayName - }; - lvi.SubItems.Add(string.Join(",", cat.FileExtensions.ToArray())); - lvi.Tag = cat; - listView1.Items.Add(lvi); - } - listView1.ResumeLayout(); - } - - private void button5_Click(object sender, EventArgs e) - { - using var categoryDlg = new CategoryDialog(); - if (categoryDlg.ShowDialog(this) == DialogResult.OK) - { - var cat = new Category - { - DisplayName = categoryDlg.CategoryName, - Name = categoryDlg.CategoryName, - FileExtensions = new HashSet(categoryDlg.FileTypes) - }; - var lvi = new ListViewItem - { - Text = cat.DisplayName - }; - lvi.SubItems.Add(string.Join(",", cat.FileExtensions.ToArray())); - lvi.Tag = cat; - listView1.Items.Add(lvi); - } - } - - private void button4_Click(object sender, EventArgs e) - { - if (listView1.SelectedItems.Count == 0) return; - var index = listView1.SelectedIndices[0]; - var lvi = listView1.SelectedItems[0]; - var cat = (Category)lvi.Tag; - - using var categoryDlg = new CategoryDialog - { - CategoryName = cat.DisplayName, - FileTypes = cat.FileExtensions - }; - if (categoryDlg.ShowDialog(this) == DialogResult.OK) - { - cat = new Category - { - DisplayName = categoryDlg.CategoryName, - Name = categoryDlg.CategoryName, - FileExtensions = new HashSet(categoryDlg.FileTypes) - }; - lvi.SubItems.Clear(); - lvi.Text = cat.DisplayName; - lvi.SubItems.Add(string.Join(",", cat.FileExtensions.ToArray())); - //lvi.SubItems[0].Text = string.Join(',', cat.FileExtensions); - //lvi.SubItems[1].Text = string.Join(',', cat.FileExtensions); - lvi.Tag = cat; - } - } - - private void button3_Click(object sender, EventArgs e) - { - if (listView1.SelectedIndices.Count == 0) return; - var selectedIndex = listView1.SelectedIndices[0]; - listView1.Items.RemoveAt(selectedIndex); - } - - private void button1_Click(object sender, EventArgs e) - { - using var folderBrowser = new FolderBrowserDialog(); - if (folderBrowser.ShowDialog(this) == DialogResult.OK) - { - textBox1.Text = folderBrowser.SelectedPath; - } - } - - private void button6_Click(object sender, EventArgs e) - { - using var fb = new FolderBrowserDialog(); - if (fb.ShowDialog(this) == DialogResult.OK) - { - textBox2.Text = fb.SelectedPath; - } - } - - private void LoadTexts() - { - checkBox1.Text = TextResource.GetText("SHOW_DWN_PRG"); - checkBox2.Text = TextResource.GetText("SHOW_DWN_COMPLETE"); - checkBox3.Text = TextResource.GetText("LBL_START_AUTO"); - checkBox4.Text = TextResource.GetText("LBL_OVERWRITE_EXISTING"); - label1.Text = TextResource.GetText("LBL_TEMP_FOLDER"); - label2.Text = TextResource.GetText("MSG_MAX_DOWNLOAD"); - label3.Text = TextResource.GetText("SETTINGS_CAT"); - listView1.Columns[0].Text= TextResource.GetText("SETTINGS_CAT_NAME"); - listView1.Columns[1].Text= TextResource.GetText("SETTINGS_CAT_TYPES"); - listView1.Columns[2].Text= TextResource.GetText("SETTINGS_CAT_FOLDER"); - checkBox5.Text = TextResource.GetText("SETTINGS_ATUO_CAT"); - label4.Text = TextResource.GetText("SETTINGS_FOLDER"); - checkBox6.Text = TextResource.GetText("SETTINGS_DARK_THEME"); - button5.Text= TextResource.GetText("SETTINGS_CAT_ADD"); - button4.Text= TextResource.GetText("SETTINGS_CAT_EDIT"); - button3.Text= TextResource.GetText("DESC_DEL"); - button2.Text= TextResource.GetText("DESC_DEF"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/GeneralSettingsPage.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.Designer.cs deleted file mode 100644 index 349776c..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.Designer.cs +++ /dev/null @@ -1,412 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class NetworkSettingsPage - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label6 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.textBox6 = new System.Windows.Forms.TextBox(); - this.button3 = new System.Windows.Forms.Button(); - this.checkBox3 = new System.Windows.Forms.CheckBox(); - this.numericUpDown3 = new System.Windows.Forms.NumericUpDown(); - this.label3 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.numericUpDown2 = new System.Windows.Forms.NumericUpDown(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.numericUpDown4 = new System.Windows.Forms.NumericUpDown(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 6); - this.tableLayoutPanel1.Controls.Add(this.checkBox3, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown3, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.checkBox2, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.numericUpDown4, 1, 5); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 9, 9, 9); - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(403, 488); - this.tableLayoutPanel1.TabIndex = 0; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.ColumnCount = 4; - this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel3, 2); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); - this.tableLayoutPanel3.Controls.Add(this.comboBox1, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.label4, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.label5, 0, 1); - this.tableLayoutPanel3.Controls.Add(this.label6, 0, 2); - this.tableLayoutPanel3.Controls.Add(this.label7, 2, 1); - this.tableLayoutPanel3.Controls.Add(this.label8, 2, 2); - this.tableLayoutPanel3.Controls.Add(this.textBox3, 1, 1); - this.tableLayoutPanel3.Controls.Add(this.textBox4, 3, 1); - this.tableLayoutPanel3.Controls.Add(this.textBox5, 1, 2); - this.tableLayoutPanel3.Controls.Add(this.textBox6, 3, 2); - this.tableLayoutPanel3.Controls.Add(this.button3, 0, 3); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 217); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 6; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(388, 239); - this.tableLayoutPanel3.TabIndex = 31; - // - // comboBox1 - // - this.tableLayoutPanel3.SetColumnSpan(this.comboBox1, 3); - this.comboBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Items.AddRange(new object[] { - "Use Systems proxy settings", - "No Proxy", - "Manual proxy"}); - this.comboBox1.Location = new System.Drawing.Point(94, 3); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(291, 23); - this.comboBox1.TabIndex = 0; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Dock = System.Windows.Forms.DockStyle.Fill; - this.label4.Location = new System.Drawing.Point(5, 5); - this.label4.Margin = new System.Windows.Forms.Padding(5); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(81, 19); - this.label4.TabIndex = 1; - this.label4.Text = "Proxy settings"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Dock = System.Windows.Forms.DockStyle.Fill; - this.label5.Location = new System.Drawing.Point(5, 34); - this.label5.Margin = new System.Windows.Forms.Padding(5); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(81, 19); - this.label5.TabIndex = 2; - this.label5.Text = "Proxy Host"; - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Dock = System.Windows.Forms.DockStyle.Fill; - this.label6.Location = new System.Drawing.Point(5, 63); - this.label6.Margin = new System.Windows.Forms.Padding(5); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(81, 19); - this.label6.TabIndex = 3; - this.label6.Text = "Proxy user"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Dock = System.Windows.Forms.DockStyle.Fill; - this.label7.Location = new System.Drawing.Point(208, 34); - this.label7.Margin = new System.Windows.Forms.Padding(5); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(62, 19); - this.label7.TabIndex = 4; - this.label7.Text = "Proxy Port"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Dock = System.Windows.Forms.DockStyle.Fill; - this.label8.Location = new System.Drawing.Point(208, 63); - this.label8.Margin = new System.Windows.Forms.Padding(5); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(62, 19); - this.label8.TabIndex = 5; - this.label8.Text = "Password"; - // - // textBox3 - // - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(94, 32); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(106, 23); - this.textBox3.TabIndex = 6; - // - // textBox4 - // - this.textBox4.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox4.Location = new System.Drawing.Point(278, 32); - this.textBox4.Name = "textBox4"; - this.textBox4.Size = new System.Drawing.Size(107, 23); - this.textBox4.TabIndex = 7; - // - // textBox5 - // - this.textBox5.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox5.Location = new System.Drawing.Point(94, 61); - this.textBox5.Name = "textBox5"; - this.textBox5.Size = new System.Drawing.Size(106, 23); - this.textBox5.TabIndex = 8; - // - // textBox6 - // - this.textBox6.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox6.Location = new System.Drawing.Point(278, 61); - this.textBox6.Name = "textBox6"; - this.textBox6.Size = new System.Drawing.Size(107, 23); - this.textBox6.TabIndex = 9; - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(3, 90); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(85, 25); - this.button3.TabIndex = 10; - this.button3.Text = "Proxy"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // checkBox3 - // - this.checkBox3.AutoSize = true; - this.checkBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.checkBox3.Location = new System.Drawing.Point(3, 183); - this.checkBox3.Name = "checkBox3"; - this.checkBox3.Padding = new System.Windows.Forms.Padding(9, 0, 9, 9); - this.checkBox3.Size = new System.Drawing.Size(332, 28); - this.checkBox3.TabIndex = 29; - this.checkBox3.Text = "Limit download speed to (KB/Sec)"; - this.checkBox3.TextAlign = System.Drawing.ContentAlignment.TopLeft; - this.checkBox3.UseVisualStyleBackColor = true; - // - // numericUpDown3 - // - this.numericUpDown3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.numericUpDown3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.numericUpDown3.Location = new System.Drawing.Point(341, 79); - this.numericUpDown3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3); - this.numericUpDown3.MaximumSize = new System.Drawing.Size(86, 0); - this.numericUpDown3.Name = "numericUpDown3"; - this.numericUpDown3.Size = new System.Drawing.Size(50, 23); - this.numericUpDown3.TabIndex = 28; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label3.Location = new System.Drawing.Point(3, 75); - this.label3.Name = "label3"; - this.label3.Padding = new System.Windows.Forms.Padding(9); - this.label3.Size = new System.Drawing.Size(332, 33); - this.label3.TabIndex = 27; - this.label3.Text = "Maximum retry limit"; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label1.Location = new System.Drawing.Point(3, 9); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(9); - this.label1.Size = new System.Drawing.Size(332, 33); - this.label1.TabIndex = 22; - this.label1.Text = "Connection timeout"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.label2.Location = new System.Drawing.Point(3, 42); - this.label2.Name = "label2"; - this.label2.Padding = new System.Windows.Forms.Padding(9); - this.label2.Size = new System.Drawing.Size(332, 33); - this.label2.TabIndex = 21; - this.label2.Text = "Segments per download"; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.checkBox1.Location = new System.Drawing.Point(3, 111); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Padding = new System.Windows.Forms.Padding(9, 4, 9, 9); - this.checkBox1.Size = new System.Drawing.Size(332, 32); - this.checkBox1.TabIndex = 23; - this.checkBox1.Text = "Use system proxy settings"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.Visible = false; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox2, 2); - this.checkBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.checkBox2.Location = new System.Drawing.Point(3, 149); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Padding = new System.Windows.Forms.Padding(9, 0, 9, 9); - this.checkBox2.Size = new System.Drawing.Size(388, 28); - this.checkBox2.TabIndex = 24; - this.checkBox2.Text = "While taking over downloads, use browsers proxy"; - this.checkBox2.UseVisualStyleBackColor = true; - this.checkBox2.Visible = false; - // - // numericUpDown2 - // - this.numericUpDown2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.numericUpDown2.Font = new System.Drawing.Font("Segoe UI", 9F); - this.numericUpDown2.Location = new System.Drawing.Point(341, 46); - this.numericUpDown2.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3); - this.numericUpDown2.MaximumSize = new System.Drawing.Size(86, 0); - this.numericUpDown2.Name = "numericUpDown2"; - this.numericUpDown2.Size = new System.Drawing.Size(50, 23); - this.numericUpDown2.TabIndex = 26; - // - // numericUpDown1 - // - this.numericUpDown1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.numericUpDown1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.numericUpDown1.Location = new System.Drawing.Point(341, 13); - this.numericUpDown1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 3); - this.numericUpDown1.MaximumSize = new System.Drawing.Size(86, 0); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(50, 23); - this.numericUpDown1.TabIndex = 25; - // - // numericUpDown4 - // - this.numericUpDown4.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.numericUpDown4.Font = new System.Drawing.Font("Segoe UI", 9F); - this.numericUpDown4.Location = new System.Drawing.Point(341, 183); - this.numericUpDown4.MaximumSize = new System.Drawing.Size(86, 0); - this.numericUpDown4.Name = "numericUpDown4"; - this.numericUpDown4.Size = new System.Drawing.Size(50, 23); - this.numericUpDown4.TabIndex = 30; - // - // NetworkSettingsPage - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.tableLayoutPanel1); - this.Name = "NetworkSettingsPage"; - this.Size = new System.Drawing.Size(403, 488); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown4)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.NumericUpDown numericUpDown1; - private System.Windows.Forms.NumericUpDown numericUpDown2; - private System.Windows.Forms.NumericUpDown numericUpDown3; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.NumericUpDown numericUpDown4; - private System.Windows.Forms.CheckBox checkBox3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.TextBox textBox3; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.TextBox textBox6; - private System.Windows.Forms.Button button3; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.cs deleted file mode 100644 index 234cc2f..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class NetworkSettingsPage : UserControl, ISettingsPage - { - public NetworkSettingsPage() - { - InitializeComponent(); - AutoScrollMinSize = tableLayoutPanel1.Size; - comboBox1.SelectedIndexChanged += (_, _) => - { - textBox3.Enabled = textBox4.Enabled = textBox5.Enabled = textBox6.Enabled = comboBox1.SelectedIndex == 2; - }; - textBox4.Validating += (o, e) => - { - if (!Int32.TryParse(textBox4.Text, out _)) - { - MessageBox.Show(this,TextResource.GetText("MSG_INVALID_PORT")); - e.Cancel = true; - } - }; - LoadTexts(); - } - - public void PopulateUI() - { - numericUpDown1.Value = Config.Instance.NetworkTimeout; - numericUpDown2.Value = Config.Instance.MaxSegments; - numericUpDown3.Value = Config.Instance.MaxRetry; - numericUpDown4.Value = Config.Instance.DefaltDownloadSpeed; - checkBox3.Checked = Config.Instance.EnableSpeedLimit; - comboBox1.SelectedIndex = (int)(Config.Instance.Proxy?.ProxyType ?? ProxyType.System); - textBox3.Text = Config.Instance.Proxy?.Host; - textBox4.Text = (Config.Instance.Proxy?.Port ?? 0).ToString(); - textBox5.Text = Config.Instance.Proxy?.UserName; - textBox6.Text = Config.Instance.Proxy?.Password; - } - - public void UpdateConfig() - { - Config.Instance.NetworkTimeout = (int)numericUpDown1.Value; - Config.Instance.MaxSegments = (int)numericUpDown2.Value; - Config.Instance.MaxRetry = (int)numericUpDown3.Value; - Config.Instance.DefaltDownloadSpeed = (int)numericUpDown4.Value; - Config.Instance.EnableSpeedLimit = checkBox3.Checked; - Int32.TryParse(textBox4.Text, out int port); - Config.Instance.Proxy = new ProxyInfo - { - ProxyType = (ProxyType)comboBox1.SelectedIndex, - Host = textBox3.Text, - UserName = textBox5.Text, - Password = textBox6.Text, - Port = port - }; - } - - private void button3_Click(object sender, EventArgs e) - { - Helpers.OpenWindowsProxySettings(); - //tableLayoutPanel3.Padding = new Padding(LogicalToDeviceUnits(5)); - } - - private void LoadTexts() - { - label1.Text = TextResource.GetText("DESC_NET1"); - label2.Text = TextResource.GetText("DESC_NET2"); - label3.Text = TextResource.GetText("NET_MAX_RETRY"); - checkBox3.Text= TextResource.GetText("MSG_SPEED_LIMIT"); - label4.Text = TextResource.GetText("DESC_NET4"); - label5.Text = TextResource.GetText("PROXY_HOST"); - label6.Text = TextResource.GetText("DESC_NET7"); - label7.Text = TextResource.GetText("PROXY_PORT"); - label8.Text = TextResource.GetText("DESC_NET8"); - button3.Text = TextResource.GetText("ND_SYSTEM_PROXY"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/NetworkSettingsPage.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.Designer.cs deleted file mode 100644 index df37514..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.Designer.cs +++ /dev/null @@ -1,156 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class PasswordManagerPage - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.listView1 = new System.Windows.Forms.ListView(); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.button3 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.flowLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // listView1 - // - this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1, - this.columnHeader2, - this.columnHeader3}); - this.listView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.listView1.FullRowSelect = true; - this.listView1.HideSelection = false; - this.listView1.Location = new System.Drawing.Point(10, 10); - this.listView1.Name = "listView1"; - this.listView1.Size = new System.Drawing.Size(252, 276); - this.listView1.TabIndex = 2; - this.listView1.UseCompatibleStateImageBehavior = false; - this.listView1.View = System.Windows.Forms.View.Details; - // - // columnHeader1 - // - this.columnHeader1.Text = "Host"; - // - // columnHeader2 - // - this.columnHeader2.Text = "User"; - // - // columnHeader3 - // - this.columnHeader3.Text = "Password"; - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.Controls.Add(this.button3); - this.flowLayoutPanel1.Controls.Add(this.button2); - this.flowLayoutPanel1.Controls.Add(this.button1); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(10, 286); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); - this.flowLayoutPanel1.Size = new System.Drawing.Size(252, 36); - this.flowLayoutPanel1.TabIndex = 4; - this.flowLayoutPanel1.WrapContents = false; - // - // button3 - // - this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Location = new System.Drawing.Point(199, 8); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(50, 25); - this.button3.TabIndex = 2; - this.button3.Text = "Delete"; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // button2 - // - this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(146, 8); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.button2.Size = new System.Drawing.Size(47, 25); - this.button2.TabIndex = 1; - this.button2.Text = "Edit"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // button1 - // - this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(91, 8); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.button1.Size = new System.Drawing.Size(49, 25); - this.button1.TabIndex = 0; - this.button1.Text = "Add"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // PasswordManagerPage - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.listView1); - this.Controls.Add(this.flowLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F); - this.Name = "PasswordManagerPage"; - this.Padding = new System.Windows.Forms.Padding(10); - this.Size = new System.Drawing.Size(272, 332); - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private System.Windows.Forms.ListView listView1; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ColumnHeader columnHeader2; - private System.Windows.Forms.ColumnHeader columnHeader3; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Button button1; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.cs deleted file mode 100644 index 970c4d1..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using System.Collections.Generic; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; - -#if !(NET472_OR_GREATER||NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class PasswordManagerPage : UserControl, ISettingsPage - { - public PasswordManagerPage() - { - InitializeComponent(); - foreach (ColumnHeader col in listView1.Columns) - { - col.Width = LogicalToDeviceUnits(150); - } - - listView1.Margin = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(10), - LogicalToDeviceUnits(10), LogicalToDeviceUnits(5)); - flowLayoutPanel1.Margin = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(10), - LogicalToDeviceUnits(10), LogicalToDeviceUnits(5)); - - LoadTexts(); - } - - public void PopulateUI() - { - listView1.SuspendLayout(); - foreach (var item in Config.Instance.UserCredentials) - { - var lvi = new ListViewItem - { - Text = item.Host - }; - lvi.SubItems.Add(item.User); - lvi.SubItems.Add(item.Password); - lvi.Tag = item; - listView1.Items.Add(lvi); - } - listView1.ResumeLayout(); - } - - public void UpdateConfig() - { - var credentials = new List(); - foreach (ListViewItem lvi in listView1.Items) - { - credentials.Add((PasswordEntry)lvi.Tag); - } - Config.Instance.UserCredentials = credentials; - } - - private void button1_Click(object sender, EventArgs e) - { - using var passwordDlg = new PasswordWindow(); - if (passwordDlg.ShowDialog(this) == DialogResult.OK) - { - var item = passwordDlg.PasswordEntry; - var lvi = new ListViewItem - { - Text = item.Host - }; - lvi.SubItems.Add(item.User); - lvi.SubItems.Add("***"); - lvi.Tag = item; - listView1.Items.Add(lvi); - } - } - - private void button2_Click(object sender, EventArgs e) - { - if (listView1.SelectedItems.Count == 0) return; - var lvi = listView1.SelectedItems[0]; - var ent = (PasswordEntry)lvi.Tag; - - using var passwordDlg = new PasswordWindow - { - PasswordEntry = ent - }; - if (passwordDlg.ShowDialog(this) == DialogResult.OK) - { - ent = passwordDlg.PasswordEntry; - lvi.SubItems.Clear(); - lvi.Text = ent.Host; - lvi.SubItems.Add(ent.User); - lvi.SubItems.Add("***"); - lvi.Tag = ent; - } - } - - private void button3_Click(object sender, EventArgs e) - { - if (listView1.SelectedIndices.Count == 0) return; - var selectedIndex = listView1.SelectedIndices[0]; - listView1.Items.RemoveAt(selectedIndex); - } - - private void LoadTexts() - { - button1.Text = TextResource.GetText("SETTINGS_CAT_ADD"); - button2.Text = TextResource.GetText("SETTINGS_CAT_EDIT"); - button3.Text = TextResource.GetText("DESC_DEL"); - - listView1.Columns[0].Text = TextResource.GetText("DESC_HOST"); - listView1.Columns[1].Text = TextResource.GetText("DESC_USER"); - listView1.Columns[2].Text = TextResource.GetText("DESC_PASS"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordManagerPage.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.Designer.cs deleted file mode 100644 index 4fcedd5..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.Designer.cs +++ /dev/null @@ -1,189 +0,0 @@ - -namespace XDM.WinForm.UI.SettingsPages -{ - partial class PasswordWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button1, 3, 4); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 4); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox3, 1, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 5; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(334, 161); - this.tableLayoutPanel1.TabIndex = 1; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(63, 29); - this.label1.TabIndex = 0; - this.label1.Text = "Host"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(3, 29); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(63, 29); - this.label2.TabIndex = 1; - this.label2.Text = "User name"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(258, 133); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.button1.Size = new System.Drawing.Size(73, 25); - this.button1.TabIndex = 2; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(179, 133); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(20, 0, 20, 0); - this.button2.Size = new System.Drawing.Size(73, 25); - this.button2.TabIndex = 3; - this.button2.Text = "OK"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // textBox2 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox2, 3); - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(72, 32); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(259, 23); - this.textBox2.TabIndex = 5; - // - // textBox1 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 3); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Top; - this.textBox1.Location = new System.Drawing.Point(72, 3); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(259, 23); - this.textBox1.TabIndex = 4; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(3, 58); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(63, 29); - this.label3.TabIndex = 6; - this.label3.Text = "Password"; - this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox3 - // - this.tableLayoutPanel1.SetColumnSpan(this.textBox3, 3); - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(72, 61); - this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(259, 23); - this.textBox3.TabIndex = 7; - this.textBox3.UseSystemPasswordChar = true; - // - // PasswordWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(334, 161); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "PasswordWindow"; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Password"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox3; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.cs b/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.cs deleted file mode 100644 index a1aaa3b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; - -#if !(NET472_OR_GREATER||NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.SettingsPages -{ - public partial class PasswordWindow : Form - { - public PasswordWindow() - { - InitializeComponent(); - Width = LogicalToDeviceUnits(350); - Height = LogicalToDeviceUnits(200); - LoadTexts(); - } - - public PasswordEntry PasswordEntry - { - get - { - return new PasswordEntry - { - Host = textBox1.Text, - User = textBox2.Text, - Password = textBox3.Text - }; - } - set - { - textBox1.Text = value.Host; - textBox2.Text = value.User; - textBox3.Text = value.Password; - } - } - - private void button2_Click(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text)) - { - MessageBox.Show("Invalid input"); - return; - } - DialogResult = DialogResult.OK; - Visible = false; - } - - private void button1_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.Cancel; - Visible = false; - } - - private void LoadTexts() - { - label1.Text = TextResource.GetText("DESC_HOST"); - label2.Text = TextResource.GetText("DESC_USER"); - label3.Text = TextResource.GetText("DESC_PASS"); - button2.Text = TextResource.GetText("MSG_OK"); - button1.Text = TextResource.GetText("ND_CANCEL"); - - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.resx b/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsPages/PasswordWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/SettingsWindow.Designer.cs deleted file mode 100644 index f018f47..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsWindow.Designer.cs +++ /dev/null @@ -1,202 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class SettingsWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.panel1 = new System.Windows.Forms.Panel(); - this.panel2 = new System.Windows.Forms.Panel(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.panel1.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // dataGridView1 - // - this.dataGridView1.AllowUserToAddRows = false; - this.dataGridView1.AllowUserToDeleteRows = false; - this.dataGridView1.AllowUserToResizeColumns = false; - this.dataGridView1.AllowUserToResizeRows = false; - this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; - this.dataGridView1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(239)))), ((int)(((byte)(239))))); - this.dataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dataGridView1.ColumnHeadersVisible = false; - this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Column1}); - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.ButtonFace; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.Color.Black; - dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(10, 10, 0, 10); - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(210)))), ((int)(((byte)(210)))), ((int)(((byte)(210))))); - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.Black; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle1; - this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Left; - this.dataGridView1.Location = new System.Drawing.Point(0, 0); - this.dataGridView1.MultiSelect = false; - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.RowHeadersVisible = false; - this.dataGridView1.RowTemplate.Height = 25; - this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView1.Size = new System.Drawing.Size(164, 441); - this.dataGridView1.TabIndex = 0; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.Column1.HeaderText = "Column1"; - this.Column1.Name = "Column1"; - this.Column1.ReadOnly = true; - // - // panel1 - // - this.panel1.BackColor = System.Drawing.Color.White; - this.panel1.Controls.Add(this.panel2); - this.panel1.Controls.Add(this.tableLayoutPanel1); - this.panel1.Controls.Add(this.label1); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(164, 0); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(460, 441); - this.panel1.TabIndex = 1; - // - // panel2 - // - this.panel2.AutoScroll = true; - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 41); - this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(460, 359); - this.panel2.TabIndex = 2; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.button1, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.button2, 1, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 400); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(10, 5, 10, 5); - this.tableLayoutPanel1.RowCount = 1; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(460, 41); - this.tableLayoutPanel1.TabIndex = 1; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(374, 8); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.button1.Size = new System.Drawing.Size(73, 25); - this.button1.TabIndex = 0; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(307, 8); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(10, 0, 10, 0); - this.button2.Size = new System.Drawing.Size(61, 25); - this.button2.TabIndex = 1; - this.button2.Text = "Save"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Top; - this.label1.Font = new System.Drawing.Font("Segoe UI", 12F); - this.label1.Location = new System.Drawing.Point(0, 0); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(10); - this.label1.Size = new System.Drawing.Size(72, 41); - this.label1.TabIndex = 0; - this.label1.Text = "label1"; - // - // SettingsWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(624, 441); - this.Controls.Add(this.panel1); - this.Controls.Add(this.dataGridView1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SettingsWindow"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Settings"; - this.Load += new System.EventHandler(this.Win32SettingsWindow_Load); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.DataGridViewTextBoxColumn Column1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SettingsWindow.cs b/app/XDM/XDM.WinForm.UI/SettingsWindow.cs deleted file mode 100644 index e01fd28..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsWindow.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using XDM.WinForm.UI.SettingsPages; - -#if !(NET472_OR_GREATER||NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class SettingsWindow : Form - { - private IApp app; - private int initialPage; - - public SettingsWindow(IApp app, - int initialPage = 0) - { - InitializeComponent(); - Text = TextResource.GetText("TITLE_SETTINGS"); - button2.Text = TextResource.GetText("DESC_SAVE_Q"); - button1.Text = TextResource.GetText("ND_CANCEL"); - this.app = app; - this.initialPage = initialPage; - var pagePadding = new Padding(LogicalToDeviceUnits(10)); - var panels = new UserControl[] - { - new BrowserMonitoringPage(app), - new GeneralSettingsPage(), - new NetworkSettingsPage(), - new PasswordManagerPage(), - new AdvancedSettingsPage(), - }; - - foreach (var panel in panels) - { - panel.Dock = DockStyle.Fill; - panel2.Controls.Add(panel); - - if (panel is AdvancedSettingsPage || panel is PasswordManagerPage) - { - panel.Padding = new Padding(LogicalToDeviceUnits(20)); - } - else - { - panel.Padding = pagePadding; - } - } - - var panelNames = new string[] - { - TextResource.GetText("SETTINGS_MONITORING"), - TextResource.GetText("SETTINGS_GENERAL"), - TextResource.GetText("SETTINGS_NETWORK"), - TextResource.GetText("SETTINGS_CRED"), - TextResource.GetText("SETTINGS_ADV") - }; - - foreach (var text in panelNames) - { - dataGridView1.Rows.Add(text); - } - - dataGridView1.SelectionChanged += (a, b) => - { - if (dataGridView1.SelectedRows.Count < 1) - { - return; - } - var index = dataGridView1.SelectedRows[0]; - panels[index.Index].BringToFront(); - - label1.Text = panelNames[index.Index]; - }; - - foreach (var panel in panel2.Controls) - { - if (panel is ISettingsPage pg) - { - pg.PopulateUI(); - } - } - - dataGridView1.Rows[2].Selected = true; - - button1.Padding = button2.Padding = new Padding( - LogicalToDeviceUnits(10), - LogicalToDeviceUnits(2), - LogicalToDeviceUnits(10), - LogicalToDeviceUnits(2)); - - dataGridView1.DefaultCellStyle.Padding = new Padding( - LogicalToDeviceUnits(10), - LogicalToDeviceUnits(10), - LogicalToDeviceUnits(0), - LogicalToDeviceUnits(10)); - } - - private void button2_Click(object sender, EventArgs e) - { - foreach (var panel in panel2.Controls) - { - if (panel is ISettingsPage pg) - { - pg.UpdateConfig(); - } - } - Config.SaveConfig(); - app?.ApplyConfig(); - Dispose(); - Helpers.RunGC(); - } - - private void Win32SettingsWindow_Load(object sender, EventArgs e) - { - dataGridView1.Rows[initialPage].Selected = true; - } - - private void button1_Click(object sender, EventArgs e) - { - Dispose(); - Helpers.RunGC(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SettingsWindow.resx b/app/XDM/XDM.WinForm.UI/SettingsWindow.resx deleted file mode 100644 index c4c73c7..0000000 --- a/app/XDM/XDM.WinForm.UI/SettingsWindow.resx +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.Designer.cs b/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.Designer.cs deleted file mode 100644 index 86dc80c..0000000 --- a/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.Designer.cs +++ /dev/null @@ -1,120 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class SpeedLimiterDialog - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.speedLimiterView1 = new XDM.WinForm.UI.SpeedLimiterView(); - this.flowLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.Controls.Add(this.button1); - this.flowLayoutPanel1.Controls.Add(this.button2); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 138); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Padding = new System.Windows.Forms.Padding(5); - this.flowLayoutPanel1.Size = new System.Drawing.Size(403, 45); - this.flowLayoutPanel1.TabIndex = 0; - this.flowLayoutPanel1.WrapContents = false; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(333, 8); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(2); - this.button1.Size = new System.Drawing.Size(57, 29); - this.button1.TabIndex = 0; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Location = new System.Drawing.Point(274, 8); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(10, 2, 10, 2); - this.button2.Size = new System.Drawing.Size(53, 29); - this.button2.TabIndex = 1; - this.button2.Text = "OK"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // speedLimiterView1 - // - this.speedLimiterView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.speedLimiterView1.EnableSpeedLimit = false; - this.speedLimiterView1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.speedLimiterView1.Location = new System.Drawing.Point(0, 0); - this.speedLimiterView1.Name = "speedLimiterView1"; - this.speedLimiterView1.Size = new System.Drawing.Size(403, 138); - this.speedLimiterView1.SpeedLimit = 0; - this.speedLimiterView1.TabIndex = 1; - // - // SpeedLimiterDialog - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(403, 183); - this.Controls.Add(this.speedLimiterView1); - this.Controls.Add(this.flowLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SpeedLimiterDialog"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Speed Limiter"; - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private SpeedLimiterView speedLimiterView1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.cs b/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.cs deleted file mode 100644 index 2760b1e..0000000 --- a/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Windows.Forms; -using Translations; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI -{ - public partial class SpeedLimiterDialog : Form - { - public event EventHandler OkClicked; - - public SpeedLimiterDialog() - { - InitializeComponent(); - button2.Padding = new Padding(LogicalToDeviceUnits(20), LogicalToDeviceUnits(2), - LogicalToDeviceUnits(20), LogicalToDeviceUnits(2)); - button1.Padding = new Padding(LogicalToDeviceUnits(10), LogicalToDeviceUnits(2), - LogicalToDeviceUnits(10), LogicalToDeviceUnits(2)); - flowLayoutPanel1.Padding = new Padding(LogicalToDeviceUnits(2)); - button1.Margin = button2.Margin = new Padding(LogicalToDeviceUnits(3)); - LoadTexts(); - } - - public int SpeedLimit - { - get => this.speedLimiterView1.SpeedLimit; - set => this.speedLimiterView1.SpeedLimit = value; - } - - public bool EnableSpeedLimit - { - get => this.speedLimiterView1.EnableSpeedLimit; - set => this.speedLimiterView1.EnableSpeedLimit = value; - } - - private void button1_Click(object sender, EventArgs e) - { - Close(); - } - - private void button2_Click(object sender, EventArgs e) - { - OkClicked?.Invoke(sender, EventArgs.Empty); - Close(); - } - - private void LoadTexts() - { - Text = TextResource.GetText("MENU_SPEED_LIMITER"); - button1.Text= TextResource.GetText("ND_CANCEL"); - button2.Text= TextResource.GetText("MSG_OK"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.resx b/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SpeedLimiterDialog.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/SpeedLimiterView.Designer.cs b/app/XDM/XDM.WinForm.UI/SpeedLimiterView.Designer.cs deleted file mode 100644 index 73d13b3..0000000 --- a/app/XDM/XDM.WinForm.UI/SpeedLimiterView.Designer.cs +++ /dev/null @@ -1,117 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class SpeedLimiterView - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.label8 = new System.Windows.Forms.Label(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.tableLayoutPanel4.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); - this.SuspendLayout(); - // - // tableLayoutPanel4 - // - this.tableLayoutPanel4.ColumnCount = 2; - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel4.Controls.Add(this.checkBox2, 0, 0); - this.tableLayoutPanel4.Controls.Add(this.label8, 0, 1); - this.tableLayoutPanel4.Controls.Add(this.numericUpDown1, 1, 1); - this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel4.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel4.Name = "tableLayoutPanel4"; - this.tableLayoutPanel4.Padding = new System.Windows.Forms.Padding(12); - this.tableLayoutPanel4.RowCount = 2; - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel4.Size = new System.Drawing.Size(391, 199); - this.tableLayoutPanel4.TabIndex = 1; - // - // checkBox2 - // - this.checkBox2.AutoSize = true; - this.tableLayoutPanel4.SetColumnSpan(this.checkBox2, 2); - this.checkBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox2.Location = new System.Drawing.Point(15, 15); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(361, 19); - this.checkBox2.TabIndex = 0; - this.checkBox2.Text = "Speed limiter"; - this.checkBox2.UseVisualStyleBackColor = true; - this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Dock = System.Windows.Forms.DockStyle.Fill; - this.label8.Location = new System.Drawing.Point(18, 43); - this.label8.Margin = new System.Windows.Forms.Padding(6); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(209, 138); - this.label8.TabIndex = 1; - this.label8.Text = "Maximum speed in Kilobyte (KiB)"; - // - // numericUpDown1 - // - this.numericUpDown1.Dock = System.Windows.Forms.DockStyle.Fill; - this.numericUpDown1.Location = new System.Drawing.Point(236, 40); - this.numericUpDown1.Maximum = new decimal(new int[] { - 10000000, - 0, - 0, - 0}); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(140, 23); - this.numericUpDown1.TabIndex = 2; - // - // SpeedLimiterView - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.Controls.Add(this.tableLayoutPanel4); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Name = "SpeedLimiterView"; - this.Size = new System.Drawing.Size(391, 199); - this.tableLayoutPanel4.ResumeLayout(false); - this.tableLayoutPanel4.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; - private System.Windows.Forms.CheckBox checkBox2; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.NumericUpDown numericUpDown1; - } -} diff --git a/app/XDM/XDM.WinForm.UI/SpeedLimiterView.cs b/app/XDM/XDM.WinForm.UI/SpeedLimiterView.cs deleted file mode 100644 index 9674919..0000000 --- a/app/XDM/XDM.WinForm.UI/SpeedLimiterView.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Windows.Forms; -using Translations; - -namespace XDM.WinForm.UI -{ - public partial class SpeedLimiterView : UserControl - { - public SpeedLimiterView() - { - InitializeComponent(); - numericUpDown1.Maximum = Int32.MaxValue; - - checkBox2.Text = TextResource.GetText("MENU_SPEED_LIMITER"); - label8.Text = TextResource.GetText("MSG_SPEED_LIMIT"); - } - - private void checkBox2_CheckedChanged(object sender, EventArgs e) - { - numericUpDown1.Enabled = checkBox2.Checked; - } - - public bool EnableSpeedLimit - { - get => checkBox2.Checked; - set => checkBox2.Checked = value; - } - - public int SpeedLimit - { - get - { - return (int)this.numericUpDown1.Value; - } - set - { - this.numericUpDown1.Value = value; - } - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/SpeedLimiterView.resx b/app/XDM/XDM.WinForm.UI/SpeedLimiterView.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/SpeedLimiterView.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/UpdaterWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/UpdaterWindow.Designer.cs deleted file mode 100644 index 6740721..0000000 --- a/app/XDM/XDM.WinForm.UI/UpdaterWindow.Designer.cs +++ /dev/null @@ -1,118 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class UpdaterWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.button1 = new System.Windows.Forms.Button(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.progressBar1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button1, 1, 2); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(5); - this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(304, 100); - this.tableLayoutPanel1.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.label1, 2); - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(8, 5); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(288, 25); - this.label1.TabIndex = 0; - this.label1.Text = "label1"; - // - // progressBar1 - // - this.tableLayoutPanel1.SetColumnSpan(this.progressBar1, 2); - this.progressBar1.Dock = System.Windows.Forms.DockStyle.Fill; - this.progressBar1.Location = new System.Drawing.Point(8, 33); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(288, 14); - this.progressBar1.TabIndex = 1; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(206, 65); - this.button1.Margin = new System.Windows.Forms.Padding(5, 15, 0, 5); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(20, 0, 20, 0); - this.button1.Size = new System.Drawing.Size(93, 25); - this.button1.TabIndex = 2; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // Win32ComponentUpdater - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(304, 100); - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MaximizeBox = false; - this.Name = "Win32ComponentUpdater"; - this.ShowIcon = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Component downloader"; - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.Button button1; - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/UpdaterWindow.cs b/app/XDM/XDM.WinForm.UI/UpdaterWindow.cs deleted file mode 100644 index 127ffd3..0000000 --- a/app/XDM/XDM.WinForm.UI/UpdaterWindow.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Downloader; - -namespace XDM.WinForm.UI -{ - public partial class UpdaterWindow : Form, IUpdaterUI - { - private IAppUI AppUI; - public UpdaterWindow(IAppUI AppUI) - { - InitializeComponent(); - this.AppUI = AppUI; - Text = TextResource.GetText("OPT_UPDATE_FFMPEG"); - label1.Text = TextResource.GetText("STAT_DOWNLOADING"); - button1.Text = TextResource.GetText("ND_CANCEL"); - } - - public event EventHandler? Cancelled; - public event EventHandler? Finished; - - public void DownloadCancelled(object? sender, EventArgs e) - { - AppUI.RunOnUiThread(() => Dispose()); - } - - public void DownloadFailed(object? sender, DownloadFailedEventArgs e) - { - MessageBox.Show(TextResource.GetText("MSG_FAILED")); - AppUI.RunOnUiThread(() => Dispose()); - } - - public void DownloadFinished(object? sender, EventArgs e) - { - MessageBox.Show(TextResource.GetText("MSG_UPDATED")); - this.Finished?.Invoke(sender, e); - AppUI.RunOnUiThread(() => Dispose()); - } - - public void DownloadProgressChanged(object? sender, ProgressResultEventArgs e) - { - AppUI.RunOnUiThread(() => progressBar1.Value = e.Progress); - } - - public void DownloadStarted(object? sender, EventArgs e) - { - - } - - public string Label { get => label1.Text; set => AppUI.RunOnUiThread(() => label1.Text = value); } - - public bool Inderminate - { - get => progressBar1.Style == ProgressBarStyle.Marquee; set - { - AppUI.RunOnUiThread(() => progressBar1.Style = value ? ProgressBarStyle.Marquee : ProgressBarStyle.Blocks); - } - } - - private void button1_Click(object sender, EventArgs e) - { - Cancelled?.Invoke(sender, e); - } - - public void ShowNoUpdateMessage() - { - MessageBox.Show(TextResource.GetText("MSG_NO_UPDATE")); - AppUI.RunOnUiThread(() => Dispose()); - this.Finished?.Invoke(this, EventArgs.Empty); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/UpdaterWindow.resx b/app/XDM/XDM.WinForm.UI/UpdaterWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/UpdaterWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.Designer.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.Designer.cs deleted file mode 100644 index 540f72b..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.Designer.cs +++ /dev/null @@ -1,189 +0,0 @@ - -namespace XDM.WinForm.UI.VideoDownloaderPages -{ - partial class VideoDownloaderPage1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.button1 = new System.Windows.Forms.Button(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.textBox3 = new System.Windows.Forms.TextBox(); - this.tableLayoutPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.button1, 2, 1); - this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.label2, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.label3, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.textBox2, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.textBox3, 0, 6); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.Padding = new System.Windows.Forms.Padding(9); - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(558, 401); - this.tableLayoutPanel1.TabIndex = 0; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(12, 9); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(329, 15); - this.label1.TabIndex = 0; - this.label1.Text = "Please paste video URL link here"; - // - // textBox1 - // - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 2); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(12, 27); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(506, 23); - this.textBox1.TabIndex = 1; - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.BackColor = System.Drawing.Color.White; - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.ForeColor = System.Drawing.Color.Gray; - this.button1.Location = new System.Drawing.Point(524, 27); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(22, 25); - this.button1.TabIndex = 2; - this.button1.Text = "*"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.checkBox1, 2); - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(12, 58); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(506, 19); - this.checkBox1.TabIndex = 3; - this.checkBox1.Text = "Advanced options"; - this.checkBox1.UseVisualStyleBackColor = true; - this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(12, 80); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(329, 15); - this.label2.TabIndex = 4; - this.label2.Text = "User name"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Dock = System.Windows.Forms.DockStyle.Fill; - this.label3.Location = new System.Drawing.Point(12, 124); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(329, 15); - this.label3.TabIndex = 5; - this.label3.Text = "Password"; - // - // textBox2 - // - this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox2.Location = new System.Drawing.Point(12, 98); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(329, 23); - this.textBox2.TabIndex = 6; - // - // textBox3 - // - this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.textBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox3.Location = new System.Drawing.Point(12, 142); - this.textBox3.Name = "textBox3"; - this.textBox3.PasswordChar = '*'; - this.textBox3.Size = new System.Drawing.Size(329, 23); - this.textBox3.TabIndex = 7; - // - // VideoDownloaderPage1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.Controls.Add(this.tableLayoutPanel1); - this.Name = "VideoDownloaderPage1"; - this.Size = new System.Drawing.Size(558, 401); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.TextBox textBox3; - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.cs deleted file mode 100644 index ae33291..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Drawing; - -using System.Windows.Forms; -using Translations; -using XDM.Core.Lib.Common; -using XDM.WinForm.UI.FormHelper; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.VideoDownloaderPages -{ - public partial class VideoDownloaderPage1 : UserControl - { - public string UrlText { get => textBox1.Text; } - public string UserNameText { get => textBox2.Text; } - public string PasswordText { get => textBox3.Text; } - public bool UseCredentials { get => checkBox1.Checked; } - - public EventHandler SearchClicked; - private IFormColors colors; - - public VideoDownloaderPage1(Font searchFont, IAppUI appUi) - { - InitializeComponent(); - button1.Font = searchFont; - button1.Text = ((char)Int32.Parse("f002", System.Globalization.NumberStyles.HexNumber)).ToString(); - textBox2.Visible = textBox3.Visible = checkBox1.Checked; - label2.Visible = label3.Visible = checkBox1.Checked; - var url = appUi.GetUrlFromClipboard(); - if (url != null) - { - textBox1.Text = url; - } - if (!AppWinPeer.AppsUseLightTheme) - { - var colors = new FormColorsDark(); - label1.ForeColor = checkBox1.ForeColor = label2.ForeColor = label3.ForeColor = Color.White; - DarkModeHelper.StyleFlatButton(button1, colors.BackColor, colors.ForeColor); - var bg = colors.BackColor; - tableLayoutPanel1.BackColor = bg; - DarkModeHelper.StyleFlatTextBox(textBox1, colors); - DarkModeHelper.StyleFlatTextBox(textBox2, colors); - DarkModeHelper.StyleFlatTextBox(textBox3, colors); - } - - label1.Text = TextResource.GetText("VID_PASTE_URL"); - checkBox1.Text = TextResource.GetText("SETTINGS_ADV"); - label2.Text = TextResource.GetText("DESC_USER"); - label3.Text = TextResource.GetText("DESC_PASS"); - } - - private void button1_Click(object sender, EventArgs e) - { - SearchClicked?.Invoke(this, EventArgs.Empty); - } - - private void checkBox1_CheckedChanged(object sender, EventArgs e) - { - textBox2.Visible = textBox3.Visible = checkBox1.Checked; - label2.Visible = label3.Visible = checkBox1.Checked; - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.resx b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage1.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.Designer.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.Designer.cs deleted file mode 100644 index b34a628..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.Designer.cs +++ /dev/null @@ -1,362 +0,0 @@ - -namespace XDM.WinForm.UI.VideoDownloaderPages -{ - partial class VideoDownloaderPage2 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.button4 = new System.Windows.Forms.Button(); - this.button1 = new System.Windows.Forms.Button(); - this.button2 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.button3 = new System.Windows.Forms.Button(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.Column1 = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Column4 = new System.Windows.Forms.DataGridViewComboBoxColumn(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.label2 = new System.Windows.Forms.Label(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.doNotAddToQueueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.manageQueueAndSchedulersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tableLayoutPanel1.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.tableLayoutPanel3.SuspendLayout(); - this.contextMenuStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.BackColor = System.Drawing.SystemColors.Control; - this.tableLayoutPanel1.ColumnCount = 5; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.button4, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.button1, 3, 3); - this.tableLayoutPanel1.Controls.Add(this.button2, 2, 3); - this.tableLayoutPanel1.Controls.Add(this.label1, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.textBox1, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.button3, 4, 2); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 0); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(587, 428); - this.tableLayoutPanel1.TabIndex = 0; - // - // button4 - // - this.button4.AutoSize = true; - this.button4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button4.Dock = System.Windows.Forms.DockStyle.Fill; - this.button4.Location = new System.Drawing.Point(9, 390); - this.button4.Margin = new System.Windows.Forms.Padding(9, 9, 0, 9); - this.button4.Name = "button4"; - this.button4.Padding = new System.Windows.Forms.Padding(9, 2, 9, 2); - this.button4.Size = new System.Drawing.Size(88, 29); - this.button4.TabIndex = 8; - this.button4.Text = "Advanced"; - this.button4.UseVisualStyleBackColor = true; - this.button4.Click += new System.EventHandler(this.button4_Click); - // - // button1 - // - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.SetColumnSpan(this.button1, 2); - this.button1.Dock = System.Windows.Forms.DockStyle.Fill; - this.button1.Location = new System.Drawing.Point(461, 390); - this.button1.Margin = new System.Windows.Forms.Padding(9); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(9, 2, 9, 2); - this.button1.Size = new System.Drawing.Size(117, 29); - this.button1.TabIndex = 1; - this.button1.Text = "Download Now"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // button2 - // - this.button2.AutoSize = true; - this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button2.Dock = System.Windows.Forms.DockStyle.Fill; - this.button2.Location = new System.Drawing.Point(334, 390); - this.button2.Margin = new System.Windows.Forms.Padding(9, 9, 0, 9); - this.button2.Name = "button2"; - this.button2.Padding = new System.Windows.Forms.Padding(9, 2, 9, 2); - this.button2.Size = new System.Drawing.Size(118, 29); - this.button2.TabIndex = 2; - this.button2.Text = "Download Later"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Dock = System.Windows.Forms.DockStyle.Fill; - this.label1.Location = new System.Drawing.Point(3, 346); - this.label1.Name = "label1"; - this.label1.Padding = new System.Windows.Forms.Padding(4); - this.label1.Size = new System.Drawing.Size(91, 35); - this.label1.TabIndex = 3; - this.label1.Text = "Save In"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // textBox1 - // - this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.tableLayoutPanel1.SetColumnSpan(this.textBox1, 3); - this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.Location = new System.Drawing.Point(102, 351); - this.textBox1.Margin = new System.Windows.Forms.Padding(5); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(444, 23); - this.textBox1.TabIndex = 4; - // - // button3 - // - this.button3.AutoSize = true; - this.button3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button3.Dock = System.Windows.Forms.DockStyle.Fill; - this.button3.Location = new System.Drawing.Point(556, 351); - this.button3.Margin = new System.Windows.Forms.Padding(5); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(26, 25); - this.button3.TabIndex = 5; - this.button3.Text = "..."; - this.button3.UseVisualStyleBackColor = true; - this.button3.Click += new System.EventHandler(this.button3_Click); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.BackColor = System.Drawing.Color.White; - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 5); - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel2.Controls.Add(this.dataGridView1, 0, 1); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 34); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.RowCount = 1; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 17F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(581, 309); - this.tableLayoutPanel2.TabIndex = 6; - // - // dataGridView1 - // - this.dataGridView1.AllowUserToAddRows = false; - this.dataGridView1.AllowUserToDeleteRows = false; - this.dataGridView1.AllowUserToResizeColumns = false; - this.dataGridView1.AllowUserToResizeRows = false; - this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; - this.dataGridView1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(65)))), ((int)(((byte)(65)))), ((int)(((byte)(65))))); - this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; - this.dataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(65)))), ((int)(((byte)(65)))), ((int)(((byte)(65))))); - dataGridViewCellStyle1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.Color.White; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.White; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.White; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; - this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.Column1, - this.Column2, - this.Column4}); - this.tableLayoutPanel2.SetColumnSpan(this.dataGridView1, 5); - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(65)))), ((int)(((byte)(65)))), ((int)(((byte)(65))))); - dataGridViewCellStyle2.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.DodgerBlue; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.White; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle2; - this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.dataGridView1.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; - this.dataGridView1.EnableHeadersVisualStyles = false; - this.dataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); - this.dataGridView1.Location = new System.Drawing.Point(0, 0); - this.dataGridView1.Margin = new System.Windows.Forms.Padding(0); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.RowHeadersVisible = false; - this.dataGridView1.RowTemplate.Height = 25; - this.dataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView1.Size = new System.Drawing.Size(581, 309); - this.dataGridView1.TabIndex = 7; - // - // Column1 - // - this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.Column1.HeaderText = ""; - this.Column1.Name = "Column1"; - this.Column1.Width = 5; - // - // Column2 - // - this.Column2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.Column2.HeaderText = "Name"; - this.Column2.Name = "Column2"; - this.Column2.ReadOnly = true; - // - // Column4 - // - this.Column4.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells; - this.Column4.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.Column4.HeaderText = "Formats"; - this.Column4.Name = "Column4"; - this.Column4.Width = 54; - // - // tableLayoutPanel3 - // - this.tableLayoutPanel3.AutoSize = true; - this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel3.ColumnCount = 3; - this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel3, 5); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.Controls.Add(this.checkBox1, 0, 0); - this.tableLayoutPanel3.Controls.Add(this.label2, 1, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 1; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel3.Size = new System.Drawing.Size(581, 25); - this.tableLayoutPanel3.TabIndex = 7; - // - // checkBox1 - // - this.checkBox1.AutoSize = true; - this.checkBox1.BackColor = System.Drawing.SystemColors.Control; - this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.checkBox1.Location = new System.Drawing.Point(3, 3); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(127, 19); - this.checkBox1.TabIndex = 8; - this.checkBox1.Text = "Check/Uncheck All"; - this.checkBox1.UseVisualStyleBackColor = false; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.BackColor = System.Drawing.SystemColors.Control; - this.label2.Dock = System.Windows.Forms.DockStyle.Fill; - this.label2.Location = new System.Drawing.Point(136, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(442, 25); - this.label2.TabIndex = 9; - this.label2.Text = "Format"; - this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.doNotAddToQueueToolStripMenuItem, - this.manageQueueAndSchedulersToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(231, 48); - // - // doNotAddToQueueToolStripMenuItem - // - this.doNotAddToQueueToolStripMenuItem.Name = "doNotAddToQueueToolStripMenuItem"; - this.doNotAddToQueueToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.doNotAddToQueueToolStripMenuItem.Text = "Do not add to queue"; - this.doNotAddToQueueToolStripMenuItem.Click += new System.EventHandler(this.doNotAddToQueueToolStripMenuItem_Click); - // - // manageQueueAndSchedulersToolStripMenuItem - // - this.manageQueueAndSchedulersToolStripMenuItem.Name = "manageQueueAndSchedulersToolStripMenuItem"; - this.manageQueueAndSchedulersToolStripMenuItem.Size = new System.Drawing.Size(230, 22); - this.manageQueueAndSchedulersToolStripMenuItem.Text = "Manage queue and scheduler"; - this.manageQueueAndSchedulersToolStripMenuItem.Click += new System.EventHandler(this.manageQueueAndSchedulersToolStripMenuItem_Click); - // - // VideoDownloaderPage2 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.SystemColors.Control; - this.Controls.Add(this.tableLayoutPanel1); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Name = "VideoDownloaderPage2"; - this.Size = new System.Drawing.Size(587, 428); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.tableLayoutPanel3.ResumeLayout(false); - this.tableLayoutPanel3.PerformLayout(); - this.contextMenuStrip1.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Button button1; - private System.Windows.Forms.Button button2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBox1; - private System.Windows.Forms.Button button3; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private System.Windows.Forms.DataGridView dataGridView1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; - private System.Windows.Forms.CheckBox checkBox1; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.ComboBox comboBox1; - private System.Windows.Forms.Button button4; - private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; - private System.Windows.Forms.ToolStripMenuItem doNotAddToQueueToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem manageQueueAndSchedulersToolStripMenuItem; - private System.Windows.Forms.DataGridViewCheckBoxColumn Column1; - private System.Windows.Forms.DataGridViewTextBoxColumn Column2; - private System.Windows.Forms.DataGridViewComboBoxColumn Column4; - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.cs deleted file mode 100644 index 7096bab..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.cs +++ /dev/null @@ -1,400 +0,0 @@ -using TraceLog; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Windows.Forms; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using YDLWrapper; -using XDM.WinForm.UI.FormHelper; -using System.Drawing; -using Translations; -using XDM.Core.Lib.Downloader; -using XDM.Core.Lib.Downloader.Progressive.DualHttp; -using XDM.Core.Lib.Downloader.Progressive.SingleHttp; -using XDM.Core.Lib.Downloader.Adaptive.Hls; -using XDM.Core.Lib.Downloader.Adaptive.Dash; - -#if !(NET472_OR_GREATER || NET5_0_OR_GREATER) -using static XDM.WinForm.UI.WinFormsPolyfill; -#endif - -namespace XDM.WinForm.UI.VideoDownloaderPages -{ - public partial class VideoDownloaderPage2 : UserControl - { - private EventHandler FormatChanged; - public IApp App { get; set; } - - public AuthenticationInfo? Authentication { get => authentication; set => authentication = value; } - public ProxyInfo? Proxy { get => proxy; set => proxy = value; } - public int SpeedLimit { get => speedLimit; set => speedLimit = value; } - public bool EnableSpeedLimit { get => enableSpeedLimit; set => enableSpeedLimit = value; } - - private AuthenticationInfo? authentication; - private ProxyInfo? proxy = Config.Instance.Proxy; - private int speedLimit = Config.Instance.DefaltDownloadSpeed; - private bool enableSpeedLimit = Config.Instance.EnableSpeedLimit; - private IFormColors colors; - - public VideoDownloaderPage2() - { - InitializeComponent(); - comboBox1 = new ComboBox(); - comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; - this.tableLayoutPanel3.Controls.Add(this.comboBox1, 2, 0); - - textBox1.Text = Helpers.GetDownloadFolderByFileName("video.mp4"); - FormatChanged = new EventHandler((s, e) => - { - var selectedFormatIndex = (s as ComboBox).SelectedIndex; - dataGridView1.SelectedRows[0].Tag = selectedFormatIndex; - Log.Debug("Format index: " + selectedFormatIndex + " Row index: " + dataGridView1.SelectedRows[0].Index); - } - ); - dataGridView1.EditingControlShowing += (s, e) => - { - if (e.Control is ComboBox combo) - { - // Remove an existing event-handler, if present, to avoid - // adding multiple handlers when the editing control is reused. - combo.SelectedIndexChanged -= FormatChanged; - - // Add the event handler. - combo.SelectedIndexChanged += FormatChanged; - } - }; - comboBox1.SelectedValueChanged += (a, b) => - { - dataGridView1.SuspendLayout(); - foreach (DataGridViewRow row in dataGridView1.Rows) - { - var cell = row.Cells[2] as DataGridViewComboBoxCell; - var sel = comboBox1.SelectedItem?.ToString(); - if (!string.IsNullOrEmpty(sel)) - { - var s = MatchingCellValue(cell, sel); - if (!string.IsNullOrEmpty(s)) - { - row.Cells[2].Value = s; - } - } - } - dataGridView1.ResumeLayout(); - }; - checkBox1.CheckedChanged += (a, b) => - { - dataGridView1.SuspendLayout(); - foreach (DataGridViewRow row in dataGridView1.Rows) - { - row.Cells[0].Value = checkBox1.Checked; - } - dataGridView1.ResumeLayout(); - }; - - dataGridView1.DataError += (a, b) => - { - Log.Debug(b.Exception, "Error while setting format selection"); - }; - - button1.Padding = button2.Padding = button4.Padding = new Padding( - LogicalToDeviceUnits(10), - LogicalToDeviceUnits(5), - LogicalToDeviceUnits(10), - LogicalToDeviceUnits(5)); - - //dataGridView1.Margin = new Padding(LogicalToDeviceUnits(5)); - textBox1.Margin = new Padding(LogicalToDeviceUnits(10)); - button3.Margin = new Padding(LogicalToDeviceUnits(5)); - button3.Padding = new Padding(0); - - dataGridView1.DefaultCellStyle.Padding = new Padding(LogicalToDeviceUnits(5)); - dataGridView1.ColumnHeadersDefaultCellStyle.Padding = new Padding(LogicalToDeviceUnits(5)); - - if (!AppWinPeer.AppsUseLightTheme) - { - DarkModeHelper.EnableDarkMode(dataGridView1); - colors = new FormColorsDark(); - comboBox1.FlatStyle = FlatStyle.Flat; - var bg = colors.BackColor; - var fg = colors.ForeColor; - var bg2 = colors.ButtonColor; - DarkModeHelper.EnableDarkMode(comboBox1, bg, fg); - this.BackColor = - this.checkBox1.BackColor = - this.tableLayoutPanel1.BackColor = this.label2.BackColor = bg; - this.checkBox1.ForeColor = this.label1.ForeColor = this.label2.ForeColor = Color.White; - DarkModeHelper.StyleFlatButton(button1, bg2, fg); - DarkModeHelper.StyleFlatButton(button2, bg2, fg); - DarkModeHelper.StyleFlatButton(button3, bg2, fg); - DarkModeHelper.StyleFlatButton(button4, bg2, fg); - DarkModeHelper.StyleFlatTextBox(textBox1, colors); - - MenuHelper.CustomizeMenuAppearance(contextMenuStrip1); - MenuHelper.FixHiDpiMargin(contextMenuStrip1); - } - - LoadTexts(); - } - - public void SetVideoResultList(List items) - { - if (items == null) return; - var formatSet = new HashSet(); - dataGridView1.SuspendLayout(); - foreach (var item in items) - { - var index = dataGridView1.Rows.Add( - true, item, "" - ); - var cell = dataGridView1.Rows[index].Cells[2] as DataGridViewComboBoxCell; - var arr = item.Formats.Select(item => item.ToString()).ToArray(); - cell.Items.AddRange(arr); - if (arr.Length > 0) - { - cell.Value = arr.Last(); - dataGridView1.Rows[index].Tag = arr.Length - 1; - } - item.Formats.ForEach(item => - { - if (!string.IsNullOrEmpty(item.Height)) - { - formatSet.Add(item.Height + " [" + item.FileExt?.ToUpperInvariant() + "]"); - } - }); - } - dataGridView1.ResumeLayout(); - var list = new List(formatSet); - list.Sort(); - comboBox1.Items.AddRange(list.ToArray()); - } - - //private static string FormatVideoItem(YDLVideoEntry item) - //{ - // var textBuf = new StringBuilder(); - // if (item.Height != null) - // { - // textBuf.Append(item.Height + "p "); - // } - // if (textBuf.Length == 0 && item.VideoFormat != null) - // { - // textBuf.Append(item.VideoFormat); - // } - // if (item.Abr != null) - // { - // textBuf.Append(item.Abr + " kbps "); - // } - // if (item.FileExt != null) - // { - // textBuf.Append(" [" + item.FileExt.ToUpperInvariant() + "]"); - // } - // return textBuf.ToString(); - //} - private static string MatchingCellValue(DataGridViewComboBoxCell cell, string text) - { - var arr = text.Split(' '); - if (arr.Length < 2) return null; - return cell.Items.Cast().Where(val => val.StartsWith(arr[0]) && val.EndsWith(arr[1])).FirstOrDefault(); - } - - private void button1_Click(object sender, EventArgs e) - { - AddDownload(true, null); - } - - private void AddDownload(bool startImmediately, string? queueId) - { - if (string.IsNullOrEmpty(textBox1.Text)) - { - MessageBox.Show("Please select a download location"); - return; - } - foreach (DataGridViewRow row in dataGridView1.Rows) - { - var isChecked = (bool)row.Cells[0].Value; - if (isChecked) - { - Log.Debug("tag for " + row.Index + " is: " + row.Tag); - if (row.Tag != null) - { - var formatIndex = (int)row.Tag; - var format = (YDLVideoEntry)row.Cells[1].Value; - var selectedFormat = format.Formats[formatIndex]; - AddDownload(selectedFormat, startImmediately, queueId); - } - } - } - } - - private void AddDownload(YDLVideoFormatEntry videoEntry, bool startImmediately, string queueId) - { - IBaseDownloader downloader = null; - switch (videoEntry.YDLEntryType) - { - case YDLEntryType.Http: - App.StartDownload( - new SingleSourceHTTPDownloadInfo - { - Uri = videoEntry.VideoUrl - }, - videoEntry.Title + "." + videoEntry.FileExt, - FileNameFetchMode.None, - textBox1.Text, - startImmediately, - Authentication, Proxy ?? Config.Instance.Proxy, - EnableSpeedLimit ? SpeedLimit : 0, queueId - ); - break; - case YDLEntryType.Dash: - App.StartDownload( - new DualSourceHTTPDownloadInfo - { - Uri1 = videoEntry.VideoUrl, - Uri2 = videoEntry.AudioUrl - }, - videoEntry.Title + "." + videoEntry.FileExt, - FileNameFetchMode.None, - textBox1.Text, - startImmediately, - Authentication, Proxy ?? Config.Instance.Proxy, - EnableSpeedLimit ? SpeedLimit : 0, queueId - ); - - //var dash = new DualSourceHTTPDownloader( - // new DualSourceHTTPDownloadInfo - // { - // Uri1 = videoEntry.VideoUrl, - // Uri2 = videoEntry.AudioUrl - // }, - // mediaProcessor: new FFmpegMediaProcessor()); - //dash.SetFileName( - // videoEntry.Title + "." + videoEntry.FileExt, FileNameFetchMode.None); - //downloader = dash; - break; - case YDLEntryType.Hls: - App.StartDownload( - new MultiSourceHLSDownloadInfo - { - VideoUri = videoEntry.VideoUrl, - AudioUri = videoEntry.AudioUrl - }, - videoEntry.Title + "." + videoEntry.FileExt, - FileNameFetchMode.None, - textBox1.Text, - startImmediately, - Authentication, Proxy ?? Config.Instance.Proxy, - EnableSpeedLimit ? SpeedLimit : 0, queueId - ); - - //var hls = new MultiSourceHLSDownloader( - // new MultiSourceHLSDownloadInfo - // { - // VideoUri = videoEntry.VideoUrl, - // AudioUri = videoEntry.AudioUrl - // }, - // mediaProcessor: new FFmpegMediaProcessor()); - //hls.SetFileName( - // videoEntry.Title + "." + videoEntry.FileExt, FileNameFetchMode.None); - //downloader = hls; - break; - case YDLEntryType.MpegDash: - App.StartDownload( - new MultiSourceDASHDownloadInfo - { - VideoSegments = videoEntry.VideoFragments?.Select(x => new Uri(new Uri(videoEntry.FragmentBaseUrl), x.Path)).ToList(), - AudioSegments = videoEntry.AudioFragments?.Select(x => new Uri(new Uri(videoEntry.FragmentBaseUrl), x.Path)).ToList(), - AudioFormat = videoEntry.AudioFormat != null ? "." + videoEntry.AudioFormat : null, - VideoFormat = videoEntry.VideoFormat != null ? "." + videoEntry.VideoFormat : null, - Url = videoEntry.VideoUrl - }, - videoEntry.Title + "." + videoEntry.FileExt, - FileNameFetchMode.None, - textBox1.Text, - startImmediately, Authentication, Proxy ?? Config.Instance.Proxy, - EnableSpeedLimit ? SpeedLimit : 0, queueId - ); - - //var mpeg = new MultiSourceDASHDownloader( - // new MultiSourceDASHDownloadInfo - // { - // VideoSegments = videoEntry.VideoFragments?.Select(x => new Uri(new Uri(videoEntry.FragmentBaseUrl), x.Path)).ToList(), - // AudioSegments = videoEntry.AudioFragments?.Select(x => new Uri(new Uri(videoEntry.FragmentBaseUrl), x.Path)).ToList(), - // AudioFormat = videoEntry.AudioFormat != null ? "." + videoEntry.AudioFormat : null, - // VideoFormat = videoEntry.VideoFormat != null ? "." + videoEntry.VideoFormat : null, - // Url = videoEntry.VideoUrl - // }, - // mediaProcessor: new FFmpegMediaProcessor()); - //mpeg.SetFileName( - // videoEntry.Title + "." + videoEntry.FileExt, FileNameFetchMode.None); - //downloader = mpeg; - break; - } - } - - private void button2_Click(object sender, EventArgs e) - { - DownloadLaterMenuHelper.PopulateMenuAndAttachEvents( - contextMenuStrip1, - (s, e) => - { - AddDownload(false, e.QueueId); - }, - doNotAddToQueueToolStripMenuItem, - manageQueueAndSchedulersToolStripMenuItem, - button2, - this); - //AddDownload(false); - } - - public string? SelectFolder() - { - using var fc = new FolderBrowserDialog(); - fc.SelectedPath = textBox1.Text; - if (fc.ShowDialog(this) == DialogResult.OK) - { - return fc.SelectedPath; - } - return null; - } - - private void button3_Click(object sender, EventArgs e) - { - var selected = SelectFolder(); - if (!string.IsNullOrEmpty(selected)) - { - textBox1.Text = SelectFolder(); - } - } - - private void button4_Click(object sender, EventArgs e) - { - AdvancedDialogHelper.Show(ref authentication, ref proxy, ref enableSpeedLimit, ref speedLimit, this); - } - - private void doNotAddToQueueToolStripMenuItem_Click(object sender, EventArgs e) - { - AddDownload(false, null); - } - - private void manageQueueAndSchedulersToolStripMenuItem_Click(object sender, EventArgs e) - { - App.AppUI.ShowQueueWindow(this.ParentForm); - } - - private void LoadTexts() - { - label2.Text = TextResource.GetText("O_VID_FMT"); - checkBox1.Text = TextResource.GetText("VID_CHK"); - label1.Text = TextResource.GetText("LBL_SAVE_IN"); - button4.Text = TextResource.GetText("ND_MORE"); - button2.Text = TextResource.GetText("ND_DOWNLOAD_LATER"); - button1.Text = TextResource.GetText("ND_DOWNLOAD_NOW"); - - dataGridView1.Columns["Column2"].HeaderText = TextResource.GetText("SORT_NAME"); - dataGridView1.Columns["Column4"].HeaderText = TextResource.GetText("O_VID_FMT"); - - doNotAddToQueueToolStripMenuItem.Text = TextResource.GetText("LBL_QUEUE_OPT3"); - manageQueueAndSchedulersToolStripMenuItem.Text = TextResource.GetText("DESC_Q_TITLE"); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.resx b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.resx deleted file mode 100644 index d76adf7..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage2.resx +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - True - - - 17, 17 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.Designer.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.Designer.cs deleted file mode 100644 index 4b69c33..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.Designer.cs +++ /dev/null @@ -1,79 +0,0 @@ - -namespace XDM.WinForm.UI.VideoDownloaderPages -{ - partial class VideoDownloaderPage3 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.button1 = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // progressBar1 - // - this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.progressBar1.Location = new System.Drawing.Point(159, 131); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(180, 20); - this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.progressBar1.TabIndex = 0; - // - // button1 - // - this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.button1.AutoSize = true; - this.button1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.button1.Location = new System.Drawing.Point(418, 327); - this.button1.Name = "button1"; - this.button1.Padding = new System.Windows.Forms.Padding(9, 0, 9, 0); - this.button1.Size = new System.Drawing.Size(68, 23); - this.button1.TabIndex = 1; - this.button1.Text = "Cancel"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // VideoDownloaderPage3 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.Controls.Add(this.button1); - this.Controls.Add(this.progressBar1); - this.Name = "VideoDownloaderPage3"; - this.Padding = new System.Windows.Forms.Padding(9, 9, 9, 9); - this.Size = new System.Drawing.Size(497, 361); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.Button button1; - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.cs deleted file mode 100644 index 4a78a1d..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Drawing; - -using System.Windows.Forms; -using Translations; -using XDM.WinForm.UI.FormHelper; - -namespace XDM.WinForm.UI.VideoDownloaderPages -{ - public partial class VideoDownloaderPage3 : UserControl - { - public EventHandler CancelClicked; - public VideoDownloaderPage3() - { - InitializeComponent(); - if (!AppWinPeer.AppsUseLightTheme) - { - var bg = Color.FromArgb(60, 60, 60); - var fg = Color.White; - DarkModeHelper.StyleFlatButton(button1, bg, fg); - } - button1.Text = TextResource.GetText("ND_CANCEL"); - } - - private void button1_Click(object sender, EventArgs e) - { - CancelClicked?.Invoke(this, EventArgs.Empty); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.resx b/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderPages/VideoDownloaderPage3.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.Designer.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.Designer.cs deleted file mode 100644 index 00dc3fd..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.Designer.cs +++ /dev/null @@ -1,53 +0,0 @@ - -namespace XDM.WinForm.UI -{ - partial class VideoDownloaderWindow - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // Win32VideoDownloaderWindow - // - this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(624, 363); - this.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "Win32VideoDownloaderWindow"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Video Downloader"; - this.ResumeLayout(false); - - } - - #endregion - } -} \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.cs b/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.cs deleted file mode 100644 index 9bc8733..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.cs +++ /dev/null @@ -1,125 +0,0 @@ -using TraceLog; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Windows.Forms; -using XDM.Core.Lib.Common; -using XDM.Core.Lib.Util; -using XDM.WinForm.UI.VideoDownloaderPages; -using YDLWrapper; -using System.Threading; -using XDM.WinForm.UI.FormHelper; -using Translations; - -namespace XDM.WinForm.UI -{ - public partial class VideoDownloaderWindow : Form - { - private VideoDownloaderPage1 page1; - private VideoDownloaderPage2 page2; - private VideoDownloaderPage3 page3; - private YDLProcess ydl; - private IFormColors colors; - - public VideoDownloaderWindow(Font searchFont, IApp app, IAppUI appUi) - { - InitializeComponent(); - page1 = new VideoDownloaderPage1(searchFont, appUi); - page1.Dock = DockStyle.Fill; - page2 = new VideoDownloaderPage2(); - page2.Dock = DockStyle.Fill; - page2.App = app; - page3 = new VideoDownloaderPage3(); - page3.Dock = DockStyle.Fill; - this.Controls.Add(page1); - this.Controls.Add(page2); - this.Controls.Add(page3); - page1.BringToFront(); - - page1.SearchClicked += (a, b) => - { - if (Helpers.IsUriValid(page1.UrlText)) - { - page3.BringToFront(); - ProcessVideo(page1.UrlText, result => UIRunner.RunOnUiThread(this, () => - { - page2.BringToFront(); - page2.SetVideoResultList(result); - })); - } - else - { - MessageBox.Show(TextResource.GetText("MSG_INVALID_URL")); - } - }; - - page3.CancelClicked += (a, b) => - { - try - { - if (ydl != null) - { - ydl.Cancel(); - } - } - catch (Exception e) - { - Log.Debug(e, "Error cancelling ydl"); - } - page1.BringToFront(); - }; - - if (!AppWinPeer.AppsUseLightTheme) - { - colors = new FormColorsDark(); - if (!this.IsHandleCreated) - { - this.CreateHandle(); - } - - DarkModeHelper.UseImmersiveDarkMode(this.Handle, true); - this.BackColor = colors.ToolbarBackColor; - } - - Text = TextResource.GetText("LBL_VIDEO_DOWNLOAD"); - } - - protected override void OnClosing(CancelEventArgs e) - { - base.OnClosing(e); - try - { - if (ydl != null) - { - ydl.Cancel(); - } - } - catch (Exception ex) - { - Log.Debug(ex, "Error cancelling ydl"); - } - } - - private void ProcessVideo(string url, Action> callback) - { - ydl = new YDLProcess - { - Uri = new Uri(url) - }; - new Thread(() => - { - try - { - ydl.Start(); - callback.Invoke(YDLOutputParser.Parse(ydl.JsonOutputFile)); - } - catch (Exception ex) - { - Log.Debug(ex, "Error while running youtube-dl"); - } - callback.Invoke(new()); - }).Start(); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.resx b/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/app/XDM/XDM.WinForm.UI/VideoDownloaderWindow.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/Win32/NativeMethods.cs b/app/XDM/XDM.WinForm.UI/Win32/NativeMethods.cs deleted file mode 100644 index 6a7ff06..0000000 --- a/app/XDM/XDM.WinForm.UI/Win32/NativeMethods.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Windows.Forms; -using System.Linq; -using System.Text; -using System.Runtime.InteropServices; -using TraceLog; - -namespace XDM.WinForm.UI.Win32 -{ - internal static class NativeMethods - { - [DllImport("user32.dll", SetLastError = true)] - internal static extern bool SetForegroundWindow(IntPtr hWnd); - - [DllImport("user32.dll", SetLastError = true)] - internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, - int x, int y, int cx, int cy, uint uFlags); - - internal static void SetWindowTopMost(Form f) - { - SetWindowPos(f.Handle, new IntPtr(-1), 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0040 | 0); - Log.Debug("SetWindowPos: " + Marshal.GetLastWin32Error()); - } - } -} diff --git a/app/XDM/XDM.WinForm.UI/XDM.WinForm.UI.csproj b/app/XDM/XDM.WinForm.UI/XDM.WinForm.UI.csproj deleted file mode 100644 index a9e0709..0000000 --- a/app/XDM/XDM.WinForm.UI/XDM.WinForm.UI.csproj +++ /dev/null @@ -1,108 +0,0 @@ - - - - WinExe - net4.7.2;net5.0-windows;net4.5;net3.5 - true - app.manifest - - - - Link - x86 - 9.0 - enable - false - false - - - - true - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - - - - - - - - - - - - - - - - 5.0.0 - - - - - - 5.0.0 - - - - - App.HiDpi.config - - - - App.LowDpi.config - - - - true - - - \ No newline at end of file diff --git a/app/XDM/XDM.WinForm.UI/gpl-3.0.txt b/app/XDM/XDM.WinForm.UI/gpl-3.0.txt deleted file mode 100644 index 818433e..0000000 --- a/app/XDM/XDM.WinForm.UI/gpl-3.0.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/app/XDM/XDM.WinForm.UI/App.LowDpi.config b/app/XDM/XDM.Wpf.UI/App.config similarity index 87% rename from app/XDM/XDM.WinForm.UI/App.LowDpi.config rename to app/XDM/XDM.Wpf.UI/App.config index 2fab16c..529d47e 100644 --- a/app/XDM/XDM.WinForm.UI/App.LowDpi.config +++ b/app/XDM/XDM.Wpf.UI/App.config @@ -13,4 +13,8 @@ + + + + \ No newline at end of file diff --git a/app/XDM/XDM.Wpf.UI/App.xaml b/app/XDM/XDM.Wpf.UI/App.xaml new file mode 100644 index 0000000..f9231a3 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/App.xaml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + M9 2.003V2h10.998C20.55 2 21 2.455 21 2.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 20.993V8l6-5.997zM5.83 8H9V4.83L5.83 8zM11 4v5a1 1 0 0 1-1 1H5v10h14V4h-8z + + + M3 8l6.003-6h10.995C20.55 2 21 2.455 21 2.992v18.016a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 20.993V8zm7-4.5L4.5 9H10V3.5z + + + M11.5 3v8.5H3V3h8.5zm0 18H3v-8.5h8.5V21zm1-18H21v8.5h-8.5V3zm8.5 9.5V21h-8.5v-8.5H21z + + + M11 5H5v6h6V5zm2 0v6h6V5h-6zm6 8h-6v6h6v-6zm-8 6v-6H5v6h6zM3 3h18v18H3V3z + + + M21 9v11.993A1 1 0 0 1 20.007 22H3.993A.993.993 0 0 1 3 21.008V2.992C3 2.455 3.447 2 3.998 2H14v6a1 1 0 0 0 1 1h6zm0-2h-5V2.003L21 7zM8 7v2h3V7H8zm0 4v2h8v-2H8zm0 4v2h8v-2H8z + + + M21 8v12.993A1 1 0 0 1 20.007 22H3.993A.993.993 0 0 1 3 21.008V2.992C3 2.455 3.449 2 4.002 2h10.995L21 8zm-2 1h-5V4H5v16h14V9zM8 7h3v2H8V7zm0 4h8v2H8v-2zm0 4h8v2H8v-2z + + + M2 3.993A1 1 0 0 1 2.992 3h18.016c.548 0 .992.445.992.993v16.014a1 1 0 0 1-.992.993H2.992A.993.993 0 0 1 2 20.007V3.993zm8.622 4.422a.4.4 0 0 0-.622.332v6.506a.4.4 0 0 0 .622.332l4.879-3.252a.4.4 0 0 0 0-.666l-4.88-3.252z + + + M2 3.993A1 1 0 0 1 2.992 3h18.016c.548 0 .992.445.992.993v16.014a1 1 0 0 1-.992.993H2.992A.993.993 0 0 1 2 20.007V3.993zM4 5v14h16V5H4zm6.622 3.415l4.879 3.252a.4.4 0 0 1 0 .666l-4.88 3.252a.4.4 0 0 1-.621-.332V8.747a.4.4 0 0 1 .622-.332z + + + M16 2l5 5v14.008a.993.993 0 0 1-.993.992H3.993A1 1 0 0 1 3 21.008V2.992C3 2.444 3.445 2 3.993 2H16zm-5 10.05a2.5 2.5 0 1 0 2 2.45V10h3V8h-5v4.05z + + + M16 8v2h-3v4.5a2.5 2.5 0 1 1-2-2.45V8h4V4H5v16h14V8h-3zM3 2.992C3 2.444 3.447 2 3.999 2H16l5 5v13.993A1 1 0 0 1 20.007 22H3.993A1 1 0 0 1 3 21.008V2.992z + + + M10 2v2h2V2h8.007c.548 0 .993.444.993.992v18.016a1 1 0 0 1-.993.992H3.993A.993.993 0 0 1 3 21.008V2.992A1 1 0 0 1 3.993 2H10zm2 2v2h2V4h-2zm-2 2v2h2V6h-2zm2 2v2h2V8h-2zm-2 2v2h2v-2h-2zm2 2v2h-2v3h4v-5h-2z + + + M20 22H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zm-1-2V4H5v16h14zm-5-8v5h-4v-3h2v-2h2zm-2-8h2v2h-2V4zm-2 2h2v2h-2V6zm2 2h2v2h-2V8zm-2 2h2v2h-2v-2z + + + M13 16.172l5.364-5.364 1.414 1.414L12 20l-7.778-7.778 1.414-1.414L11 16.172V4h2v12.172z + + + M10 15.172l9.192-9.193 1.415 1.414L10 18l-6.364-6.364 1.414-1.414z + + + M13.06 8.11l1.415 1.415a7 7 0 0 1 0 9.9l-.354.353a7 7 0 0 1-9.9-9.9l1.415 1.415a5 5 0 1 0 7.071 7.071l.354-.354a5 5 0 0 0 0-7.07l-1.415-1.415 1.415-1.414zm6.718 6.011l-1.414-1.414a5 5 0 1 0-7.071-7.071l-.354.354a5 5 0 0 0 0 7.07l1.415 1.415-1.415 1.414-1.414-1.414a7 7 0 0 1 0-9.9l.354-.353a7 7 0 0 1 9.9 9.9z + + + M17 6h5v2h-2v13a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V8H2V6h5V3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v3zm1 2H6v12h12V8zm-9 3h2v6H9v-6zm4 0h2v6h-2v-6zM9 4v2h6V4H9z + + + M10 3v2H5v14h14v-5h2v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h6zm7.586 2H13V3h8v8h-2V6.414l-7 7L10.586 12l7-7z + + + M22 13h-2V7h-8.414l-2-2H4v14h9v2H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7.414l2 2H21a1 1 0 0 1 1 1v7zm-4 4v-3.5l5 4.5-5 4.5V19h-3v-2h3z + + + M6 5h2v14H6V5zm10 0h2v14h-2V5z + + + M16.394 12L10 7.737v8.526L16.394 12zm2.982.416L8.777 19.482A.5.5 0 0 1 8 19.066V4.934a.5.5 0 0 1 .777-.416l10.599 7.066a.5.5 0 0 1 0 .832z + + + M18.031 16.617l4.283 4.282-1.415 1.415-4.282-4.283A8.96 8.96 0 0 1 11 20c-4.968 0-9-4.032-9-9s4.032-9 9-9 9 4.032 9 9a8.96 8.96 0 0 1-1.969 5.617zm-2.006-.742A6.977 6.977 0 0 0 18 11c0-3.868-3.133-7-7-7-3.868 0-7 3.132-7 7 0 3.867 3.132 7 7 7a6.977 6.977 0 0 0 4.875-1.975l.15-.15z + + + M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z + + + M2.243 6.854L11.49 1.31a1 1 0 0 1 1.029 0l9.238 5.545a.5.5 0 0 1 .243.429V20a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V7.283a.5.5 0 0 1 .243-.429zM4 8.133V19h16V8.132l-7.996-4.8L4 8.132zm8.06 5.565l5.296-4.463 1.288 1.53-6.57 5.537-6.71-5.53 1.272-1.544 5.424 4.47z + + + M8 5h8a7 7 0 0 1 0 14H8A7 7 0 0 1 8 5zm8 10a3 3 0 1 0 0-6 3 3 0 0 0 0 6z + + + M8 7a5 5 0 1 0 0 10h8a5 5 0 0 0 0-10H8zm0-2h8a7 7 0 0 1 0 14H8A7 7 0 0 1 8 5zm0 10a3 3 0 1 1 0-6 3 3 0 0 1 0 6z + + + M2 18h7v2H2v-2zm0-7h9v2H2v-2zm0-7h20v2H2V4zm18.674 9.025l1.156-.391 1 1.732-.916.805a4.017 4.017 0 0 1 0 1.658l.916.805-1 1.732-1.156-.391c-.41.37-.898.655-1.435.83L19 21h-2l-.24-1.196a3.996 3.996 0 0 1-1.434-.83l-1.156.392-1-1.732.916-.805a4.017 4.017 0 0 1 0-1.658l-.916-.805 1-1.732 1.156.391c.41-.37.898-.655 1.435-.83L17 11h2l.24 1.196c.536.174 1.024.46 1.434.83zM18 17a1 1 0 1 0 0-2 1 1 0 0 0 0 2z + + + M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16zm-1-5h2v2h-2v-2zm2-1.645V14h-2v-1.5a1 1 0 0 1 1-1 1.5 1.5 0 1 0-1.471-1.794l-1.962-.393A3.501 3.501 0 1 1 13 13.355z + + + M8 5h8a7 7 0 0 1 0 14H8A7 7 0 0 1 8 5zm8 10a3 3 0 1 0 0-6 3 3 0 0 0 0 6z + + + M13 12h3l-4 4-4-4h3V8h2v4zm2-8H5v16h14V8h-4V4zM3 2.992C3 2.444 3.447 2 3.999 2H16l5 5v13.993A1 1 0 0 1 20.007 22H3.993A1 1 0 0 1 3 21.008V2.992z + + + M16 13l6.964 4.062-2.973.85 2.125 3.681-1.732 1-2.125-3.68-2.223 2.15L16 13zm-2-7h2v2h5a1 1 0 0 1 1 1v4h-2v-3H10v10h4v2H9a1 1 0 0 1-1-1v-5H6v-2h2V9a1 1 0 0 1 1-1h5V6zM4 14v2H2v-2h2zm0-4v2H2v-2h2zm0-4v2H2V6h2zm0-4v2H2V2h2zm4 0v2H6V2h2zm4 0v2h-2V2h2zm4 0v2h-2V2h2z + + + M9.827 21.763C5.35 20.771 2 16.777 2 12c0-1.822.487-3.53 1.339-5.002l4.283 7.419a4.999 4.999 0 0 0 4.976 2.548l-2.77 4.798zM12 22l4.287-7.425A4.977 4.977 0 0 0 17 12a4.978 4.978 0 0 0-1-3h5.542c.298.947.458 1.955.458 3 0 5.523-4.477 10-10 10zm2.572-8.455a2.999 2.999 0 0 1-5.17-.045l-.029-.05a3 3 0 1 1 5.225.05l-.026.045zm-9.94-8.306A9.974 9.974 0 0 1 12 2a9.996 9.996 0 0 1 8.662 5H12a5.001 5.001 0 0 0-4.599 3.035L4.632 5.239z + + + M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12c0-1.464.314-2.854.88-4.106.466-.939 1.233-1.874 1.85-2.194-.653 1.283-.973 2.54-1.04 3.383.454-1.5 1.315-2.757 2.52-3.644 2.066-1.519 4.848-1.587 5.956-.62-2.056.707-4.296 3.548-3.803 6.876.08.55.245 1.084.489 1.582-.384-1.01-.418-2.433.202-3.358.692-1.03 1.678-1.248 2.206-1.136-.208-.044-.668.836-.736.991-.173.394-.259.82-.251 1.25a3.395 3.395 0 0 0 1.03 2.38c1.922 1.871 5.023 1.135 6.412-1.002.953-1.471 1.069-3.968-.155-5.952a6.915 6.915 0 0 0-1.084-1.32c-1.85-1.766-4.48-2.57-6.982-2.205-1.106.177-2.047.496-2.824.956C7.755 2.798 9.91 2 12 2z + + + M20.644 8.586c-.17-.711-.441-1.448-.774-2.021-.771-1.329-1.464-2.237-3.177-3.32C14.98 2.162 13.076 2 12.17 2c-2.415 0-4.211.86-5.525 1.887C3.344 6.47 3 11 3 11s1.221-2.045 3.54-3.526C7.943 6.579 9.941 6 11.568 6 15.885 6 16 10 16 10H9c0-2 1-3 1-3s-5 2-5 7.044c0 .487-.003 1.372.248 2.283.232.843.7 1.705 1.132 2.353 1.221 1.832 3.045 2.614 3.916 2.904.996.332 2.029.416 3.01.416 2.72 0 4.877-.886 5.694-1.275v-4.172c-.758.454-2.679 1.447-5 1.447-5 0-5-4-5-4h12v-2.49s-.039-1.593-.356-2.924z + + + M8.71 6.365c-1.108 1.305-1.823 3.236-1.873 5.4v.47c.051 2.165.766 4.093 1.872 5.4 1.434 1.862 3.566 3.044 5.95 3.044a7.208 7.208 0 0 0 4.005-1.226 9.94 9.94 0 0 1-7.139 2.535A9.998 9.998 0 0 1 2 12C2 6.476 6.478 2 12 2h.037a9.97 9.97 0 0 1 6.628 2.546 7.239 7.239 0 0 0-4.008-1.226c-2.382 0-4.514 1.183-5.95 3.045h.002zM22 12a9.969 9.969 0 0 1-3.335 7.454c-2.565 1.25-4.955.376-5.747-.17 2.52-.554 4.423-3.6 4.423-7.284 0-3.685-1.903-6.73-4.423-7.283.791-.545 3.182-1.42 5.747-.171A9.967 9.967 0 0 1 22 12z + + + M7 6V3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1h-3v3c0 .552-.45 1-1.007 1H4.007A1.001 1.001 0 0 1 3 21l.003-14c0-.552.45-1 1.007-1H7zM5.003 8L5 20h10V8H5.003zM9 6h8v10h2V4H9v2z + + + M2 8.994A5.99 5.99 0 0 1 8 3h8c3.313 0 6 2.695 6 5.994V21H8c-3.313 0-6-2.695-6-5.994V8.994zM20 19V8.994A4.004 4.004 0 0 0 16 5H8a3.99 3.99 0 0 0-4 3.994v6.012A4.004 4.004 0 0 0 8 19h12zm-6-8h2v2h-2v-2zm-6 0h2v2H8v-2z + + + M18 3v2h-1v6l2 3v2h-6v7h-2v-7H5v-2l2-3V5H6V3h12zM9 5v6.606L7.404 14h9.192L15 11.606V5H9z + + + M18 3v2h-1v6l2 3v2h-6v7h-2v-7H5v-2l2-3V5H6V3z + + + M12.414 5H21a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7.414l2 2zM4 5v14h16V7h-8.414l-2-2H4zm9 8h3l-4 4-4-4h3V9h2v4z + + + M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/XDM/XDM.Wpf.UI/App.xaml.cs b/app/XDM/XDM.Wpf.UI/App.xaml.cs new file mode 100644 index 0000000..3d88394 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/App.xaml.cs @@ -0,0 +1,137 @@ +using System; +using System.Net; +using System.Linq; +using System.Windows; +using TraceLog; +using XDM.Core.Lib.Common; +using XDM.Core.Lib.Util; +using System.Windows.Interop; +using XDM.Core.Lib.DataAccess; +using System.IO; + +namespace XDM.Wpf.UI +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching"; + private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto"; + + public static Skin Skin = ShouldSelectDarkTheme() ? Skin.Dark : Skin.Light; + private XDMApp.XDMApp app; + private MainWindow win; + + public App() + { + ServicePointManager.ServerCertificateValidationCallback += (a, b, c, d) => true; + ServicePointManager.DefaultConnectionLimit = 100; + +#if NET45 + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; +#elif !NET35 + ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault; +#endif +#if NET46_OR_GREATER + + AppContext.SetSwitch(DisableCachingName, true); + AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true); +#endif + } + + private void Application_Startup(object sender, StartupEventArgs e) + { + //Only if user has chosen to generate log + var debugMode = Environment.GetEnvironmentVariable("XDM_DEBUG_MODE"); + if (!string.IsNullOrEmpty(debugMode) && debugMode == "1") + { + var logFile = System.IO.Path.Combine(Config.DataDir, "log.txt"); + Log.InitFileBasedTrace(System.IO.Path.Combine(Config.DataDir, "log.txt")); + } + Log.Debug($"Application_Startup::args->: {string.Join(" ", Environment.GetCommandLineArgs())}"); + + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + + AppDB.Instance.Init(Path.Combine(Config.DataDir, "downloads.db")); + + app = new XDMApp.XDMApp(); + win = new MainWindow(); + + var args = Environment.GetCommandLineArgs(); + var commandOptions = ArgsProcessor.ParseArgs(args, 1); + app.Args = args.Skip(1).ToArray(); + + AppTrayIcon.AttachToSystemTray(); + AppTrayIcon.TrayClick += (_, _) => + { + win.Show(); + if (win.WindowState == WindowState.Minimized) + { + win.WindowState = WindowState.Normal; + } + win.Activate(); + }; + app.AppUI = new XDMApp.AppWin(win, app); + app.AppUI.WindowLoaded += (_, _) => app.StartClipboardMonitor(); + app.StartScheduler(); + app.StartNativeMessagingHost(); + if (!commandOptions.ContainsKey("-m")) + { + win.Show(); + if (commandOptions.ContainsKey("-i")) + { + Config.Instance.RunOnLogon = true; + Config.SaveConfig(); + win.ShowBrowserMonitoringDialog(app); + } + } + } + + private void Application_Exit(object sender, ExitEventArgs e) + { + AppTrayIcon.DetachFromSystemTray(); + } + + private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + Log.Debug(string.Format("Unhandled exception caught {0} and will {1}", + e.ExceptionObject, + e.IsTerminating ? "Terminating" : "Continue")); + } + + private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) + { + Log.Debug(string.Format("Unhandled exception caught {0} and application would have been terminated", + e.Exception)); + e.Handled = true; + //AppTrayIcon.DetachFromSystemTray(); + //Environment.Exit(1); + } + + private static bool ShouldSelectDarkTheme() + { + if ((Environment.GetCommandLineArgs()?.Contains("-i") ?? false) + && Environment.OSVersion.Version.Major >= 10 + && DarkModeHelper.IsWin10DarkThemeActive()) + { + Config.Instance.AllowSystemDarkTheme = true; + Config.SaveConfig(); + return true; + } + else + { + return Config.Instance.AllowSystemDarkTheme ? true : false; + } + } + + private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e) + { + Log.Debug("Application_SessionEnding: Session ending message received..."); + //e.Cancel = false; + Environment.Exit(0); + } + } + + public enum Skin { Light, Dark } +} diff --git a/app/XDM/XDM.Wpf.UI/AppTrayIcon.cs b/app/XDM/XDM.Wpf.UI/AppTrayIcon.cs new file mode 100644 index 0000000..dc98af7 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/AppTrayIcon.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Text; +using System.Windows.Forms; +using Translations; + +namespace XDM.Wpf.UI +{ + internal static class AppTrayIcon + { + private static NotifyIcon? notifyIcon; + + public static event EventHandler? TrayClick; + + public static void AttachToSystemTray() + { + + var ctx = new ContextMenu(); + + var menuExit = new MenuItem + { + Text = TextResource.GetText("MENU_EXIT") + }; + menuExit.Click += (_, _) => Environment.Exit(0); + + var menuRestore = new MenuItem + { + Text = TextResource.GetText("MSG_RESTORE") + }; + menuRestore.Click += (sender, e) => TrayClick?.Invoke(sender, e); + + ctx.MenuItems.Add(menuRestore); + ctx.MenuItems.Add(menuExit); + + notifyIcon = new NotifyIcon + { + Text = "XDM", + Visible = true, + Icon = new Icon(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xdm-logo.ico")), + ContextMenu = ctx + }; + notifyIcon.MouseClick += NotifyIcon_MouseClick; + + } + + private static void NotifyIcon_MouseClick(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + TrayClick?.Invoke(sender, e); + } + } + + public static void DetachFromSystemTray() + { + notifyIcon?.Dispose(); + } + } +} diff --git a/app/XDM/XDM.Wpf.UI/AssemblyInfo.cs b/app/XDM/XDM.Wpf.UI/AssemblyInfo.cs new file mode 100644 index 0000000..74087a1 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/app/XDM/XDM.Wpf.UI/Common/Helpers/DownloadLaterMenuHelper.cs b/app/XDM/XDM.Wpf.UI/Common/Helpers/DownloadLaterMenuHelper.cs new file mode 100644 index 0000000..72ac877 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Common/Helpers/DownloadLaterMenuHelper.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using XDM.Core.Lib.UI; +using XDMApp; + +namespace XDM.Wpf.UI.Common.Helpers +{ + internal class DownloadLaterMenuHelper + { + internal static void PopulateMenuAndAttachEvents( + EventHandler? DownloadLaterClicked, + Button button, + FrameworkElement window) + { + var nctx = (ContextMenu)window.FindResource("DownloadLaterContextMenu"); + nctx.Items.Clear(); + foreach (var queue in QueueManager.Queues) + { + var menuItem = new MenuItem + { + Tag = queue.ID, + Header = queue.Name + }; + menuItem.Click += (s, e) => + { + MenuItem m = (MenuItem)e.OriginalSource; + var args = new DownloadLaterEventArgs((string)m.Tag); + DownloadLaterClicked?.Invoke(window, args); + }; + nctx.Items.Add(menuItem); + } + nctx.Items.Add(window.FindResource("DontAddToQueueMenuItem")); + nctx.Items.Add(window.FindResource("QueueAndSchedulerMenuItem")); + + nctx.PlacementTarget = button; + nctx.Placement = PlacementMode.Bottom; + nctx.IsOpen = true; + } + } +} diff --git a/app/XDM/XDM.Wpf.UI/Common/Helpers/SelectionHelper.cs b/app/XDM/XDM.Wpf.UI/Common/Helpers/SelectionHelper.cs new file mode 100644 index 0000000..68a5004 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Common/Helpers/SelectionHelper.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Controls; + +namespace XDM.Wpf.UI.Common.Helpers +{ + internal static class SelectionHelper + { + public static int[] GetSelectedIndices(this ListView lv) + { + if (lv.SelectedItems.Count < 1) return new int[0]; + var list = new List(lv.SelectedItems.Count); + var selectedItems = lv.SelectedItems; + var allItems = lv.Items; + for (int i = 0; i < selectedItems.Count; i++) + { + var index = allItems.IndexOf(selectedItems[i]); + list.Add(index); + } + list.Sort(); + return list.ToArray(); + } + } +} diff --git a/app/XDM/XDM.Wpf.UI/Common/IDialog.cs b/app/XDM/XDM.Wpf.UI/Common/IDialog.cs new file mode 100644 index 0000000..26ef947 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Common/IDialog.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace XDM.Wpf.UI.Common +{ + interface IDialog + { + public bool Result { get; set; } + } +} diff --git a/app/XDM/XDM.Wpf.UI/Common/ValueConverters/FileSizeValueConverter.cs b/app/XDM/XDM.Wpf.UI/Common/ValueConverters/FileSizeValueConverter.cs new file mode 100644 index 0000000..944f8c9 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Common/ValueConverters/FileSizeValueConverter.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Windows.Data; +using XDM.Core.Lib.Util; + +namespace XDM.Wpf.UI +{ + [ValueConversion(typeof(long), typeof(string))] + internal class FileSizeValueConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return Helpers.FormatSize((long)value); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/app/XDM/XDM.Wpf.UI/DarkModeHelper.cs b/app/XDM/XDM.Wpf.UI/DarkModeHelper.cs new file mode 100644 index 0000000..7e702f6 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/DarkModeHelper.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Runtime.InteropServices; +using Microsoft.Win32; + +namespace XDM.Wpf.UI +{ + internal class DarkModeHelper + { + [DllImport("dwmapi.dll")] + private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); + + private const int DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19; + private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; + + public static bool UseImmersiveDarkMode(IntPtr handle, bool enabled) + { + if (IsWindows10OrGreater(17763)) + { + var attribute = DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1; + if (IsWindows10OrGreater(18985)) + { + attribute = DWMWA_USE_IMMERSIVE_DARK_MODE; + } + + int useImmersiveDarkMode = enabled ? 1 : 0; + var ret = DwmSetWindowAttribute(handle, (int)attribute, ref useImmersiveDarkMode, sizeof(int)); + return ret == 0; + } + + return false; + } + + private static bool IsWindows10OrGreater(int build = -1) + { + return Environment.OSVersion.Version.Major >= 10 && Environment.OSVersion.Version.Build >= build; + } + + public static bool IsWin10DarkThemeActive() + { + //return false; + try + { + using var rk = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize"); + if (rk == null) return false; + var appsUseLightTheme = (Int32)rk.GetValue("AppsUseLightTheme"); + return appsUseLightTheme == 0; + } + catch { } + return false; + } + + } +} diff --git a/app/XDM/XDM.Wpf.UI/Dialogs/About/AboutWindow.xaml b/app/XDM/XDM.Wpf.UI/Dialogs/About/AboutWindow.xaml new file mode 100644 index 0000000..1f3ead0 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Dialogs/About/AboutWindow.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + diff --git a/app/XDM/XDM.Wpf.UI/Dialogs/About/AboutWindow.xaml.cs b/app/XDM/XDM.Wpf.UI/Dialogs/About/AboutWindow.xaml.cs new file mode 100644 index 0000000..d66c895 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Dialogs/About/AboutWindow.xaml.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Interop; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +using XDM.Core.Lib.Util; +using XDM.Wpf.UI.Common; +using XDM.Wpf.UI.Win32; + +namespace XDM.Wpf.UI.Dialogs.About +{ + /// + /// Interaction logic for AboutWindow.xaml + /// + public partial class AboutWindow : Window, IDialog + { + public AboutWindow() + { + InitializeComponent(); + this.TxtAppVersion.Text = "Xtreme Download Manager 8.0.1 BETA"; + this.TxtCopyright.Text = "© 2013 Subhra Das Gupta"; + this.TxtWebsite.Text = "www.xtremedownloadmanager.com"; + } + + public bool Result { get; set; } + + protected override void OnSourceInitialized(EventArgs e) + { + base.OnSourceInitialized(e); + NativeMethods.DisableMinMaxButton(this); + +#if NET45_OR_GREATER + if (XDM.Wpf.UI.App.Skin == Skin.Dark) + { + var helper = new WindowInteropHelper(this); + helper.EnsureHandle(); + DarkModeHelper.UseImmersiveDarkMode(helper.Handle, true); + } +#endif + } + + private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e) + { + Helpers.OpenBrowser("https://xtremedownloadmanager.com/"); + } + } +} diff --git a/app/XDM/XDM.Wpf.UI/Dialogs/AdvancedDownloadOption/AdvancedDownloadOption.xaml b/app/XDM/XDM.Wpf.UI/Dialogs/AdvancedDownloadOption/AdvancedDownloadOption.xaml new file mode 100644 index 0000000..ed1b568 --- /dev/null +++ b/app/XDM/XDM.Wpf.UI/Dialogs/AdvancedDownloadOption/AdvancedDownloadOption.xaml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +