From 559f855923a9132d9ec5cd3925a12bf70083712f Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 16 Mar 2023 16:59:59 +0100 Subject: [PATCH 01/79] Update OMI lib submodule commit ref --- Vendor/OMI-Lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 6f00721b..c720756d 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 6f00721bdeb98db80fc96d24074e69cbf9b4de7f +Subproject commit c720756d6a5ba6076ddc040fcea13874a38b2bdc From 7999900152bc0e763b9bd79c18c9daf9b8113cf3 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 17 Mar 2023 19:53:10 +0100 Subject: [PATCH 02/79] Refactored AnimationEditor --- .../Extentions/EnumerableExtentions.cs | 17 + .../Classes/Extentions/ImageExtentions.cs | 75 +++- PCK-Studio/Forms/Editor/Animation.cs | 150 ++++++++ PCK-Studio/Forms/Editor/AnimationEditor.cs | 325 ++++-------------- PCK-Studio/Forms/Editor/AnimationPlayer.cs | 76 ++++ PCK-Studio/PckStudio.csproj | 3 + 6 files changed, 372 insertions(+), 274 deletions(-) create mode 100644 PCK-Studio/Classes/Extentions/EnumerableExtentions.cs create mode 100644 PCK-Studio/Forms/Editor/Animation.cs create mode 100644 PCK-Studio/Forms/Editor/AnimationPlayer.cs diff --git a/PCK-Studio/Classes/Extentions/EnumerableExtentions.cs b/PCK-Studio/Classes/Extentions/EnumerableExtentions.cs new file mode 100644 index 00000000..cda71bba --- /dev/null +++ b/PCK-Studio/Classes/Extentions/EnumerableExtentions.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; + +namespace PckStudio.Classes.Extentions +{ + internal static class EnumerableExtentions + { + public static IEnumerable<(int index, T type)>enumerate(this IEnumerable array) + { + int i = 0; + foreach (var item in array) + { + yield return (i++, item); + } + yield break; + } + } +} diff --git a/PCK-Studio/Classes/Extentions/ImageExtentions.cs b/PCK-Studio/Classes/Extentions/ImageExtentions.cs index d866b661..f2e3dd39 100644 --- a/PCK-Studio/Classes/Extentions/ImageExtentions.cs +++ b/PCK-Studio/Classes/Extentions/ImageExtentions.cs @@ -2,17 +2,48 @@ using System.Drawing.Drawing2D; using System.Drawing; using System.Diagnostics; +using System; namespace PckStudio.Classes.Extentions { internal static class ImageExtentions { + public enum ImageLayoutDirection { Horizontal, Vertical } + private struct ImageLayoutInfo + { + /// + /// Size of sub section of the image + /// + public Size SectionSize; + public Point SectionPoint; + + public ImageLayoutInfo(int width, int height, int index, ImageLayoutDirection layoutDirection) + { + bool horizontal = layoutDirection == ImageLayoutDirection.Horizontal; + SectionSize = horizontal ? new Size(width, width) : new Size(height, height); + SectionPoint = horizontal ? new Point(0, index * width) : new Point(index * height, 0); + } + } + + private static Image GetTileImage(Image source, Rectangle area, Size size, GraphicsUnit unit = GraphicsUnit.Pixel) + { + Image tileImage = new Bitmap(size.Width, size.Height); + using (Graphics gfx = Graphics.FromImage(tileImage)) + { + gfx.SmoothingMode = SmoothingMode.None; + gfx.InterpolationMode = InterpolationMode.NearestNeighbor; + gfx.PixelOffsetMode = PixelOffsetMode.HighQuality; + gfx.DrawImage(source, new Rectangle(Point.Empty, size), area, unit); + } + return tileImage; + } + public static IEnumerable CreateImageList(this Image source, Size size) { int img_row_count = source.Width / size.Width; @@ -28,7 +59,6 @@ namespace PckStudio.Classes.Extentions yield break; } - public static IEnumerable CreateImageList(this Image source, int scalar) { return CreateImageList(source, new Size(scalar, scalar)); @@ -38,26 +68,43 @@ namespace PckStudio.Classes.Extentions { for (int i = 0; i < source.Height / source.Width; i++) { - (Size size, Point point) locationInfo = layoutDirection == ImageLayoutDirection.Horizontal - ? (new Size(source.Width, source.Width), new Point(0, i * source.Width)) - : (new Size(source.Height, source.Height), new Point(i * source.Height, 0)); - Rectangle tileArea = new Rectangle(locationInfo.point, locationInfo.size); - yield return GetTileImage(source, tileArea, locationInfo.size); + ImageLayoutInfo locationInfo = new ImageLayoutInfo(source.Width, source.Height, i, layoutDirection); + Rectangle tileArea = new Rectangle(locationInfo.SectionPoint, locationInfo.SectionSize); + yield return GetTileImage(source, tileArea, locationInfo.SectionSize); } yield break; } - private static Image GetTileImage(Image source, Rectangle area, Size size, GraphicsUnit unit = GraphicsUnit.Pixel) + public static Image ImageFromImageArray(Image[] sources, ImageLayoutDirection layoutDirection) { - Image tileImage = new Bitmap(size.Width, size.Height); - using (Graphics gfx = Graphics.FromImage(tileImage)) + Size imageSize = CalculateImageSize(sources, layoutDirection); + var result = new Bitmap(imageSize.Width, imageSize.Height); + + using (var graphic = Graphics.FromImage(result)) { - gfx.SmoothingMode = SmoothingMode.None; - gfx.InterpolationMode = InterpolationMode.NearestNeighbor; - gfx.PixelOffsetMode = PixelOffsetMode.HighQuality; - gfx.DrawImage(source, new Rectangle(Point.Empty, size), area, unit); + foreach (var (i, texture) in sources.enumerate()) + { + var info = new ImageLayoutInfo(imageSize.Width, imageSize.Height, i, layoutDirection); + graphic.DrawImage(texture, info.SectionPoint); + }; } - return tileImage; + return result; + } + + private static Size CalculateImageSize(Image[] sources, ImageLayoutDirection layoutDirection) + { + var horizontal = layoutDirection == ImageLayoutDirection.Horizontal; + + // TODO: Validate all source images to be the same size. + int width = sources[0].Width; + int heigh = sources[0].Height; + + if (horizontal) + width *= sources.Length; + else + heigh *= sources.Length; + + return new Size(width, heigh); } } } diff --git a/PCK-Studio/Forms/Editor/Animation.cs b/PCK-Studio/Forms/Editor/Animation.cs new file mode 100644 index 00000000..7ef4b203 --- /dev/null +++ b/PCK-Studio/Forms/Editor/Animation.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using PckStudio.Classes.Extentions; +using System.Text; + + +// TODO: change namespace +namespace PckStudio.Forms.Editor +{ + sealed class Animation + { + public const int MinimumFrameTime = 1; + + public int FrameCount => frames.Count; + + public int FrameTextureCount => frameTextures.Count; + + public Frame this[int frameIndex] => frames[frameIndex]; + + // not implemented rn... + public bool Interpolate { get; set; } = false; + + private readonly List frameTextures; + + private readonly List frames = new List(); + + + public Animation(IEnumerable image) + { + frameTextures = new List(image); + } + + public Animation(IEnumerable frameTextures, string ANIM) : this(frameTextures) + { + ParseAnim(ANIM); + } + + public struct Frame + { + public readonly Image Texture; + public int Ticks; + + public static implicit operator Image(Frame f) => f.Texture; + + public Frame(Image texture) : this(texture, MinimumFrameTime) + { } + + public Frame(Image texture, int frameTime) + { + Texture = texture; + Ticks = frameTime; + } + } + + public void ParseAnim(string ANIM) + { + _ = ANIM ?? throw new ArgumentNullException(nameof(ANIM)); + ANIM = (Interpolate = ANIM.StartsWith("#")) ? ANIM.Substring(1) : ANIM; + string[] animData = ANIM.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + int lastFrameTime = MinimumFrameTime; + if (animData.Length <= 0) + { + for (int i = 0; i < FrameTextureCount; i++) + { + AddFrame(i, MinimumFrameTime); + } + } + else + { + foreach (string frameInfo in animData) + { + string[] frameData = frameInfo.Split('*'); + //if (frameData.Length < 2) + // continue; // shouldn't happen + int currentFrameIndex = int.TryParse(frameData[0], out currentFrameIndex) ? currentFrameIndex : 0; + + // Some textures like the Halloween 2015's Lava texture don't have a + // frame time parameter for certain frames. + // This will detect that and place the last frame time in its place. + // This is accurate to console edition behavior. + // - MattNL + int currentFrameTime = string.IsNullOrEmpty(frameData[1]) ? lastFrameTime : int.Parse(frameData[1]); + AddFrame(currentFrameIndex, currentFrameTime); + lastFrameTime = currentFrameTime; + } + } + } + public Frame AddFrame(int frameTextureIndex) => AddFrame(frameTextureIndex, MinimumFrameTime); + public Frame AddFrame(int frameTextureIndex, int frameTime) + { + if (frameTextureIndex < 0 || frameTextureIndex >= frameTextures.Count) + throw new ArgumentOutOfRangeException(nameof(frameTextureIndex)); + Frame f = new Frame(frameTextures[frameTextureIndex], frameTime); + frames.Add(f); + return f; + } + + public bool RemoveFrame(int frameIndex) + { + frames.RemoveAt(frameIndex); + return true; + } + + public Frame GetFrame(int index) => frames[index]; + + public List GetFrames() + { + return frames; + } + + public List GetFrameTextures() + { + return frameTextures; + } + + public int GetTextureIndex(Image frameTexture) + { + _ = frameTexture ?? throw new ArgumentNullException(nameof(frameTexture)); + return frameTextures.IndexOf(frameTexture); + } + + public void SetFrame(Frame frame, int frameTextureIndex, int frameTime = MinimumFrameTime) + => SetFrame(frames.IndexOf(frame), frameTextureIndex, frameTime); + public void SetFrame(int frameIndex, int frameTextureIndex, int frameTime = MinimumFrameTime) + { + frames[frameIndex] = new Frame(frameTextures[frameTextureIndex], frameTime); + } + + public string BuildAnim() + { + StringBuilder stringBuilder = new StringBuilder(Interpolate ? "#" : string.Empty); + foreach (var frame in frames) + stringBuilder.Append($"{GetTextureIndex(frame)}*{frame.Ticks},"); + return stringBuilder.ToString(0, stringBuilder.Length - 1); + } + + public Image BuildTexture(bool isClockOrCompass, List linearImages = default!) + { + int width = frameTextures[0].Width; + int height = frameTextures[0].Height; + if (width != height) + throw new Exception("Invalid size"); + + var textures = isClockOrCompass ? linearImages : frameTextures; + + return ImageExtentions.ImageFromImageArray(textures.ToArray(), ImageExtentions.ImageLayoutDirection.Vertical); + } + } +} diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 9e22f9a1..a10c232e 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -2,26 +2,21 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; -using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; -using System.Threading; -using System.Threading.Tasks; using System.Windows.Forms; using PckStudio.Classes.FileTypes; using PckStudio.Forms.Additional_Popups.Animation; using PckStudio.Forms.Utilities; using PckStudio.Classes.Extentions; -using System.Runtime.CompilerServices; -using System.Diagnostics; using OMI.Formats.Pck; namespace PckStudio.Forms.Editor { - public partial class AnimationEditor : MetroForm + public partial class AnimationEditor : MetroForm { PckFile.FileData animationFile; Animation currentAnimation; @@ -32,218 +27,12 @@ namespace PckStudio.Forms.Editor public string TileName = string.Empty; - sealed class Animation - { - public const int MinimumFrameTime = 1; + private bool IsEditingSpecial => IsSpecialTile(TileName); - private readonly List frameTextures; - - private readonly List frames = new List(); - - public Frame this[int frameIndex] => frames[frameIndex]; - - // not implemented rn... - public bool Interpolate { get; set; } = false; - - public Animation(Image image) - { - frameTextures = new List(image.CreateImageList(ImageExtentions.ImageLayoutDirection.Horizontal)); - } - - public Animation(Image image, string ANIM) : this(image) - { - ParseAnim(ANIM); - } - - public struct Frame - { - public readonly Image Texture; - public int Ticks; - - public static implicit operator Image(Frame f) => f.Texture; - - public Frame(Image texture) : this(texture, MinimumFrameTime) - {} - - public Frame(Image texture, int frameTime) - { - Texture = texture; - Ticks = frameTime; - } - } - - public void ParseAnim(string ANIM) - { - _ = ANIM ?? throw new ArgumentNullException(nameof(ANIM)); - ANIM = (Interpolate = ANIM.StartsWith("#")) ? ANIM.Substring(1) : ANIM; - string[] animData = ANIM.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - int lastFrameTime = MinimumFrameTime; - if (animData.Length <= 0) - { - for(int i = 0; i < FrameTextureCount; i++) - { - AddFrame(i, 1); - } - } - else - { - foreach (string frameInfo in animData) - { - string[] frameData = frameInfo.Split('*'); - //if (frameData.Length < 2) - // continue; // shouldn't happen - int currentFrameIndex = int.TryParse(frameData[0], out currentFrameIndex) ? currentFrameIndex : 0; - - // Some textures like the Halloween 2015's Lava texture don't have a - // frame time parameter for certain frames. - // This will detect that and place the last frame time in its place. - // This is accurate to console edition behavior. - // - MattNL - int currentFrameTime = string.IsNullOrEmpty(frameData[1]) ? lastFrameTime : int.Parse(frameData[1]); - AddFrame(currentFrameIndex, currentFrameTime); - lastFrameTime = currentFrameTime; - } - } - } - public Frame AddFrame(int frameTextureIndex) => AddFrame(frameTextureIndex, MinimumFrameTime); - public Frame AddFrame(int frameTextureIndex, int frameTime) - { - if (frameTextureIndex < 0 || frameTextureIndex >= frameTextures.Count) - throw new ArgumentOutOfRangeException(nameof(frameTextureIndex)); - Frame f = new Frame(frameTextures[frameTextureIndex], frameTime); - frames.Add(f); - return f; - } - - public bool RemoveFrame(int frameIndex) - { - frames.RemoveAt(frameIndex); - return true; - } - - public Frame GetFrame(int index) => frames[index]; - - public List GetFrames() - { - return frames; - } - - public List GetFrameTextures() - { - return frameTextures; - } - - public int GetFrameIndex(Image frameTexture) - { - _ = frameTexture ?? throw new ArgumentNullException(nameof(frameTexture)); - return frameTextures.IndexOf(frameTexture); - } - - public int FrameCount => frames.Count; - public int FrameTextureCount => frameTextures.Count; - - public void SetFrame(Frame frame, int frameTextureIndex, int frameTime = MinimumFrameTime) - => SetFrame(frames.IndexOf(frame), frameTextureIndex, frameTime); - public void SetFrame(int frameIndex, int frameTextureIndex, int frameTime = MinimumFrameTime) - { - frames[frameIndex] = new Frame(frameTextures[frameTextureIndex], frameTime); - } - - public string BuildAnim() - { - string animationData = Interpolate ? "#" : string.Empty; - frames.ForEach(frame => animationData += $"{GetFrameIndex(frame)}*{frame.Ticks},"); - return animationData.TrimEnd(','); - } - - public Image BuildTexture(AnimationEditor ae) - { - int width = frameTextures[0].Width; - int height = frameTextures[0].Height; - if (width != height) throw new Exception("Invalid size"); - - bool isClockOrCompass = ae.TileName == "clock" || ae.TileName == "compass"; - - List linearImages = new List(); - foreach (TreeNode n in ae.frameTreeView.Nodes) linearImages.Add(frameTextures[n.ImageIndex]); - - var img = new Bitmap(width, height * (isClockOrCompass ? linearImages.Count : FrameTextureCount)); - int pos_y = 0; - - using (var g = Graphics.FromImage(img)) - (isClockOrCompass ? linearImages : frameTextures).ForEach(texture => - { - g.DrawImage(texture, 0, pos_y); - pos_y += height; - }); - return img; - } - } - - sealed class AnimationPlayer + private bool IsSpecialTile(string tileName) { - public const int BaseTickSpeed = 48; - public bool IsPlaying { get; private set; } = false; - - private int currentAnimationFrameIndex = 0; - private PictureBox display; - private Animation _animation; - private CancellationTokenSource cts = new CancellationTokenSource(); - - public AnimationPlayer(PictureBox display) - { - SetContext(display); - } - - private async void DoAnimate() - { - _ = display ?? throw new ArgumentNullException(nameof(display)); - _ = _animation ?? throw new ArgumentNullException(nameof(_animation)); - IsPlaying = true; - while (!cts.IsCancellationRequested) - { - if (currentAnimationFrameIndex >= _animation.FrameCount) - currentAnimationFrameIndex = 0; - Animation.Frame frame = SetFrameDisplayed(currentAnimationFrameIndex++); - await Task.Delay(BaseTickSpeed * frame.Ticks); - } - IsPlaying = false; - } - - public void Start(Animation animation) - { - _animation = animation; - cts = new CancellationTokenSource(); - Task.Run(DoAnimate, cts.Token); - } - - public void Stop([CallerMemberName] string callerName = default!) - { - Debug.WriteLine($"{nameof(AnimationPlayer.Stop)} called from {callerName}!"); - cts.Cancel(); - } - - public Animation.Frame GetCurrentFrame() => _animation[currentAnimationFrameIndex]; - - public void SetContext(PictureBox display) => this.display = display; - - public void SelectFrame(Animation animation, int index) - { - _animation = animation; - if (IsPlaying) Stop(); - SetFrameDisplayed(index); - currentAnimationFrameIndex = index; - } - - private Animation.Frame SetFrameDisplayed(int i) - { - Monitor.Enter(_animation); - Animation.Frame frame = _animation[i]; - display.Image = frame; - Monitor.Exit(_animation); - return frame; - } - } + return tileName == "clock" || tileName == "compass"; + } public AnimationEditor(PckFile.FileData file) { @@ -252,7 +41,7 @@ namespace PckStudio.Forms.Editor isItem = file.Filename.Split('/').Contains("items"); TileName = Path.GetFileNameWithoutExtension(file.Filename); - InterpolationCheckbox.Visible = !(TileName == "clock" || TileName == "compass"); + InterpolationCheckbox.Visible = !IsEditingSpecial; InterpolationCheckbox.Checked = InterpolationCheckbox.Visible; bulkAnimationSpeedToolStripMenuItem.Enabled = InterpolationCheckbox.Visible; importJavaAnimationToolStripMenuItem.Enabled = InterpolationCheckbox.Visible; @@ -262,9 +51,11 @@ namespace PckStudio.Forms.Editor using MemoryStream textureMem = new MemoryStream(animationFile.Data); var texture = new Bitmap(textureMem); - currentAnimation = animationFile.Properties.HasProperty("ANIM") - ? new Animation(texture, animationFile.Properties.GetPropertyValue("ANIM")) - : new Animation(texture); + var frameTextures = texture.CreateImageList(ImageExtentions.ImageLayoutDirection.Horizontal); + + currentAnimation = animationFile.Properties.HasProperty("ANIM") + ? new Animation(frameTextures, animationFile.Properties.GetPropertyValue("ANIM")) + : new Animation(frameTextures); player = new AnimationPlayer(pictureBoxWithInterpolationMode1); foreach (JObject content in AnimationUtil.tileData[animationSection].Children()) @@ -286,7 +77,15 @@ namespace PckStudio.Forms.Editor // $"Frame: {i}, Frame Time: {Animation.MinimumFrameTime}" TextureIcons.Images.Clear(); TextureIcons.Images.AddRange(currentAnimation.GetFrameTextures().ToArray()); - currentAnimation.GetFrames().ForEach(f => frameTreeView.Nodes.Add("", $"for {f.Ticks} frames", currentAnimation.GetFrameIndex(f.Texture), currentAnimation.GetFrameIndex(f.Texture))); + foreach (var frame in currentAnimation.GetFrames()) + { + var imageIndex = currentAnimation.GetTextureIndex(frame.Texture); + frameTreeView.Nodes.Add(new TreeNode($"for {frame.Ticks} frames") + { + ImageIndex = imageIndex, + SelectedImageIndex = imageIndex, + }); + } player.SelectFrame(currentAnimation, 0); } @@ -304,8 +103,8 @@ namespace PckStudio.Forms.Editor private void StartAnimationBtn_Click(object sender, EventArgs e) { - // crash fix: when pushing the play button on occasions, the animation will play twice the intended speed and crash PCK Studio after one iteration - player.Stop(); // force the player to stop before starting + // prevent player from crashing + player.Stop(); AnimationPlayBtn.Enabled = !(AnimationStopBtn.Enabled = !AnimationStopBtn.Enabled); if (currentAnimation.FrameCount > 1) { @@ -338,12 +137,13 @@ namespace PckStudio.Forms.Editor private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { - string anim = currentAnimation.BuildAnim(); - animationFile.Properties.SetProperty("ANIM", TileName == "clock" || TileName == "compass" ? "" : anim); + + animationFile.Properties.SetProperty("ANIM", IsEditingSpecial ? "" : anim); using (var stream = new MemoryStream()) { - currentAnimation.BuildTexture(this).Save(stream, ImageFormat.Png); + var texture = currentAnimation.BuildTexture(IsEditingSpecial); + texture.Save(stream, ImageFormat.Png); animationFile.SetData(stream.ToArray()); } //Reusing this for the tile path @@ -431,7 +231,7 @@ namespace PckStudio.Forms.Editor private void treeView1_doubleClick(object sender, EventArgs e) { var frame = currentAnimation.GetFrame(frameTreeView.SelectedNode.Index); - using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetFrameIndex(frame.Texture), TextureIcons); + using FrameEditor diag = new FrameEditor(frame.Ticks, currentAnimation.GetTextureIndex(frame.Texture), TextureIcons); if (diag.ShowDialog(this) == DialogResult.OK) { /* Found a bug here. When passing the frame variable, it would replace the first instance of that frame and time @@ -471,7 +271,7 @@ namespace PckStudio.Forms.Editor for (int i = 0; i < list.Count; i++) { Animation.Frame f = list[i]; - currentAnimation.SetFrame(f, currentAnimation.GetFrameIndex(f), diag.time); + currentAnimation.SetFrame(f, currentAnimation.GetTextureIndex(f), diag.time); } LoadAnimationTreeView(); } @@ -485,15 +285,12 @@ namespace PckStudio.Forms.Editor if (query == DialogResult.No) return; OpenFileDialog fileDialog = new OpenFileDialog(); - fileDialog.Multiselect = false; fileDialog.Title = "Please select a valid Minecaft: Java Edition animation script"; // It's marked as .png.mcmeta just in case // some weirdo tries to pass a pack.mcmeta or something // -MattNL fileDialog.Filter = "Animation Scripts (*.mcmeta)|*.png.mcmeta"; - fileDialog.CheckPathExists = true; - fileDialog.CheckFileExists = true; if (fileDialog.ShowDialog(this) != DialogResult.OK) return; Console.WriteLine("Selected Animation Script: " + fileDialog.FileName); @@ -504,8 +301,8 @@ namespace PckStudio.Forms.Editor return; } using MemoryStream textureMem = new MemoryStream(File.ReadAllBytes(textureFile)); - var new_animation = new Animation(Image.FromStream(textureMem)); - + var textures = Image.FromStream(textureMem).CreateImageList(ImageExtentions.ImageLayoutDirection.Horizontal); + var new_animation = new Animation(textures); try { JObject mcmeta = JObject.Parse(File.ReadAllText(fileDialog.FileName)); @@ -566,11 +363,11 @@ namespace PckStudio.Forms.Editor if (TileName != diag.SelectedTile) isItem = diag.IsItem; TileName = diag.SelectedTile; - InterpolationCheckbox.Visible = !(TileName == "clock" || TileName == "compass"); - InterpolationCheckbox.Checked = InterpolationCheckbox.Visible; - bulkAnimationSpeedToolStripMenuItem.Enabled = InterpolationCheckbox.Visible; - importJavaAnimationToolStripMenuItem.Enabled = InterpolationCheckbox.Visible; - exportJavaAnimationToolStripMenuItem.Enabled = InterpolationCheckbox.Visible; + InterpolationCheckbox.Checked = + bulkAnimationSpeedToolStripMenuItem.Enabled = + importJavaAnimationToolStripMenuItem.Enabled = + exportJavaAnimationToolStripMenuItem.Enabled = + InterpolationCheckbox.Visible = !IsEditingSpecial; foreach (JObject content in AnimationUtil.tileData[animationSection].Children()) { @@ -584,31 +381,39 @@ namespace PckStudio.Forms.Editor { SaveFileDialog fileDialog = new SaveFileDialog(); fileDialog.Title = "Please choose where you want to save your new animation"; - fileDialog.Filter = "Animation Scripts (*.mcmeta)|*.png.mcmeta"; - fileDialog.CheckPathExists = true; - if (fileDialog.ShowDialog(this) != DialogResult.OK) return; + if (fileDialog.ShowDialog(this) == DialogResult.OK) + { + JObject mcmeta = ConvertAnimationToJava(currentAnimation); + string jsondata = JsonConvert.SerializeObject(mcmeta, Formatting.Indented); + string filename = fileDialog.FileName; + File.WriteAllText(filename, jsondata); + var finalTexture = currentAnimation.BuildTexture(isClockOrCompass: false); + finalTexture.Save(Path.GetFileNameWithoutExtension(filename)); // removes ".mcmeta" from filename! + MessageBox.Show("Animation was successfully exported to " + filename, "Export successful!"); + } + } - JObject mcmeta = new JObject(); - JObject animation = new JObject(); - JArray frames = new JArray(); - currentAnimation.GetFrames().ForEach(f => { - JObject frame = new JObject(); - frame["index"] = currentAnimation.GetFrameIndex(f.Texture); - frame["time"] = f.Ticks; - frames.Add(frame); - }); - animation["interpolation"] = InterpolationCheckbox.Checked; - animation["frames"] = frames; - mcmeta["comment"] = "Animation converted via PCK Studio"; - mcmeta["animation"] = animation; - File.WriteAllText(fileDialog.FileName, JsonConvert.SerializeObject(mcmeta, Formatting.Indented)); - string fn = fileDialog.FileName; - currentAnimation.BuildTexture(this).Save(fn.Remove(fn.Length - 7)); - MessageBox.Show("Your animation was successfully exported at " + fn, "Successful export"); - } + private JObject ConvertAnimationToJava(Animation animation) + { + JObject janimation = new JObject(); + JObject mcmeta = new JObject(); + mcmeta["comment"] = $"Animation converted by {ProductName}"; + mcmeta["animation"] = janimation; + JArray jframes = new JArray(); + foreach (var frame in animation.GetFrames()) + { + JObject jframe = new JObject(); + jframe["index"] = animation.GetTextureIndex(frame.Texture); + jframe["time"] = frame.Ticks; + jframes.Add(jframe); + }; + janimation["interpolation"] = InterpolationCheckbox.Checked; + janimation["frames"] = jframes; + return mcmeta; + } - private void howToInterpolation_Click(object sender, EventArgs e) + private void howToInterpolation_Click(object sender, EventArgs e) { MessageBox.Show("The Interpolation effect is when the animtion smoothly translates between the frames instead of simply displaying the next one. This can be seen with some vanilla Minecraft textures such as Magma and Prismarine.\n\nThe \"Interpolates\" checkbox at the bottom controls this.", "Interpolation"); } diff --git a/PCK-Studio/Forms/Editor/AnimationPlayer.cs b/PCK-Studio/Forms/Editor/AnimationPlayer.cs new file mode 100644 index 00000000..4a87299d --- /dev/null +++ b/PCK-Studio/Forms/Editor/AnimationPlayer.cs @@ -0,0 +1,76 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Runtime.CompilerServices; +using System.Diagnostics; + +namespace PckStudio.Forms.Editor +{ + // TODO: write as a UI control ?? + sealed class AnimationPlayer + { + public const int BaseTickSpeed = 48; + public bool IsPlaying { get; private set; } = false; + + private int currentAnimationFrameIndex = 0; + private PictureBox display; + private Animation _animation; + private CancellationTokenSource cts = new CancellationTokenSource(); + + public AnimationPlayer(PictureBox display) + { + SetContext(display); + } + + private async void DoAnimate() + { + _ = display ?? throw new ArgumentNullException(nameof(display)); + _ = _animation ?? throw new ArgumentNullException(nameof(_animation)); + IsPlaying = true; + while (!cts.IsCancellationRequested) + { + if (currentAnimationFrameIndex >= _animation.FrameCount) + currentAnimationFrameIndex = 0; + Animation.Frame frame = SetDisplayFrame(currentAnimationFrameIndex++); + await Task.Delay(BaseTickSpeed * frame.Ticks); + } + IsPlaying = false; + } + + public void Start(Animation animation) + { + _animation = animation; + cts = new CancellationTokenSource(); + Task.Run(DoAnimate, cts.Token); + } + + public void Stop([CallerMemberName] string callerName = default!) + { + Debug.WriteLine($"{nameof(AnimationPlayer.Stop)} called from {callerName}!"); + cts.Cancel(); + } + + public Animation.Frame GetCurrentFrame() => _animation[currentAnimationFrameIndex]; + + public void SetContext(PictureBox display) => this.display = display; + + public void SelectFrame(Animation animation, int index) + { + _animation = animation; + if (IsPlaying) + Stop(); + SetDisplayFrame(index); + currentAnimationFrameIndex = index; + } + + private Animation.Frame SetDisplayFrame(int frameIndex) + { + Monitor.Enter(_animation); + Animation.Frame frame = _animation[frameIndex]; + display.Image = frame; + Monitor.Exit(_animation); + return frame; + } + } +} diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 62dfa550..a0a6cf2c 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -170,6 +170,7 @@ + @@ -259,6 +260,8 @@ TextPrompt.cs + + Form From ab544b786b0c3d318c5056d8ae615c1402e8d1a3 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 17 Mar 2023 19:55:08 +0100 Subject: [PATCH 03/79] Swapped Title and Product name --- PCK-Studio/Properties/AssemblyInfo.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Properties/AssemblyInfo.cs b/PCK-Studio/Properties/AssemblyInfo.cs index e506feee..27386512 100644 --- a/PCK-Studio/Properties/AssemblyInfo.cs +++ b/PCK-Studio/Properties/AssemblyInfo.cs @@ -7,13 +7,12 @@ using System.Security.Permissions; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("PCK-Studio")] +[assembly: AssemblyTitle("PCK Studio")] [assembly: AssemblyDescription("A Minecraft Legacy Console .pck Editor")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Nobledez & PhoenixARC")] -[assembly: AssemblyProduct("PCK Studio")] +[assembly: AssemblyProduct("PCK-Studio")] [assembly: AssemblyCopyright("Copyright © 2021")] -[assembly: AssemblyTrademark("PCK Studio")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from From 20a1fa8c802a56c9f593e88a7c0e5ac9f2fe8eff Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 17 Mar 2023 23:08:04 +0100 Subject: [PATCH 04/79] Add endian check when opening pck file --- PCK-Studio/MainForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index aff0517f..9def7bf7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -164,7 +164,7 @@ namespace PckStudio { isTemplateFile = false; saveLocation = filePath; - var reader = new PckFileReader(); + var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); PckFile pck = reader.FromFile(filePath); metroLabel3.Text = "Current PCK File: " + Path.GetFileName(filePath); From 6cdf1daa3bb77a8f6a775003d1ffc036a696cf26 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 17 Mar 2023 23:08:54 +0100 Subject: [PATCH 05/79] Update OMI submodule commit ref --- Vendor/OMI-Lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index c720756d..e859271a 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit c720756d6a5ba6076ddc040fcea13874a38b2bdc +Subproject commit e859271a0d915343933234560014503b92991b3c From ebb971f96a4a2802934c0f841fa6ac5036682c71 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 22 Mar 2023 21:05:49 +0100 Subject: [PATCH 06/79] Moved unused 'ResizeImage' function to ImageExtentions --- .../Classes/Extentions/ImageExtentions.cs | 26 ++++++++++++++- PCK-Studio/Forms/Utilities/pckCenterOpen.cs | 33 +++---------------- PCK-Studio/MainForm.cs | 25 -------------- 3 files changed, 29 insertions(+), 55 deletions(-) diff --git a/PCK-Studio/Classes/Extentions/ImageExtentions.cs b/PCK-Studio/Classes/Extentions/ImageExtentions.cs index f2e3dd39..5a73613b 100644 --- a/PCK-Studio/Classes/Extentions/ImageExtentions.cs +++ b/PCK-Studio/Classes/Extentions/ImageExtentions.cs @@ -3,12 +3,12 @@ using System.Drawing.Drawing2D; using System.Drawing; using System.Diagnostics; using System; +using System.Drawing.Imaging; namespace PckStudio.Classes.Extentions { internal static class ImageExtentions { - public enum ImageLayoutDirection { Horizontal, @@ -106,5 +106,29 @@ namespace PckStudio.Classes.Extentions return new Size(width, heigh); } + + public static Image ResizeImage(this Image image, int width, int height) + { + var destRect = new Rectangle(0, 0, width, height); + var destImage = new Bitmap(width, height); + + destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); + + using (var graphics = Graphics.FromImage(destImage)) + { + graphics.CompositingMode = CompositingMode.SourceCopy; + graphics.CompositingQuality = CompositingQuality.HighQuality; + graphics.InterpolationMode = InterpolationMode.NearestNeighbor; + graphics.SmoothingMode = SmoothingMode.HighQuality; + graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; + + using (var wrapMode = new ImageAttributes()) + { + wrapMode.SetWrapMode(WrapMode.TileFlipXY); + graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); + } + } + return destImage; + } } } diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs index 6aebcb5c..beda0468 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs @@ -19,6 +19,7 @@ using PckStudio.Classes.FileTypes; using PckStudio.Classes.IO.PCK; using OMI.Formats.Pck; using OMI.Workers.Pck; +using PckStudio.Classes.Extentions; namespace PckStudio.Forms { @@ -1028,15 +1029,15 @@ namespace PckStudio.Forms Bitmap saveSkin = new Bitmap(Image.FromStream(ms)); if (saveSkin.Width == saveSkin.Height) { - ResizeImage(saveSkin, 64, 64); + saveSkin.ResizeImage(64, 64); } else if (saveSkin.Height == saveSkin.Width / 2) { - ResizeImage(saveSkin, 64, 32); + saveSkin.ResizeImage(64, 32); } else { - ResizeImage(saveSkin, 64, 64); + saveSkin.ResizeImage(64, 64); } saveSkin.Save(root + "/" + skinTexture.Filename, ImageFormat.Png); } @@ -1077,32 +1078,6 @@ namespace PckStudio.Forms } } - public static Bitmap ResizeImage(Image image, int width, int height) - { - var destRect = new Rectangle(0, 0, width, height); - var destImage = new Bitmap(width, height); - - destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - - using (var graphics = Graphics.FromImage(destImage)) - { - graphics.CompositingMode = CompositingMode.SourceCopy; - graphics.CompositingQuality = CompositingQuality.HighQuality; - graphics.InterpolationMode = InterpolationMode.NearestNeighbor; - graphics.SmoothingMode = SmoothingMode.HighQuality; - graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; - - using (var wrapMode = new ImageAttributes()) - { - wrapMode.SetWrapMode(WrapMode.TileFlipXY); - graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); - } - } - - return destImage; - } - - private void buttonDelete_Click(object sender, EventArgs e) { try diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 9def7bf7..cdf3a7bb 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -1690,31 +1690,6 @@ namespace PckStudio MessageBox.Show("This feature is currently being reworked.", "Currently unavailable", MessageBoxButtons.OK, MessageBoxIcon.Information); } - public static Bitmap ResizeImage(Image image, int width, int height) - { - var destRect = new Rectangle(0, 0, width, height); - var destImage = new Bitmap(width, height); - - destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - - using (var graphics = Graphics.FromImage(destImage)) - { - graphics.CompositingMode = CompositingMode.SourceCopy; - graphics.CompositingQuality = CompositingQuality.HighQuality; - graphics.InterpolationMode = InterpolationMode.NearestNeighbor; - graphics.SmoothingMode = SmoothingMode.HighQuality; - graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; - - using (var wrapMode = new ImageAttributes()) - { - wrapMode.SetWrapMode(WrapMode.TileFlipXY); - graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); - } - } - - return destImage; - } - private void openToolStripMenuItem1_Click(object sender, EventArgs e) { DateTime Begin = DateTime.Now; From de079d9d9ad45a5fa1a7ff8930c527d39cdefef5 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 23 Mar 2023 17:56:03 +0100 Subject: [PATCH 07/79] Rename Util files and update OMI commit ref --- .../Additional-Popups/Animation/ChangeTile.cs | 10 +- PCK-Studio/Forms/Editor/AnimationEditor.cs | 6 +- PCK-Studio/Forms/Editor/BehaviourEditor.cs | 18 +-- PCK-Studio/Forms/Editor/MaterialsEditor.cs | 12 +- ...AnimationUtil.cs => AnimationResources.cs} | 15 +- ...BehaviourUtil.cs => BehaviourResources.cs} | 19 +-- .../Forms/Utilities/MaterialResources.cs | 33 ++++ PCK-Studio/Forms/Utilities/MaterialUtil.cs | 38 ----- .../{ModelsUtil.cs => ModelsResources.cs} | 15 +- PCK-Studio/MainForm.cs | 151 +++++++++--------- PCK-Studio/PckStudio.csproj | 8 +- Vendor/OMI-Lib | 2 +- 12 files changed, 155 insertions(+), 172 deletions(-) rename PCK-Studio/Forms/Utilities/{AnimationUtil.cs => AnimationResources.cs} (52%) rename PCK-Studio/Forms/Utilities/{BehaviourUtil.cs => BehaviourResources.cs} (53%) create mode 100644 PCK-Studio/Forms/Utilities/MaterialResources.cs delete mode 100644 PCK-Studio/Forms/Utilities/MaterialUtil.cs rename PCK-Studio/Forms/Utilities/{ModelsUtil.cs => ModelsResources.cs} (70%) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs index 4dbd756d..d09ace94 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs @@ -23,7 +23,7 @@ namespace PckStudio.Forms.Additional_Popups.Animation InitializeComponent(); ImageList tiles = new ImageList(); tiles.ColorDepth = ColorDepth.Depth32Bit; - tiles.Images.AddRange(AnimationUtil.tileImages); + tiles.Images.AddRange(AnimationResources.tileImages); treeViewBlocks.ImageList = tiles; treeViewItems.ImageList = tiles; @@ -31,9 +31,9 @@ namespace PckStudio.Forms.Additional_Popups.Animation { int i = 0; - if (AnimationUtil.tileData["blocks"] != null) + if (AnimationResources.tileData["blocks"] != null) { - foreach (JObject content in AnimationUtil.tileData["blocks"].Children()) + foreach (JObject content in AnimationResources.tileData["blocks"].Children()) { foreach (JProperty prop in content.Properties()) { @@ -52,9 +52,9 @@ namespace PckStudio.Forms.Additional_Popups.Animation } } } - if (AnimationUtil.tileData["items"] != null) + if (AnimationResources.tileData["items"] != null) { - foreach (JObject content in AnimationUtil.tileData["items"].Children()) + foreach (JObject content in AnimationResources.tileData["items"].Children()) { foreach (JProperty prop in content.Properties()) { diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index a10c232e..715e48f0 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -23,7 +23,7 @@ namespace PckStudio.Forms.Editor AnimationPlayer player; bool isItem = false; - string animationSection => AnimationUtil.GetAnimationSection(isItem); + string animationSection => AnimationResources.GetAnimationSection(isItem); public string TileName = string.Empty; @@ -58,7 +58,7 @@ namespace PckStudio.Forms.Editor : new Animation(frameTextures); player = new AnimationPlayer(pictureBoxWithInterpolationMode1); - foreach (JObject content in AnimationUtil.tileData[animationSection].Children()) + foreach (JObject content in AnimationResources.tileData[animationSection].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == TileName); if (prop is JProperty) @@ -369,7 +369,7 @@ namespace PckStudio.Forms.Editor exportJavaAnimationToolStripMenuItem.Enabled = InterpolationCheckbox.Visible = !IsEditingSpecial; - foreach (JObject content in AnimationUtil.tileData[animationSection].Children()) + foreach (JObject content in AnimationResources.tileData[animationSection].Children()) { var first = content.Properties().FirstOrDefault(p => p.Name == TileName); if (first is JProperty p) tileLabel.Text = (string)p.Value; diff --git a/PCK-Studio/Forms/Editor/BehaviourEditor.cs b/PCK-Studio/Forms/Editor/BehaviourEditor.cs index 102f5800..c6559842 100644 --- a/PCK-Studio/Forms/Editor/BehaviourEditor.cs +++ b/PCK-Studio/Forms/Editor/BehaviourEditor.cs @@ -28,13 +28,13 @@ namespace PckStudio.Forms.Editor { TreeNode EntryNode = new TreeNode(entry.name); - foreach (JObject content in Utilities.BehaviourUtil.entityData["entities"].Children()) + foreach (JObject content in Utilities.BehaviourResources.entityData["entities"].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.name); if (prop is JProperty) { EntryNode.Text = (string)prop.Value; - EntryNode.ImageIndex = Utilities.BehaviourUtil.entityData["entities"].Children().ToList().IndexOf(content); + EntryNode.ImageIndex = Utilities.BehaviourResources.entityData["entities"].Children().ToList().IndexOf(content); EntryNode.SelectedImageIndex = EntryNode.ImageIndex; break; } @@ -68,7 +68,7 @@ namespace PckStudio.Forms.Editor } treeView1.ImageList = new ImageList(); - treeView1.ImageList.Images.AddRange(Utilities.BehaviourUtil.entityImages); + treeView1.ImageList.Images.AddRange(Utilities.BehaviourResources.entityImages); treeView1.ImageList.ColorDepth = ColorDepth.Depth32Bit; SetUpTree(); } @@ -149,7 +149,7 @@ namespace PckStudio.Forms.Editor if (treeView1.SelectedNode == null) return; if (!(treeView1.SelectedNode.Tag is BehaviourFile.RiderPositionOverride entry)) return; - var diag = new Additional_Popups.EntityForms.AddEntry(Utilities.BehaviourUtil.entityData, Utilities.BehaviourUtil.entityImages); + var diag = new Additional_Popups.EntityForms.AddEntry(Utilities.BehaviourResources.entityData, Utilities.BehaviourResources.entityImages); diag.acceptBtn.Text = "Save"; if (diag.ShowDialog() == DialogResult.OK) @@ -164,13 +164,13 @@ namespace PckStudio.Forms.Editor entry.name = diag.SelectedEntity; treeView1.SelectedNode.Tag = entry; - foreach (JObject content in Utilities.BehaviourUtil.entityData["entities"].Children()) + foreach (JObject content in Utilities.BehaviourResources.entityData["entities"].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.name); if (prop is JProperty) { treeView1.SelectedNode.Text = (string)prop.Value; - treeView1.SelectedNode.ImageIndex = Utilities.BehaviourUtil.entityData["entities"].Children().ToList().IndexOf(content); + treeView1.SelectedNode.ImageIndex = Utilities.BehaviourResources.entityData["entities"].Children().ToList().IndexOf(content); treeView1.SelectedNode.SelectedImageIndex = treeView1.SelectedNode.ImageIndex; break; } @@ -203,7 +203,7 @@ namespace PckStudio.Forms.Editor private void addNewEntryToolStripMenuItem_Click(object sender, EventArgs e) { - var diag = new AddEntry(Utilities.BehaviourUtil.entityData, Utilities.BehaviourUtil.entityImages); + var diag = new AddEntry(Utilities.BehaviourResources.entityData, Utilities.BehaviourResources.entityImages); if(diag.ShowDialog() == DialogResult.OK) { @@ -217,13 +217,13 @@ namespace PckStudio.Forms.Editor TreeNode NewOverrideNode = new TreeNode(NewOverride.name); NewOverrideNode.Tag = NewOverride; - foreach (JObject content in Utilities.BehaviourUtil.entityData["entities"].Children()) + foreach (JObject content in Utilities.BehaviourResources.entityData["entities"].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == NewOverride.name); if (prop is JProperty) { NewOverrideNode.Text = (string)prop.Value; - NewOverrideNode.ImageIndex = Utilities.BehaviourUtil.entityData["entities"].Children().ToList().IndexOf(content); + NewOverrideNode.ImageIndex = Utilities.BehaviourResources.entityData["entities"].Children().ToList().IndexOf(content); NewOverrideNode.SelectedImageIndex = NewOverrideNode.ImageIndex; break; } diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.cs index 1a3ea40c..83ceb106 100644 --- a/PCK-Studio/Forms/Editor/MaterialsEditor.cs +++ b/PCK-Studio/Forms/Editor/MaterialsEditor.cs @@ -27,13 +27,13 @@ namespace PckStudio.Forms.Editor { TreeNode EntryNode = new TreeNode(entry.Name); - foreach (JObject content in Utilities.MaterialUtil.entityData["entities"].Children()) + foreach (JObject content in Utilities.MaterialResources.entityData["entities"].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.Name); if (prop is JProperty) { EntryNode.Text = (string)prop.Value; - EntryNode.ImageIndex = Utilities.MaterialUtil.entityData["entities"].Children().ToList().IndexOf(content); + EntryNode.ImageIndex = Utilities.MaterialResources.entityData["entities"].Children().ToList().IndexOf(content); EntryNode.SelectedImageIndex = EntryNode.ImageIndex; break; } @@ -58,7 +58,7 @@ namespace PckStudio.Forms.Editor } treeView1.ImageList = new ImageList(); - Utilities.MaterialUtil.entityImages.ToList().ForEach(img => treeView1.ImageList.Images.Add(img)); + Utilities.MaterialResources.entityImages.ToList().ForEach(img => treeView1.ImageList.Images.Add(img)); treeView1.ImageList.ColorDepth = ColorDepth.Depth32Bit; SetUpTree(); } @@ -132,7 +132,7 @@ namespace PckStudio.Forms.Editor private void addToolStripMenuItem_Click(object sender, EventArgs e) { - var diag = new Additional_Popups.EntityForms.AddEntry(Utilities.MaterialUtil.entityData, Utilities.MaterialUtil.entityImages); + var diag = new Additional_Popups.EntityForms.AddEntry(Utilities.MaterialResources.entityData, Utilities.MaterialResources.entityImages); if (diag.ShowDialog() == DialogResult.OK) { @@ -146,13 +146,13 @@ namespace PckStudio.Forms.Editor TreeNode NewEntryNode = new TreeNode(NewEntry.Name); NewEntryNode.Tag = NewEntry; - foreach (JObject content in Utilities.MaterialUtil.entityData["entities"].Children()) + foreach (JObject content in Utilities.MaterialResources.entityData["entities"].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == NewEntry.Name); if (prop is JProperty) { NewEntryNode.Text = (string)prop.Value; - NewEntryNode.ImageIndex = Utilities.MaterialUtil.entityData["entities"].Children().ToList().IndexOf(content); + NewEntryNode.ImageIndex = Utilities.MaterialResources.entityData["entities"].Children().ToList().IndexOf(content); NewEntryNode.SelectedImageIndex = NewEntryNode.ImageIndex; break; } diff --git a/PCK-Studio/Forms/Utilities/AnimationUtil.cs b/PCK-Studio/Forms/Utilities/AnimationResources.cs similarity index 52% rename from PCK-Studio/Forms/Utilities/AnimationUtil.cs rename to PCK-Studio/Forms/Utilities/AnimationResources.cs index c728be49..4d8c1f4a 100644 --- a/PCK-Studio/Forms/Utilities/AnimationUtil.cs +++ b/PCK-Studio/Forms/Utilities/AnimationResources.cs @@ -10,25 +10,12 @@ using OMI.Formats.Pck; namespace PckStudio.Forms.Utilities { - public static class AnimationUtil + public static class AnimationResources { public static string GetAnimationSection(bool isItem) => isItem ? "items" : "blocks"; public static readonly JObject tileData = JObject.Parse(Resources.tileData); private static Image[] _tileImages; - public static Image[] tileImages => _tileImages ??= Resources.terrain_sheet.CreateImageList(16).Concat(Resources.items_sheet.CreateImageList(16)).ToArray(); - - public static PckFile.FileData CreateNewAnimationFile(Image source, string tileName, bool isItem) - { - PckFile.FileData file = new PckFile.FileData($"res/textures/{GetAnimationSection(isItem)}/{tileName}.png", PckFile.FileData.FileType.TextureFile); - file.Properties.Add(("ANIM", string.Empty)); - using (var stream = new MemoryStream()) - { - source.Save(stream, ImageFormat.Png); - file.SetData(stream.ToArray()); - } - return file; - } } } diff --git a/PCK-Studio/Forms/Utilities/BehaviourUtil.cs b/PCK-Studio/Forms/Utilities/BehaviourResources.cs similarity index 53% rename from PCK-Studio/Forms/Utilities/BehaviourUtil.cs rename to PCK-Studio/Forms/Utilities/BehaviourResources.cs index cce040f8..763c4e71 100644 --- a/PCK-Studio/Forms/Utilities/BehaviourUtil.cs +++ b/PCK-Studio/Forms/Utilities/BehaviourResources.cs @@ -8,28 +8,23 @@ using PckStudio.Classes.Extentions; using OMI.Formats.Behaviour; using OMI.Workers.Behaviour; using OMI.Formats.Pck; +using System; namespace PckStudio.Forms.Utilities { - public static class BehaviourUtil + public static class BehaviourResources { public static readonly JObject entityData = JObject.Parse(Resources.entityBehaviourData); private static Image[] _entityImages; public static Image[] entityImages => _entityImages ??= Resources.entities_sheet.CreateImageList(32).ToArray(); - public static PckFile.FileData CreateNewBehaviourFile() + internal static byte[] BehaviourFileInitializer() { - PckFile.FileData file = new PckFile.FileData($"behaviours.bin", PckFile.FileData.FileType.BehavioursFile); - - using (var stream = new MemoryStream()) - { - var writer = new BehavioursWriter(new BehaviourFile()); - writer.WriteToStream(stream); - file.SetData(stream.ToArray()); - } - - return file; + using var stream = new MemoryStream(); + var writer = new BehavioursWriter(new BehaviourFile()); + writer.WriteToStream(stream); + return stream.ToArray(); } } } diff --git a/PCK-Studio/Forms/Utilities/MaterialResources.cs b/PCK-Studio/Forms/Utilities/MaterialResources.cs new file mode 100644 index 00000000..7d27eda1 --- /dev/null +++ b/PCK-Studio/Forms/Utilities/MaterialResources.cs @@ -0,0 +1,33 @@ +using Newtonsoft.Json.Linq; +using System.Drawing; +using System.Linq; +using System.IO; + +using PckStudio.Properties; +using PckStudio.Classes.Extentions; +using OMI.Formats.Pck; +using OMI.Formats.Material; +using OMI.Workers.Material; +using System; + +namespace PckStudio.Forms.Utilities +{ + public static class MaterialResources + { + public static readonly JObject entityData = JObject.Parse(Resources.entityMaterialData); + private static Image[] _entityImages; + public static Image[] entityImages => _entityImages ??= Resources.entities_sheet.CreateImageList(32).ToArray(); + + public static byte[] MaterialsFileInitializer() + { + using var stream = new MemoryStream(); + var matFile = new MaterialContainer + { + new MaterialContainer.Material("bat", "entity_alphatest") + }; + var writer = new MaterialFileWriter(matFile); + writer.WriteToStream(stream); + return stream.ToArray(); + } + } +} diff --git a/PCK-Studio/Forms/Utilities/MaterialUtil.cs b/PCK-Studio/Forms/Utilities/MaterialUtil.cs deleted file mode 100644 index caa02fd1..00000000 --- a/PCK-Studio/Forms/Utilities/MaterialUtil.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Newtonsoft.Json.Linq; -using System.Drawing; -using System.Linq; -using System.IO; - -using PckStudio.Properties; -using PckStudio.Classes.Extentions; -using OMI.Formats.Pck; -using OMI.Formats.Material; -using OMI.Workers.Material; - -namespace PckStudio.Forms.Utilities -{ - public static class MaterialUtil - { - public static readonly JObject entityData = JObject.Parse(Resources.entityMaterialData); - private static Image[] _entityImages; - public static Image[] entityImages => _entityImages ??= Resources.entities_sheet.CreateImageList(32).ToArray(); - - public static PckFile.FileData CreateNewMaterialsFile() - { - PckFile.FileData file = new PckFile.FileData($"entityMaterials.bin", PckFile.FileData.FileType.MaterialFile); - - using (var stream = new MemoryStream()) - { - var matFile = new MaterialContainer - { - new MaterialContainer.Material("bat", "entity_alphatest") - }; - var writer = new MaterialFileWriter(matFile); - writer.WriteToStream(stream); - file.SetData(stream.ToArray()); - } - - return file; - } - } -} diff --git a/PCK-Studio/Forms/Utilities/ModelsUtil.cs b/PCK-Studio/Forms/Utilities/ModelsResources.cs similarity index 70% rename from PCK-Studio/Forms/Utilities/ModelsUtil.cs rename to PCK-Studio/Forms/Utilities/ModelsResources.cs index ee9c6449..43ed0e41 100644 --- a/PCK-Studio/Forms/Utilities/ModelsUtil.cs +++ b/PCK-Studio/Forms/Utilities/ModelsResources.cs @@ -11,24 +11,27 @@ using OMI.Workers.Model; namespace PckStudio.Forms.Utilities { - public static class ModelsUtil + public static class ModelsResources { public static readonly JObject entityData = JObject.Parse(Resources.entityModelData); private static Image[] _entityImages; public static Image[] entityImages => _entityImages ??= Resources.entities_sheet.CreateImageList(32).ToArray(); - public static PckFile.FileData CreateNewModelsFile() + public static void ModelsFileInitializer(PckFile.FileData file) { - PckFile.FileData file = new PckFile.FileData($"models.bin", PckFile.FileData.FileType.ModelsFile); - using (var stream = new MemoryStream()) { - var writer = new ModelFileWriter(new ModelContainer()); + var writer = new ModelFileWriter(new ModelContainer()); writer.WriteToStream(stream); file.SetData(stream.ToArray()); } - + } + + public static PckFile.FileData CreateNewModelsFile() + { + PckFile.FileData file = new PckFile.FileData("models.bin", PckFile.FileData.FileType.ModelsFile); + ModelsFileInitializer(file); return file; } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index cdf3a7bb..61e09012 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -841,7 +841,7 @@ namespace PckStudio audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.Overworld); audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.Nether); audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.End); - PckFile.FileData pckFileData = currentPCK.CreateNew("audio.pck", PckFile.FileData.FileType.AudioFile); + PckFile.FileData pckFileData = currentPCK.CreateNewFile("audio.pck", PckFile.FileData.FileType.AudioFile); using (var stream = new MemoryStream()) { PCKAudioFileWriter.Write(stream, audioPck, isLittle); @@ -869,28 +869,37 @@ namespace PckStudio private void createAnimatedTextureToolStripMenuItem_Click(object sender, EventArgs e) { - using (var ofd = new OpenFileDialog()) + using var ofd = new OpenFileDialog() { - ofd.Filter = "PNG Files | *.png"; - ofd.Title = "Select a PNG File"; - if (ofd.ShowDialog() == DialogResult.OK) + Filter = "PNG Files | *.png", + Title = "Select a PNG File", + }; + if (ofd.ShowDialog() != DialogResult.OK) + return; + + using ChangeTile diag = new ChangeTile(); + if (diag.ShowDialog(this) != DialogResult.OK) + return; + + using Image img = new Bitmap(ofd.FileName); + var file = currentPCK.CreateNewFile( + $"res/textures/{AnimationResources.GetAnimationSection(diag.IsItem)}/{diag.SelectedTile}.png", + PckFile.FileData.FileType.TextureFile, + () => { - using ChangeTile diag = new ChangeTile(); - if (diag.ShowDialog(this) == DialogResult.OK) - { - using Image img = new Bitmap(ofd.FileName); - var file = AnimationUtil.CreateNewAnimationFile(img, diag.SelectedTile, diag.IsItem); - using AnimationEditor animationEditor = new AnimationEditor(file); - if (animationEditor.ShowDialog() == DialogResult.OK) - { - file.Filename = animationEditor.TileName; - currentPCK.Files.Add(file); - ReloadMetaTreeView(); - BuildMainTreeView(); - wasModified = true; - } - } - } + using var stream = new MemoryStream(); + img.Save(stream, ImageFormat.Png); + return stream.ToArray(); + }); + file.Properties.Add(("ANIM", string.Empty)); + + using AnimationEditor animationEditor = new AnimationEditor(file); + if (animationEditor.ShowDialog() == DialogResult.OK) + { + file.Filename = animationEditor.TileName; + ReloadMetaTreeView(); + BuildMainTreeView(); + wasModified = true; } } @@ -955,7 +964,7 @@ namespace PckStudio { if (node.Tag is PckFile.FileData node_file) { - PckFile.FileData new_file = newPCKFile.CreateNew(node_file.Filename, node_file.Filetype); + PckFile.FileData new_file = newPCKFile.CreateNewFile(node_file.Filename, node_file.Filetype); foreach (var prop in node_file.Properties) new_file.Properties.Add(prop); new_file.SetData(node_file.Data); } @@ -1207,23 +1216,25 @@ namespace PckStudio private PckFile InitializePack(int packId, int packVersion, string packName, bool createSkinsPCK) { var newPck = new PckFile(3); - var zeroFile = newPck.CreateNew("0", PckFile.FileData.FileType.InfoFile); + + var zeroFile = newPck.CreateNewFile("0", PckFile.FileData.FileType.InfoFile); zeroFile.Properties.Add(("PACKID", packId.ToString())); zeroFile.Properties.Add(("PACKVERSION", packVersion.ToString())); - var loc = newPck.CreateNew("localisation.loc", PckFile.FileData.FileType.LocalisationFile); - var locFile = new LOCFile(); - locFile.InitializeDefault(packName); - using (var stream = new MemoryStream()) + + var loc = newPck.CreateNewFile("localisation.loc", PckFile.FileData.FileType.LocalisationFile, () => { + var locFile = new LOCFile(); + locFile.InitializeDefault(packName); + using var stream = new MemoryStream(); LOCFileWriter.Write(stream, locFile); - loc.SetData(stream.ToArray()); - } + return stream.ToArray(); + }); if (createSkinsPCK) { - PckFile.FileData skinsPCKFile = newPck.CreateNew("Skins.pck", PckFile.FileData.FileType.SkinDataFile); - using (var stream = new MemoryStream()) - { + PckFile.FileData skinsPCKFile = newPck.CreateNewFile("Skins.pck", PckFile.FileData.FileType.SkinDataFile, () => + { + using var stream = new MemoryStream(); var writer = new PckFileWriter(new PckFile(3) { HasVerionString = true @@ -1232,8 +1243,8 @@ namespace PckStudio ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); writer.WriteToStream(stream); - skinsPCKFile.SetData(stream.ToArray()); - } + return stream.ToArray(); + }); } return newPck; } @@ -1241,7 +1252,17 @@ namespace PckStudio private PckFile InitializeTexturePack(int packId, int packVersion, string packName, string res, bool createSkinsPCK = false) { var newPck = InitializePack(packId, packVersion, packName, createSkinsPCK); - var texturepackInfo = newPck.CreateNew($"{res}/{res}Info.pck", PckFile.FileData.FileType.TexturePackInfoFile); + var texturepackInfo = newPck.CreateNewFile($"{res}/{res}Info.pck", PckFile.FileData.FileType.TexturePackInfoFile, + () => + { + using var ms = new MemoryStream(); + var writer = new PckFileWriter(new PckFile(3), + LittleEndianCheckBox.Checked + ? OMI.Endianness.LittleEndian + : OMI.Endianness.BigEndian); + writer.WriteToStream(ms); + return ms.ToArray(); + }); texturepackInfo.Properties.Add(("PACKID", "0")); texturepackInfo.Properties.Add(("DATAPATH", $"{res}Data.pck")); @@ -1249,34 +1270,25 @@ namespace PckStudio using (var ms = new MemoryStream()) { - var icon = infoPCK.CreateNew("icon.png", PckFile.FileData.FileType.TextureFile); + var icon = infoPCK.CreateNewFile("icon.png", PckFile.FileData.FileType.TextureFile); Resources.TexturePackIcon.Save(ms, ImageFormat.Png); icon.SetData(ms.ToArray()); } using (var ms = new MemoryStream()) { - var comparison = infoPCK.CreateNew("comparison.png", PckFile.FileData.FileType.TextureFile); + var comparison = infoPCK.CreateNewFile("comparison.png", PckFile.FileData.FileType.TextureFile); Resources.Comparison.Save(ms, ImageFormat.Png); comparison.SetData(ms.ToArray()); } - using (var ms = new MemoryStream()) - { - var writer = new PckFileWriter(new PckFile(3), - LittleEndianCheckBox.Checked - ? OMI.Endianness.LittleEndian - : OMI.Endianness.BigEndian); - writer.WriteToStream(ms); - texturepackInfo.SetData(ms.ToArray()); - } return newPck; } private PckFile InitializeMashUpPack(int packId, int packVersion, string packName, string res) { var newPck = InitializeTexturePack(packId, packVersion, packName, res, true); - var gameRuleFile = newPck.CreateNew("GameRules.grf", PckFile.FileData.FileType.GameRulesFile); + var gameRuleFile = newPck.CreateNewFile("GameRules.grf", PckFile.FileData.FileType.GameRulesFile); var grfFile = new GameRuleFile(); grfFile.AddRule("MapOptions", new KeyValuePair("seed", "0"), @@ -1604,7 +1616,7 @@ namespace PckStudio { string skinNameImport = Path.GetFileName(contents.FileName); byte[] data = File.ReadAllBytes(contents.FileName); - PckFile.FileData mfNew = currentPCK.CreateNew(skinNameImport, PckFile.FileData.FileType.SkinFile); + PckFile.FileData mfNew = currentPCK.CreateNewFile(skinNameImport, PckFile.FileData.FileType.SkinFile); mfNew.SetData(data); string propertyFile = Path.GetFileNameWithoutExtension(contents.FileName) + ".txt"; if (File.Exists(propertyFile)) @@ -1957,7 +1969,7 @@ namespace PckStudio renamePrompt.TextLabel.Text = "Path"; if (renamePrompt.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(renamePrompt.NewText)) { - var file = currentPCK.CreateNew(renamePrompt.NewText, PckFile.FileData.FileType.TextureFile); + var file = currentPCK.CreateNewFile(renamePrompt.NewText, PckFile.FileData.FileType.TextureFile); file.SetData(File.ReadAllBytes(fileDialog.FileName)); BuildMainTreeView(); wasModified = true; @@ -2030,14 +2042,13 @@ namespace PckStudio private void colourscolToolStripMenuItem_Click(object sender, EventArgs e) { - PckFile.FileData NewColorFile; - if (currentPCK.TryGetFile("colours.col", PckFile.FileData.FileType.ColourTableFile, out NewColorFile)) + if (currentPCK.TryGetFile("colours.col", PckFile.FileData.FileType.ColourTableFile, out _)) { MessageBox.Show("A color table file already exists in this PCK and a new one cannot be created.", "Operation aborted"); return; } - NewColorFile = currentPCK.CreateNew("colours.col", PckFile.FileData.FileType.ColourTableFile); - NewColorFile.SetData(Resources.tu69colours); + var newColorFile = currentPCK.CreateNewFile("colours.col", PckFile.FileData.FileType.ColourTableFile); + newColorFile.SetData(Resources.tu69colours); BuildMainTreeView(); } @@ -2143,19 +2154,14 @@ namespace PckStudio return; } - PckFile.FileData newSkinsPCKFile = currentPCK.CreateNew("Skins.pck", PckFile.FileData.FileType.SkinDataFile); - using (var stream = new MemoryStream()) + currentPCK.CreateNewFile("Skins.pck", PckFile.FileData.FileType.SkinDataFile, () => { - var writer = new PckFileWriter(new PckFile(3) - { - HasVerionString = true - }, - LittleEndianCheckBox.Checked - ? OMI.Endianness.LittleEndian - : OMI.Endianness.BigEndian); - writer.WriteToStream(stream); - newSkinsPCKFile.SetData(stream.ToArray()); - } + using var stream = new MemoryStream(); + var writer = new PckFileWriter(new PckFile(3) { HasVerionString = true }, + LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + writer.WriteToStream(stream); + return stream.ToArray(); + }); BuildMainTreeView(); @@ -2204,7 +2210,7 @@ namespace PckStudio using AddFilePrompt diag = new AddFilePrompt("res/" + Path.GetFileName(ofd.FileName)); if (diag.ShowDialog(this) == DialogResult.OK) { - PckFile.FileData file = currentPCK.CreateNew(diag.filepath, (PckFile.FileData.FileType)diag.filetype); + PckFile.FileData file = currentPCK.CreateNewFile(diag.filepath, (PckFile.FileData.FileType)diag.filetype); file.SetData(File.ReadAllBytes(ofd.FileName)); if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); @@ -2219,27 +2225,24 @@ namespace PckStudio private void behavioursbinToolStripMenuItem_Click(object sender, EventArgs e) { - PckFile.FileData NewBehaviourFile; - if (currentPCK.TryGetFile("behaviours.bin", PckFile.FileData.FileType.BehavioursFile, out NewBehaviourFile)) + if (currentPCK.TryGetFile("behaviours.bin", PckFile.FileData.FileType.BehavioursFile, out _)) { MessageBox.Show("A behaviours file already exists in this PCK and a new one cannot be created.", "Operation aborted"); return; } - NewBehaviourFile = BehaviourUtil.CreateNewBehaviourFile(); - currentPCK.Files.Add(NewBehaviourFile); + + currentPCK.CreateNewFile("behaviours.bin", PckFile.FileData.FileType.BehavioursFile, BehaviourResources.BehaviourFileInitializer); BuildMainTreeView(); } private void entityMaterialsbinToolStripMenuItem_Click(object sender, EventArgs e) { - PckFile.FileData NewMaterialsFile; - if (currentPCK.TryGetFile("entityMaterials.bin", PckFile.FileData.FileType.MaterialFile, out NewMaterialsFile)) + if (currentPCK.TryGetFile("entityMaterials.bin", PckFile.FileData.FileType.MaterialFile, out _)) { MessageBox.Show("A behaviours file already exists in this PCK and a new one cannot be created.", "Operation aborted"); return; } - NewMaterialsFile = MaterialUtil.CreateNewMaterialsFile(); - currentPCK.Files.Add(NewMaterialsFile); + currentPCK.CreateNewFile("entityMaterials.bin", PckFile.FileData.FileType.MaterialFile, MaterialResources.MaterialsFileInitializer); BuildMainTreeView(); } } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index a0a6cf2c..75617c94 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -346,10 +346,10 @@ pleaseWait.cs - - - - + + + + Form diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index e859271a..76ba41c7 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit e859271a0d915343933234560014503b92991b3c +Subproject commit 76ba41c740d2814b03070fd1c78f39d39ee4e5d2 From 27880c013f4eac1a52b3547aa9cf1e36aca0a947 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 23 Mar 2023 18:12:08 +0100 Subject: [PATCH 08/79] Remove 'PckPreview', 'MyTablePanel' and 'MyNameLabel' Control --- PCK-Studio/Forms/Editor/LOCEditor.Designer.cs | 4 +- .../generateModel.Designer.cs | 4 +- .../Forms/Utilities/installPS3.Designer.cs | 4 +- .../Forms/Utilities/installVita.Designer.cs | 4 +- .../Forms/Utilities/installWiiU.Designer.cs | 4 +- .../Forms/Utilities/pckCenter.Designer.cs | 2 +- PCK-Studio/Forms/Utilities/pckCenter.cs | 150 +----- .../Forms/Utilities/pckCenterOpen.Designer.cs | 16 +- PCK-Studio/Forms/Utilities/pckCenterOpen.resx | 491 +++++++++--------- 9 files changed, 268 insertions(+), 411 deletions(-) diff --git a/PCK-Studio/Forms/Editor/LOCEditor.Designer.cs b/PCK-Studio/Forms/Editor/LOCEditor.Designer.cs index 014080b2..24fedbf7 100644 --- a/PCK-Studio/Forms/Editor/LOCEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/LOCEditor.Designer.cs @@ -40,7 +40,7 @@ this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.locSort = new PckStudio.Forms.MyTablePanel(); + this.locSort = new System.Windows.Forms.TableLayoutPanel(); this.buttonReplaceAll = new System.Windows.Forms.Button(); this.dataGridViewLocEntryData = new System.Windows.Forms.DataGridView(); this.textBoxReplaceAll = new System.Windows.Forms.TextBox(); @@ -202,7 +202,7 @@ private System.Windows.Forms.ToolStripMenuItem addDisplayIDToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem deleteDisplayIDToolStripMenuItem; private System.Windows.Forms.TextBox textBoxReplaceAll; - private PckStudio.Forms.MyTablePanel locSort; + private System.Windows.Forms.TableLayoutPanel locSort; private System.Windows.Forms.Button buttonReplaceAll; private MetroFramework.Controls.MetroContextMenu GridContextMenu; private System.Windows.Forms.ToolStripMenuItem addLanguageToolStripMenuItem; diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs index 06ab612b..d4ce7f7c 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs @@ -43,7 +43,7 @@ this.tabBody = new System.Windows.Forms.TabControl(); this.tabArmor = new System.Windows.Forms.TabPage(); this.tabPage1 = new System.Windows.Forms.TabPage(); - this.myTablePanel2 = new PckStudio.Forms.MyTablePanel(); + this.myTablePanel2 = new System.Windows.Forms.TableLayoutPanel(); this.offsetArms = new System.Windows.Forms.TextBox(); this.label14 = new System.Windows.Forms.Label(); this.offsetBody = new System.Windows.Forms.TextBox(); @@ -637,7 +637,7 @@ private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.TabControl tabBody; private System.Windows.Forms.TabPage tabPage1; - private Forms.MyTablePanel myTablePanel2; + private System.Windows.Forms.TableLayoutPanel myTablePanel2; private System.Windows.Forms.TextBox offsetArms; private System.Windows.Forms.Label label14; private System.Windows.Forms.TextBox offsetBody; diff --git a/PCK-Studio/Forms/Utilities/installPS3.Designer.cs b/PCK-Studio/Forms/Utilities/installPS3.Designer.cs index 6b004408..88b5cb3a 100644 --- a/PCK-Studio/Forms/Utilities/installPS3.Designer.cs +++ b/PCK-Studio/Forms/Utilities/installPS3.Designer.cs @@ -30,7 +30,7 @@ { this.components = new System.ComponentModel.Container(); this.metroTabPageMain = new MetroFramework.Controls.MetroTabPage(); - this.myTablePanel1 = new PckStudio.Forms.MyTablePanel(); + this.myTablePanel1 = new System.Windows.Forms.TableLayoutPanel(); this.EurDig = new System.Windows.Forms.RadioButton(); this.USDig = new System.Windows.Forms.RadioButton(); this.buttonServerToggle = new System.Windows.Forms.Button(); @@ -339,7 +339,7 @@ #endregion private MetroFramework.Controls.MetroTabPage metroTabPageMain; - private MyTablePanel myTablePanel1; + private System.Windows.Forms.TableLayoutPanel myTablePanel1; private System.Windows.Forms.RadioButton USDisc; private System.Windows.Forms.RadioButton JPDig; private System.Windows.Forms.RadioButton EurDisc; diff --git a/PCK-Studio/Forms/Utilities/installVita.Designer.cs b/PCK-Studio/Forms/Utilities/installVita.Designer.cs index bde4b600..152822a8 100644 --- a/PCK-Studio/Forms/Utilities/installVita.Designer.cs +++ b/PCK-Studio/Forms/Utilities/installVita.Designer.cs @@ -32,7 +32,7 @@ namespace PckStudio.Forms { this.components = new System.ComponentModel.Container(); this.metroTabPageMain = new MetroFramework.Controls.MetroTabPage(); - this.myTablePanel1 = new PckStudio.Forms.MyTablePanel(); + this.myTablePanel1 = new System.Windows.Forms.TableLayoutPanel(); this.EurDig = new System.Windows.Forms.RadioButton(); this.USDig = new System.Windows.Forms.RadioButton(); this.buttonServerToggle = new System.Windows.Forms.Button(); @@ -341,7 +341,7 @@ namespace PckStudio.Forms #endregion private MetroFramework.Controls.MetroTabPage metroTabPageMain; - private MyTablePanel myTablePanel1; + private System.Windows.Forms.TableLayoutPanel myTablePanel1; private System.Windows.Forms.RadioButton USDisc; private System.Windows.Forms.RadioButton JPDig; private System.Windows.Forms.RadioButton EurDisc; diff --git a/PCK-Studio/Forms/Utilities/installWiiU.Designer.cs b/PCK-Studio/Forms/Utilities/installWiiU.Designer.cs index 6f14cfbc..03e5ad9d 100644 --- a/PCK-Studio/Forms/Utilities/installWiiU.Designer.cs +++ b/PCK-Studio/Forms/Utilities/installWiiU.Designer.cs @@ -31,7 +31,7 @@ this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(installWiiU)); this.metroTabPageMain = new MetroFramework.Controls.MetroTabPage(); - this.myTablePanel1 = new PckStudio.Forms.MyTablePanel(); + this.myTablePanel1 = new System.Windows.Forms.TableLayoutPanel(); this.buttonServerToggle = new System.Windows.Forms.Button(); this.panel1 = new System.Windows.Forms.Panel(); this.radioButtonSystem = new System.Windows.Forms.RadioButton(); @@ -330,7 +330,7 @@ #endregion private MetroFramework.Controls.MetroTabPage metroTabPageMain; - private MyTablePanel myTablePanel1; + private System.Windows.Forms.TableLayoutPanel myTablePanel1; private System.Windows.Forms.RadioButton radioButtonJap; private System.Windows.Forms.RadioButton radioButtonEur; private System.Windows.Forms.RadioButton radioButtonUs; diff --git a/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs b/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs index b812b988..7ca24092 100644 --- a/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs +++ b/PCK-Studio/Forms/Utilities/pckCenter.Designer.cs @@ -1,4 +1,4 @@ -namespace PckStudio.Forms +namespace PckStudio.Forms.Utilities { partial class pckCenter { diff --git a/PCK-Studio/Forms/Utilities/pckCenter.cs b/PCK-Studio/Forms/Utilities/pckCenter.cs index 27379337..89e50d14 100644 --- a/PCK-Studio/Forms/Utilities/pckCenter.cs +++ b/PCK-Studio/Forms/Utilities/pckCenter.cs @@ -11,7 +11,7 @@ using PckStudio.Classes.Misc; using PckStudio.API.PCKCenter.model; using PckStudio.API.PCKCenter; -namespace PckStudio.Forms +namespace PckStudio.Forms.Utilities { public partial class pckCenter : MetroFramework.Forms.MetroForm { @@ -174,10 +174,6 @@ namespace PckStudio.Forms EInfo.Description = desc; PJSON.Data.Add((++x).ToString(), EInfo); File.Copy(cacheDir + mod + ".png", cacheDir + "images/" + ++x + ".png"); - - - PckPreview pckPreview = new PckPreview(pckName, author, desc, direct, ad, bmp, 0, mod, null, IsVita, Packname); - pckLayout.Controls.Add(pckPreview); } } catch (Exception err) { Console.WriteLine(err.Message); } @@ -287,9 +283,6 @@ namespace PckStudio.Forms { bmp = (Bitmap)Image.FromStream(memStream); } - - PckPreview pckPreview = new PckPreview(pckName, author, desc, direct, ad, bmp, 1, mod, loadCollectdion, PSVitaPCKCheckbox.Checked, ""); - pckLayout.Controls.Add(pckPreview); } pckLayout.Enabled = true; } @@ -400,143 +393,4 @@ namespace PckStudio.Forms else { MessageBox.Show("No Packs Avaliable!"); } } } - - public class PckPreview : UserControl - { - string name; - string author; - string desc; - string direct; - string ad; - int mode; - string mod; - bool IsVita; - string Pack; - - Bitmap icon; - - PictureBox iconBox = new PictureBox(); - public MyNameLabel nameLabel = new MyNameLabel(); - MyTablePanel layout = new MyTablePanel(); - MethodInvoker reloader; - - public PckPreview(string name, string author, string desc, string direct, string ad, Bitmap icon, int mode, string mod, MethodInvoker Reloader, bool vita, string packName) : base() - { - reloader = Reloader; - nameLabel.parentPreview = this; - layout.parentPreview = this; - this.name = name; - this.author = author; - this.desc = desc; - this.direct = direct; - this.ad = ad; - this.mode = mode; - this.mod = mod; - this.icon = icon; - IsVita = vita; - Pack = packName; - layout.BackColor = Color.White; - Size = new Size(250, 280); - nameLabel.Dock = DockStyle.Fill; - nameLabel.Location = new Point(0,0); - nameLabel.Size = new Size(230, 30); - iconBox.Image = icon; - //iconBox.Dock = DockStyle.Fill; - iconBox.Anchor = AnchorStyles.None; - nameLabel.Text = name; - iconBox.SizeMode = PictureBoxSizeMode.StretchImage; - iconBox.Size = new Size(230, 230); - layout.Margin = new Padding(0, 0, 0, 0); - Margin = new Padding(20, 15, 20, 15); - nameLabel.ForeColor = Color.Black; - nameLabel.TextAlign = ContentAlignment.MiddleCenter; - nameLabel.Font = new Font(nameLabel.Font.FontFamily, 14); - layout.Controls.Add(iconBox, 0, 1); - layout.Controls.Add(nameLabel, 0, 0); - layout.Parent = this; - layout.Dock = DockStyle.Fill; - iconBox.Enabled = false; - - } - - public void setHover(bool hover) - { - layout.BackColor = hover ? Color.LightGray : Color.White; - layout.Refresh(); - } - public void onClick() - { - - layout.BackColor = Color.Gray; - layout.Refresh(); - pckCenterOpen openPck = new pckCenterOpen(name, author, desc, direct, ad, icon, mode, mod, reloader, IsVita, Pack); - openPck.ShowDialog(); - } - - public void onDoubleClick() - { - - } - } - - public class MyTablePanel : TableLayoutPanel - { - public PckPreview parentPreview; - - protected override void OnMouseEnter(EventArgs e) - { - if (parentPreview != null) - { - parentPreview.setHover(true); - base.OnMouseLeave(e); - } - } - protected override void OnMouseLeave(EventArgs e) - { - if(parentPreview != null) - { - parentPreview.setHover(false); - base.OnMouseLeave(e); - } - } - protected override void OnMouseClick(MouseEventArgs e) - { - if (parentPreview != null) - { - parentPreview.onClick(); - base.OnMouseClick(e); - } - } - protected override void OnMouseDoubleClick(MouseEventArgs e) - { - if (parentPreview != null) - { - parentPreview.onDoubleClick(); - base.OnMouseDoubleClick(e); - } - } - } - - public class MyNameLabel : Label - { - public PckPreview parentPreview; - - protected override void OnMouseEnter(EventArgs e) - { - parentPreview.setHover(true); - base.OnMouseEnter(e); - } - protected override void OnMouseLeave(EventArgs e) - { - parentPreview.setHover(false); - base.OnMouseLeave(e); - } - protected override void OnMouseClick(MouseEventArgs e) - { - parentPreview.onClick(); - base.OnMouseClick(e); - } - } -} - - +} \ No newline at end of file diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs index 25bce92a..aa8f0aeb 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.Designer.cs @@ -44,9 +44,9 @@ // // buttonDirect // - resources.ApplyResources(this.buttonDirect, "buttonDirect"); this.buttonDirect.BackColor = System.Drawing.Color.Purple; this.buttonDirect.FlatAppearance.BorderSize = 0; + resources.ApplyResources(this.buttonDirect, "buttonDirect"); this.buttonDirect.ForeColor = System.Drawing.Color.White; this.buttonDirect.Name = "buttonDirect"; this.buttonDirect.UseVisualStyleBackColor = false; @@ -66,9 +66,9 @@ // // buttonDelete // - resources.ApplyResources(this.buttonDelete, "buttonDelete"); this.buttonDelete.BackColor = System.Drawing.Color.Red; this.buttonDelete.FlatAppearance.BorderSize = 0; + resources.ApplyResources(this.buttonDelete, "buttonDelete"); this.buttonDelete.ForeColor = System.Drawing.Color.White; this.buttonDelete.Name = "buttonDelete"; this.buttonDelete.UseVisualStyleBackColor = false; @@ -76,9 +76,9 @@ // // buttonExport // - resources.ApplyResources(this.buttonExport, "buttonExport"); this.buttonExport.BackColor = System.Drawing.Color.SlateGray; this.buttonExport.FlatAppearance.BorderSize = 0; + resources.ApplyResources(this.buttonExport, "buttonExport"); this.buttonExport.ForeColor = System.Drawing.Color.White; this.buttonExport.Name = "buttonExport"; this.buttonExport.UseVisualStyleBackColor = false; @@ -86,9 +86,9 @@ // // buttonInstallPs3 // - resources.ApplyResources(this.buttonInstallPs3, "buttonInstallPs3"); this.buttonInstallPs3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); this.buttonInstallPs3.BackgroundImage = global::PckStudio.Properties.Resources.ps3; + resources.ApplyResources(this.buttonInstallPs3, "buttonInstallPs3"); this.buttonInstallPs3.FlatAppearance.BorderSize = 0; this.buttonInstallPs3.ForeColor = System.Drawing.Color.White; this.buttonInstallPs3.Name = "buttonInstallPs3"; @@ -97,9 +97,9 @@ // // buttonInstallXbox // - resources.ApplyResources(this.buttonInstallXbox, "buttonInstallXbox"); this.buttonInstallXbox.BackColor = System.Drawing.Color.Lime; this.buttonInstallXbox.BackgroundImage = global::PckStudio.Properties.Resources.xbox; + resources.ApplyResources(this.buttonInstallXbox, "buttonInstallXbox"); this.buttonInstallXbox.FlatAppearance.BorderSize = 0; this.buttonInstallXbox.ForeColor = System.Drawing.Color.White; this.buttonInstallXbox.Name = "buttonInstallXbox"; @@ -108,9 +108,9 @@ // // buttonInstallWiiU // - resources.ApplyResources(this.buttonInstallWiiU, "buttonInstallWiiU"); this.buttonInstallWiiU.BackColor = System.Drawing.Color.DeepSkyBlue; this.buttonInstallWiiU.BackgroundImage = global::PckStudio.Properties.Resources.wiiu; + resources.ApplyResources(this.buttonInstallWiiU, "buttonInstallWiiU"); this.buttonInstallWiiU.FlatAppearance.BorderSize = 0; this.buttonInstallWiiU.ForeColor = System.Drawing.Color.White; this.buttonInstallWiiU.Name = "buttonInstallWiiU"; @@ -125,9 +125,9 @@ // // buttonBedrock // - resources.ApplyResources(this.buttonBedrock, "buttonBedrock"); this.buttonBedrock.BackColor = System.Drawing.Color.Green; this.buttonBedrock.FlatAppearance.BorderSize = 0; + resources.ApplyResources(this.buttonBedrock, "buttonBedrock"); this.buttonBedrock.ForeColor = System.Drawing.Color.White; this.buttonBedrock.Name = "buttonBedrock"; this.buttonBedrock.UseVisualStyleBackColor = false; @@ -138,6 +138,7 @@ resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BorderStyle = MetroFramework.Forms.MetroFormBorderStyle.FixedSingle; + this.Controls.Add(this.buttonDirect); this.Controls.Add(this.buttonBedrock); this.Controls.Add(this.buttonInstallPs3); this.Controls.Add(this.buttonInstallXbox); @@ -146,7 +147,6 @@ this.Controls.Add(this.buttonDelete); this.Controls.Add(this.labelDesc); this.Controls.Add(this.labelName); - this.Controls.Add(this.buttonDirect); this.Controls.Add(this.pictureBoxDisplay); this.MaximizeBox = false; this.Name = "pckCenterOpen"; diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.resx b/PCK-Studio/Forms/Utilities/pckCenterOpen.resx index 0b294506..b65f8347 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.resx +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.resx @@ -117,155 +117,236 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 9 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Flat - - 30, 30 + + 568, 338 + + + 169, 67 - - 7 + + 2 - - 585, 338 + + DOWNLOAD TO COLLECTION - - Delete - - - pictureBoxDisplay - - - - Stretch - - - 621, 338 - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 + + False buttonDirect - - pckCenterOpen + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - - - 11 - - - Convert to Bedrock - - - buttonInstallWiiU - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 8 - - - 169, 43 - - - labelDesc - - - 12 - - + $this - - Flat - - - 341, 341 - - - 384, 64 - - - Stretch - - - buttonBedrock - - - CenterParent - - - 8 - - - 6 - - - 152, 30 - - - labelName - - - Stretch - - - Flat + + 0 True - - $this + + Microsoft Sans Serif, 20.25pt - - 30, 30 + + 24, 24 - - buttonInstallXbox - - - buttonDelete - - - Flat - - - 1 + + 135, 31 5 + + Skin Pack + + + labelName + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + Microsoft Sans Serif, 12pt + + + 384, 64 + + + 353, 222 + + + 6 + + + labelDesc + + + labelDesc + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + Flat - - 692, 338 - - + Segoe UI, 12pt + + 384, 338 + + + 178, 66 + + + 7 + + + Delete + + + buttonDelete + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + Flat + + + Segoe UI, 12pt + + + 495, 256 + + + 45, 30 + + + 8 + + + Get + + + buttonExport + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Stretch + + + Flat + + + Segoe UI, 12pt + + + 460, 256 + 30, 30 - - 568, 362 + + 11 + + + buttonInstallPs3 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Stretch + + + Flat + + + Segoe UI, 12pt + + + 424, 256 + + + 30, 30 + + + 10 + + + buttonInstallXbox + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Stretch + + + Flat + + + Segoe UI, 12pt + + + 388, 256 + + + 30, 30 + + + 9 + + + buttonInstallWiiU System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -273,160 +354,82 @@ $this + + 4 + 24, 64 - - False + + 341, 341 StretchImage - - Segoe UI, 12pt + + 0 - - buttonInstallPs3 + + pictureBoxDisplay - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Segoe UI, 12pt - - - 585, 375 - - - 135, 31 - - - Skin Pack - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - DOWNLOAD TO COLLECTION - - - Segoe UI, 12pt - - - 5 - - - 4 - - - 2 - - - Flat - - - 353, 286 - - - Segoe UI, 12pt - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - $this - - - 45, 30 + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - - Microsoft Sans Serif, 12pt - - - 178, 66 - - - $this - - - 6, 13 - - - Flat - - - 3 - - - 384, 338 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 24, 24 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 10 - - - Microsoft Sans Serif, 20.25pt - - - 6 - - - Segoe UI, 12pt + + 9 Flat - - $this + + Segoe UI, 12pt - - 657, 338 + + 388, 293 - - Get + + 152, 30 - - 760, 418 + + 12 - - MetroFramework.Forms.MetroForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + Convert to Bedrock - - 9 + + buttonBedrock - - labelDesc - - - 2 - - + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - buttonExport + + $this - - 0 + + 1 True + + 6, 13 + + + 760, 418 + + + NoControl + + + CenterParent + + + pckCenterOpen + + + MetroFramework.Forms.MetroForm, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + \ No newline at end of file From 1a6d34476f5f07323012140598abd52e0da12d55 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 23 Mar 2023 18:15:16 +0100 Subject: [PATCH 09/79] Update 'ModelsResources.ModelsFileInitializer' --- PCK-Studio/Forms/Utilities/ModelsResources.cs | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/PCK-Studio/Forms/Utilities/ModelsResources.cs b/PCK-Studio/Forms/Utilities/ModelsResources.cs index 43ed0e41..cdf91454 100644 --- a/PCK-Studio/Forms/Utilities/ModelsResources.cs +++ b/PCK-Studio/Forms/Utilities/ModelsResources.cs @@ -18,21 +18,12 @@ namespace PckStudio.Forms.Utilities public static Image[] entityImages => _entityImages ??= Resources.entities_sheet.CreateImageList(32).ToArray(); - public static void ModelsFileInitializer(PckFile.FileData file) + public static byte[] ModelsFileInitializer() { - using (var stream = new MemoryStream()) - { - var writer = new ModelFileWriter(new ModelContainer()); - writer.WriteToStream(stream); - file.SetData(stream.ToArray()); - } - } - - public static PckFile.FileData CreateNewModelsFile() - { - PckFile.FileData file = new PckFile.FileData("models.bin", PckFile.FileData.FileType.ModelsFile); - ModelsFileInitializer(file); - return file; + using var stream = new MemoryStream(); + var writer = new ModelFileWriter(new ModelContainer()); + writer.WriteToStream(stream); + return stream.ToArray(); } } } From ac70183f5b0777cdd5c93da47c4548640d2e3cd2 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 25 Mar 2023 17:50:48 +0100 Subject: [PATCH 10/79] Update OMI commit ref to fix a bug when creating new skin packs --- Vendor/OMI-Lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 76ba41c7..77ae65c6 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 76ba41c740d2814b03070fd1c78f39d39ee4e5d2 +Subproject commit 77ae65c68dfb7612d9883094210c0d572f425705 From 50fe39183ec7772e5b94eb4c181d7c88e87ce192 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 27 Mar 2023 18:24:18 +0200 Subject: [PATCH 11/79] Update LOCEditor and MainForm with LOCFileReader/Writer --- PCK-Studio/Forms/Editor/LOCEditor.cs | 3 ++- PCK-Studio/MainForm.cs | 6 ++++-- Vendor/OMI-Lib | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Forms/Editor/LOCEditor.cs b/PCK-Studio/Forms/Editor/LOCEditor.cs index 82b317e3..464bbe09 100644 --- a/PCK-Studio/Forms/Editor/LOCEditor.cs +++ b/PCK-Studio/Forms/Editor/LOCEditor.cs @@ -143,7 +143,8 @@ namespace PckStudio.Forms.Editor { using (var ms = new MemoryStream()) { - LOCFileWriter.Write(ms, currentLoc); + var writer = new LOCFileWriter(currentLoc, 2); + writer.WriteToStream(ms); _file.SetData(ms.ToArray()); } DialogResult = DialogResult.OK; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 61e09012..6e708d47 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -1226,7 +1226,8 @@ namespace PckStudio var locFile = new LOCFile(); locFile.InitializeDefault(packName); using var stream = new MemoryStream(); - LOCFileWriter.Write(stream, locFile); + var writer = new LOCFileWriter(locFile, 2); + writer.WriteToStream(stream); return stream.ToArray(); }); @@ -1592,7 +1593,8 @@ namespace PckStudio { using (var stream = new MemoryStream()) { - LOCFileWriter.Write(stream, locFile); + var writer = new LOCFileWriter(locFile, 2); + writer.WriteToStream(stream); locdata.SetData(stream.ToArray()); } return true; diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 77ae65c6..9b991f6d 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 77ae65c68dfb7612d9883094210c0d572f425705 +Subproject commit 9b991f6d1a3591b92693aaff8a39fbe68803f7db From e5130f390d6c264f301282c4871d28335f49ffc9 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 27 Mar 2023 19:06:40 +0200 Subject: [PATCH 12/79] Imporved AnimEditor --- .../Forms/Skins-And-Textures/addnewskin.cs | 2 +- .../Utilities/Skins/ANIMEditor.Designer.cs | 1342 ++++++++--------- .../Forms/Utilities/Skins/ANIMEditor.cs | 509 ++++--- PCK-Studio/MainForm.cs | 4 +- 4 files changed, 939 insertions(+), 918 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index f66a67e1..1ed91eca 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -366,7 +366,7 @@ namespace PckStudio private void buttonAnimGen_Click(object sender, EventArgs e) { using Forms.Utilities.Skins.ANIMEditor diag = new Forms.Utilities.Skins.ANIMEditor(anim.ToString()); - if (diag.ShowDialog(this) == DialogResult.OK && diag.saved) + if (diag.ShowDialog(this) == DialogResult.OK) { anim = new SkinANIM(diag.outANIM); DrawModel(); diff --git a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs index 7d206485..885f6d5f 100644 --- a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs +++ b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs @@ -28,712 +28,712 @@ /// private void InitializeComponent() { - this.closeButton = new MetroFramework.Controls.MetroButton(); - this.effectsGroup = new System.Windows.Forms.GroupBox(); - this.rightLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.headOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.bodyOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.slimCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.headCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.bodyCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.classicCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.effectsGroup2 = new System.Windows.Forms.GroupBox(); - this.rightLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.helmetCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.rightArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.leftArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.chestplateCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.unknownCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.crouchCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.dinnerboneCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.noArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.bobbingCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.santaCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.syncLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.staticArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.syncArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.statueCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.zombieCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.staticLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); - this.copyButton = new MetroFramework.Controls.MetroButton(); - this.importButton = new MetroFramework.Controls.MetroButton(); - this.exportButton = new MetroFramework.Controls.MetroButton(); - this.animValue = new MetroFramework.Controls.MetroLabel(); - this.uncheckButton = new MetroFramework.Controls.MetroButton(); - this.checkButton = new MetroFramework.Controls.MetroButton(); - this.toolTip = new MetroFramework.Components.MetroToolTip(); - this.resetButton = new MetroFramework.Controls.MetroButton(); - this.templateButton = new MetroFramework.Controls.MetroButton(); - this.effectsGroup.SuspendLayout(); - this.effectsGroup2.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // closeButton - // - this.closeButton.Location = new System.Drawing.Point(250, 514); - this.closeButton.Name = "closeButton"; - this.closeButton.Size = new System.Drawing.Size(126, 23); - this.closeButton.TabIndex = 1; - this.closeButton.Text = "Save"; - this.closeButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.closeButton.UseSelectable = true; - this.closeButton.Click += new System.EventHandler(this.closeButton_Click); - // - // effectsGroup - // - this.effectsGroup.Controls.Add(this.rightLegOCheckBox); - this.effectsGroup.Controls.Add(this.headOCheckBox); - this.effectsGroup.Controls.Add(this.leftLegOCheckBox); - this.effectsGroup.Controls.Add(this.leftArmOCheckBox); - this.effectsGroup.Controls.Add(this.bodyOCheckBox); - this.effectsGroup.Controls.Add(this.rightLegCheckBox); - this.effectsGroup.Controls.Add(this.slimCheckBox); - this.effectsGroup.Controls.Add(this.headCheckBox); - this.effectsGroup.Controls.Add(this.leftLegCheckBox); - this.effectsGroup.Controls.Add(this.rightArmCheckBox); - this.effectsGroup.Controls.Add(this.leftArmCheckBox); - this.effectsGroup.Controls.Add(this.bodyCheckBox); - this.effectsGroup.Controls.Add(this.classicCheckBox); - this.effectsGroup.Controls.Add(this.rightArmOCheckBox); - this.effectsGroup.ForeColor = System.Drawing.SystemColors.Window; - this.effectsGroup.Location = new System.Drawing.Point(22, 148); - this.effectsGroup.Name = "effectsGroup"; - this.effectsGroup.Size = new System.Drawing.Size(393, 238); - this.effectsGroup.TabIndex = 2; - this.effectsGroup.TabStop = false; - this.effectsGroup.Text = "Skin Flags"; - // - // rightLegOCheckBox - // - this.rightLegOCheckBox.AutoSize = true; - this.rightLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightLegOCheckBox.Location = new System.Drawing.Point(180, 208); - this.rightLegOCheckBox.Name = "rightLegOCheckBox"; - this.rightLegOCheckBox.Size = new System.Drawing.Size(199, 19); - this.rightLegOCheckBox.TabIndex = 13; - this.rightLegOCheckBox.Text = "Remove Right Leg Layer Box"; - this.rightLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.saveButton = new MetroFramework.Controls.MetroButton(); + this.effectsGroup = new System.Windows.Forms.GroupBox(); + this.rightLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.headOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.bodyOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.slimCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.headCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftLegCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftArmCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.bodyCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.classicCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightArmOCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.effectsGroup2 = new System.Windows.Forms.GroupBox(); + this.rightLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.helmetCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftLeggingCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.rightArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.leftArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.chestplateCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.unknownCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.crouchCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.dinnerboneCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.noArmorCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.bobbingCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.santaCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.syncLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.staticArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.syncArmsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.statueCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.zombieCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.staticLegsCheckBox = new MetroFramework.Controls.MetroCheckBox(); + this.copyButton = new MetroFramework.Controls.MetroButton(); + this.importButton = new MetroFramework.Controls.MetroButton(); + this.exportButton = new MetroFramework.Controls.MetroButton(); + this.animValue = new MetroFramework.Controls.MetroLabel(); + this.uncheckButton = new MetroFramework.Controls.MetroButton(); + this.checkButton = new MetroFramework.Controls.MetroButton(); + this.toolTip = new MetroFramework.Components.MetroToolTip(); + this.resetButton = new MetroFramework.Controls.MetroButton(); + this.templateButton = new MetroFramework.Controls.MetroButton(); + this.effectsGroup.SuspendLayout(); + this.effectsGroup2.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // saveButton + // + this.saveButton.Location = new System.Drawing.Point(250, 514); + this.saveButton.Name = "saveButton"; + this.saveButton.Size = new System.Drawing.Size(126, 23); + this.saveButton.TabIndex = 1; + this.saveButton.Text = "Save"; + this.saveButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.saveButton.UseSelectable = true; + this.saveButton.Click += new System.EventHandler(this.saveButton_Click); + // + // effectsGroup + // + this.effectsGroup.Controls.Add(this.rightLegOCheckBox); + this.effectsGroup.Controls.Add(this.headOCheckBox); + this.effectsGroup.Controls.Add(this.leftLegOCheckBox); + this.effectsGroup.Controls.Add(this.leftArmOCheckBox); + this.effectsGroup.Controls.Add(this.bodyOCheckBox); + this.effectsGroup.Controls.Add(this.rightLegCheckBox); + this.effectsGroup.Controls.Add(this.slimCheckBox); + this.effectsGroup.Controls.Add(this.headCheckBox); + this.effectsGroup.Controls.Add(this.leftLegCheckBox); + this.effectsGroup.Controls.Add(this.rightArmCheckBox); + this.effectsGroup.Controls.Add(this.leftArmCheckBox); + this.effectsGroup.Controls.Add(this.bodyCheckBox); + this.effectsGroup.Controls.Add(this.classicCheckBox); + this.effectsGroup.Controls.Add(this.rightArmOCheckBox); + this.effectsGroup.ForeColor = System.Drawing.SystemColors.Window; + this.effectsGroup.Location = new System.Drawing.Point(22, 148); + this.effectsGroup.Name = "effectsGroup"; + this.effectsGroup.Size = new System.Drawing.Size(393, 238); + this.effectsGroup.TabIndex = 2; + this.effectsGroup.TabStop = false; + this.effectsGroup.Text = "Skin Flags"; + // + // rightLegOCheckBox + // + this.rightLegOCheckBox.AutoSize = true; + this.rightLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightLegOCheckBox.Location = new System.Drawing.Point(180, 208); + this.rightLegOCheckBox.Name = "rightLegOCheckBox"; + this.rightLegOCheckBox.Size = new System.Drawing.Size(199, 19); + this.rightLegOCheckBox.TabIndex = 13; + this.rightLegOCheckBox.Text = "Remove Right Leg Layer Box"; + this.rightLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightLegOCheckBox.UseSelectable = true; - // - // headOCheckBox - // - this.headOCheckBox.AutoSize = true; - this.headOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.headOCheckBox.Location = new System.Drawing.Point(180, 50); - this.headOCheckBox.Name = "headOCheckBox"; - this.headOCheckBox.Size = new System.Drawing.Size(173, 19); - this.headOCheckBox.TabIndex = 12; - this.headOCheckBox.Text = "Remove Head Layer Box"; - this.headOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.headOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.rightLegOCheckBox.UseSelectable = true; + // + // headOCheckBox + // + this.headOCheckBox.AutoSize = true; + this.headOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.headOCheckBox.Location = new System.Drawing.Point(180, 50); + this.headOCheckBox.Name = "headOCheckBox"; + this.headOCheckBox.Size = new System.Drawing.Size(173, 19); + this.headOCheckBox.TabIndex = 12; + this.headOCheckBox.Text = "Remove Head Layer Box"; + this.headOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.headOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.headOCheckBox.UseSelectable = true; - // - // leftLegOCheckBox - // - this.leftLegOCheckBox.AutoSize = true; - this.leftLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftLegOCheckBox.Location = new System.Drawing.Point(180, 174); - this.leftLegOCheckBox.Name = "leftLegOCheckBox"; - this.leftLegOCheckBox.Size = new System.Drawing.Size(190, 19); - this.leftLegOCheckBox.TabIndex = 11; - this.leftLegOCheckBox.Text = "Remove Left Leg Layer Box"; - this.leftLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.headOCheckBox.UseSelectable = true; + // + // leftLegOCheckBox + // + this.leftLegOCheckBox.AutoSize = true; + this.leftLegOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftLegOCheckBox.Location = new System.Drawing.Point(180, 174); + this.leftLegOCheckBox.Name = "leftLegOCheckBox"; + this.leftLegOCheckBox.Size = new System.Drawing.Size(190, 19); + this.leftLegOCheckBox.TabIndex = 11; + this.leftLegOCheckBox.Text = "Remove Left Leg Layer Box"; + this.leftLegOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftLegOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftLegOCheckBox.UseSelectable = true; - // - // leftArmOCheckBox - // - this.leftArmOCheckBox.AutoSize = true; - this.leftArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftArmOCheckBox.Location = new System.Drawing.Point(180, 112); - this.leftArmOCheckBox.Name = "leftArmOCheckBox"; - this.leftArmOCheckBox.Size = new System.Drawing.Size(194, 19); - this.leftArmOCheckBox.TabIndex = 9; - this.leftArmOCheckBox.Text = "Remove Left Arm Layer Box"; - this.leftArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftLegOCheckBox.UseSelectable = true; + // + // leftArmOCheckBox + // + this.leftArmOCheckBox.AutoSize = true; + this.leftArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftArmOCheckBox.Location = new System.Drawing.Point(180, 112); + this.leftArmOCheckBox.Name = "leftArmOCheckBox"; + this.leftArmOCheckBox.Size = new System.Drawing.Size(194, 19); + this.leftArmOCheckBox.TabIndex = 9; + this.leftArmOCheckBox.Text = "Remove Left Arm Layer Box"; + this.leftArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftArmOCheckBox.UseSelectable = true; - // - // bodyOCheckBox - // - this.bodyOCheckBox.AutoSize = true; - this.bodyOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.bodyOCheckBox.Location = new System.Drawing.Point(180, 81); - this.bodyOCheckBox.Name = "bodyOCheckBox"; - this.bodyOCheckBox.Size = new System.Drawing.Size(172, 19); - this.bodyOCheckBox.TabIndex = 8; - this.bodyOCheckBox.Text = "Remove Body Layer Box"; - this.bodyOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.bodyOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftArmOCheckBox.UseSelectable = true; + // + // bodyOCheckBox + // + this.bodyOCheckBox.AutoSize = true; + this.bodyOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.bodyOCheckBox.Location = new System.Drawing.Point(180, 81); + this.bodyOCheckBox.Name = "bodyOCheckBox"; + this.bodyOCheckBox.Size = new System.Drawing.Size(172, 19); + this.bodyOCheckBox.TabIndex = 8; + this.bodyOCheckBox.Text = "Remove Body Layer Box"; + this.bodyOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.bodyOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.bodyOCheckBox.UseSelectable = true; - // - // rightLegCheckBox - // - this.rightLegCheckBox.AutoSize = true; - this.rightLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightLegCheckBox.Location = new System.Drawing.Point(6, 208); - this.rightLegCheckBox.Name = "rightLegCheckBox"; - this.rightLegCheckBox.Size = new System.Drawing.Size(162, 19); - this.rightLegCheckBox.TabIndex = 7; - this.rightLegCheckBox.Text = "Remove Right Leg Box"; - this.rightLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.bodyOCheckBox.UseSelectable = true; + // + // rightLegCheckBox + // + this.rightLegCheckBox.AutoSize = true; + this.rightLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightLegCheckBox.Location = new System.Drawing.Point(6, 208); + this.rightLegCheckBox.Name = "rightLegCheckBox"; + this.rightLegCheckBox.Size = new System.Drawing.Size(162, 19); + this.rightLegCheckBox.TabIndex = 7; + this.rightLegCheckBox.Text = "Remove Right Leg Box"; + this.rightLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightLegCheckBox.UseSelectable = true; - // - // slimCheckBox - // - this.slimCheckBox.AutoSize = true; - this.slimCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.slimCheckBox.Location = new System.Drawing.Point(180, 19); - this.slimCheckBox.Name = "slimCheckBox"; - this.slimCheckBox.Size = new System.Drawing.Size(151, 19); - this.slimCheckBox.TabIndex = 6; - this.slimCheckBox.Text = "64x64 Alex/Slim Skin"; - this.slimCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.slimCheckBox, " The 1.8 style skin type with slim arms, overlays for each part, and sep" + + this.rightLegCheckBox.UseSelectable = true; + // + // slimCheckBox + // + this.slimCheckBox.AutoSize = true; + this.slimCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.slimCheckBox.Location = new System.Drawing.Point(180, 19); + this.slimCheckBox.Name = "slimCheckBox"; + this.slimCheckBox.Size = new System.Drawing.Size(151, 19); + this.slimCheckBox.TabIndex = 6; + this.slimCheckBox.Text = "64x64 Alex/Slim Skin"; + this.slimCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.slimCheckBox, " The 1.8 style skin type with slim arms, overlays for each part, and sep" + "arate textures for right and left limbs. Resolution is also set to 64x64. " + " "); - this.slimCheckBox.UseSelectable = true; - // - // headCheckBox - // - this.headCheckBox.AutoSize = true; - this.headCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.headCheckBox.Location = new System.Drawing.Point(6, 50); - this.headCheckBox.Name = "headCheckBox"; - this.headCheckBox.Size = new System.Drawing.Size(136, 19); - this.headCheckBox.TabIndex = 5; - this.headCheckBox.Text = "Remove Head Box"; - this.headCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.headCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.slimCheckBox.UseSelectable = true; + // + // headCheckBox + // + this.headCheckBox.AutoSize = true; + this.headCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.headCheckBox.Location = new System.Drawing.Point(6, 50); + this.headCheckBox.Name = "headCheckBox"; + this.headCheckBox.Size = new System.Drawing.Size(136, 19); + this.headCheckBox.TabIndex = 5; + this.headCheckBox.Text = "Remove Head Box"; + this.headCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.headCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.headCheckBox.UseSelectable = true; - // - // leftLegCheckBox - // - this.leftLegCheckBox.AutoSize = true; - this.leftLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftLegCheckBox.Location = new System.Drawing.Point(6, 174); - this.leftLegCheckBox.Name = "leftLegCheckBox"; - this.leftLegCheckBox.Size = new System.Drawing.Size(153, 19); - this.leftLegCheckBox.TabIndex = 4; - this.leftLegCheckBox.Text = "Remove Left Leg Box"; - this.leftLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.headCheckBox.UseSelectable = true; + // + // leftLegCheckBox + // + this.leftLegCheckBox.AutoSize = true; + this.leftLegCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftLegCheckBox.Location = new System.Drawing.Point(6, 174); + this.leftLegCheckBox.Name = "leftLegCheckBox"; + this.leftLegCheckBox.Size = new System.Drawing.Size(153, 19); + this.leftLegCheckBox.TabIndex = 4; + this.leftLegCheckBox.Text = "Remove Left Leg Box"; + this.leftLegCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftLegCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftLegCheckBox.UseSelectable = true; - // - // rightArmCheckBox - // - this.rightArmCheckBox.AutoSize = true; - this.rightArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightArmCheckBox.Location = new System.Drawing.Point(6, 143); - this.rightArmCheckBox.Name = "rightArmCheckBox"; - this.rightArmCheckBox.Size = new System.Drawing.Size(166, 19); - this.rightArmCheckBox.TabIndex = 3; - this.rightArmCheckBox.Text = "Remove Right Arm Box"; - this.rightArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftLegCheckBox.UseSelectable = true; + // + // rightArmCheckBox + // + this.rightArmCheckBox.AutoSize = true; + this.rightArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightArmCheckBox.Location = new System.Drawing.Point(6, 143); + this.rightArmCheckBox.Name = "rightArmCheckBox"; + this.rightArmCheckBox.Size = new System.Drawing.Size(166, 19); + this.rightArmCheckBox.TabIndex = 3; + this.rightArmCheckBox.Text = "Remove Right Arm Box"; + this.rightArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightArmCheckBox.UseSelectable = true; - // - // leftArmCheckBox - // - this.leftArmCheckBox.AutoSize = true; - this.leftArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftArmCheckBox.Location = new System.Drawing.Point(6, 112); - this.leftArmCheckBox.Name = "leftArmCheckBox"; - this.leftArmCheckBox.Size = new System.Drawing.Size(157, 19); - this.leftArmCheckBox.TabIndex = 2; - this.leftArmCheckBox.Text = "Remove Left Arm Box"; - this.leftArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.rightArmCheckBox.UseSelectable = true; + // + // leftArmCheckBox + // + this.leftArmCheckBox.AutoSize = true; + this.leftArmCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftArmCheckBox.Location = new System.Drawing.Point(6, 112); + this.leftArmCheckBox.Name = "leftArmCheckBox"; + this.leftArmCheckBox.Size = new System.Drawing.Size(157, 19); + this.leftArmCheckBox.TabIndex = 2; + this.leftArmCheckBox.Text = "Remove Left Arm Box"; + this.leftArmCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftArmCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.leftArmCheckBox.UseSelectable = true; - // - // bodyCheckBox - // - this.bodyCheckBox.AutoSize = true; - this.bodyCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.bodyCheckBox.Location = new System.Drawing.Point(6, 81); - this.bodyCheckBox.Name = "bodyCheckBox"; - this.bodyCheckBox.Size = new System.Drawing.Size(135, 19); - this.bodyCheckBox.TabIndex = 1; - this.bodyCheckBox.Text = "Remove Body Box"; - this.bodyCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.bodyCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.leftArmCheckBox.UseSelectable = true; + // + // bodyCheckBox + // + this.bodyCheckBox.AutoSize = true; + this.bodyCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.bodyCheckBox.Location = new System.Drawing.Point(6, 81); + this.bodyCheckBox.Name = "bodyCheckBox"; + this.bodyCheckBox.Size = new System.Drawing.Size(135, 19); + this.bodyCheckBox.TabIndex = 1; + this.bodyCheckBox.Text = "Remove Body Box"; + this.bodyCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.bodyCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.bodyCheckBox.UseSelectable = true; - // - // classicCheckBox - // - this.classicCheckBox.AutoSize = true; - this.classicCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.classicCheckBox.Location = new System.Drawing.Point(6, 19); - this.classicCheckBox.Name = "classicCheckBox"; - this.classicCheckBox.Size = new System.Drawing.Size(136, 19); - this.classicCheckBox.TabIndex = 0; - this.classicCheckBox.Text = "64x64 Classic Skin"; - this.classicCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.classicCheckBox, " The 1.8 style skin type with overlays for each part and separate textur" + + this.bodyCheckBox.UseSelectable = true; + // + // classicCheckBox + // + this.classicCheckBox.AutoSize = true; + this.classicCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.classicCheckBox.Location = new System.Drawing.Point(6, 19); + this.classicCheckBox.Name = "classicCheckBox"; + this.classicCheckBox.Size = new System.Drawing.Size(136, 19); + this.classicCheckBox.TabIndex = 0; + this.classicCheckBox.Text = "64x64 Classic Skin"; + this.classicCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.classicCheckBox, " The 1.8 style skin type with overlays for each part and separate textur" + "es for right and left limbs. Resolution is also set to 64x64. "); - this.classicCheckBox.UseSelectable = true; - // - // rightArmOCheckBox - // - this.rightArmOCheckBox.AutoSize = true; - this.rightArmOCheckBox.BackColor = System.Drawing.Color.Transparent; - this.rightArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightArmOCheckBox.Location = new System.Drawing.Point(180, 143); - this.rightArmOCheckBox.Name = "rightArmOCheckBox"; - this.rightArmOCheckBox.Size = new System.Drawing.Size(203, 19); - this.rightArmOCheckBox.TabIndex = 10; - this.rightArmOCheckBox.Text = "Remove Right Arm Layer Box"; - this.rightArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + + this.classicCheckBox.UseSelectable = true; + // + // rightArmOCheckBox + // + this.rightArmOCheckBox.AutoSize = true; + this.rightArmOCheckBox.BackColor = System.Drawing.Color.Transparent; + this.rightArmOCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightArmOCheckBox.Location = new System.Drawing.Point(180, 143); + this.rightArmOCheckBox.Name = "rightArmOCheckBox"; + this.rightArmOCheckBox.Size = new System.Drawing.Size(203, 19); + this.rightArmOCheckBox.TabIndex = 10; + this.rightArmOCheckBox.Text = "Remove Right Arm Layer Box"; + this.rightArmOCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightArmOCheckBox, " Removes the parent Box for this part. You can still make new boxes f" + "or this part. Armor will be disabled for this part, but can be rendered again wi" + "th the armor flags. "); - this.rightArmOCheckBox.UseSelectable = true; - // - // effectsGroup2 - // - this.effectsGroup2.Controls.Add(this.rightLeggingCheckBox); - this.effectsGroup2.Controls.Add(this.helmetCheckBox); - this.effectsGroup2.Controls.Add(this.leftLeggingCheckBox); - this.effectsGroup2.Controls.Add(this.rightArmorCheckBox); - this.effectsGroup2.Controls.Add(this.leftArmorCheckBox); - this.effectsGroup2.Controls.Add(this.chestplateCheckBox); - this.effectsGroup2.ForeColor = System.Drawing.SystemColors.Window; - this.effectsGroup2.Location = new System.Drawing.Point(421, 183); - this.effectsGroup2.Name = "effectsGroup2"; - this.effectsGroup2.Size = new System.Drawing.Size(188, 203); - this.effectsGroup2.TabIndex = 14; - this.effectsGroup2.TabStop = false; - this.effectsGroup2.Text = "Armor Flags"; - // - // rightLeggingCheckBox - // - this.rightLeggingCheckBox.AutoSize = true; - this.rightLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightLeggingCheckBox.Location = new System.Drawing.Point(6, 174); - this.rightLeggingCheckBox.Name = "rightLeggingCheckBox"; - this.rightLeggingCheckBox.Size = new System.Drawing.Size(173, 19); - this.rightLeggingCheckBox.TabIndex = 7; - this.rightLeggingCheckBox.Text = "Render Right Leg Armor"; - this.rightLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightLeggingCheckBox, " Forcefully enables the specified armor piece."); - this.rightLeggingCheckBox.UseSelectable = true; - // - // helmetCheckBox - // - this.helmetCheckBox.AutoSize = true; - this.helmetCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.helmetCheckBox.Location = new System.Drawing.Point(6, 19); - this.helmetCheckBox.Name = "helmetCheckBox"; - this.helmetCheckBox.Size = new System.Drawing.Size(147, 19); - this.helmetCheckBox.TabIndex = 5; - this.helmetCheckBox.Text = "Render Head Armor"; - this.helmetCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.helmetCheckBox, " Forcefully enables the specified armor piece."); - this.helmetCheckBox.UseSelectable = true; - // - // leftLeggingCheckBox - // - this.leftLeggingCheckBox.AutoSize = true; - this.leftLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftLeggingCheckBox.Location = new System.Drawing.Point(6, 143); - this.leftLeggingCheckBox.Name = "leftLeggingCheckBox"; - this.leftLeggingCheckBox.Size = new System.Drawing.Size(164, 19); - this.leftLeggingCheckBox.TabIndex = 4; - this.leftLeggingCheckBox.Text = "Render Left Leg Armor"; - this.leftLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftLeggingCheckBox, " Forcefully enables the specified armor piece."); - this.leftLeggingCheckBox.UseSelectable = true; - // - // rightArmorCheckBox - // - this.rightArmorCheckBox.AutoSize = true; - this.rightArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.rightArmorCheckBox.Location = new System.Drawing.Point(6, 112); - this.rightArmorCheckBox.Name = "rightArmorCheckBox"; - this.rightArmorCheckBox.Size = new System.Drawing.Size(177, 19); - this.rightArmorCheckBox.TabIndex = 3; - this.rightArmorCheckBox.Text = "Render Right Arm Armor"; - this.rightArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.rightArmorCheckBox, " Forcefully enables the specified armor piece."); - this.rightArmorCheckBox.UseSelectable = true; - // - // leftArmorCheckBox - // - this.leftArmorCheckBox.AutoSize = true; - this.leftArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.leftArmorCheckBox.Location = new System.Drawing.Point(6, 81); - this.leftArmorCheckBox.Name = "leftArmorCheckBox"; - this.leftArmorCheckBox.Size = new System.Drawing.Size(168, 19); - this.leftArmorCheckBox.TabIndex = 2; - this.leftArmorCheckBox.Text = "Render Left Arm Armor"; - this.leftArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.leftArmorCheckBox, " Forcefully enables the specified armor piece."); - this.leftArmorCheckBox.UseSelectable = true; - // - // chestplateCheckBox - // - this.chestplateCheckBox.AutoSize = true; - this.chestplateCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.chestplateCheckBox.Location = new System.Drawing.Point(6, 50); - this.chestplateCheckBox.Name = "chestplateCheckBox"; - this.chestplateCheckBox.Size = new System.Drawing.Size(146, 19); - this.chestplateCheckBox.TabIndex = 1; - this.chestplateCheckBox.Text = "Render Body Armor"; - this.chestplateCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.chestplateCheckBox, " Forcefully enables the specified armor piece."); - this.chestplateCheckBox.UseSelectable = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.unknownCheckBox); - this.groupBox1.Controls.Add(this.crouchCheckBox); - this.groupBox1.Controls.Add(this.dinnerboneCheckBox); - this.groupBox1.Controls.Add(this.noArmorCheckBox); - this.groupBox1.Controls.Add(this.bobbingCheckBox); - this.groupBox1.Controls.Add(this.santaCheckBox); - this.groupBox1.Controls.Add(this.syncLegsCheckBox); - this.groupBox1.Controls.Add(this.staticArmsCheckBox); - this.groupBox1.Controls.Add(this.syncArmsCheckBox); - this.groupBox1.Controls.Add(this.statueCheckBox); - this.groupBox1.Controls.Add(this.zombieCheckBox); - this.groupBox1.Controls.Add(this.staticLegsCheckBox); - this.groupBox1.ForeColor = System.Drawing.SystemColors.Window; - this.groupBox1.Location = new System.Drawing.Point(22, 388); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(587, 115); - this.groupBox1.TabIndex = 15; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Special Animations"; - // - // unknownCheckBox - // - this.unknownCheckBox.AutoSize = true; - this.unknownCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.unknownCheckBox.Location = new System.Drawing.Point(126, 81); - this.unknownCheckBox.Name = "unknownCheckBox"; - this.unknownCheckBox.Size = new System.Drawing.Size(84, 19); - this.unknownCheckBox.TabIndex = 13; - this.unknownCheckBox.Text = "Unknown"; - this.unknownCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.unknownCheckBox, " If you figure out what this is. Please reach out to MNL#8935 on Discord. (: " + + this.rightArmOCheckBox.UseSelectable = true; + // + // effectsGroup2 + // + this.effectsGroup2.Controls.Add(this.rightLeggingCheckBox); + this.effectsGroup2.Controls.Add(this.helmetCheckBox); + this.effectsGroup2.Controls.Add(this.leftLeggingCheckBox); + this.effectsGroup2.Controls.Add(this.rightArmorCheckBox); + this.effectsGroup2.Controls.Add(this.leftArmorCheckBox); + this.effectsGroup2.Controls.Add(this.chestplateCheckBox); + this.effectsGroup2.ForeColor = System.Drawing.SystemColors.Window; + this.effectsGroup2.Location = new System.Drawing.Point(421, 183); + this.effectsGroup2.Name = "effectsGroup2"; + this.effectsGroup2.Size = new System.Drawing.Size(188, 203); + this.effectsGroup2.TabIndex = 14; + this.effectsGroup2.TabStop = false; + this.effectsGroup2.Text = "Armor Flags"; + // + // rightLeggingCheckBox + // + this.rightLeggingCheckBox.AutoSize = true; + this.rightLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightLeggingCheckBox.Location = new System.Drawing.Point(6, 174); + this.rightLeggingCheckBox.Name = "rightLeggingCheckBox"; + this.rightLeggingCheckBox.Size = new System.Drawing.Size(173, 19); + this.rightLeggingCheckBox.TabIndex = 7; + this.rightLeggingCheckBox.Text = "Render Right Leg Armor"; + this.rightLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightLeggingCheckBox, " Forcefully enables the specified armor piece."); + this.rightLeggingCheckBox.UseSelectable = true; + // + // helmetCheckBox + // + this.helmetCheckBox.AutoSize = true; + this.helmetCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.helmetCheckBox.Location = new System.Drawing.Point(6, 19); + this.helmetCheckBox.Name = "helmetCheckBox"; + this.helmetCheckBox.Size = new System.Drawing.Size(147, 19); + this.helmetCheckBox.TabIndex = 5; + this.helmetCheckBox.Text = "Render Head Armor"; + this.helmetCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.helmetCheckBox, " Forcefully enables the specified armor piece."); + this.helmetCheckBox.UseSelectable = true; + // + // leftLeggingCheckBox + // + this.leftLeggingCheckBox.AutoSize = true; + this.leftLeggingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftLeggingCheckBox.Location = new System.Drawing.Point(6, 143); + this.leftLeggingCheckBox.Name = "leftLeggingCheckBox"; + this.leftLeggingCheckBox.Size = new System.Drawing.Size(164, 19); + this.leftLeggingCheckBox.TabIndex = 4; + this.leftLeggingCheckBox.Text = "Render Left Leg Armor"; + this.leftLeggingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftLeggingCheckBox, " Forcefully enables the specified armor piece."); + this.leftLeggingCheckBox.UseSelectable = true; + // + // rightArmorCheckBox + // + this.rightArmorCheckBox.AutoSize = true; + this.rightArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.rightArmorCheckBox.Location = new System.Drawing.Point(6, 112); + this.rightArmorCheckBox.Name = "rightArmorCheckBox"; + this.rightArmorCheckBox.Size = new System.Drawing.Size(177, 19); + this.rightArmorCheckBox.TabIndex = 3; + this.rightArmorCheckBox.Text = "Render Right Arm Armor"; + this.rightArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.rightArmorCheckBox, " Forcefully enables the specified armor piece."); + this.rightArmorCheckBox.UseSelectable = true; + // + // leftArmorCheckBox + // + this.leftArmorCheckBox.AutoSize = true; + this.leftArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.leftArmorCheckBox.Location = new System.Drawing.Point(6, 81); + this.leftArmorCheckBox.Name = "leftArmorCheckBox"; + this.leftArmorCheckBox.Size = new System.Drawing.Size(168, 19); + this.leftArmorCheckBox.TabIndex = 2; + this.leftArmorCheckBox.Text = "Render Left Arm Armor"; + this.leftArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.leftArmorCheckBox, " Forcefully enables the specified armor piece."); + this.leftArmorCheckBox.UseSelectable = true; + // + // chestplateCheckBox + // + this.chestplateCheckBox.AutoSize = true; + this.chestplateCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.chestplateCheckBox.Location = new System.Drawing.Point(6, 50); + this.chestplateCheckBox.Name = "chestplateCheckBox"; + this.chestplateCheckBox.Size = new System.Drawing.Size(146, 19); + this.chestplateCheckBox.TabIndex = 1; + this.chestplateCheckBox.Text = "Render Body Armor"; + this.chestplateCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.chestplateCheckBox, " Forcefully enables the specified armor piece."); + this.chestplateCheckBox.UseSelectable = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.unknownCheckBox); + this.groupBox1.Controls.Add(this.crouchCheckBox); + this.groupBox1.Controls.Add(this.dinnerboneCheckBox); + this.groupBox1.Controls.Add(this.noArmorCheckBox); + this.groupBox1.Controls.Add(this.bobbingCheckBox); + this.groupBox1.Controls.Add(this.santaCheckBox); + this.groupBox1.Controls.Add(this.syncLegsCheckBox); + this.groupBox1.Controls.Add(this.staticArmsCheckBox); + this.groupBox1.Controls.Add(this.syncArmsCheckBox); + this.groupBox1.Controls.Add(this.statueCheckBox); + this.groupBox1.Controls.Add(this.zombieCheckBox); + this.groupBox1.Controls.Add(this.staticLegsCheckBox); + this.groupBox1.ForeColor = System.Drawing.SystemColors.Window; + this.groupBox1.Location = new System.Drawing.Point(22, 388); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(587, 115); + this.groupBox1.TabIndex = 15; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Special Animations"; + // + // unknownCheckBox + // + this.unknownCheckBox.AutoSize = true; + this.unknownCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.unknownCheckBox.Location = new System.Drawing.Point(126, 81); + this.unknownCheckBox.Name = "unknownCheckBox"; + this.unknownCheckBox.Size = new System.Drawing.Size(84, 19); + this.unknownCheckBox.TabIndex = 13; + this.unknownCheckBox.Text = "Unknown"; + this.unknownCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.unknownCheckBox, " If you figure out what this is. Please reach out to MNL#8935 on Discord. (: " + ""); - this.unknownCheckBox.UseSelectable = true; - // - // crouchCheckBox - // - this.crouchCheckBox.AutoSize = true; - this.crouchCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.crouchCheckBox.Location = new System.Drawing.Point(126, 50); - this.crouchCheckBox.Name = "crouchCheckBox"; - this.crouchCheckBox.Size = new System.Drawing.Size(137, 19); - this.crouchCheckBox.TabIndex = 12; - this.crouchCheckBox.Text = "Backwards Crouch"; - this.crouchCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.crouchCheckBox, " The crouch animation is reversed so that the arms and body lean back. Usefu" + + this.unknownCheckBox.UseSelectable = true; + // + // crouchCheckBox + // + this.crouchCheckBox.AutoSize = true; + this.crouchCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.crouchCheckBox.Location = new System.Drawing.Point(126, 50); + this.crouchCheckBox.Name = "crouchCheckBox"; + this.crouchCheckBox.Size = new System.Drawing.Size(137, 19); + this.crouchCheckBox.TabIndex = 12; + this.crouchCheckBox.Text = "Backwards Crouch"; + this.crouchCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.crouchCheckBox, " The crouch animation is reversed so that the arms and body lean back. Usefu" + "l for small skins. "); - this.crouchCheckBox.UseSelectable = true; - // - // dinnerboneCheckBox - // - this.dinnerboneCheckBox.AutoSize = true; - this.dinnerboneCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.dinnerboneCheckBox.Location = new System.Drawing.Point(126, 19); - this.dinnerboneCheckBox.Name = "dinnerboneCheckBox"; - this.dinnerboneCheckBox.Size = new System.Drawing.Size(97, 19); - this.dinnerboneCheckBox.TabIndex = 11; - this.dinnerboneCheckBox.Text = "Dinnerbone"; - this.dinnerboneCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.dinnerboneCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.dinnerboneCheckBox, " Flips the skin upside down like Dinnerbone\'s skin, a Minecraft developer. "); - this.dinnerboneCheckBox.UseSelectable = true; - // - // noArmorCheckBox - // - this.noArmorCheckBox.AutoSize = true; - this.noArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.noArmorCheckBox.Location = new System.Drawing.Point(420, 81); - this.noArmorCheckBox.Name = "noArmorCheckBox"; - this.noArmorCheckBox.Size = new System.Drawing.Size(131, 19); - this.noArmorCheckBox.TabIndex = 10; - this.noArmorCheckBox.Text = "Disable All Armor"; - this.noArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.noArmorCheckBox, " Disables all armor desptie the armor flags. "); - this.noArmorCheckBox.UseSelectable = true; - // - // bobbingCheckBox - // - this.bobbingCheckBox.AutoSize = true; - this.bobbingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.bobbingCheckBox.Location = new System.Drawing.Point(272, 50); - this.bobbingCheckBox.Name = "bobbingCheckBox"; - this.bobbingCheckBox.Size = new System.Drawing.Size(124, 19); - this.bobbingCheckBox.TabIndex = 9; - this.bobbingCheckBox.Text = "Disable Bobbing"; - this.bobbingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.bobbingCheckBox, " Disables the bobbing effect in first person."); - this.bobbingCheckBox.UseSelectable = true; - // - // santaCheckBox - // - this.santaCheckBox.AutoSize = true; - this.santaCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.santaCheckBox.Location = new System.Drawing.Point(420, 50); - this.santaCheckBox.Name = "santaCheckBox"; - this.santaCheckBox.Size = new System.Drawing.Size(86, 19); - this.santaCheckBox.TabIndex = 8; - this.santaCheckBox.Text = "Bad Santa"; - this.santaCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.santaCheckBox, " The skin sits down after about 10 seconds of no controller input. Made for" + + this.crouchCheckBox.UseSelectable = true; + // + // dinnerboneCheckBox + // + this.dinnerboneCheckBox.AutoSize = true; + this.dinnerboneCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.dinnerboneCheckBox.Location = new System.Drawing.Point(126, 19); + this.dinnerboneCheckBox.Name = "dinnerboneCheckBox"; + this.dinnerboneCheckBox.Size = new System.Drawing.Size(97, 19); + this.dinnerboneCheckBox.TabIndex = 11; + this.dinnerboneCheckBox.Text = "Dinnerbone"; + this.dinnerboneCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.dinnerboneCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.dinnerboneCheckBox, " Flips the skin upside down like Dinnerbone\'s skin, a Minecraft developer. "); + this.dinnerboneCheckBox.UseSelectable = true; + // + // noArmorCheckBox + // + this.noArmorCheckBox.AutoSize = true; + this.noArmorCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.noArmorCheckBox.Location = new System.Drawing.Point(420, 81); + this.noArmorCheckBox.Name = "noArmorCheckBox"; + this.noArmorCheckBox.Size = new System.Drawing.Size(131, 19); + this.noArmorCheckBox.TabIndex = 10; + this.noArmorCheckBox.Text = "Disable All Armor"; + this.noArmorCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.noArmorCheckBox, " Disables all armor desptie the armor flags. "); + this.noArmorCheckBox.UseSelectable = true; + // + // bobbingCheckBox + // + this.bobbingCheckBox.AutoSize = true; + this.bobbingCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.bobbingCheckBox.Location = new System.Drawing.Point(272, 50); + this.bobbingCheckBox.Name = "bobbingCheckBox"; + this.bobbingCheckBox.Size = new System.Drawing.Size(124, 19); + this.bobbingCheckBox.TabIndex = 9; + this.bobbingCheckBox.Text = "Disable Bobbing"; + this.bobbingCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.bobbingCheckBox, " Disables the bobbing effect in first person."); + this.bobbingCheckBox.UseSelectable = true; + // + // santaCheckBox + // + this.santaCheckBox.AutoSize = true; + this.santaCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.santaCheckBox.Location = new System.Drawing.Point(420, 50); + this.santaCheckBox.Name = "santaCheckBox"; + this.santaCheckBox.Size = new System.Drawing.Size(86, 19); + this.santaCheckBox.TabIndex = 8; + this.santaCheckBox.Text = "Bad Santa"; + this.santaCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.santaCheckBox, " The skin sits down after about 10 seconds of no controller input. Made for" + " Bad Santa in the \"Festive\" skin pack. "); - this.santaCheckBox.UseSelectable = true; - // - // syncLegsCheckBox - // - this.syncLegsCheckBox.AutoSize = true; - this.syncLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.syncLegsCheckBox.Location = new System.Drawing.Point(272, 19); - this.syncLegsCheckBox.Name = "syncLegsCheckBox"; - this.syncLegsCheckBox.Size = new System.Drawing.Size(136, 19); - this.syncLegsCheckBox.TabIndex = 7; - this.syncLegsCheckBox.Text = "Synchronous Legs"; - this.syncLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.syncLegsCheckBox, " These parts will move at the same time and angle as each other. "); - this.syncLegsCheckBox.UseSelectable = true; - // - // staticArmsCheckBox - // - this.staticArmsCheckBox.AutoSize = true; - this.staticArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.staticArmsCheckBox.Location = new System.Drawing.Point(6, 19); - this.staticArmsCheckBox.Name = "staticArmsCheckBox"; - this.staticArmsCheckBox.Size = new System.Drawing.Size(94, 19); - this.staticArmsCheckBox.TabIndex = 5; - this.staticArmsCheckBox.Text = "Static Arms"; - this.staticArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.staticArmsCheckBox, " These parts will not move in most animations. "); - this.staticArmsCheckBox.UseSelectable = true; - // - // syncArmsCheckBox - // - this.syncArmsCheckBox.AutoSize = true; - this.syncArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.syncArmsCheckBox.Location = new System.Drawing.Point(420, 19); - this.syncArmsCheckBox.Name = "syncArmsCheckBox"; - this.syncArmsCheckBox.Size = new System.Drawing.Size(140, 19); - this.syncArmsCheckBox.TabIndex = 4; - this.syncArmsCheckBox.Text = "Synchronous Arms"; - this.syncArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.syncArmsCheckBox, " These parts will move at the same time and angle as each other. "); - this.syncArmsCheckBox.UseSelectable = true; - // - // statueCheckBox - // - this.statueCheckBox.AutoSize = true; - this.statueCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.statueCheckBox.Location = new System.Drawing.Point(272, 81); - this.statueCheckBox.Name = "statueCheckBox"; - this.statueCheckBox.Size = new System.Drawing.Size(126, 19); - this.statueCheckBox.TabIndex = 3; - this.statueCheckBox.Text = "Statue of Liberty"; - this.statueCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.statueCheckBox, " The right arm is lifted like the Statue of Liberty. Made for Angel of Libe" + + this.santaCheckBox.UseSelectable = true; + // + // syncLegsCheckBox + // + this.syncLegsCheckBox.AutoSize = true; + this.syncLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.syncLegsCheckBox.Location = new System.Drawing.Point(272, 19); + this.syncLegsCheckBox.Name = "syncLegsCheckBox"; + this.syncLegsCheckBox.Size = new System.Drawing.Size(136, 19); + this.syncLegsCheckBox.TabIndex = 7; + this.syncLegsCheckBox.Text = "Synchronous Legs"; + this.syncLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.syncLegsCheckBox, " These parts will move at the same time and angle as each other. "); + this.syncLegsCheckBox.UseSelectable = true; + // + // staticArmsCheckBox + // + this.staticArmsCheckBox.AutoSize = true; + this.staticArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.staticArmsCheckBox.Location = new System.Drawing.Point(6, 19); + this.staticArmsCheckBox.Name = "staticArmsCheckBox"; + this.staticArmsCheckBox.Size = new System.Drawing.Size(94, 19); + this.staticArmsCheckBox.TabIndex = 5; + this.staticArmsCheckBox.Text = "Static Arms"; + this.staticArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.staticArmsCheckBox, " These parts will not move in most animations. "); + this.staticArmsCheckBox.UseSelectable = true; + // + // syncArmsCheckBox + // + this.syncArmsCheckBox.AutoSize = true; + this.syncArmsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.syncArmsCheckBox.Location = new System.Drawing.Point(420, 19); + this.syncArmsCheckBox.Name = "syncArmsCheckBox"; + this.syncArmsCheckBox.Size = new System.Drawing.Size(140, 19); + this.syncArmsCheckBox.TabIndex = 4; + this.syncArmsCheckBox.Text = "Synchronous Arms"; + this.syncArmsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.syncArmsCheckBox, " These parts will move at the same time and angle as each other. "); + this.syncArmsCheckBox.UseSelectable = true; + // + // statueCheckBox + // + this.statueCheckBox.AutoSize = true; + this.statueCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.statueCheckBox.Location = new System.Drawing.Point(272, 81); + this.statueCheckBox.Name = "statueCheckBox"; + this.statueCheckBox.Size = new System.Drawing.Size(126, 19); + this.statueCheckBox.TabIndex = 3; + this.statueCheckBox.Text = "Statue of Liberty"; + this.statueCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.statueCheckBox, " The right arm is lifted like the Statue of Liberty. Made for Angel of Libe" + "rty in the \"Doctor Who Volume I\" skin pack. "); - this.statueCheckBox.UseSelectable = true; - // - // zombieCheckBox - // - this.zombieCheckBox.AutoSize = true; - this.zombieCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.zombieCheckBox.Location = new System.Drawing.Point(6, 81); - this.zombieCheckBox.Name = "zombieCheckBox"; - this.zombieCheckBox.Size = new System.Drawing.Size(107, 19); - this.zombieCheckBox.TabIndex = 2; - this.zombieCheckBox.Text = "Zombie Arms"; - this.zombieCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.zombieCheckBox, " Both arms will stick up like a Zombie. "); - this.zombieCheckBox.UseSelectable = true; - // - // staticLegsCheckBox - // - this.staticLegsCheckBox.AutoSize = true; - this.staticLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; - this.staticLegsCheckBox.Location = new System.Drawing.Point(6, 50); - this.staticLegsCheckBox.Name = "staticLegsCheckBox"; - this.staticLegsCheckBox.Size = new System.Drawing.Size(90, 19); - this.staticLegsCheckBox.TabIndex = 1; - this.staticLegsCheckBox.Text = "Static Legs"; - this.staticLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.toolTip.SetToolTip(this.staticLegsCheckBox, " These parts will not move in most animations. "); - this.staticLegsCheckBox.UseSelectable = true; - // - // copyButton - // - this.copyButton.Location = new System.Drawing.Point(425, 119); - this.copyButton.Name = "copyButton"; - this.copyButton.Size = new System.Drawing.Size(173, 23); - this.copyButton.TabIndex = 22; - this.copyButton.Text = "Copy ANIM Value"; - this.copyButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.copyButton.UseSelectable = true; - this.copyButton.Click += new System.EventHandler(this.copyButton_Click); - // - // importButton - // - this.importButton.Location = new System.Drawing.Point(32, 119); - this.importButton.Name = "importButton"; - this.importButton.Size = new System.Drawing.Size(186, 23); - this.importButton.TabIndex = 23; - this.importButton.Text = "Import ANIM"; - this.importButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.importButton.UseSelectable = true; - this.importButton.Click += new System.EventHandler(this.importButton_Click); - // - // exportButton - // - this.exportButton.Location = new System.Drawing.Point(229, 119); - this.exportButton.Name = "exportButton"; - this.exportButton.Size = new System.Drawing.Size(186, 23); - this.exportButton.TabIndex = 24; - this.exportButton.Text = "Export Template Texture"; - this.exportButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.exportButton.UseSelectable = true; - this.exportButton.Click += new System.EventHandler(this.exportButton_Click); - // - // animValue - // - this.animValue.AutoSize = true; - this.animValue.FontSize = MetroFramework.MetroLabelSize.Tall; - this.animValue.FontWeight = MetroFramework.MetroLabelWeight.Regular; - this.animValue.Location = new System.Drawing.Point(260, 60); - this.animValue.Name = "animValue"; - this.animValue.Size = new System.Drawing.Size(110, 25); - this.animValue.TabIndex = 25; - this.animValue.Text = "0x00000000"; - this.animValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.animValue.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // uncheckButton - // - this.uncheckButton.Location = new System.Drawing.Point(229, 90); - this.uncheckButton.Name = "uncheckButton"; - this.uncheckButton.Size = new System.Drawing.Size(186, 23); - this.uncheckButton.TabIndex = 26; - this.uncheckButton.Text = "Uncheck All"; - this.uncheckButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.uncheckButton.UseSelectable = true; - this.uncheckButton.Click += new System.EventHandler(this.uncheckButton_Click); - // - // checkButton - // - this.checkButton.Location = new System.Drawing.Point(32, 90); - this.checkButton.Name = "checkButton"; - this.checkButton.Size = new System.Drawing.Size(186, 23); - this.checkButton.TabIndex = 27; - this.checkButton.Text = "Check All"; - this.checkButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.checkButton.UseSelectable = true; - this.checkButton.Click += new System.EventHandler(this.checkButton_Click); - // - // toolTip - // - this.toolTip.StripAmpersands = true; - this.toolTip.Style = MetroFramework.MetroColorStyle.Blue; - this.toolTip.StyleManager = null; - this.toolTip.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // resetButton - // - this.resetButton.Location = new System.Drawing.Point(425, 90); - this.resetButton.Name = "resetButton"; - this.resetButton.Size = new System.Drawing.Size(173, 23); - this.resetButton.TabIndex = 28; - this.resetButton.Text = "Restore ANIM"; - this.resetButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.resetButton.UseSelectable = true; - this.resetButton.Click += new System.EventHandler(this.resetButton_Click); - // - // templateButton - // - this.templateButton.Location = new System.Drawing.Point(425, 154); - this.templateButton.Name = "templateButton"; - this.templateButton.Size = new System.Drawing.Size(173, 23); - this.templateButton.TabIndex = 29; - this.templateButton.Text = "Skin Presets"; - this.templateButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.templateButton.UseSelectable = true; - this.templateButton.Click += new System.EventHandler(this.templateButton_Click); - // - // ANIMEditor - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(630, 554); - this.Controls.Add(this.templateButton); - this.Controls.Add(this.effectsGroup); - this.Controls.Add(this.resetButton); - this.Controls.Add(this.checkButton); - this.Controls.Add(this.uncheckButton); - this.Controls.Add(this.animValue); - this.Controls.Add(this.exportButton); - this.Controls.Add(this.importButton); - this.Controls.Add(this.copyButton); - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.effectsGroup2); - this.Controls.Add(this.closeButton); - this.MaximumSize = new System.Drawing.Size(630, 554); - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(630, 554); - this.Name = "ANIMEditor"; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Text = "ANIM Editor"; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.effectsGroup.ResumeLayout(false); - this.effectsGroup.PerformLayout(); - this.effectsGroup2.ResumeLayout(false); - this.effectsGroup2.PerformLayout(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); + this.statueCheckBox.UseSelectable = true; + // + // zombieCheckBox + // + this.zombieCheckBox.AutoSize = true; + this.zombieCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.zombieCheckBox.Location = new System.Drawing.Point(6, 81); + this.zombieCheckBox.Name = "zombieCheckBox"; + this.zombieCheckBox.Size = new System.Drawing.Size(107, 19); + this.zombieCheckBox.TabIndex = 2; + this.zombieCheckBox.Text = "Zombie Arms"; + this.zombieCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.zombieCheckBox, " Both arms will stick up like a Zombie. "); + this.zombieCheckBox.UseSelectable = true; + // + // staticLegsCheckBox + // + this.staticLegsCheckBox.AutoSize = true; + this.staticLegsCheckBox.FontSize = MetroFramework.MetroCheckBoxSize.Medium; + this.staticLegsCheckBox.Location = new System.Drawing.Point(6, 50); + this.staticLegsCheckBox.Name = "staticLegsCheckBox"; + this.staticLegsCheckBox.Size = new System.Drawing.Size(90, 19); + this.staticLegsCheckBox.TabIndex = 1; + this.staticLegsCheckBox.Text = "Static Legs"; + this.staticLegsCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.toolTip.SetToolTip(this.staticLegsCheckBox, " These parts will not move in most animations. "); + this.staticLegsCheckBox.UseSelectable = true; + // + // copyButton + // + this.copyButton.Location = new System.Drawing.Point(425, 119); + this.copyButton.Name = "copyButton"; + this.copyButton.Size = new System.Drawing.Size(173, 23); + this.copyButton.TabIndex = 22; + this.copyButton.Text = "Copy ANIM Value"; + this.copyButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.copyButton.UseSelectable = true; + this.copyButton.Click += new System.EventHandler(this.copyButton_Click); + // + // importButton + // + this.importButton.Location = new System.Drawing.Point(32, 119); + this.importButton.Name = "importButton"; + this.importButton.Size = new System.Drawing.Size(186, 23); + this.importButton.TabIndex = 23; + this.importButton.Text = "Import ANIM"; + this.importButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.importButton.UseSelectable = true; + this.importButton.Click += new System.EventHandler(this.importButton_Click); + // + // exportButton + // + this.exportButton.Location = new System.Drawing.Point(229, 119); + this.exportButton.Name = "exportButton"; + this.exportButton.Size = new System.Drawing.Size(186, 23); + this.exportButton.TabIndex = 24; + this.exportButton.Text = "Export Template Texture"; + this.exportButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.exportButton.UseSelectable = true; + this.exportButton.Click += new System.EventHandler(this.exportButton_Click); + // + // animValue + // + this.animValue.AutoSize = true; + this.animValue.FontSize = MetroFramework.MetroLabelSize.Tall; + this.animValue.FontWeight = MetroFramework.MetroLabelWeight.Regular; + this.animValue.Location = new System.Drawing.Point(260, 60); + this.animValue.Name = "animValue"; + this.animValue.Size = new System.Drawing.Size(110, 25); + this.animValue.TabIndex = 25; + this.animValue.Text = "0x00000000"; + this.animValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.animValue.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // uncheckButton + // + this.uncheckButton.Location = new System.Drawing.Point(229, 90); + this.uncheckButton.Name = "uncheckButton"; + this.uncheckButton.Size = new System.Drawing.Size(186, 23); + this.uncheckButton.TabIndex = 26; + this.uncheckButton.Text = "Uncheck All"; + this.uncheckButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.uncheckButton.UseSelectable = true; + this.uncheckButton.Click += new System.EventHandler(this.uncheckButton_Click); + // + // checkButton + // + this.checkButton.Location = new System.Drawing.Point(32, 90); + this.checkButton.Name = "checkButton"; + this.checkButton.Size = new System.Drawing.Size(186, 23); + this.checkButton.TabIndex = 27; + this.checkButton.Text = "Check All"; + this.checkButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.checkButton.UseSelectable = true; + this.checkButton.Click += new System.EventHandler(this.checkButton_Click); + // + // toolTip + // + this.toolTip.StripAmpersands = true; + this.toolTip.Style = MetroFramework.MetroColorStyle.Blue; + this.toolTip.StyleManager = null; + this.toolTip.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // resetButton + // + this.resetButton.Location = new System.Drawing.Point(425, 90); + this.resetButton.Name = "resetButton"; + this.resetButton.Size = new System.Drawing.Size(173, 23); + this.resetButton.TabIndex = 28; + this.resetButton.Text = "Restore ANIM"; + this.resetButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.resetButton.UseSelectable = true; + this.resetButton.Click += new System.EventHandler(this.resetButton_Click); + // + // templateButton + // + this.templateButton.Location = new System.Drawing.Point(425, 154); + this.templateButton.Name = "templateButton"; + this.templateButton.Size = new System.Drawing.Size(173, 23); + this.templateButton.TabIndex = 29; + this.templateButton.Text = "Skin Presets"; + this.templateButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.templateButton.UseSelectable = true; + this.templateButton.Click += new System.EventHandler(this.templateButton_Click); + // + // ANIMEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 554); + this.Controls.Add(this.templateButton); + this.Controls.Add(this.effectsGroup); + this.Controls.Add(this.resetButton); + this.Controls.Add(this.checkButton); + this.Controls.Add(this.uncheckButton); + this.Controls.Add(this.animValue); + this.Controls.Add(this.exportButton); + this.Controls.Add(this.importButton); + this.Controls.Add(this.copyButton); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.effectsGroup2); + this.Controls.Add(this.saveButton); + this.MaximumSize = new System.Drawing.Size(630, 554); + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(630, 554); + this.Name = "ANIMEditor"; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Text = "ANIM Editor"; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.effectsGroup.ResumeLayout(false); + this.effectsGroup.PerformLayout(); + this.effectsGroup2.ResumeLayout(false); + this.effectsGroup2.PerformLayout(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } #endregion - private MetroFramework.Controls.MetroButton closeButton; + private MetroFramework.Controls.MetroButton saveButton; private System.Windows.Forms.GroupBox effectsGroup; private MetroFramework.Controls.MetroCheckBox headCheckBox; private MetroFramework.Controls.MetroCheckBox leftLegCheckBox; diff --git a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs index e3acff76..d430ac41 100644 --- a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs +++ b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs @@ -1,280 +1,301 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Linq; -using System.IO; using System.Windows.Forms; using PckStudio.Classes.Utils; using PckStudio.Forms.Additional_Popups; namespace PckStudio.Forms.Utilities.Skins { - public partial class ANIMEditor : MetroFramework.Forms.MetroForm - { - public bool saved = false; - readonly SkinANIM initialANIM; - public string outANIM => animValue.Text; - SkinANIM anim = new SkinANIM(); + public partial class ANIMEditor : MetroFramework.Forms.MetroForm + { + readonly SkinANIM initialANIM; + public string outANIM => animValue.Text; + SkinANIM anim = new SkinANIM(); + ANIMRuleSet ruleset; - void processCheckBoxes(bool set_all = false, bool value = false) - { - #region processes every single checkbox with the correct ANIM flags - helmetCheckBox.Enabled = set_all ? value : anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED); - chestplateCheckBox.Enabled = set_all ? value : anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED); - leftArmorCheckBox.Enabled = set_all ? value : anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED); - rightArmorCheckBox.Enabled = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED); - leftLeggingCheckBox.Enabled = set_all ? value : anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED); - rightLeggingCheckBox.Enabled = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED); + sealed class ANIMRuleSet + { + private class Bictionary : Dictionary + { + public Bictionary(int capacity) + : base(capacity) + { } - bobbingCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.HEAD_BOBBING_DISABLED); - bodyCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED); - bodyOCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.BODY_OVERLAY_DISABLED); - chestplateCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.FORCE_BODY_ARMOR); + public T1 this[T2 index] + { + get + { + if (!this.Any(x => x.Value.Equals(index))) + throw new KeyNotFoundException(); + return this.First(x => x.Value.Equals(index)).Key; + } + } - classicCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RESOLUTION_64x64); - crouchCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.DO_BACKWARDS_CROUCH); - dinnerboneCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.DINNERBONE); - headCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED); + internal void AddRange(IEnumerable<(T1, T2)> range) + { + foreach (var (key, value) in range) + { + Add(key, value); + } + } + } + private Bictionary checkBoxLinkage; + private SkinANIM ANIM; + private bool ignoreCheckChanged = false; - headOCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED); - helmetCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.FORCE_HEAD_ARMOR); - leftArmCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED); - leftArmOCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED); + public ANIMRuleSet(SkinANIM anim, params (CheckBox, ANIM_EFFECTS)[] linkage) + { + ANIM = anim; + checkBoxLinkage = new Bictionary(32); + if (linkage.Length < 32) + Debug.WriteLine($"Not all {nameof(ANIM_EFFECTS)} are mapped to a given checkbox."); - leftArmorCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.FORCE_LEFT_ARM_ARMOR); - leftLegCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED); - leftLeggingCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.FORCE_LEFT_LEG_ARMOR); - leftLegOCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED); + checkBoxLinkage.AddRange(linkage); + foreach (var (checkbox, effect) in linkage) + { + checkbox.CheckedChanged += checkedChanged; + checkbox.Checked = anim.GetFlag(effect); + } + } - noArmorCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.ALL_ARMOR_DISABLED); - rightArmCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED); - rightArmOCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED); - rightArmorCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.FORCE_RIGHT_ARM_ARMOR); + internal void SetAll(bool state) + { + ignoreCheckChanged = true; + foreach (var item in checkBoxLinkage) + { + ANIM.SetFlag(item.Value, state); + item.Key.Checked = state; + } + ignoreCheckChanged = false; + } - rightLegCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED); - rightLeggingCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.FORCE_RIGHT_LEG_ARMOR); - rightLegOCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED); - santaCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.BAD_SANTA); + internal void ApplyAnim(SkinANIM anim) + { + ANIM = anim; + foreach (var item in checkBoxLinkage) + { + item.Key.Checked = anim.GetFlag(item.Value); + } + } - slimCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.SLIM_MODEL); - staticArmsCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.STATIC_ARMS); - staticLegsCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.STATIC_LEGS); - statueCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.STATUE_OF_LIBERTY); + private void checkedChanged(object sender, EventArgs e) + { + if (!ignoreCheckChanged && sender is CheckBox checkBox && checkBoxLinkage.ContainsKey(checkBox)) + { + switch (checkBoxLinkage[checkBox]) + { + case ANIM_EFFECTS.HEAD_DISABLED: + checkBoxLinkage[ANIM_EFFECTS.FORCE_HEAD_ARMOR].Enabled = !checkBox.Checked; + break; + case ANIM_EFFECTS.BODY_DISABLED: + checkBoxLinkage[ANIM_EFFECTS.FORCE_BODY_ARMOR].Enabled = !checkBox.Checked; + break; + case ANIM_EFFECTS.LEFT_LEG_DISABLED: + checkBoxLinkage[ANIM_EFFECTS.FORCE_LEFT_LEG_ARMOR].Enabled = !checkBox.Checked; + break; + case ANIM_EFFECTS.RIGHT_LEG_DISABLED: + checkBoxLinkage[ANIM_EFFECTS.FORCE_RIGHT_LEG_ARMOR].Enabled = !checkBox.Checked; + break; + case ANIM_EFFECTS.LEFT_ARM_DISABLED: + checkBoxLinkage[ANIM_EFFECTS.FORCE_LEFT_ARM_ARMOR].Enabled = !checkBox.Checked; + break; + case ANIM_EFFECTS.RIGHT_ARM_DISABLED: + checkBoxLinkage[ANIM_EFFECTS.FORCE_RIGHT_ARM_ARMOR].Enabled = !checkBox.Checked; + break; + + case ANIM_EFFECTS.RESOLUTION_64x64: + checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Enabled = !checkBox.Checked; + break; + case ANIM_EFFECTS.SLIM_MODEL: + checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Enabled = !checkBox.Checked; + break; + default: + break; + } + ANIM.SetFlag(checkBoxLinkage[checkBox], checkBox.Checked && checkBox.Enabled); + } + } + } - syncArmsCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.SYNCED_ARMS); - syncLegsCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.SYNCED_LEGS); - unknownCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.__BIT_4); - zombieCheckBox.Checked = set_all ? value : anim.GetFlag(ANIM_EFFECTS.ZOMBIE_ARMS); - #endregion - } - - public ANIMEditor(string ANIM) - { - InitializeComponent(); - if (!SkinANIM.IsValidANIM(ANIM)) - { - DialogResult = DialogResult.Abort; - Close(); - } + public ANIMEditor(string ANIM) + { + InitializeComponent(); + if (!SkinANIM.IsValidANIM(ANIM)) + { + DialogResult = DialogResult.Abort; + Close(); + } initialANIM = anim = new SkinANIM(ANIM); - #region Event definitions, since the designer can't parse lambda experessions - bobbingCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.HEAD_BOBBING_DISABLED); }; - bodyCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.BODY_DISABLED); }; - bodyOCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.BODY_OVERLAY_DISABLED); }; - chestplateCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_BODY_ARMOR); }; + ruleset = new ANIMRuleSet(anim, + (bobbingCheckBox, ANIM_EFFECTS.HEAD_BOBBING_DISABLED), + (bodyCheckBox, ANIM_EFFECTS.BODY_DISABLED), + (bodyOCheckBox, ANIM_EFFECTS.BODY_OVERLAY_DISABLED), + (chestplateCheckBox, ANIM_EFFECTS.FORCE_BODY_ARMOR), + (classicCheckBox, ANIM_EFFECTS.RESOLUTION_64x64), + (crouchCheckBox, ANIM_EFFECTS.DO_BACKWARDS_CROUCH), + (dinnerboneCheckBox, ANIM_EFFECTS.DINNERBONE), + (headCheckBox, ANIM_EFFECTS.HEAD_DISABLED), + (headOCheckBox, ANIM_EFFECTS.HEAD_OVERLAY_DISABLED), + (helmetCheckBox, ANIM_EFFECTS.FORCE_HEAD_ARMOR), + (leftArmCheckBox, ANIM_EFFECTS.LEFT_ARM_DISABLED), + (leftArmOCheckBox, ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED), + (leftArmorCheckBox, ANIM_EFFECTS.FORCE_LEFT_ARM_ARMOR), + (leftLegCheckBox, ANIM_EFFECTS.LEFT_LEG_DISABLED), + (leftLeggingCheckBox, ANIM_EFFECTS.FORCE_LEFT_LEG_ARMOR), + (leftLegOCheckBox, ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED), + (noArmorCheckBox, ANIM_EFFECTS.ALL_ARMOR_DISABLED), + (rightArmCheckBox, ANIM_EFFECTS.RIGHT_ARM_DISABLED), + (rightArmOCheckBox, ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED), + (rightArmorCheckBox, ANIM_EFFECTS.FORCE_RIGHT_ARM_ARMOR), + (rightLegCheckBox, ANIM_EFFECTS.RIGHT_LEG_DISABLED), + (rightLeggingCheckBox, ANIM_EFFECTS.FORCE_RIGHT_LEG_ARMOR), + (rightLegOCheckBox, ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED), + (santaCheckBox, ANIM_EFFECTS.BAD_SANTA), + (slimCheckBox, ANIM_EFFECTS.SLIM_MODEL), + (staticArmsCheckBox, ANIM_EFFECTS.STATIC_ARMS), + (staticLegsCheckBox, ANIM_EFFECTS.STATIC_LEGS), + (statueCheckBox, ANIM_EFFECTS.STATUE_OF_LIBERTY), + (syncArmsCheckBox, ANIM_EFFECTS.SYNCED_ARMS), + (syncLegsCheckBox, ANIM_EFFECTS.SYNCED_LEGS), + (unknownCheckBox, ANIM_EFFECTS.__BIT_4), + (zombieCheckBox, ANIM_EFFECTS.ZOMBIE_ARMS) + ); + } - classicCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.RESOLUTION_64x64); }; - crouchCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.DO_BACKWARDS_CROUCH); }; - dinnerboneCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.DINNERBONE); }; - headCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.HEAD_DISABLED); }; + private void saveButton_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } - headOCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.HEAD_OVERLAY_DISABLED); }; - helmetCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_HEAD_ARMOR); }; - leftArmCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.LEFT_ARM_DISABLED); }; - leftArmOCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED); }; + private void copyButton_Click(object sender, EventArgs e) + { + Clipboard.SetText(animValue.Text); + } - leftArmorCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_LEFT_ARM_ARMOR); }; - leftLegCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.LEFT_LEG_DISABLED); }; - leftLeggingCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_LEFT_LEG_ARMOR); }; - leftLegOCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED); }; + private void importButton_Click(object sender, EventArgs e) + { + string new_value = ""; - noArmorCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.ALL_ARMOR_DISABLED); }; - rightArmCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.RIGHT_ARM_DISABLED); }; - rightArmOCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED); }; - rightArmorCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_RIGHT_ARM_ARMOR); }; + bool first = true; + while (!SkinANIM.IsValidANIM(new_value)) + { + if (!first) MessageBox.Show($"The following value \"{new_value}\" is not valid. Please try again."); + RenamePrompt diag = new RenamePrompt(new_value); + diag.TextLabel.Text = "ANIM"; + diag.OKButton.Text = "Ok"; + if (diag.ShowDialog() == DialogResult.OK) + { + new_value = diag.NewText; + } + else return; + first = false; + } + anim = new SkinANIM(new_value); + ruleset.ApplyAnim(anim); + } - rightLegCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.RIGHT_LEG_DISABLED); }; - rightLeggingCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_RIGHT_LEG_ARMOR); }; - rightLegOCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED); }; - santaCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.BAD_SANTA); }; + private void uncheckButton_Click(object sender, EventArgs e) + { + ruleset.SetAll(false); + } - slimCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.SLIM_MODEL); }; - staticArmsCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.STATIC_ARMS); }; - staticLegsCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.STATIC_LEGS); }; - statueCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.STATUE_OF_LIBERTY); }; + private void checkButton_Click(object sender, EventArgs e) + { + ruleset.SetAll(true); + } - syncArmsCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.SYNCED_ARMS); }; - syncLegsCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.SYNCED_LEGS); }; - unknownCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.__BIT_4); }; - zombieCheckBox.CheckedChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.ZOMBIE_ARMS); }; + private void exportButton_Click(object sender, EventArgs e) + { + using SaveFileDialog saveFileDialog = new SaveFileDialog + { + FileName = animValue.Text + ".png", + Filter = "Skin textures|*.png" + }; + if (saveFileDialog.ShowDialog() != DialogResult.OK) + return; + bool isSlim = anim.GetFlag(ANIM_EFFECTS.SLIM_MODEL); + bool is64x64 = anim.GetFlag(ANIM_EFFECTS.RESOLUTION_64x64); + bool isClassic32 = !isSlim && !is64x64; - helmetCheckBox.EnabledChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_HEAD_ARMOR); }; - chestplateCheckBox.EnabledChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_BODY_ARMOR); }; - rightArmorCheckBox.EnabledChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_RIGHT_ARM_ARMOR); }; - leftArmorCheckBox.EnabledChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_LEFT_ARM_ARMOR); }; - rightLeggingCheckBox.EnabledChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_RIGHT_LEG_ARMOR); }; - leftLeggingCheckBox.EnabledChanged += (sender, EventArgs) => { flagChanged(sender, EventArgs, ANIM_EFFECTS.FORCE_LEFT_LEG_ARMOR); }; - #endregion - processCheckBoxes(); - } + Image skin = isSlim ? Properties.Resources.slim_template : Properties.Resources.classic_template; - private void closeButton_Click(object sender, EventArgs e) - { - DialogResult = DialogResult.OK; + Bitmap img = new Bitmap(64, isClassic32 ? 32 : 64); + using (Graphics graphic = Graphics.FromImage(img)) + { + graphic.DrawImage(skin, new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), GraphicsUnit.Pixel); + if (anim.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) + graphic.FillRectangle(Brushes.Magenta, new Rectangle(32, 0, 32, 16)); + if (anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED)) + graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 0, 32, 16)); + if (anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED)) + graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 16, 24, 16)); + if (img.Height == 64) + { + if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.BODY_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 32, 24, 16)); + if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 32, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 32, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 48, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 48, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(32, 48, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(48, 48, 16, 16)); + } + else + { + // Since both classic 32 arms and legs use the same texture, removing the texture would remove both limbs instead of just one. + // So both must be disabled by the user before they're removed from the texture; + if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED) && anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) + graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); + if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED) && anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) + graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); + } + img.MakeTransparent(Color.Magenta); + skin = img; + } + skin.Save(saveFileDialog.FileName); + } - saved = true; - Close(); - } + private void resetButton_Click(object sender, EventArgs e) + { + anim = initialANIM; + ruleset.ApplyAnim(anim); + } - private void flagChanged(object sender, EventArgs e, ANIM_EFFECTS flag) - { - // Set value - anim.SetFlag(flag, ((CheckBox)sender).Checked && ((CheckBox)sender).Enabled); + static readonly Dictionary Templates = new Dictionary() + { + { "Steve (64x32)", ANIM_EFFECTS.NONE }, + { "Steve (64x64)", ANIM_EFFECTS.RESOLUTION_64x64 }, + { "Alex (64x64)", ANIM_EFFECTS.SLIM_MODEL }, + { "Zombie Skins", ANIM_EFFECTS.ZOMBIE_ARMS }, + { "Cetacean Skins", ANIM_EFFECTS.SYNCED_ARMS | ANIM_EFFECTS.SYNCED_LEGS }, + { "Ski Skins", ANIM_EFFECTS.SYNCED_ARMS | ANIM_EFFECTS.STATIC_LEGS }, + { "Ghost Skins", ANIM_EFFECTS.STATIC_LEGS | ANIM_EFFECTS.ZOMBIE_ARMS }, + { "Medusa (Greek Myth.)", ANIM_EFFECTS.SYNCED_LEGS }, + { "Librarian (Halo)", ANIM_EFFECTS.STATIC_LEGS }, + { "Grim Reaper (Halloween)", ANIM_EFFECTS.STATIC_LEGS | ANIM_EFFECTS.STATIC_ARMS } + }; - // Armor flags don't work if the respective parts are not enabled - helmetCheckBox.Enabled = anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED); - chestplateCheckBox.Enabled = anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED); - rightArmorCheckBox.Enabled = anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED); - leftArmorCheckBox.Enabled = anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED); - rightLeggingCheckBox.Enabled = anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED); - leftLeggingCheckBox.Enabled = anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED); + private void templateButton_Click(object sender, EventArgs e) + { + var diag = new ItemSelectionPopUp(Templates.Keys.ToArray()); + diag.label2.Text = "Presets"; + diag.okBtn.Text = "Load"; - animValue.Text = anim.ToString(); - } + if (diag.ShowDialog() != DialogResult.OK) return; - private void copyButton_Click(object sender, EventArgs e) - { - Clipboard.SetText(animValue.Text); - } - - private void importButton_Click(object sender, EventArgs e) - { - string new_value = ""; - - bool first = true; - while (!SkinANIM.IsValidANIM(new_value)) - { - if (!first) MessageBox.Show($"The following value \"{new_value}\" is not valid. Please try again."); - RenamePrompt diag = new RenamePrompt(new_value); - diag.TextLabel.Text = "ANIM"; - diag.OKButton.Text = "Ok"; - if (diag.ShowDialog() == DialogResult.OK) - { - new_value = diag.NewText; - } - else return; - first = false; - } - anim = new SkinANIM(new_value); - processCheckBoxes(); - } - - private void uncheckButton_Click(object sender, EventArgs e) - { - processCheckBoxes(true); - } - - private void checkButton_Click(object sender, EventArgs e) - { - processCheckBoxes(true, true); - } - - private void exportButton_Click(object sender, EventArgs e) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - saveFileDialog.FileName = animValue.Text + ".png"; - saveFileDialog.Filter = "Skin textures|*.png"; - if (saveFileDialog.ShowDialog() != DialogResult.OK || - string.IsNullOrWhiteSpace(Path.GetDirectoryName(saveFileDialog.FileName))) return; - bool isSlim = anim.GetFlag(ANIM_EFFECTS.SLIM_MODEL); - bool isClassic64 = anim.GetFlag(ANIM_EFFECTS.RESOLUTION_64x64); - bool isClassic32 = !isSlim && !isClassic64; - - Image skin = isSlim ? Properties.Resources.slim_template : Properties.Resources.classic_template; - - #region Image processing code for generating the skin templates based on the input ANIM value - Bitmap nb = new Bitmap(64, (!isSlim && !isClassic64) ? 32 : 64); - using (Graphics g = Graphics.FromImage(nb)) - { - g.DrawImage(skin, new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), GraphicsUnit.Pixel); - if (anim.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(32, 0, 32, 16)); - if (anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(0, 0, 32, 16)); - if (anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(16, 16, 24, 16)); - if (nb.Height == 64) - { - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.BODY_OVERLAY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(16, 32, 24, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(40, 32, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(0, 32, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(0, 48, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(16, 48, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(32, 48, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED)) g.FillRectangle(Brushes.Magenta, new Rectangle(48, 48, 16, 16)); - } - else - { - // Since both classic 32 arms and legs use the same texture, removing the texture would remove both limbs instead of just one. - // So both must be disabled by the user before they're removed from the texture; - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED) && anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) - g.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED) && anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) - g.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); - } - nb.MakeTransparent(Color.Magenta); - skin = nb; - } - #endregion - - skin.Save(saveFileDialog.FileName); - } - - private void resetButton_Click(object sender, EventArgs e) - { - anim = initialANIM; - processCheckBoxes(); - } - - static readonly Dictionary Templates = new Dictionary() - { - { "Steve (64x32)", ANIM_EFFECTS.NONE }, - { "Steve (64x64)", ANIM_EFFECTS.RESOLUTION_64x64 }, - { "Alex (64x64)", ANIM_EFFECTS.SLIM_MODEL }, - { "Zombie Skins", ANIM_EFFECTS.ZOMBIE_ARMS }, - { "Cetacean Skins", ANIM_EFFECTS.SYNCED_ARMS | ANIM_EFFECTS.SYNCED_LEGS }, - { "Ski Skins", ANIM_EFFECTS.SYNCED_ARMS | ANIM_EFFECTS.STATIC_LEGS }, - { "Ghost Skins", ANIM_EFFECTS.STATIC_LEGS | ANIM_EFFECTS.ZOMBIE_ARMS }, - { "Medusa (Greek Myth.)", ANIM_EFFECTS.SYNCED_LEGS }, - { "Librarian (Halo)", ANIM_EFFECTS.STATIC_LEGS }, - { "Grim Reaper (Halloween)", ANIM_EFFECTS.STATIC_LEGS | ANIM_EFFECTS.STATIC_ARMS } - }; - - private void templateButton_Click(object sender, EventArgs e) - { - var diag = new ItemSelectionPopUp(Templates.Keys.ToArray()); - diag.label2.Text = "Presets"; - diag.okBtn.Text = "Load"; - - if (diag.ShowDialog() != DialogResult.OK) return; - - var templateANIM = Templates[diag.SelectedItem]; - DialogResult prompt = MessageBox.Show(this, "Would you like to add this preset's effects to your current ANIM? Otherwise all of your effects will be cleared. Either choice can be undone by pressing \"Restore ANIM\".", "", MessageBoxButtons.YesNo); - if (prompt == DialogResult.Yes) anim |= templateANIM; - else anim = templateANIM; - SkinANIM backup = anim; - processCheckBoxes(); - anim = backup; - } - } + var templateANIM = Templates[diag.SelectedItem]; + DialogResult prompt = MessageBox.Show(this, "Would you like to add this preset's effects to your current ANIM? Otherwise all of your effects will be cleared. Either choice can be undone by pressing \"Restore ANIM\".", "", MessageBoxButtons.YesNo); + if (prompt == DialogResult.Yes) anim |= templateANIM; + else anim = templateANIM; + SkinANIM backup = anim; + ruleset.ApplyAnim(anim); + anim = backup; + } + } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 6e708d47..f4308bfb 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -1016,7 +1016,7 @@ namespace PckStudio try { using ANIMEditor diag = new ANIMEditor(property.Item2); - if (diag.ShowDialog(this) == DialogResult.OK && diag.saved) + if (diag.ShowDialog(this) == DialogResult.OK) { file.Properties[i] = ("ANIM", diag.outANIM); if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) @@ -1029,7 +1029,7 @@ namespace PckStudio catch (Exception ex) { Debug.WriteLine(ex.Message); - MessageBox.Show("Failed to parse ANIM value, aborting to normal functionality. Please make sure the value only includes hexadecimal characters (0-9,A-F) and has no more than 8 characters. It can have an optional prefix of \"0x\"."); + MessageBox.Show("Failed to parse ANIM value, aborting to normal functionality. Please make sure the value only includes hexadecimal characters (0-9,A-F) and has no more than 8 characters."); } break; From d44dc2a72cbb5d986503adf14109b633195916f4 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 28 Mar 2023 14:57:15 +0200 Subject: [PATCH 13/79] Move ANIMEditor and BoxEditor and Update SkinAnim class --- PCK-Studio/Classes/Utils/SkinANIM.cs | 15 +- .../Skins => Editor}/ANIMEditor.Designer.cs | 6 +- .../{Utilities/Skins => Editor}/ANIMEditor.cs | 55 +- PCK-Studio/Forms/Editor/ANIMEditor.resx | 2630 +++++++++++++++++ .../Skins => Editor}/BoxEditor.Designer.cs | 2 +- .../{Utilities/Skins => Editor}/BoxEditor.cs | 30 +- .../Skins => Editor}/BoxEditor.resx | 0 .../Forms/Skins-And-Textures/addnewskin.cs | 5 +- .../Forms/Utilities/Skins/ANIMEditor.resx | 123 - PCK-Studio/MainForm.cs | 19 +- PCK-Studio/PckStudio.csproj | 12 +- 11 files changed, 2703 insertions(+), 194 deletions(-) rename PCK-Studio/Forms/{Utilities/Skins => Editor}/ANIMEditor.Designer.cs (99%) rename PCK-Studio/Forms/{Utilities/Skins => Editor}/ANIMEditor.cs (92%) create mode 100644 PCK-Studio/Forms/Editor/ANIMEditor.resx rename PCK-Studio/Forms/{Utilities/Skins => Editor}/BoxEditor.Designer.cs (99%) rename PCK-Studio/Forms/{Utilities/Skins => Editor}/BoxEditor.cs (75%) rename PCK-Studio/Forms/{Utilities/Skins => Editor}/BoxEditor.resx (100%) delete mode 100644 PCK-Studio/Forms/Utilities/Skins/ANIMEditor.resx diff --git a/PCK-Studio/Classes/Utils/SkinANIM.cs b/PCK-Studio/Classes/Utils/SkinANIM.cs index 07c59546..f7796c54 100644 --- a/PCK-Studio/Classes/Utils/SkinANIM.cs +++ b/PCK-Studio/Classes/Utils/SkinANIM.cs @@ -69,7 +69,7 @@ namespace PckStudio.Classes.Utils DINNERBONE = 1 << 31, // 0x80000000 } - public struct SkinANIM + public class SkinANIM { private ANIM_EFFECTS _ANIM; public static readonly Regex animRegex = new Regex(@"^0x[0-9a-f]{1,8}\b", RegexOptions.IgnoreCase); @@ -78,11 +78,6 @@ namespace PckStudio.Classes.Utils : this(ANIM_EFFECTS.NONE) { } - - public SkinANIM(string anim) - : this(ParseString(anim)) - { - } public SkinANIM(ANIM_EFFECTS anim) { @@ -93,10 +88,10 @@ namespace PckStudio.Classes.Utils public static bool IsValidANIM(string anim) => animRegex.IsMatch(anim ?? string.Empty); - public static ANIM_EFFECTS ParseString(string anim) - => IsValidANIM(anim) - ? (ANIM_EFFECTS)Convert.ToInt32(anim.TrimEnd(' ', '\n', '\r'), 16) - : ANIM_EFFECTS.NONE; + public static SkinANIM FromString(string value) + => IsValidANIM(value) + ? new SkinANIM((ANIM_EFFECTS)Convert.ToInt32(value.TrimEnd(' ', '\n', '\r'), 16)) + : new SkinANIM(); public void SetANIM(ANIM_EFFECTS anim) => _ANIM = anim; diff --git a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs b/PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs similarity index 99% rename from PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs rename to PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs index 885f6d5f..bb31ffc1 100644 --- a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs @@ -1,4 +1,4 @@ -namespace PckStudio.Forms.Utilities.Skins +namespace PckStudio.Forms.Editor { partial class ANIMEditor { @@ -28,6 +28,7 @@ /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ANIMEditor)); this.saveButton = new MetroFramework.Controls.MetroButton(); this.effectsGroup = new System.Windows.Forms.GroupBox(); this.rightLegOCheckBox = new MetroFramework.Controls.MetroCheckBox(); @@ -714,10 +715,13 @@ this.Controls.Add(this.groupBox1); this.Controls.Add(this.effectsGroup2); this.Controls.Add(this.saveButton); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(630, 554); this.MinimizeBox = false; this.MinimumSize = new System.Drawing.Size(630, 554); this.Name = "ANIMEditor"; + this.Resizable = false; this.Style = MetroFramework.MetroColorStyle.Silver; this.Text = "ANIM Editor"; this.Theme = MetroFramework.MetroThemeStyle.Dark; diff --git a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs b/PCK-Studio/Forms/Editor/ANIMEditor.cs similarity index 92% rename from PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs rename to PCK-Studio/Forms/Editor/ANIMEditor.cs index d430ac41..2d912263 100644 --- a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.cs @@ -7,7 +7,7 @@ using System.Windows.Forms; using PckStudio.Classes.Utils; using PckStudio.Forms.Additional_Popups; -namespace PckStudio.Forms.Utilities.Skins +namespace PckStudio.Forms.Editor { public partial class ANIMEditor : MetroFramework.Forms.MetroForm { @@ -18,24 +18,24 @@ namespace PckStudio.Forms.Utilities.Skins sealed class ANIMRuleSet { - private class Bictionary : Dictionary - { + private class Bictionary : Dictionary + { public Bictionary(int capacity) : base(capacity) { } - public T1 this[T2 index] - { - get + public T1 this[T2 index] { - if (!this.Any(x => x.Value.Equals(index))) - throw new KeyNotFoundException(); - return this.First(x => x.Value.Equals(index)).Key; + get + { + if (!this.Any(x => x.Value.Equals(index))) + throw new KeyNotFoundException(); + return this.First(x => x.Value.Equals(index)).Key; + } } - } internal void AddRange(IEnumerable<(T1, T2)> range) - { + { foreach (var (key, value) in range) { Add(key, value); @@ -46,7 +46,9 @@ namespace PckStudio.Forms.Utilities.Skins private SkinANIM ANIM; private bool ignoreCheckChanged = false; - public ANIMRuleSet(SkinANIM anim, params (CheckBox, ANIM_EFFECTS)[] linkage) + public Action OnCheckboxChanged; + + public ANIMRuleSet(ref SkinANIM anim, params (CheckBox, ANIM_EFFECTS)[] linkage) { ANIM = anim; checkBoxLinkage = new Bictionary(32); @@ -72,7 +74,7 @@ namespace PckStudio.Forms.Utilities.Skins ignoreCheckChanged = false; } - internal void ApplyAnim(SkinANIM anim) + internal void ApplyAnim(ref SkinANIM anim) { ANIM = anim; foreach (var item in checkBoxLinkage) @@ -116,8 +118,9 @@ namespace PckStudio.Forms.Utilities.Skins break; } ANIM.SetFlag(checkBoxLinkage[checkBox], checkBox.Checked && checkBox.Enabled); - } - } + OnCheckboxChanged?.Invoke(); + } + } } public ANIMEditor(string ANIM) @@ -128,9 +131,10 @@ namespace PckStudio.Forms.Utilities.Skins DialogResult = DialogResult.Abort; Close(); } - initialANIM = anim = new SkinANIM(ANIM); + initialANIM = anim = SkinANIM.FromString(ANIM); + setDisplayAnim(); - ruleset = new ANIMRuleSet(anim, + ruleset = new ANIMRuleSet(ref anim, (bobbingCheckBox, ANIM_EFFECTS.HEAD_BOBBING_DISABLED), (bodyCheckBox, ANIM_EFFECTS.BODY_DISABLED), (bodyOCheckBox, ANIM_EFFECTS.BODY_OVERLAY_DISABLED), @@ -164,6 +168,13 @@ namespace PckStudio.Forms.Utilities.Skins (unknownCheckBox, ANIM_EFFECTS.__BIT_4), (zombieCheckBox, ANIM_EFFECTS.ZOMBIE_ARMS) ); + + ruleset.OnCheckboxChanged = setDisplayAnim; + } + + private void setDisplayAnim() + { + animValue.Text = anim.ToString(); } private void saveButton_Click(object sender, EventArgs e) @@ -195,8 +206,8 @@ namespace PckStudio.Forms.Utilities.Skins else return; first = false; } - anim = new SkinANIM(new_value); - ruleset.ApplyAnim(anim); + anim = SkinANIM.FromString(new_value); + ruleset.ApplyAnim(ref anim); } private void uncheckButton_Click(object sender, EventArgs e) @@ -264,7 +275,7 @@ namespace PckStudio.Forms.Utilities.Skins private void resetButton_Click(object sender, EventArgs e) { anim = initialANIM; - ruleset.ApplyAnim(anim); + ruleset.ApplyAnim(ref anim); } static readonly Dictionary Templates = new Dictionary() @@ -293,9 +304,7 @@ namespace PckStudio.Forms.Utilities.Skins DialogResult prompt = MessageBox.Show(this, "Would you like to add this preset's effects to your current ANIM? Otherwise all of your effects will be cleared. Either choice can be undone by pressing \"Restore ANIM\".", "", MessageBoxButtons.YesNo); if (prompt == DialogResult.Yes) anim |= templateANIM; else anim = templateANIM; - SkinANIM backup = anim; - ruleset.ApplyAnim(anim); - anim = backup; + ruleset.ApplyAnim(ref anim); } } } diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.resx b/PCK-Studio/Forms/Editor/ANIMEditor.resx new file mode 100644 index 00000000..332737e0 --- /dev/null +++ b/PCK-Studio/Forms/Editor/ANIMEditor.resx @@ -0,0 +1,2630 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + Tfr6LE9nbYpX/JKYCgGFwgAh6szKQQZn6KfRZOPDjLQMGLihYBm9ZdUWA4hO/4UYIBaICWKDNfzM5xMz + xA6tSh4qxBQV35v7JTYKhcJBCGgRsHoQxUYMWJpJYdI64B0DFC4wduD0X4gBdpsSE8QGDw2e9MQMsUMM + EUvElFf8DjBtDagQMDpLq4BxAroIKDkFywxCCAM6Tv8hXv7EBLFBhedJT8wQO1rxvbnfgRaKAeMEQIEC + TTnHUTQuiBGt8F7pu8woTMdJws3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N + zc3Nzc3Nzc3Nza2M9r73/T9XFdyT+zuuLAAAAABJRU5ErkJggigAAACAAAAAAAEAAAEAIAAAAAAAAAAC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAGAAAA + CAAAAAoAAAAKAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACgAAAAoAAAAIAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAAAQAAAALAAAAFAAAAB4AAAAlAAAAKwAAACwAAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAsAAAA + KgAAACUAAAAdAAAAFAAAAAsAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAFwAAACoAAABBAAAA + VAAAAGEAAABpAAAAbAAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAGwAAABpAAAAYQAAAFIAAABBAAAALAAAABkAAAAMAAAA + AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAEAAAADwAAACMAAABBAAAAYgAAAIGmpqbN/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + ///////+/v7/p6enzAAAAIEAAABlAAAARgAAACoAAAATAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABEAAAArAAAAUgAAAHz///////// + //7+/v+YmJj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5mZmf////////////////8AAACEAAAA + XAAAADcAAAAaAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAIAAAAPAAAALAAAAFgAAACL//////v7+/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/5OTk///////Y2NjlAAAAawAAAD0AAAAbAAAACAAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACUAAABTJSUllf////9LS0v/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC + ////////////AAAAbgAAADwAAAAYAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAQAAAAaAAAARQAAAID/////ExMT/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA///////+/v7/AAAAaAAAADQAAAAQAAAA + AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADQAAAC8AAABo/v7+/2tra/8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA////////////AAAAVgAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAQAAAAZAAAASc3Nzdj+/v7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAB7AAAA + PQAAABMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACgAAABi/////wMDA/8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8ZGRn/Gxsb/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/Gxsb/woKCv8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/sbGx//////8AAABYAAAAIgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAPAAAANwAAAHj/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xcXF/8fHx//IyMj + /yUlJf8nJyf/Jycn/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ycnJ/8nJyf/JiYm/yMjI/8gICD/Ghoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///// + /wAAAHEAAAAyAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABUAAABE/////4iIiP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8TExP/Hx8f/yUlJf8pKSn/Kysr/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8sLCz/Kioq/ycnJ/8iIiL/Gxsb + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/r6+v/ycnJ0gAAAEAAAAATAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAADAAAAGgAAAE/+/v7/Dw8P/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0dHf8kJCT/Kioq + /y4uLv8wMDD/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zAwMP8vLy//LCws/ygoKP8hISH/Ghoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /xEREf/+/v7/AAAATQAAABkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAeAAAAVv////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/ICAg/ycnJ/8tLS3/MTEx/zIyMv8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/zIyMv8wMDD/LCws + /yUlJf8eHh7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABVAAAAHQAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABQAAACAAAABa/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP8iIiL/KSkp + /y8vL/8yMjL/MzMz/zQ0NP80NDT/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/paWl + /zQ0NP80NDT/NDQ0/0tLS/+np6f/p6en/6enp/+np6f/NDQ0/zQ0NP80NDT/Q0ND/6enp/+np6f/p6en + /6enp/+np6f/p6en/6enp/+np6f/p6en/zQ0NP+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /0pKSv80NDT/NDQ0/6enp/+np6f/p6en/6enp/80NDT/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /6enp/+np6f/p6en/zQ0NP80NDT/MzMz/zExMf8uLi7/KCgo/yEhIf8HBwf/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD//////wAAAFkAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAIQAAAFv/////AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/GRkZ/yQkJP8rKyv/MTEx/zMzM/80NDT/NDQ0/zQ0NP+urq7/rq6u + /66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+rq6v/NDQ0/zQ0NP80NDT/TExM/66urv+urq7/rq6u + /66urv80NDT/NDQ0/zQ0NP9ERET/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/NDQ0 + /66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv80NDT/rq6u/66urv+urq7/rq6u + /zQ0NP+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/NDQ0/zQ0NP80NDT/MjIy + /y8vL/8qKir/IyMj/xkZGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAAWwAAACEAAAAFAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAUAAAAhAAAAW/////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8cHBz/JSUl + /ywsLP8xMTH/MzMz/zU1Nf81NTX/NTU1/6Ghof+hoaH/oaGh/6Ghof+hoaH/oqKi/7Ozs/+zs7P/s7Oz + /7CwsP81NTX/NTU1/zU1Nf9OTk7/s7Oz/7Ozs/+zs7P/s7Oz/zU1Nf81NTX/NTU1/0RERP+zs7P/s7Oz + /7Ozs/+zs7P/oaGh/7Ozs/+zs7P/s7Oz/7Ozs/80NDT/s7Oz/7Ozs/+zs7P/s7Oz/6CgoP+goKD/s7Oz + /7Ozs/+zs7P/s7Oz/zQ0NP+zs7P/s7Oz/7Ozs/+zs7P/NDQ0/7Ozs/+zs7P/s7Oz/7Ozs/+goKD/oKCg + /7Ozs/+zs7P/s7Oz/7Ozs/80NDT/NDQ0/zQ0NP8yMjL/MDAw/ysrK/8kJCT/Gxsb/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA//////8AAABbAAAAIQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwcHP8lJSX/LCws/zExMf8zMzP/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/urq6/7q6uv+6urr/t7e3/zU1Nf81NTX/NTU1/05OTv+6urr/urq6 + /7q6uv+6urr/NTU1/zU1Nf81NTX/RUVF/7q6uv+6urr/urq6/7S0tP81NTX/urq6/7q6uv+6urr/urq6 + /zU1Nf+6urr/urq6/7q6uv+6urr/NTU1/zU1Nf+6urr/urq6/7q6uv+6urr/NTU1/7q6uv+6urr/urq6 + /7q6uv81NTX/urq6/7q6uv+6urr/urq6/zU1Nf81NTX/urq6/7q6uv+6urr/urq6/zU1Nf81NTX/NTU1 + /zMzM/8xMTH/LCws/yUlJf8cHBz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/HBwc + /yUlJf8sLCz/MTEx/zMzM/81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf/BwcH/wcHB + /8HBwf++vr7/NTU1/zU1Nf81NTX/T09P/8HBwf/BwcH/wcHB/8HBwf81NTX/NTU1/zU1Nf9ERET/wcHB + /8HBwf/BwcH/u7u7/zU1Nf/BwcH/wcHB/8HBwf/BwcH/NTU1/8HBwf/BwcH/wcHB/8HBwf81NTX/NTU1 + /8HBwf/BwcH/wcHB/8HBwf81NTX/wcHB/8HBwf/BwcH/wcHB/zU1Nf/BwcH/wcHB/8HBwf/BwcH/NTU1 + /zU1Nf/BwcH/wcHB/8HBwf/BwcH/NTU1/zU1Nf81NTX/MzMz/zExMf8sLCz/JSUl/xwcHP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8dHR3/JiYm/y0tLf8yMjL/NDQ0/zY2Nv82Njb/NjY2 + /8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8TExP82Njb/NjY2/zY2Nv9RUVH/yMjI + /8jIyP/IyMj/yMjI/zY2Nv82Njb/NTU1/0ZGRv/IyMj/yMjI/8jIyP/BwcH/NTU1/8jIyP/IyMj/yMjI + /8jIyP81NTX/yMjI/8jIyP/IyMj/yMjI/zU1Nf81NTX/yMjI/8jIyP/IyMj/yMjI/zU1Nf/IyMj/yMjI + /8jIyP/IyMj/NTU1/8jIyP/IyMj/yMjI/8jIyP81NTX/NTU1/8jIyP/IyMj/yMjI/8jIyP81NTX/NTU1 + /zU1Nf8zMzP/MTEx/ywsLP8lJSX/HBwc/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABcAAAA + IgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /x0dHf8mJib/LS0t/zIyMv80NDT/NjY2/zY2Nv82Njb/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P + /8/Pz//Pz8//y8vL/zY2Nv82Njb/NjY2/1FRUf/Pz8//z8/P/8/Pz//Pz8//NjY2/zY2Nv82Njb/R0dH + /8/Pz//Pz8//z8/P/8jIyP82Njb/z8/P/8/Pz//Pz8//z8/P/zY2Nv/Pz8//z8/P/8/Pz//Pz8//NjY2 + /zY2Nv/Pz8//z8/P/8/Pz//Pz8//NjY2/8/Pz//Pz8//z8/P/8/Pz/82Njb/z8/P/8/Pz//Pz8//z8/P + /zY2Nv82Njb/z8/P/8/Pz//Pz8//z8/P/zY2Nv82Njb/NTU1/zMzM/8xMTH/LCws/yUlJf8cHBz/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/HR0d/yYmJv8tLS3/MjIy/zQ0NP82Njb/NjY2 + /zY2Nv/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/R0dH/NjY2/zY2Nv82Njb/UlJS + /9XV1f/V1dX/1dXV/9XV1f82Njb/NjY2/zY2Nv9HR0f/1dXV/9XV1f/V1dX/zc3N/zY2Nv/V1dX/1dXV + /9XV1f/V1dX/NjY2/9XV1f/V1dX/1dXV/9XV1f82Njb/NjY2/9XV1f/V1dX/1dXV/9XV1f82Njb/1dXV + /9XV1f/V1dX/1dXV/zY2Nv/V1dX/1dXV/9XV1f/V1dX/NjY2/zY2Nv/V1dX/1dXV/9XV1f/V1dX/NjY2 + /zY2Nv82Njb/NDQ0/zIyMv8tLS3/JiYm/x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA + XAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8dHR3/JiYm/y0tLf8yMjL/NDQ0/zY2Nv82Njb/NjY2/9zc3P/c3Nz/3Nzc/9zc3P82Njb/NjY2 + /zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv9TU1P/3Nzc/9zc3P/c3Nz/3Nzc/zY2Nv82Njb/NjY2 + /0hISP/c3Nz/3Nzc/9zc3P/U1NT/NjY2/9zc3P/c3Nz/3Nzc/9zc3P82Njb/3Nzc/9zc3P/c3Nz/3Nzc + /zY2Nv82Njb/3Nzc/9zc3P/c3Nz/3Nzc/zY2Nv/c3Nz/3Nzc/9zc3P/c3Nz/NjY2/9zc3P/c3Nz/3Nzc + /9zc3P82Njb/NjY2/9zc3P/c3Nz/3Nzc/9zc3P82Njb/NjY2/zY2Nv80NDT/MjIy/y0tLf8mJib/HR0d + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0dHf8nJyf/Li4u/zMzM/81NTX/Nzc3 + /zc3N/83Nzf/4+Pj/+Pj4//j4+P/4+Pj/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /1VVVf/j4+P/4+Pj/+Pj4//j4+P/Nzc3/zc3N/83Nzf/SUlJ/+Pj4//j4+P/4+Pj/9ra2v83Nzf/4+Pj + /+Pj4//j4+P/4+Pj/zY2Nv/j4+P/4+Pj/+Pj4//j4+P/NjY2/zY2Nv/j4+P/4+Pj/+Pj4//j4+P/NjY2 + /+Pj4//j4+P/4+Pj/+Pj4/82Njb/4+Pj/+Pj4//j4+P/4+Pj/zY2Nv82Njb/4+Pj/+Pj4//j4+P/4+Pj + /zY2Nv82Njb/NjY2/zQ0NP8yMjL/LS0t/yYmJv8dHR3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///// + /wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/HR0d/ycnJ/8uLi7/MzMz/zU1Nf83Nzf/Nzc3/zc3N//q6ur/6urq/+rq6v/q6ur/Nzc3 + /zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/VVVV/+rq6v/q6ur/6urq/+rq6v83Nzf/Nzc3 + /zc3N/9KSkr/6urq/+rq6v/q6ur/4eHh/zc3N//q6ur/6urq/+rq6v/q6ur/Nzc3/+rq6v/q6ur/6urq + /+rq6v83Nzf/Nzc3/+rq6v/q6ur/6urq/+rq6v83Nzf/6urq/+rq6v/q6ur/6urq/zc3N//q6ur/6urq + /+rq6v/q6ur/Nzc3/zc3N//q6ur/6urq/+rq6v/q6ur/Nzc3/zc3N/83Nzf/NTU1/zMzM/8uLi7/Jycn + /x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8dHR3/Jycn/y4uLv8zMzP/NTU1 + /zc3N/83Nzf/Nzc3//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/+zs7P83Nzf/8fHx + //Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/Nzc3/0pKSv/x8fH/8fHx//Hx8f/n5+f/Nzc3 + //Hx8f/x8fH/8fHx//Hx8f83Nzf/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx + /zc3N//x8fH/8fHx//Hx8f/x8fH/Nzc3//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx + //Hx8f83Nzf/Nzc3/zc3N/81NTX/MzMz/y4uLv8nJyf/HR0d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + //////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/x4eHv8oKCj/Ly8v/zQ0NP82Njb/ODg4/zg4OP84ODj/+Pj4//j4+P/4+Pj/+Pj4 + //j4+P/4+Pj/+Pj4//j4+P/4+Pj/8vLy/zg4OP/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4 + //j4+P83Nzf/SkpK//j4+P/4+Pj/+Pj4/+7u7v83Nzf/+Pj4//j4+P/4+Pj/+Pj4/zc3N//4+Pj/+Pj4 + //j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/1VVVf83Nzf/Nzc3//j4+P/4+Pj/+Pj4//j4+P83Nzf/+Pj4 + //j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/zc3N/83Nzf/Nzc3/zU1Nf8zMzP/Li4u + /ycnJ/8dHR3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Hh4e/ygoKP8vLy//NDQ0 + /zY2Nv84ODj/ODg4/zg4OP9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9vb2//ODg4 + /3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/zg4OP87Ozv/cXFx/3Fxcf9xcXH/bW1t + /zg4OP9xcXH/cXFx/3Fxcf9xcXH/ODg4/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/Pj4+ + /zg4OP84ODj/cXFx/3Fxcf9xcXH/cXFx/zg4OP9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx + /3Fxcf9xcXH/Nzc3/zc3N/83Nzf/NTU1/zMzM/8uLi7/Jycn/x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8eHh7/KCgo/y8vL/80NDT/NjY2/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP82Njb/NDQ0 + /y8vL/8oKCj/Hh4e/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABcAAAAIgAAAAYAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x4eHv8oKCj/Ly8v + /zQ0NP82Njb/ODg4/zg4OP84ODj/pKSk/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/pKSk/6SkpP+kpKT/pKSk + /6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/zg4OP84ODj/pKSk + /6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP84ODj/ODg4/zg4OP+kpKT/pKSk/6SkpP+kpKT/pKSk + /6SkpP+kpKT/pKSk/zg4OP84ODj/ODg4/zY2Nv80NDT/Ly8v/ygoKP8eHh7/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AQEB + /wEBAf8BAQH/AQEB/wEBAf8BAQH/Hh4e/ygoKP8vLy//NTU1/zc3N/85OTn/OTk5/zk5Of+np6f/p6en + /6enp/+np6f/p6en/6enp/+np6f/p6en/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/zk5Of+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /6enp/+np6f/p6en/6enp/+np6f/ODg4/zg4OP+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /zg4OP84ODj/ODg4/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/ODg4/zg4OP84ODj/NjY2 + /zQ0NP8vLy//KCgo/x4eHv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAAXAAAACIAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8eHh7/KCgo + /y8vL/81NTX/Nzc3/zk5Of85OTn/OTk5/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/OTk5 + /zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/6urq/+rq6v/q6ur + /6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/85OTn/OTk5 + /6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/OTk5/zk5Of85OTn/q6ur/6urq/+rq6v/q6ur + /6urq/+rq6v/q6ur/6urq/85OTn/OTk5/zk5Of83Nzf/NTU1/y8vL/8oKCj/Hh4e/wEBAf8BAQH/AQEB + /wEBAf8BAQH/AQEB//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/x4eHv8oKCj/Ly8v/zU1Nf83Nzf/OTk5/zk5Of85OTn/rq6u + /66urv+urq7/rq6u/66urv+urq7/rq6u/66urv85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/zk5Of85OTn/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u + /66urv+urq7/rq6u/66urv+urq7/rq6u/zk5Of85OTn/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u + /66urv85OTn/OTk5/zk5Of+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/zk5Of85OTn/OTk5 + /zc3N/81NTX/Ly8v/ygoKP8eHh7/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/Hx8f + /ykpKf8wMDD/NjY2/zg4OP86Ojr/Ojo6/zo6Ov+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy + /zo6Ov86Ojr/Ojo6/zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of+ysrL/srKy + /7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/OTk5 + /zk5Of+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/zk5Of85OTn/OTk5/7Kysv+ysrL/srKy + /7Kysv+ysrL/srKy/7Kysv+ysrL/OTk5/zk5Of85OTn/Nzc3/zU1Nf8vLy//KCgo/x4eHv8DAwP/AwMD + /wMDA/8DAwP/AwMD/wMDA///////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8fHx//KSkp/zAwMP82Njb/ODg4/zo6Ov86Ojr/Ojo6 + /7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1/7W1tf+1tbX/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1/7W1tf+1tbX/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1 + /7W1tf+1tbX/Ojo6/zo6Ov86Ojr/tbW1/7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1/7W1tf85OTn/OTk5 + /zk5Of83Nzf/NTU1/y8vL/8oKCj/Hh4e/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD//////8AAABcAAAA + IgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE + /x8fH/8pKSn/MDAw/zY2Nv84ODj/Ojo6/zo6Ov86Ojr/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5 + /7m5uf86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/ubm5 + /7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf86Ojr/Ojo6/zo6Ov+5ubn/ubm5 + /7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/zo6Ov86Ojr/Ojo6/zg4OP82Njb/MDAw/ykpKf8fHx//BAQE + /wQEBP8EBAT/BAQE/wQEBP8EBAT//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/Hx8f/ykpKf8wMDD/NjY2/zg4OP86Ojr/Ojo6 + /zo6Ov+8vLz/vLy8/7y8vP+8vLz/vLy8/7y8vP+8vLz/vLy8/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov+8vLz/vLy8/7y8vP+8vLz/vLy8/7y8vP+8vLz/vLy8 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov+8vLz/vLy8/7y8vP+8vLz/vLy8 + /7y8vP+8vLz/vLy8/zo6Ov86Ojr/Ojo6/7y8vP+8vLz/vLy8/7y8vP+8vLz/vLy8/7y8vP+8vLz/Ojo6 + /zo6Ov86Ojr/ODg4/zY2Nv8wMDD/KSkp/x8fH/8FBQX/BAQE/wQEBP8EBAT/BAQE/wQEBP//////AAAA + XAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8GBgb/BgYG/wYGBv8GBgb/BgYG + /wYGBv8gICD/Kioq/zExMf83Nzf/OTk5/zs7O/87Ozv/Ozs7/7+/v/+/v7//v7+//7+/v/+/v7//v7+/ + /7+/v/+/v7//Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/ + /7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/86Ojr/Ojo6/zo6Ov84ODj/NjY2/zAwMP8pKSn/Hx8f + /wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/yAgIP8qKir/MTEx/zc3N/85OTn/Ozs7 + /zs7O/87Ozv/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD + /8PDw/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/w8PD/8PDw//Dw8P/w8PD + /8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD + /zs7O/87Ozv/Ozs7/zg4OP82Njb/MDAw/ykpKf8fHx//BgYG/wYGBv8GBgb/BgYG/wYGBv8GBgb///// + /wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////BwcH/wcHB/8HBwf/BwcH + /wcHB/8HBwf/ICAg/yoqKv8xMTH/Nzc3/zk5Of87Ozv/Ozs7/zs7O//Gxsb/xsbG/8bGxv/Gxsb/xsbG + /8bGxv/Gxsb/xsbG/4KCgv+CgoL/goKC/4KCgv+CgoL/goKC/4KCgv+CgoL/goKC/4KCgv+CgoL/Ozs7 + /zs7O//Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O//Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG + /8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/Ozs7/zs7O/87Ozv/OTk5/zc3N/8xMTH/Kioq + /yAgIP8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB///////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8ICAj/CAgI/wgICP8ICAj/CAgI/wgICP8gICD/Kioq/zIyMv84ODj/Ojo6 + /zw8PP88PDz/PDw8/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK + /8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv87Ozv/Ozs7/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK + /8rKyv/Kysr/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/8rKyv/Kysr/ysrK + /8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK + /8rKyv87Ozv/Ozs7/zs7O/85OTn/Nzc3/zExMf8qKir/ICAg/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH + //////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wkJCf8JCQn/CQkJ + /wkJCf8JCQn/CAgI/yAgIP8qKir/MjIy/zg4OP86Ojr/PDw8/zw8PP88PDz/zs7O/87Ozv/Ozs7/zs7O + /87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O + /zw8PP88PDz/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv88PDz/PDw8/zw8PP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O + /87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/zs7O/87Ozv/Ozs7/zk5Of83Nzf/MTEx + /yoqKv8gICD/CAgI/wgICP8ICAj/CAgI/wgICP8ICAj//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////CQkJ/wkJCf8JCQn/CQkJ/wkJCf8JCQn/ICAg/yoqKv8yMjL/ODg4 + /zo6Ov88PDz/PDw8/zw8PP/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR + /9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/PDw8/zw8PP/R0dH/0dHR/9HR0f/R0dH/0dHR + /9HR0f/R0dH/0dHR/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP/R0dH/0dHR + /9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/qamp/zw8PP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/Ojo6/zg4OP8yMjL/Kioq/yAgIP8JCQn/CQkJ/wkJCf8JCQn/CQkJ + /wkJCf//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8KCgr/CgoK + /woKCv8KCgr/CgoK/woKCv8hISH/Kysr/zMzM/84ODj/Ojo6/zw8PP88PDz/PDw8/9TU1P/U1NT/1NTU + /9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU + /9TU1P88PDz/PDw8/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/PDw8/zw8PP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU + /9TU1P/U1NT/1NTU/9TU1P+rq6v/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP86Ojr/ODg4 + /zIyMv8qKir/ICAg/wkJCf8JCQn/CQkJ/wkJCf8JCQn/CQkJ//////8AAABcAAAAIgAAAAYAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/yEhIf8rKyv/MzMz + /zg4OP87Ozv/PT09/z09Pf89PT3/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX + /9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/z09Pf89PT3/19fX/9fX1//X19f/19fX + /9fX1//X19f/19fX/9fX1/89PT3/PT09/z09Pf89PT3/PT09/zw8PP88PDz/PDw8/zw8PP88PDz/19fX + /9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/6ysrP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zo6Ov84ODj/MjIy/yoqKv8gICD/CgoK/woKCv8KCgr/CgoK + /woKCv8KCgr//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////CwsL + /wsLC/8LCwv/CwsL/wsLC/8LCwv/ISEh/ysrK/8zMzP/ODg4/zs7O/89PT3/PT09/z09Pf/b29v/29vb + /9vb2//b29v/29vb/9vb2//b29v/29vb/z09Pf89PT3/PT09/9vb2//b29v/29vb/9vb2//b29v/29vb + /9vb2//b29v/PT09/z09Pf/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb + /9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/PT09/z09Pf89PT3/Ozs7 + /zg4OP8zMzP/Kysr/yEhIf8LCwv/CwsL/wsLC/8LCwv/CwsL/wsLC///////AAAAXAAAACIAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8MDAz/DAwM/wwMDP8MDAz/DAwM/wwMDP8hISH/Kysr + /zMzM/84ODj/Ozs7/z09Pf89PT3/PT09/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/PT09 + /z09Pf89PT3/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v89PT3/PT09/97e3v/e3t7/3t7e + /97e3v/e3t7/3t7e/97e3v/e3t7/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e + /97e3v/e3t7/3t7e/97e3v89PT3/PT09/z09Pf87Ozv/ODg4/zMzM/8rKyv/ISEh/wsLC/8LCwv/CwsL + /wsLC/8LCwv/CwsL//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /w0NDf8NDQ3/DQ0N/w0NDf8NDQ3/DQ0N/yEhIf8sLCz/NDQ0/zk5Of88PDz/Pj4+/z4+Pv8+Pj7/4uLi + /+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v8+Pj7/PT09/z09Pf/i4uL/4uLi/+Li4v/i4uL/4uLi + /+Li4v/i4uL/4uLi/z09Pf89PT3/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi + /+Li4v/FxcX/xcXF/8XFxf/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/z09Pf89PT3/PT09 + /zs7O/84ODj/MzMz/ysrK/8hISH/DAwM/wwMDP8MDAz/DAwM/wwMDP8MDAz//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////DQ0N/w0NDf8NDQ3/DQ0N/w0NDf8NDQ3/ISEh + /ywsLP80NDT/OTk5/zw8PP8+Pj7/Pj4+/z4+Pv/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl + /z4+Pv8+Pj7/Pj4+/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/Pj4+/z4+Pv/l5eX/5eXl + /+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+ + /z4+Pv/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/z09Pf89PT3/PT09/+Xl5f/l5eX/5eXl + /+Xl5f/l5eX/5eXl/+Xl5f/l5eX/PT09/z09Pf89PT3/Ozs7/zg4OP8zMzP/Kysr/yEhIf8NDQ3/DQ0N + /w0NDf8NDQ3/DQ0N/w0NDf//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8ODg7/Dg4O/w4ODv8ODg7/Dg4O/w4ODv8hISH/LCws/zQ0NP85OTn/PDw8/z4+Pv8+Pj7/Pj4+ + /+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/Pj4+/z4+Pv8+Pj7/6enp/+np6f/p6en/6enp + /+np6f/p6en/6enp/+np6f8+Pj7/Pj4+/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/Pj4+ + /z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/+np6f/p6en/6enp/+np6f/p6en/6enp + /+np6f/p6en/Pj4+/z4+Pv8+Pj7/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f8+Pj7/Pj4+ + /z4+Pv88PDz/OTk5/zQ0NP8sLCz/ISEh/w0NDf8NDQ3/DQ0N/w0NDf8NDQ3/DQ0N//////8AAABcAAAA + IgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////w4ODv8ODg7/Dg4O/w4ODv8ODg7/Dg4O + /yIiIv8sLCz/NDQ0/zk5Of88PDz/Pj4+/z4+Pv8+Pj7/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs + /+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/z4+Pv8+Pj7/7Ozs + /+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs + /z4+Pv8+Pj7/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P8+Pj7/Pj4+/z4+Pv/s7Oz/7Ozs + /+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/z4+Pv8+Pj7/Pj4+/zw8PP85OTn/NDQ0/ywsLP8hISH/Dg4O + /w4ODv8ODg7/Dg4O/w4ODv8ODg7//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//IiIi/y0tLf80NDT/Ojo6/z09Pf8/Pz//Pz8/ + /z8/P//w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw + //Dw8P/w8PD/8PDw//Dw8P/w8PD/Pz8//z8/P//w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw + //Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/Pj4+/z4+Pv/w8PD/8PDw//Dw8P/w8PD/8PDw + //Dw8P/w8PD/8PDw/z4+Pv8+Pj7/Pj4+//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/Pj4+ + /z4+Pv8+Pj7/PDw8/zk5Of80NDT/LCws/yEhIf8ODg7/Dg4O/w4ODv8ODg7/Dg4O/w4ODv//////AAAA + XAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8QEBD/EBAQ/xAQEP8QEBD/EBAQ + /xAQEP8iIiL/LS0t/zQ0NP86Ojr/PT09/z8/P/8/Pz//Pz8///Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz + //Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/8/Pz//Pz8/ + //Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz + //Pz8/8/Pz//Pz8///Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/Pz8//z8/P/8/Pz//8/Pz + //Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/8/Pz//Pz8//z8/P/89PT3/Ojo6/zQ0NP8tLS3/IiIi + /w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////xEREf8RERH/ERER/xEREf8RERH/ERER/yIiIv8tLS3/NDQ0/zo6Ov89PT3/Pz8/ + /z8/P/8/Pz//9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2/z8/P/8/Pz//9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/z8/P/8/Pz//9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8/Pz//Pz8//z8/P//29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /z8/P/8/Pz//Pz8//z09Pf86Ojr/NDQ0/y0tLf8iIiL/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD///// + /wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////ERER/xEREf8RERH/ERER + /xEREf8RERH/IiIi/y0tLf81NTX/Ozs7/z4+Pv9AQED/QEBA/0BAQP/6+vr/+vr6//r6+v/6+vr/+vr6 + //r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/5+fn/Pz8/ + /z8/P//6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6 + //r6+v/6+vr/Pz8//z8/P//6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6/z8/P/8/Pz//Pz8/ + //r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/Pz8//z8/P/8/Pz//PT09/zo6Ov80NDT/LS0t + /yIiIv8RERH/ERER/xEREf8RERH/ERER/xEREf//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8SEhL/EhIS/xISEv8SEhL/EhIS/xISEv8iIiL/LS0t/zU1Nf87Ozv/Pj4+ + /0BAQP9AQED/QEBA/8DAwP/AwMD/v7+//7+/v//AwMD/wMDA/8DAwP/AwMD/v7+//7+/v/+/v7//v7+/ + /8DAwP/AwMD/v7+//7+/v/+/v7//v7+//7+/v/9AQED/QEBA/7+/v/+/v7//v7+//8DAwP/AwMD/wMDA + /8DAwP+/v7//v7+//7+/v//AwMD/wMDA/8DAwP+/v7//v7+//7+/v/9AQED/QEBA/8DAwP/AwMD/v7+/ + /7+/v/+/v7//v7+//7+/v/+/v7//Pz8//z8/P/8/Pz//vr6+/76+vv+/v7//v7+//7+/v/++vr7/vr6+ + /76+vv8/Pz//Pz8//z8/P/89PT3/Ojo6/zQ0NP8tLS3/IiIi/xEREf8RERH/ERER/xEREf8RERH/ERER + //////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////xISEv8SEhL/EhIS + /xISEv8SEhL/EhIS/yIiIv8tLS3/NTU1/zs7O/8+Pj7/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/z4+Pv87Ozv/NTU1 + /y0tLf8iIiL/EhIS/xISEv8SEhL/EhIS/xISEv8SEhL//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/IiIi/y0tLf81NTX/Ozs7 + /z4+Pv9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/Pj4+/zs7O/81NTX/LS0t/yIiIv8TExP/ExMT/xMTE/8TExP/EhIS + /xISEv//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8UFBT/FBQU + /xQUFP8UFBT/FBQU/xQUFP8jIyP/Li4u/zY2Nv88PDz/Pz8//0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP8+Pj7/Ozs7 + /zU1Nf8tLS3/IiIi/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT//////8AAABcAAAAIgAAAAYAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////xUVFf8VFRX/FRUV/xUVFf8VFRX/FRUV/yMjI/8uLi7/NjY2 + /zw8PP8/Pz//QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/z8/P/88PDz/NjY2/y4uLv8iIiL/FBQU/xQUFP8UFBT/FBQU + /xQUFP8UFBT//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////FRUV + /xUVFf8VFRX/FRUV/xUVFf8VFRX/IyMj/y4uLv82Njb/PDw8/z8/P/9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/Pz8/ + /zw8PP82Njb/Li4u/yMjI/8VFRX/FRUV/xUVFf8VFRX/FRUV/xUVFf//////AAAAXAAAACIAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8jIyP/Ly8v + /zc3N/89PT3/QEBA/0JCQv9CQkL/QkJC/0JCQv9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9AQED/QEBA/0BAQP9AQED/Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8+Pj7/Ozs7/zU1Nf8tLS3/IiIi/xUVFf8VFRX/FRUV + /xUVFf8VFRX/FRUV//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/yMjI/8vLy//Nzc3/z09Pf9AQED/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0FBQf9BQUH/QEBA/0BAQP8/Pz//Pz8//z4+Pv8+Pj7/Pj4+/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /zs7O/84ODj/MzMz/ysrK/8hISH/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/IyMj + /y8vL/83Nzf/PT09/0BAQP9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9BQUH/QEBA/z8/P/8+Pj7/PT09/zs7O/86Ojr/OTk5 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/Nzc3/zQ0NP8uLi7/Jycn/x4eHv8XFxf/FxcX + /xcXF/8XFxf/FxcX/xcXF///////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8YGBj/GBgY/xgYGP8YGBj/GBgY/xgYGP8jIyP/Ly8v/zc3N/89PT3/QEBA/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QUFB + /0BAQP8/Pz//PT09/zs7O/84ODj/NTU1/zMzM/8yMjL/MTEx/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw + /zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw + /zAwMP8vLy//LS0t/ygoKP8iIiL/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX//////8AAABbAAAA + IQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /yQkJP8vLy//ODg4/z4+Pv9BQUH/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/QkJC/0JCQv9CQkL/QkJC/0FBQf9AQED/Pj4+/zs7O/84ODj/NDQ0/y8vL/8sLCz/KSkp + /ycnJ/8mJib/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl + /yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yQkJP8iIiL/Hh4e/xoaGv8VFRX/GBgY + /xgYGP8YGBj/GBgY/xgYGP8YGBj//////wAAAFoAAAAhAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/JCQk/y8vL/84ODj/Pj4+/0FBQf9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9CQkL/QUFB + /z8/P/87Ozv/Nzc3/zIyMv8sLCz/JiYm/yEhIf8ZGRn/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW + /xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW + /xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf//////AAAA + VwAAAB8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8kJCT/Ly8v/zg4OP8+Pj7/QUFB/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0JCQv9AQED/PDw8/zc3N/8wMDD/KSkp/yEhIf8aGhr/Ghoa + /xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ//////8AAABPAAAAGgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/yQkJP8wMDD/OTk5/z8/P/9CQkL/RERE + /0RERP9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9CQkL/QUFB + /z09Pf84ODj/MTEx/ygoKP8eHh7/Ghoa/xoaGv8aGhr/Ghoa/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr///// + /wAAAD8AAAATAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////Gxsb/xsbG/8bGxv/Gxsb + /xsbG/8bGxv/JCQk/zAwMP85OTn/Pz8//0JCQv9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0NDQ/9AQED/PDw8/zU1Nf8sLCz/ISEh/xsbG/8bGxv/Gxsb + /ysrK/82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2 + /zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/xsbG/8bGxv/Gxsb + /xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb////////////AAAAKwAAAAwAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8kJCT/MDAw/zk5Of8/Pz//QkJC + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9DQ0P/QkJC + /z8/P/85OTn/MDAw/yYmJv8cHBz/HBwc/xwcHP82Njb/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /zY2Nv82Njb/NjY2/zY2Nv8sLCz/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG//+/v7///// + /wAAADkAAAAVAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////x0dHf8dHR3/HR0d + /x0dHf8dHR3/HR0d/yQkJP8wMDD/OTk5/z8/P/9CQkL/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0NDQ/9BQUH/PT09/zU1Nf8sLCz/GBgY/xwcHP8cHBz/NTU1 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP83Nzf/Nzc3/zc3N/83Nzf/LS0t/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz//v7+//////8AAAA+AAAAGgAAAAcAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/JSUl/zExMf85OTn/QEBA + /0NDQ/9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0RERP9ERET/Q0ND + /0FBQf88PDz/MzMz/ygoKP8dHR3/HR0d/xYWFv85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/y0tLf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d////////////AAAA + PgAAABsAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8eHh7/Hh4e + /x4eHv8eHh7/Hh4e/x4eHv8lJSX/MTEx/zk5Of9AQED/Q0ND/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9DQ0P/QUFB/zs7O/8xMTH/JiYm/x4eHv8eHh7/Nzc3 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of8vLy//HR0d/x0dHf8dHR3/HR0d + /x0dHf8dHR3/HR0d/x0dHf///////////wAAAD4AAAAbAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/yUlJf8xMTH/OTk5 + /0BAQP9DQ0P/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0NDQ/9AQED/Ojo6/zAwMP8eHh7/Hh4e/x4eHv87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O/86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/ICAg/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7///////////8AAAA+AAAA + GwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////Hx8f + /x8fH/8fHx//Hx8f/x8fH/8fHx//JiYm/zIyMv86Ojr/QUFB/0RERP9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/Q0ND/0BAQP85OTn/Ly8v/x4eHv8fHx//Hx8f + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/yEhIf8fHx//Hx8f/x8fH/8fHx//Hx8f + /x8fH/8fHx//Hx8f////////////AAAAPgAAABsAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8gICD/ICAg/yAgIP8gICD/ICAg/yAgIP8mJib/MjIy + /zo6Ov9BQUH/RERE/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9ERET/QUFB/zo6Ov8vLy//Hx8f/yAgIP8gICD/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8 + /zw8PP8hISH/Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH////////////wAAAD8AAAAbAAAA + BwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yYmJv8yMjL/Ojo6/0FBQf9ERET/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0RERP9AQED/OTk5/y8vL/8eHh7/ICAg + /x8fH/89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/ISEh/yAgIP8gICD/ICAg/yAgIP8gICD/ICAg + /yAgIP8gICD///////////8AAAA/AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/JiYm + /zIyMv86Ojr/QUFB/0RERP9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RERE/0BAQP85OTn/Ly8v/x8fH/8hISH/ICAg/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+ + /z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+ + /xoaGv8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh////////////AAAAPgAAABsAAAAIAAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8mJib/MjIy/zs7O/9CQkL/RUVF/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0ZGRv9GRkb/RkZG/0VFRf9ERET/QEBA/zk5Of8vLy//Hx8f + /yIiIv8hISH/Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8YGBj/ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh + /yEhIf///////////wAAAD4AAAAbAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj + /yYmJv8yMjL/Ozs7/0JCQv9FRUX/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/RkZG/0VFRf9BQUH/Ojo6/y8vL/8gICD/IiIi/yEhIf9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/Ghoa + /yIiIv8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8iIiL//v7+//////8AAAA+AAAAGwAAAAgAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/JiYm/zIyMv87Ozv/QkJC/0VFRf9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9GRkb/RUVF/0FBQf86Ojr/Ly8v + /yAgIP8jIyP/IiIi/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/xwcHP8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj + //7+/v//////AAAAPgAAABsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8kJCT/JCQk/yQkJP8kJCT/JCQk + /yQkJP8nJyf/MzMz/zw8PP9DQ0P/RkZG/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0ZGRv9FRUX/QUFB/zo6Ov8vLy//ICAg/yQkJP8jIyP/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9BQUH/QUFB/0FBQf8eHh7/JCQk + /yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP/+/v7//////wAAAD4AAAAbAAAABwAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/ycnJ/8zMzP/PDw8/0NDQ/9GRkb/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/R0dH/0ZGRv9CQkL/Ozs7 + /zAwMP8hISH/JSUl/yQkJP9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/QkJC/0JCQv9CQkL/HBwc/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT///// + //////8AAAA+AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////JSUl/yUlJf8lJSX/JSUl + /yUlJf8lJSX/Jycn/zMzM/88PDz/Q0ND/0ZGRv9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9HR0f/RkZG/0JCQv87Ozv/MDAw/yEhIf8lJSX/JCQk/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/x8fH/8lJSX/JSUl + /yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl////////////AAAAPwAAABsAAAAHAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8mJib/JiYm/yYmJv8mJib/JiYm/yYmJv8nJyf/MzMz/zw8PP9DQ0P/RkZG + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0dHR/9GRkb/QkJC + /zs7O/8wMDD/ISEh/yYmJv8lJSX/RUVF/0VFRf9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP8jIyP/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf/+/v7///// + /wAAAD8AAAAcAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////ycnJ/8nJyf/Jycn + /ycnJ/8nJyf/Jycn/ycnJ/80NDT/PT09/0RERP9HR0f/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/R0dH/0ZGRv9CQkL/Ozs7/zAwMP8hISH/JiYm/yUlJf9GRkb/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/IiIi/yYmJv8mJib/JiYm + /yYmJv8mJib/JiYm/yYmJv8mJib//v7+//////8AAAA+AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////KCgo/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/zQ0NP89PT3/RERE + /0dHR/9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9ISEj/R0dH + /0NDQ/88PDz/MTEx/yEhIf8nJyf/JiYm/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/yMjI/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn////////////AAAA + PgAAABsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8nJyf/NDQ0/z09Pf9ERET/R0dH/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0hISP9HR0f/Q0ND/zw8PP8xMTH/IiIi/ygoKP8nJyf/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/8lJSX/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP///////f39/gAAAD4AAAAbAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////ykpKf8pKSn/KSkp/ykpKf8pKSn/KSkp/ygoKP80NDT/Pj4+ + /0VFRf9ISEj/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SEhI + /0dHR/9DQ0P/PDw8/zExMf8iIiL/KSkp/ygoKP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9HR0f/Jycn/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj///////////8AAAA+AAAA + GwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////KSkp + /ykpKf8pKSn/KSkp/ykpKf8pKSn/KCgo/zQ0NP8+Pj7/RUVF/0hISP9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9JSUn/R0dH/0RERP88PDz/MTEx/yMjI/8pKSn/KCgo + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SEhI/ykpKf8pKSn/KSkp/ykpKf8pKSn/KSkp + /ykpKf8pKSn/KSkp////////////AAAAPgAAABsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8oKCj/NDQ0 + /z4+Pv9FRUX/SEhI/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0lJSf9HR0f/RERE/zw8PP8xMTH/IyMj/yoqKv8pKSn/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv8pKSn/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv///////f39/gAAAD4AAAAbAAAA + CAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ygoKP80NDT/Pj4+/0VFRf9ISEj/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SUlJ/0dHR/9ERET/PDw8/zExMf8jIyP/Kioq + /ykpKf9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/KSkp/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq + /yoqKv8qKir///////39/f4AAAA+AAAAGwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////LCws/ywsLP8sLCz/LCws/ywsLP8sLCz/KCgo + /zU1Nf8+Pj7/RkZG/0lJSf9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9JSUn/R0dH/0RERP88PDz/MTEx/yQkJP8rKyv/Kioq/0xMTP9MTEz/TExM/0xMTP9MTEz/S0tL + /yoqKv8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr////////////AAAAPAAAABoAAAAIAAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8oKCj/NTU1/z4+Pv9GRkb/SUlJ/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0pKSv9ISEj/RUVF/z09Pf8yMjL/JSUl + /ywsLP8rKyv/TU1N/01NTf9NTU3/TExM/0tLS/8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8sLCz/LCws + /ywsLP///////Pz8/QAAADkAAAAZAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAACEAAABb/////y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /ycnJ/80NDT/Pj4+/0VFRf9JSUn/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/SkpK/0hISP9FRUX/PT09/zIyMv8lJSX/LCws/ysrK/9OTk7/TU1N/01NTf9LS0v/LCws + /ywsLP8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8sLCz///////v7+/sAAAA5AAAAFwAAAAYAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAA + IQAAAFr/////LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/JiYm/zMzM/89PT3/RUVF/0lJSf9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9KSkr/SEhI/0VFRf89PT3/MjIy + /yUlJf8tLS3/LCws/05OTv9OTk7/TU1N/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + ////////////AAAAOAAAABcAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAfAAAAWP////8uLi7/Li4u/y4uLv8uLi7/Li4u + /y4uLv8kJCT/MDAw/zo6Ov9DQ0P/SEhI/0pKSv9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0pKSv9JSUn/RUVF/z4+Pv8yMjL/JiYm/y4uLv8uLi7/T09P/05OTv8uLi7/Li4u + /y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv///////////wAAADgAAAAXAAAABgAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AwAAABwAAABT/////y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/yQkJP8rKyv/NjY2/z4+Pv9ERET/RkZG + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0ZGRv9CQkL/Ozs7 + /zAwMP8lJSX/Li4u/y4uLv81NTX/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7///// + //////8AAAA5AAAAFwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFwAAAEn/////MDAw/zAwMP8wMDD/MDAw + /zAwMP8wMDD/LS0t/yUlJf8uLi7/Nzc3/z09Pf9AQED/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QEBA/z09Pf82Njb/LCws/yQkJP8vLy//Ly8v/y8vL/8vLy//Ly8v + /y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v////////////AAAAOQAAABcAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAARAAAAPf////9DQ0P/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/HR0d/yYmJv8tLS3/MzMz + /zc3N/85OTn/OTk5/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of83Nzf/NDQ0 + /y4uLv8lJSX/IiIi/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP//////+/v7 + +gAAADkAAAAXAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAv0dHRyvv7+/8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/HBwc/yMjI/8oKCj/Kysr/y0tLf8uLi7/Li4u/y4uLv8uLi7/Li4u + /y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u + /y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y0tLf8qKir/JSUl/x4eHv8lJSX/MDAw/zAwMP8wMDD/MDAw + /zAwMP8wMDD/MDAw/zAwMP8wMDD///////////8AAAA4AAAAGAAAAAcAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAAB8AAABT/////zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MDAw + /ykpKf8iIiL/IyMj/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk + /yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/IyMj + /yIiIv8eHh7/JSUl/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx////////////AAAA + NwAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAAADj9/f3+6enp + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv///////////wAAADYAAAAWAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIAAAAFD/////NTU1/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP///////////8AAAA1AAAA + FQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAOAAAA + LmxsbIH/////NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz///////7+/v7AAAANQAAABUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAATAAAANP//////////NTU1/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP//////29vbzgAAADQAAAAVAAAA + BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAUAAAAVAAAAMvf39/D/////4ODg/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT//////83Nzb4AAAA0AAAAFQAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAATAAAAKAAAAEb9/f3+//// + //X19f+rq6v/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/ra2t///////IyMi2AAAAMgAAABUAAAAFAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAQAAAALAAAAGgAAAC4AAABD0NDQuv/////9/f3+/f39/v39/f79/f3+/f39 + /v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39 + /v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39 + /v39/f79/f3+AAAARAAAACoAAAATAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAA + DAAAABUAAAAfAAAAJgAAACoAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAA + LAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAA + LAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAArAAAAKAAAACEAAAAXAAAADAAAAAMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAHAAAACQAAAAkAAAAKAAAA + CgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAA + CgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAA + CgAAAAkAAAAIAAAABgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////+AAAAAAAAAAAA/////////AAAAAAAAAAAAD////////AAAAAAAAAAAAAf// + /////gAAAAAAAAAAAAD///////wAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAD//////+AAAAAAAAAAA + AAA///////gAAAAAAAAAAAAAH//////4AAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAA///////AAAAAA + AAAAAAAAf//////wAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////w + AAAAAAAAAAAAB///////8AAAAAAAAAAAAA////////AAAAAAAAAAAAAf///////wAAAAAAAAAAAAP/// + ////8AAAAAAAAAAAAH////////AAAAAAAAAAAAD////////wAAAAAAAAAAAB////////8AAAAAAAAAAA + A/////////AAAAAAAAAAAAf////////wAAAAAAAAAAAP////////8AAAAAAAAAAAH/////////AAAAAA + AAAAAD/////////wAAAAAAAAAAB/////////8AAAAAAAAAAA//////////AAAAAAAAAAAf/////////w + AAAAAAAAAAP/////////8AAAAAAAAAAH//////////AAAAAAAAAAD//////////wAAAAAAAAAB////// + ////8AAAAAAAAAA///////////AAAAAAAAAAf//////////wAAAAAAAAAP//////////8AAAAAAAAAH/ + //////////AAAAAAAAAD///////////wAAAAAAAAB///////////8AAAAAAAAA////////////gAAAAA + AAAf///////////4AAAAAAAAP////////////AAAAAAAAH////////////wAAAAAAAD////////////+ + AAAAAAAB/////////////wAAAAAAA//////////////AAAAAAAf/////////////8AAAAAAf//////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8oAAAAgAAAAAABAAABAAgAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEBAf8CAgL/AwMD/wQEBP8FBQX/BgYG/wcHB/8ICAj/CQkJ + /woKCv8LCwv/DAwM/w0NDf8ODg7/Dw8P/xAQEP8RERH/EhIS/xMTE/8UFBT/FRUV/xYWFv8XFxf/GBgY + /xkZGf8aGhr/Gxsb/xwcHP8dHR3/Hh4e/x8fH/8gICD/ISEh/yIiIv8jIyP/JCQk/yUlJf8mJib/Jycn + /ygoKP8pKSn/Kioq/ysrK/8sLCz/LS0t/y4uLv8vLy//MDAw/zExMf8yMjL/MzMz/zQ0NP81NTX/NjY2 + /zc3N/84ODj/OTk5/zo6Ov87Ozv/PDw8/z09Pf8+Pj7/Pz8//0BAQP9BQUH/QkJC/0NDQ/9ERET/RUVF + /0ZGRv9HR0f/SEhI/0lJSf9KSkr/S0tL/0xMTP9NTU3/Tk5O/09PT/9QUFD/UVFR/1JSUv9TU1P/VFRU + /1VVVf9WVlb/V1dX/1hYWP9ZWVn/Wlpa/1tbW/9cXFz/XV1d/15eXv9fX1//YGBg/2FhYf9iYmL/Y2Nj + /2RkZP9lZWX/ZmZm/2dnZ/9oaGj/aWlp/2pqav9ra2v/bGxs/21tbf9ubm7/b29v/3BwcP9ycnL/c3Nz + /3R0dP91dXX/dnZ2/3d3d/94eHj/eXl5/3p6ev97e3v/fHx8/319ff9+fn7/f39//4CAgP+BgYH/goKC + /4SEhP+FhYX/hoaG/4eHh/+IiIj/iYmJ/4qKiv+Li4v/jIyM/42Njf+Ojo7/j4+P/5CQkP+RkZH/kpKS + /5OTk/+UlJT/lZWV/5aWlv+Xl5f/mJiY/5mZmf+ampr/m5ub/5ycnP+dnZ3/np6e/5+fn/+goKD/oaGh + /6Kiov+jo6P/pKSk/6Wlpf+mpqb/p6en/6ioqP+pqan/qqqq/6urq/+srKz/ra2t/66urv+vr6//sLCw + /7Gxsf+ysrL/s7Oz/7S0tP+1tbX/tra2/7e3t/+4uLj/ubm5/7q6uv+7u7v/vLy8/729vf++vr7/v7+/ + /8DAwP/BwcH/wsLC/8PDw//ExMT/xcXF/8bGxv/Hx8f/yMjI/8nJyf/Kysr/y8vL/8zMzP/Nzc3/zs7O + /8/Pz//Q0ND/0dHR/9LS0v/T09P/1NTU/9XV1f/W1tb/19fX/9jY2P/Z2dn/2tra/9vb2//c3Nz/3d3d + /97e3v/f39//4eHh/+Li4v/j4+P/5OTk/+Xl5f/m5ub/5+fn/+jo6P/p6en/6urq/+vr6//s7Oz/7e3t + /+7u7v/v7+//8PDw//Hx8f/y8vL/8/Pz//T09P/39/f/+Pj4//r6+v/7+/v//Pz8//////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARqfP1dTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU + 1NTU1NTU1NTU1NTU1NTU1NTU1NTV2cihPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAOsj2xoBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk + ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRniMf2zlgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAH/xuDcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATen9bAKAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACX9HYGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG5NYZAQEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAefRVAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa + zd0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLwfgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQ1sQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAuMoEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYp8nYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABr0RAAAAAAAAAAGCxEXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcS + FxEUFBcSFxIXEhcSFxIXDwsEAAAAAAAAAACG5QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjtoEAAAAAAAAER8kKCcpKCooKigqKConKCkqKCooKigqKCooKigqKCooKigqKCooKigq + KCooKigqKCopKSkoKigqKCooKigpJicmJCAQBgAAAAAAABDsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADNhQAAAAAAAAwhJiovKi8qMCowKjAqMCovMC8qMCowKjAqMCowKjAqMCow + KjAqMCowKjAqMCowKjAqMCowKiovKjAqMCowKjApLywqJyUYAAAAAAAAAKW4BgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOdSAAAAAAAEGigpKjAxMS8vMTExMTEyNCovMTExMTIyLy8w + LzExMTExMTExMTExMDExMTExMTEwLzExMTExNzAxMTExMTEyMjAvMTEsKCEXAAAAAAABWeMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO9B8AAAAAAAogJyk2MTA3OkdAQUFBQUFBOjcw + MjlBQUE6NzQ3OEFBQUFBQUFBQTc6REFBQUFBQTk3MkFBQUEyOkRBQUFBQUFBOjcxMSosKCAGAAAAAAAf + 8w0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb3HwAAAAAADyQpKi83NzaWpaek + paWmpqZ5NzcyZqekp3k0NDRmpaanpKWlpqenOoaopqSlpaWmaDQ3pqakpjqCpqekpaWmp6aINzcwNyop + IQ0AAAAAASH2FgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvcfAAAAAAAQJCkx + NzExNJeorqiura2qp4U0MjdmqqeugDIxMWmqqqqnra2tqqg/iK6oqK6qra2ceTqqqKitOoavraiuqq2t + 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 + 9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3KAsLCwwNHCo0Ojw6PEDH1tbW + 1tbW18XDyNbW1tbW1ta6OknV1tbW1tbW0kc6QDpAOjo/PD+41tbW1tbW1tbW1tbYl1hYWFlWPD86ODg0 + LBoKCgoKCij2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YpDAsLCwsaKjY4 + OkA6Qc7a2dnZ2dnZVTpk2NnZ2dnZ2bo8S9jZ2dnZ2dnVQDo/Oj86Pzw6QMLZ2dnZ2dnZ2dnZ2dnZ2dnZ + 2cM6Pzo6PDQqGg4LCwsLKPcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9ikM + DAwMDxoqNjo6QDo6zdvb29vb29tRPGfb3dvb29vbvTpK2t3b29vb3NxBPz8/Pz9AOj88w9vb29vb29vd + 3d3b29vb29zcxkBAOjo4MikcCwsLCwwp9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf2LA4NDQ0NGik3Nzo6OkbV4eHh4eHh4VU8Z+Te4eHh4eHCPEzc3uHh4eHh3Do6Ojo6Ojo6QTrH + 4eHh4eHh4aaWo+Hh4eHh4eHHPzo6Pzo3KhwMDAwMDCn2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/YqDQ0NDg8aLDQ6OkY6QNbj4+Pj4+PjWDpn4+Pj4+Pj48Q6SuTj4+Pj4+PcRjpG + OkY6RjpBP8fj4+Pj4+PkYjxc4+Th4+Pj480/Pzo6OjIqHA0NDQ0OLPYXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9iwODg4ODBovNzo6QDpE2ubl5+bn5uZVOmrl5+bn5ufmxz9K5Ofl + 5+bn5uRHOkA6QDpAOkA6x+bn5ufm5+ZnOl/m5+fn5+bnzjw6QDo8NykgDg0NDQ0q9hcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3Kg8PDg4XGiw2OjpAOkDc7Ofs5+zn59XN1ufs5+zn + 7efIQUvl7Ofs5+zn6c3Nzc3Nzc3GQTzU5+zn7Ofs52Y6X+fn7Ofs5+nVRj9AOjg3KRwODg4ODiz2FwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YpEQ8PDw8aKjk6P0A/Qd7t7e3t7e3t + 7e3t7e3t7e3t7cc/S+fv7e3t7e3t7e3t7e3t7eNHOtXu7e3t7e3tZzpg7e3t7e3t7dU/Ojo8OjQsGhAO + Dg4OKvcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9ywOEBAREh8pNjo8Pz9B + 4fDw8PDw8PDw8PDw8PDw8PDv1T9M7PDw8PDw8PDw8PDw8PDx50c61PDw8PDw8PBmP1/w8PDw8PDw2EA/ + Rjo5NywcDQ8PDxEp9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3LBcRERER + Gi83OTpBQEDj8vLy8vLy8vLy8vLy8vLy8vLOOkzy8/Ly8vLy8vLy8vLy8vLsRjrZ8vLy8vLy8mc/X/Ly + 8vLy8vLbQD8/Ojo3LB8XEBAQDiz3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + FPcqEREREhQgLDc6Pzo/Ruf09PT09PT09PT09PT09PT09NVATPL09PT09PT09PT09PT09OxGP9r09PT0 + 9PT0Zz9g9PT09PT09N1BQUA8PDkqGhERERIXKfYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9i8SEhISEBoqOjw/R0BBnqenp6enp6enp6enp6enp6enlD9Ipaenp6enp6enp6enp6en + okc/laenp6enp6dWP1Knp6anp6aml0A/Ojo/NikgEREREQ8p9xcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABf3LxISEhIXICk4OjpAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFHOjw4LB8SERARFy/2FwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YxEhIREhEaMDY8P0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA6OjkpIhYUFxISL/YXAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/c5IRohGhokMTpAQEdGR0ZBRkFGQUZBRkFGR0ZHRkdGR0ZH + RkdGR0FBRjg3KRoaJDo6Ojk5ODg6ODo6OTg3OTk6Ojc6NzY4ODk6KRogGiAaGho01+EkAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9jofGiAaICQxOEBHREZBR0ZGRkZGRkZGRkZE + R0FGQUZBRkFGQUZBRkZAOjclGiIwOTo8Ojo6Ojo6PDw6Ojo6Ojw6Ojo6Ojo5OSkfGiEaIRohN9bhJQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2Oh8fHx8fJDI6Oj9GR0dHR0dH + R0dHR0dHR0RGRkZGRkZGRkZGRkZGQUA6MSQaHzo6Ojw8Ojw/Ojo6PDk6PDo6Ojo6Ojo8OjkqGiAaIBog + GjjX4SYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/Y5ICAfHx8lMDhG + RkdHRkZGRkZGRkZGRkZGRkdHR0dHR0dHR0dHR0dHPzkwIh8fOTo/Ojo6Pzw6Oj86Ojw8PDo6Ojo6Ojo6 + KSAfHx8fHx841+ElAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9zog + ICAgICQ3Oj9GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkRAOjAgISY6QEA6QDpAOkA6OjxBOjxB + OkA6PD86PCofICAgICAgONjhJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf3OiIiISEhJTA6QUZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGREA5LyUgJzpBOjpBOkE6 + QTpBOkE6OkA6Ojo6QTosICAgICAgIDjZ4SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFPc6ISEhISElNzk/RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEPzkvISIp + OjxAOkA6QDpAOkA6P0E6P0E6Rzo8KCEhISEhISE52eElAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9zoiICIiIiYwOkFGRkdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRkZG + REY6PDAlIig/Rj8/Pz8/Pz8/Pz8/PzpAPzo/OikiISEhHyEhONfhJgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABT3PCUlISEhJjc5RkdHR0dHR0dHR0dHR0dHR0dHR0dH + R0dHR0dHR0dHR0E6MCQhKTpAQEBAQEBAQEBAQEBARj9ARjopICAgICElITzY4SUAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/c6KCUlJSUmMDpBREdHR0dHR0dHR0dH + R0dHR0dHR0dHR0dHR0dHR0ZHQTowJCUqRj9AQUFBQUFBQT9AQUE/OkY6KSQlJSUlJSI62+EkAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU9zokJCQkJCY3PEdGR0hI + SEhISEhISEhISEdHR0dHR0dHR0dHR0dHR0Q/OjAkJSk/RkE/P0BBQEE/RkFAQUZHPyokJCQkJCImOtjh + JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2QCUlJSUl + JzE6REdISEhISEhISEhISEhISEhISEhISEhISEhISEhHREY4MSYlLEZAQEZGRkBGQEZAQEY/QUEpJSQk + JCQkJT/a4SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + F/c/JSUlJSUmNzpBRkhISEhISEhISEhISEhISEhISEhISEhISEhISEdHQTowJigpR0dGQUFBR0FGQEZG + QEdAKiUlJSUlJSc63eElAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9kEnJiYmJic3OkdHSEhISEhISEhISEhISEhISEhISEhISEhISEhIR0ZGOjAmJilJRkdH + R0ZBRkFGQURGPyomJiYmJiYlP9zhJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAARf2PycnJycnKTc6REdJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSEhISEhIRkE5 + MSYoKkZGRkZHR0dHR0dHREYqJiYmJiYmJkHc4SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/ZHKCgoKCgoNDpHSElJSUlJSUlJSUlJSUlJSUlJSUlJSUlJ + SUlJSUhHRzoyJicvRkZGRkZGRkZGRkRBLCgnJycnJyVB4eEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU9kAoKCgoKCk3OkRHSUlJSUlJSUlJSUlJSUlJ + SUlJSUlJSUlJSUlJSEhEOjEnKDBHR0dHR0dHR0ZERikoKCgoKCgoR+HhJAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2RigqKikpKTQ6RklJSkpKSkpK + SUlJSUlJSUlJSUlJSUlJSUlJSUlIR0E6MicpMUhISEhISEhISEYoKSkoKCgoJkTh4SUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/ZHKSooKSkqNzpH + SEpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSklHRzowKCgvSUlJSUlJSUlELCkpKCkpKSlH5OEmAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9kYq + KSksLCo0OkZJSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSUhGOjcnKTdKSUpMS0pKRikpLykpKios + SOHhJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAARf2RyopLyksKTc6R0hKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpJRkY8MSopNEtLS0tKTEcp + KSksLCwpKUjh5CUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/ZHLCovKSopNzpKSktLS0tLS0tLS0tLS0tLS0tKSkpKSkpKSkpKSkpIRjo3KCk4 + S0xMTExGKSosLCopKipR59omAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEY9kopLC8pLCo3OkRJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tL + SklHOjQpKTRPTEtLRCkvLykpLyksVufVDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SCoqMSkwLDc/R0dLS0tLS0tLS0tLS0tLS0tLS0tL + S0tLS0tLS0tKSUc6NiosN0xMTEcpLywqKi8vKVjs1g4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGPZIMSkxKikqNDpHSUtLTExMS0tLS0tL + S0tLS0tLS0tLS0tLS0tLS0pJRzo0Ki80TExGMSkxKTEqKi9Z59UOAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW9kkvKjAqMCkxOkdHSEtJ + SUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlLSklHPDQpLypVRzAvKjAqMCkyWufXDAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARr2SC8vLzAw + KCw5OkdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0ZJR0Q6MSkxKjoqLy8vMDIyKlXs1A0AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BPFYMDAwMDApJzA3P0ZBR0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFBOjkpKTAvLy8vLy8vLypZ8dcN + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEB24IwMDAwMDAkJyo2OTk8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8OTg2MSYnMDAwMDAw + MDAxWe7UBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC4wjIxMTExMS8lJSgpKjAqMCowKjAqMCowKjAqMCowKjAqMCowKjAqLyol + GigwMDAwMDAwL1zx1QoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlr0RzAyMjIxMTEsKigoKSkpKSkpKSkpKSkpKSkpKSkpKSkp + KSkpKSgoJyUlMDExMTEyMjJZ8ccBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeSnNzQxMTAxMDEwMTAxMDEwMTAxMDEwMTIy + MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAxWfHPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf/ZqMjcwNzI3MjcyNzI3Mjcy + NzI3MjcyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyN1/xxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuO1YNjc0NDQ0 + NDQ0NDQ0NDQ0NDQ0NDQ3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzJh8MoBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH + 2+dvNDQyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjQ0NDQ0YvDCBgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGx/awVzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NDQ0NGLuxAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAiOf0xJeCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKe + 8M4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITV4+Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl + 5eXl5eXl5uSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////4AAAAAAAAAAAD////////8AAAAAAAAAAAAP///////8AAAAAAAAAAAAB///////+ + AAAAAAAAAAAAAP///////AAAAAAAAAAAAAB///////wAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAD// + ////+AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAH//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAH//////wAAAAAAAAAAAAAD//////8AAAAAAAAAAA + AAB///////AAAAAAAAAAAAAA///////wAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAP///////AAAAAA + AAAAAAAH///////wAAAAAAAAAAAAD///////8AAAAAAAAAAAAB////////AAAAAAAAAAAAA////////w + AAAAAAAAAAAAf///////8AAAAAAAAAAAAP////////AAAAAAAAAAAAH////////wAAAAAAAAAAAD//// + ////8AAAAAAAAAAAB/////////AAAAAAAAAAAA/////////wAAAAAAAAAAAf////////8AAAAAAAAAAA + P/////////AAAAAAAAAAAH/////////wAAAAAAAAAAD/////////8AAAAAAAAAAB//////////AAAAAA + AAAAA//////////wAAAAAAAAAAf/////////8AAAAAAAAAAP//////////AAAAAAAAAAH//////////w + AAAAAAAAAD//////////8AAAAAAAAAB///////////AAAAAAAAAA///////////wAAAAAAAAAf////// + ////8AAAAAAAAAP///////////AAAAAAAAAH///////////wAAAAAAAAD///////////+AAAAAAAAB// + //////////gAAAAAAAA////////////8AAAAAAAAf////////////AAAAAAAAP////////////4AAAAA + AAH/////////////AAAAAAAD/////////////8AAAAAAB//////////////wAAAAAB////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////ygAAABAAAAAgAAAAAEAIAAAAAAAAIAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAA + AwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAA + AwAAAAMAAAADAAAAAwAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAAB8AAAA8AAAASQAAAEoAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAA + SwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAA + SwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEoAAABKAAAAQwAAAC4AAAASAAAAAgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEtJSUmm//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////AAAA + dQAAADEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAFj/////AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/zIyMv//////AAAAPgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADv/////AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAAsAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAA8AAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8RERH/AAAA + awAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAj/////wAAAP8AAAD/AAAA/xcXF/8kJCT/KSkp/yoqKv8qKir/Kioq + /yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq + /yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/ygoKP8hISH/AAAA + /wAAAP8AAAD/AAAA//7+/v8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANP////8AAAD/AAAA/wAAAP8jIyP/Li4u + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8xMTH/LCws/yEhIf8AAAD/AAAA/wAAAP//////AAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr/////AAAA + /wAAAP8AAAD/Jycn/zExMf80NDT/NDQ0/6qqqv+qqqr/qqqq/6qqqv80NDT/NDQ0/6qqqv+qqqr/NDQ0 + /zQ0NP+qqqr/qqqq/6qqqv+qqqr/qqqq/zQ0NP+qqqr/qqqq/6qqqv+qqqr/NDQ0/6qqqv+qqqr/NDQ0 + /6qqqv+qqqr/qqqq/6qqqv80NDT/NDQ0/zExMf8nJyf/AAAA/wAAAP8AAAD//////wAAADkAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAA7/////wAAAP8AAAD/AAAA/ykpKf8yMjL/NTU1/zU1Nf81NTX/NTU1/7e3t/+3t7f/NTU1 + /zU1Nf+3t7f/t7e3/zU1Nf81NTX/t7e3/7e3t/81NTX/t7e3/7e3t/81NTX/t7e3/7e3t/+3t7f/t7e3 + /zU1Nf+3t7f/t7e3/zU1Nf+3t7f/t7e3/7e3t/+3t7f/NDQ0/zQ0NP8xMTH/KCgo/wAAAP8AAAD/AAAA + //////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8AAAD/AAAA/wAAAP8qKir/MzMz/zY2Nv82Njb/NTU1 + /zU1Nf/FxcX/xcXF/zU1Nf81NTX/xcXF/8XFxf81NTX/NTU1/8XFxf/FxcX/NTU1/8XFxf/FxcX/NTU1 + /8XFxf/FxcX/xcXF/8XFxf81NTX/xcXF/8XFxf81NTX/xcXF/8XFxf/FxcX/xcXF/zU1Nf81NTX/MjIy + /ykpKf8AAAD/AAAA/wAAAP//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////AAAA/wAAAP8AAAD/Kioq + /zMzM/82Njb/NjY2/9PT0//T09P/09PT/9PT0/82Njb/NjY2/9PT0//T09P/NjY2/zY2Nv/T09P/09PT + /zY2Nv/T09P/09PT/zY2Nv/T09P/09PT/9PT0//T09P/NjY2/9PT0//T09P/NjY2/9PT0//T09P/09PT + /9PT0/82Njb/NjY2/zMzM/8qKir/AAAA/wAAAP8AAAD//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7//// + /wAAAP8AAAD/AAAA/ysrK/80NDT/Nzc3/zc3N//g4OD/4ODg/zc3N/83Nzf/NjY2/zY2Nv/g4OD/4ODg + /zY2Nv82Njb/4ODg/+Dg4P82Njb/4ODg/+Dg4P82Njb/4ODg/+Dg4P/g4OD/4ODg/zY2Nv/g4OD/4ODg + /zY2Nv/g4OD/4ODg/+Dg4P/g4OD/NjY2/zY2Nv8zMzP/Kioq/wAAAP8AAAD/AAAA//////8AAAA7AAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAABAAAAO/////8AAAD/AAAA/wAAAP8rKyv/NDQ0/zc3N/83Nzf/7e3t/+3t7f/t7e3/7e3t + /zc3N//t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/Nzc3/+3t7f/t7e3/Nzc3/+3t7f/t7e3/7e3t + /+3t7f83Nzf/7e3t/+3t7f83Nzf/7e3t/+3t7f/t7e3/7e3t/zc3N/83Nzf/NDQ0/ysrK/8AAAD/AAAA + /wAAAP//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////AAAA/wAAAP8AAAD/LCws/zU1Nf84ODj/ODg4 + //r6+v/6+vr/+vr6//r6+v84ODj/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6/zg4OP/6+vr/+vr6 + /zg4OP/6+vr/+vr6//r6+v/6+vr/Nzc3//r6+v/6+vr/Nzc3//r6+v/6+vr/+vr6//r6+v83Nzf/Nzc3 + /zQ0NP8rKyv/AAAA/wAAAP8AAAD//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////wAAAP8AAAD/AAAA + /ywsLP81NTX/ODg4/01NTf+jo6P/o6Oj/6Ojo/+ZmZn/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/o6Oj + /6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/84ODj/o6Oj/6Ojo/+jo6P/o6Oj/zg4OP+fn5//o6Oj + /6Ojo/+jo6P/RUVF/zg4OP81NTX/LCws/wAAAP8AAAD/AAAA//////8AAAA7AAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA + O/////8CAgL/AQEB/wEBAf8sLCz/NjY2/zk5Of9RUVH/qamp/6mpqf+pqan/oKCg/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/6mpqf+pqan/qamp/6mpqf+pqan/qamp/6mpqf+pqan/OTk5/6mpqf+pqan/qamp + /6mpqf84ODj/pqam/6mpqf+pqan/qamp/0ZGRv84ODj/NTU1/ywsLP8BAQH/AQEB/wEBAf//////AAAA + OwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAADv/////AwMD/wMDA/8DAwP/LCws/zY2Nv85OTn/UlJS/7CwsP+wsLD/sLCw + /6Wlpf85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of+wsLD/sLCw/7CwsP+wsLD/sLCw/7CwsP+wsLD/sLCw + /zk5Of+wsLD/sLCw/7CwsP+wsLD/OTk5/6ysrP+wsLD/sLCw/7CwsP9ISEj/OTk5/zY2Nv8sLCz/AgIC + /wICAv8CAgL//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////wQEBP8EBAT/BAQE/y0tLf83Nzf/Ojo6 + /1NTU/+3t7f/t7e3/7e3t/+rq6v/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/t7e3/7e3t/+3t7f/t7e3 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/t7e3/7e3t/+3t7f/t7e3/zo6Ov+ysrL/t7e3/7e3t/+3t7f/SUlJ + /zo6Ov83Nzf/LS0t/wMDA/8DAwP/AwMD//////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8GBgb/BgYG + /wYGBv8uLi7/ODg4/zs7O/9VVVX/vr6+/76+vv++vr7/sbGx/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /76+vv++vr7/vr6+/76+vv86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/76+vv++vr7/vr6+/76+vv+/v7//vr6+ + /76+vv++vr7/vr6+/0lJSf86Ojr/Nzc3/y0tLf8FBQX/BQUF/wUFBf//////AAAAOwAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AQAAADv/////BwcH/wcHB/8HBwf/Li4u/zg4OP87Ozv/VlZW/8XFxf/FxcX/xcXF/7e3t/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O//FxcX/xcXF/8XFxf/FxcX/Ozs7/zs7O/87Ozv/Ozs7/zs7O//FxcX/xcXF + /8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf9KSkr/Ozs7/zg4OP8uLi7/BgYG/wYGBv8GBgb///// + /wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAEAAAA7/////wgICP8ICAj/CAgI/y8vL/85OTn/PDw8/1hYWP/MzMz/zMzM + /8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP88PDz/zMzM/8zMzP/MzMz/zMzM/zw8PP87Ozv/Ozs7 + /zs7O/87Ozv/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/SkpK/zs7O/84ODj/Li4u + /wcHB/8HBwf/BwcH//////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8KCgr/CgoK/woKCv8vLy//OTk5 + /zw8PP9YWFj/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/PDw8/9LS0v/S0tL/0tLS + /9LS0v88PDz/PDw8/zw8PP88PDz/PDw8/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v88PDz/PDw8 + /zw8PP88PDz/OTk5/y8vL/8JCQn/CQkJ/wkJCf//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////CwsL + /wsLC/8LCwv/MDAw/zo6Ov89PT3/WVlZ/9nZ2f/Z2dn/2dnZ/8vLy/9PT0//2dnZ/9nZ2f/Z2dn/2dnZ + /z09Pf/Z2dn/2dnZ/9nZ2f/Z2dn/PT09/z09Pf89PT3/PT09/z09Pf/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ + /9nZ2f/Z2dn/09PT/9PT0/9KSkr/PDw8/zk5Of8vLy//CgoK/woKCv8KCgr//////wAAADsAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAA7/////wwMDP8MDAz/DAwM/zAwMP86Ojr/PT09/1paWv/g4OD/4ODg/+Dg4P/Nzc3/PT09 + /+Dg4P/g4OD/4ODg/+Dg4P89PT3/4ODg/+Dg4P/g4OD/4ODg/z09Pf89PT3/PT09/z09Pf89PT3/4ODg + /+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/TU1N/z09Pf86Ojr/MDAw/wwMDP8MDAz/CwsL + //////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8ODg7/Dg4O/w4ODv8wMDD/Ozs7/z4+Pv9cXFz/5+fn + /+fn5//n5+f/1NTU/z4+Pv/n5+f/5+fn/+fn5//n5+f/Pj4+/+fn5//n5+f/5+fn/+fn5/8+Pj7/Pj4+ + /z4+Pv8+Pj7/Pj4+/+fn5//n5+f/5+fn/+fn5/8+Pj7/39/f/+fn5//n5+f/5+fn/05OTv8+Pj7/Ozs7 + /zAwMP8NDQ3/DQ0N/w0NDf//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////Dw8P/w8PD/8PDw//MTEx + /zw8PP8/Pz//XV1d/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/z4+Pv/u7u7/7u7u + /+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/z4+Pv/u7u7/7u7u/+7u7v/u7u7/Pj4+/+bm5v/u7u7/7u7u + /+7u7v9OTk7/Pj4+/zs7O/8wMDD/Dg4O/w4ODv8ODg7//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7//// + /xAQEP8QEBD/EBAQ/zExMf88PDz/Pz8//11dXf/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f8/Pz//9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f8/Pz//9fX1//X19f/19fX/9fX1 + /z8/P//s7Oz/9fX1//X19f/19fX/UFBQ/z8/P/88PDz/MTEx/xAQEP8QEBD/EBAQ//////8AAAA7AAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAABAAAAO/////8SEhL/EhIS/xISEv8yMjL/PT09/0BAQP9eXl7//Pz8//z8/P/8/Pz//Pz8 + //z8/P/8/Pz//Pz8//z8/P/8/Pz/QEBA//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/Pz8/ + //z8/P/8/Pz//Pz8//z8/P8/Pz//8/Pz//z8/P/8/Pz//Pz8/1BQUP8/Pz//PDw8/zExMf8RERH/ERER + /xEREf//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////ExMT/xMTE/8TExP/MjIy/z09Pf9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /z09Pf8yMjL/EhIS/xISEv8SEhL//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////xQUFP8UFBT/FBQU + /zMzM/8+Pj7/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP89PT3/MjIy/xQUFP8UFBT/FBQU//////8AAAA7AAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA + O/////8WFhb/FhYW/xYWFv8zMzP/Pj4+/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/Pj4+/zMzM/8VFRX/FRUV/xUVFf//////AAAA + OwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAADv/////FxcX/xcXF/8XFxf/NDQ0/z8/P/9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0FBQf8/Pz//PT09 + /zw8PP87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zg4OP8uLi7/FhYW + /xYWFv8WFhb//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////xgYGP8YGBj/GBgY/zQ0NP9AQED/Q0ND + /0NDQ/9DQ0P/Q0ND/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0BAQP88PDz/NjY2/y8vL/8sLCz/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr + /ysrK/8pKSn/ISEh/xgYGP8YGBj/GBgY//////8AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8aGhr/Ghoa + /xoaGv80NDT/QEBA/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0FBQf88PDz/MTEx/yQkJP8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf//////AAAANAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AQAAADv/////Gxsb/xsbG/8bGxv/NTU1/0FBQf9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0NDQ/9DQ0P/Q0ND/0JCQv8+Pj7/MjIy/x8fH/8bGxv/GBgY/zY2Nv82Njb/NjY2 + /zY2Nv82Njb/NjY2/zY2Nv81NTX/NTU1/zU1Nf81NTX/NTU1/xwcHP8aGhr/Ghoa/xoaGv8aGhr///// + /wAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAEAAAA7/////xwcHP8cHBz/HBwc/zU1Nf9BQUH/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9CQkL/Ozs7/ykpKf8cHBz/Nzc3 + /zg4OP84ODj/ODg4/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/8cHBz/HBwc + /xwcHP8cHBz//v7+/wAAADwAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8eHh7/Hh4e/x4eHv82Njb/QkJC + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/QkJC + /zc3N/8ZGRn/HR0d/zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of8dHR3/HR0d/x0dHf8dHR3//////wAAAD8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////Hx8f + /x8fH/8fHx//NjY2/0JCQv9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0JCQv81NTX/Hx8f/ykpKf87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zo6Ov8eHh7/Hh4e/x4eHv8eHh7//v7+/wAAAD4AAAAIAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAA7/////yAgIP8gICD/ICAg/zc3N/9DQ0P/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9CQkL/NTU1/yAgIP86Ojr/PT09/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/zw8PP8gICD/ICAg/yAgIP8gICD//v7+/wAAAD4AAAAHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8iIiL/IiIi/yIiIv84ODj/RERE/0dHR/9HR0f/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/QkJC/zU1Nf8hISH/Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8+Pj7/Pj4+/z4+Pv8hISH/ISEh/yEhIf8hISH///// + /wAAAD4AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////IyMj/yMjI/8jIyP/ODg4 + /0RERP9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0NDQ/81NTX/IyMj/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP8iIiL/IiIi + /yIiIv8iIiL//////wAAAD8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7//// + /yUlJf8lJSX/JSUl/zg4OP9FRUX/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9DQ0P/NTU1/yQkJP9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv8kJCT/JCQk/yQkJP8kJCT//////wAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAABAAAAO/////8mJib/JiYm/yYmJv84ODj/RUVF/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/RERE/zY2Nv8lJSX/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP8lJSX/JSUl/yUlJf8lJSX//////wAAAD4AAAAHAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////Jycn/ycnJ/8nJyf/OTk5/0ZGRv9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0VFRf83Nzf/Jycn + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv8nJyf/Jycn/ycnJ/8nJyf//////wAAAD4AAAAHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////ykpKf8pKSn/KSkp + /zk5Of9GRkb/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9FRUX/Nzc3/ygoKP9ISEj/SEhI/0hISP9ISEj/SEhI/0dHR/8oKCj/KCgo/ygoKP8oKCj///// + /wAAAD8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA + O/////8qKir/Kioq/yoqKv86Ojr/R0dH/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/RkZG/zc3N/8pKSn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf8pKSn/KSkp + /ykpKf8pKSn//////wAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAADv/////Kysr/ysrK/8rKyv/Ojo6/0dHR/9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0ZGRv83Nzf/Kysr/0tLS/9LS0v/S0tL + /0tLS/8rKyv/Kysr/ysrK/8rKyv//////wAAAD0AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA6/////ywsLP8sLCz/LCws/zo6Ov9ISEj/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9HR0f/ODg4 + /ywsLP9NTU3/TU1N/0tLS/8sLCz/LCws/ywsLP8sLCz//////wAAADoAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOf////8uLi7/Li4u + /y4uLv84ODj/R0dH/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0pKSv9KSkr/RkZG/zg4OP8tLS3/SUlJ/05OTv8tLS3/LS0t/y0tLf8tLS3//////wAAADkAAAAHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADD/////Ly8v/y8vL/8vLy//Li4u/z4+Pv9FRUX/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0JCQv80NDT/Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy////// + /wAAADgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAd/////zAwMP8wMDD/MDAw/x0dHf8rKyv/MjIy/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP8xMTH/JiYm/zAwMP8wMDD/MDAw + /zAwMP8wMDD//////wAAADcAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsXFxbkyMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH//////wAAADYAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn//// + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP//////wAAADUAAAAFAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABQAAADT/////NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT//////wAAADUAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIrS0tJ3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /wAAAC8AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + EgAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAA + FwAAABcAAAAXAAAAFgAAAA4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////// + ///4AAAAAD////AAAAAAD///4AAAAAAH///gAAAAAAf//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AA + AAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD + ///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AA + AAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD + ///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAB///wAAAAAAP///AAAAAAB///8AA + AAAAP///wAAAAAB////AAAAAAP///8AAAAAB////wAAAAAP////AAAAAB////8AAAAAP////wAAAAB// + ///AAAAAP////8AAAAB/////wAAAAP/////AAAAB/////8AAAAP/////wAAAB//////gAAAP//////AA + AB//////+AAAP/////////////////////////////////////////////////////////8oAAAAQAAA + AIAAAAABAAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEBAf8CAgL/AwMD/wQEBP8FBQX/BgYG + /wcHB/8ICAj/CQkJ/woKCv8LCwv/DAwM/w0NDf8ODg7/Dw8P/xAQEP8RERH/EhIS/xMTE/8UFBT/FRUV + /xYWFv8XFxf/GBgY/xkZGf8aGhr/Gxsb/xwcHP8dHR3/Hh4e/x8fH/8gICD/ISEh/yIiIv8jIyP/JCQk + /yUlJf8mJib/Jycn/ygoKP8pKSn/Kioq/ysrK/8sLCz/LS0t/y4uLv8vLy//MDAw/zExMf8yMjL/MzMz + /zQ0NP81NTX/NjY2/zc3N/84ODj/OTk5/zo6Ov87Ozv/PDw8/z09Pf8+Pj7/Pz8//0BAQP9BQUH/QkJC + /0NDQ/9ERET/RUVF/0ZGRv9HR0f/SEhI/0lJSf9KSkr/S0tL/01NTf9PT0//UFBQ/1FRUf9TU1P/VVVV + /1ZWVv9XV1f/WFhY/1lZWf9bW1v/XV1d/15eXv9fX1//YGBg/2NjY/9kZGT/ZWVl/2ZmZv9nZ2f/aGho + /2lpaf9qamr/a2tr/2xsbP9tbW3/bm5u/29vb/9wcHD/cXFx/3Nzc/90dHT/dXV1/3Z2dv93d3f/eHh4 + /3l5ef96enr/e3t7/3x8fP99fX3/fn5+/39/f/+AgID/gYGB/4KCgv+Dg4P/hISE/4WFhf+Ghob/h4eH + /4iIiP+JiYn/ioqK/4yMjP+Ojo7/j4+P/5CQkP+RkZH/kpKS/5OTk/+UlJT/lZWV/5aWlv+Xl5f/mJiY + /5mZmf+ampr/m5ub/5ycnP+dnZ3/np6e/5+fn/+goKD/oaGh/6Kiov+jo6P/pKSk/6Wlpf+mpqb/p6en + /6ioqP+pqan/qqqq/62trf+urq7/r6+v/7CwsP+zs7P/tLS0/7a2tv+3t7f/uLi4/7m5uf+6urr/vb29 + /76+vv+/v7//wMDA/8LCwv/Dw8P/xMTE/8XFxf/Gxsb/x8fH/8rKyv/Ly8v/zMzM/83Nzf/Ozs7/z8/P + /9DQ0P/R0dH/0tLS/9PT0//U1NT/1tbW/9fX1//Y2Nj/2dnZ/9ra2v/c3Nz/3d3d/97e3v/f39//4ODg + /+Hh4f/j4+P/5eXl/+bm5v/n5+f/6Ojo/+np6f/r6+v/7e3t/+7u7v/x8fH/9PT0//X19f8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + 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 + AAAAA///wAAAAAAH///AAAAAAA///8AAAAAAH///wAAAAAA////AAAAAAH///8AAAAAA////wAAAAAH/ + ///AAAAAA////8AAAAAH////wAAAAA/////AAAAAH////8AAAAA/////wAAAAH/////AAAAA/////8AA + AAH/////wAAAA//////AAAAH/////+AAAA//////8AAAH//////4AAA///////////////////////// + /////////////////////////////////ygAAAAwAAAAYAAAAAEAIAAAAAAAAEgAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA + AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAF4AAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAA + YQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAA + YQAAAGEAAABXAAAALgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJeXl6tOzs7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAHQAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAB5AAAACQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9ubm7/AAAA + NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + bQAAAP8AAAD/AAAA/ykpKf8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v + /y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y4uLv8mJib/AAAA + /wAAAP8AAAD/AAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAD3Nzc3AAAAP8AAAD/Hh4e/zAwMP80NDT/p6en/6enp/+np6f/p6en/zQ0NP+np6f/p6en + /zQ0NP+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/NDQ0/6enp/+np6f/p6en/6enp/+np6f/p6en + /zQ0NP8vLy//HR0d/wAAAP8AAAD/3d3d3QAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AAAAP8AAAD/ISEh/zIyMv81NTX/NTU1/zU1Nf+6urr/urq6 + /zU1Nf+6urr/urq6/zU1Nf+6urr/urq6/7q6uv+6urr/urq6/7q6uv+6urr/urq6/7q6uv+6urr/urq6 + /7q6uv+6urr/urq6/zU1Nf8yMjL/ISEh/wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AAAAP8AAAD/ISEh/zMzM/82Njb/zMzM + /8zMzP/MzMz/zMzM/zY2Nv/MzMz/zMzM/zY2Nv/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM + /8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/zU1Nf8yMjL/ISEh/wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AAAAP8AAAD/IiIi + /zQ0NP83Nzf/3t7e/97e3v82Njb/NjY2/zY2Nv/e3t7/3t7e/zY2Nv/e3t7/3t7e/97e3v/e3t7/3t7e + /97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/zY2Nv8zMzP/ISEh/wAAAP8AAAD/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3AAAAP8AAAD/IiIi/zQ0NP83Nzf/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v + /+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/zc3N/80NDT/IiIi + /wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3AAAAP8AAAD/IyMj/zU1Nf84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP81NTX/IyMj/wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AEBAf8BAQH/IyMj/zY2Nv85OTn/qKio/6ioqP+oqKj/OTk5 + /zk5Of85OTn/OTk5/zk5Of+oqKj/qKio/6ioqP+oqKj/qKio/6ioqP84ODj/qKio/6ioqP+oqKj/ODg4 + /6ioqP+oqKj/qKio/zg4OP81NTX/IyMj/wEBAf8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AMDA/8DAwP/JCQk/zc3N/86Ojr/sbGx + /7Gxsf+xsbH/OTk5/zk5Of85OTn/OTk5/zk5Of+xsbH/sbGx/7Gxsf+xsbH/sbGx/7Gxsf85OTn/sbGx + /7Gxsf+xsbH/OTk5/7Gxsf+xsbH/sbGx/zk5Of82Njb/IyMj/wICAv8CAgL/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AUFBf8FBQX/JCQk + /zc3N/86Ojr/urq6/7q6uv+6urr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov+6urr/urq6/7q6uv86Ojr/Ojo6 + /zo6Ov86Ojr/urq6/7q6uv+6urr/Ojo6/7q6uv+6urr/urq6/zo6Ov83Nzf/JCQk/wQEBP8EBAT/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3AcHB/8HBwf/JSUl/zg4OP87Ozv/xMTE/8TExP/ExMT/Ozs7/zs7O/87Ozv/Ozs7/zs7O//ExMT/xMTE + /8TExP87Ozv/Ozs7/zs7O/87Ozv/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/zs7O/84ODj/JSUl + /wYGBv8GBgb/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3AgICP8ICAj/JSUl/zg4OP88PDz/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N + /zw8PP/Nzc3/zc3N/83Nzf88PDz/PDw8/zw8PP88PDz/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N + /zs7O/84ODj/JSUl/wgICP8ICAj/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AoKCv8KCgr/JiYm/zk5Of89PT3/1tbW/9bW1v/W1tb/1tbW + /9bW1v/W1tb/1tbW/zw8PP/W1tb/1tbW/9bW1v88PDz/PDw8/zw8PP88PDz/1tbW/9bW1v/W1tb/1tbW + /9bW1v88PDz/PDw8/zw8PP84ODj/JSUl/woKCv8KCgr/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AwMDP8MDAz/JiYm/zk5Of89PT3/39/f + /9/f3//f39//PT09/9/f3//f39//39/f/z09Pf/f39//39/f/9/f3/89PT3/PT09/z09Pf89PT3/39/f + /9/f3//f39//39/f/9/f3//f39//39/f/z09Pf85OTn/JiYm/wsLC/8LCwv/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3A4ODv8ODg7/JiYm + /zo6Ov8+Pj7/6Ojo/+jo6P/o6Oj/Pj4+/+jo6P/o6Oj/6Ojo/z4+Pv/o6Oj/6Ojo/+jo6P8+Pj7/Pj4+ + /z4+Pv8+Pj7/6Ojo/+jo6P/o6Oj/Pj4+/+jo6P/o6Oj/6Ojo/z4+Pv86Ojr/JiYm/w0NDf8NDQ3/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3BAQEP8QEBD/Jycn/zs7O/8/Pz//8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy/z8/P//y8vL/8vLy + //Ly8v/y8vL/8vLy//Ly8v8/Pz//8vLy//Ly8v/y8vL/Pz8///Ly8v/y8vL/8vLy/z4+Pv86Ojr/JiYm + /w8PD/8PDw//3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3BISEv8RERH/KCgo/zw8PP9AQED/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7 + /z8/P//7+/v/+/v7//v7+//7+/v/+/v7//v7+/8/Pz//+/v7//v7+//7+/v/Pz8///v7+//7+/v/+/v7 + /z8/P/87Ozv/Jycn/xEREf8RERH/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BMTE/8TExP/KCgo/zw8PP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP88PDz/KCgo/xISEv8SEhL/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BUVFf8VFRX/KCgo/z09Pf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf89PT3/KCgo/xQUFP8UFBT/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BcXF/8XFxf/KSkp + /z4+Pv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QUFB + /z8/P/89PT3/PT09/z09Pf89PT3/PT09/zw8PP88PDz/PDw8/zw8PP85OTn/JSUl/xYWFv8WFhb/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3BkZGf8ZGRn/Kioq/z8/P/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0JCQv9CQkL/QkJC + /0JCQv8/Pz//Nzc3/y0tLf8oKCj/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8kJCT/GBgY + /xgYGP8YGBj/3d3d3QAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3BoaGv8aGhr/Kioq/z8/P/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0FBQf81NTX/ICAg/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8aGhr/Ghoa/xoaGv8aGhr/wcHBuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BwcHP8cHBz/Kioq/0BAQP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/z09Pf8nJyf/HBwc/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /zc3N/83Nzf/Nzc3/zc3N/8cHBz/HBwc/xwcHP//////AAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3B4eHv8eHh7/Kysr/0FBQf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RERE/zk5Of8dHR3/Ojo6/zo6Ov86Ojr/Ojo6 + /zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/x0dHf8dHR3/HR0d//7+/v8AAAAlAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CAgIP8gICD/LCws + /0JCQv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RUVF/zc3N/8fHx//PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP87Ozv/Hx8f/x8fH/8fHx///v7+/wAAACUAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3CEhIf8hISH/LCws/0JCQv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RUVF + /zc3N/8hISH/Pz8//z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8hISH/ISEh/yEhIf/+/v7/AAAA + JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3CMjI/8jIyP/LCws/0NDQ/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/RkZG/zg4OP8jIyP/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QEBA/yMjI/8jIyP/IyMj + //////8AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CUlJf8lJSX/LS0t/0RERP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/R0dH/zk5Of8lJSX/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/JSUl + /yUlJf8lJSX//////wAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CcnJ/8nJyf/LS0t/0VFRf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/R0dH/zk5Of8nJyf/RkZG/0ZGRv9GRkb/RUVF + /0VFRf8mJib/JiYm/yYmJv//////AAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CkpKf8pKSn/Li4u + /0VFRf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SEhI/zo6Ov8oKCj/SEhI + /0hISP9ISEj/SEhI/ygoKP8oKCj/KCgo//////8AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3CoqKv8qKir/Li4u/0ZGRv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SUlJ + /zo6Ov8qKir/SkpK/0pKSv9KSkr/Kioq/yoqKv8qKir//////wAAACQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3CwsLP8sLCz/Li4u/0dHR/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/SkpK/zs7O/8sLCz/TU1N/01NTf8sLCz/LCws/ywsLP//////AAAAIgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAC3Nzc3C4uLv8uLi7/Kioq/0VFRf9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/SkpK/zs7O/8uLi7/T09P/y4uLv8uLi7/Li4u//////8AAAAhAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZTAwMP8wMDD/IiIi/zQ0NP89PT3/Pj4+ + /z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/PT09/zExMf8wMDD/MDAw/zAwMP8wMDD///// + /wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyMv8yMjL/MjIy + /zIyMv8pKSn/KSkp/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8xMTH/MTEx + /zExMf//////AAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CP39/f4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz//////8AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA7/////TExM/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX//////wAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAFQAAACMAAAAkAAAAJAAAACQAAAAkAAAA + JAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAiAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA//// + ////AAD///////8AAP+AAAAD/wAA/wAAAAH/AAD/AAAAAP8AAP8AAAAA/wAA/gAAAAB/AAD+AAAAAH8A + AP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAA + AAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8A + AP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAD/AAD+AAAAAf8AAP4AAAAD/wAA/gAA + AAf/AAD+AAAAD/8AAP4AAAAf/wAA/gAAAD//AAD+AAAAf/8AAP4AAAD//wAA/gAAAf//AAD+AAAD//8A + AP8AAAf//wAA/wAAD///AAD/AAAf//8AAP+AAD///wAA////////AAD///////8AAP///////wAA//// + ////AAAoAAAAMAAAAGAAAAABAAgAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEBAf8CAgL/AwMD + /wQEBP8FBQX/BgYG/wcHB/8ICAj/CQkJ/woKCv8LCwv/DAwM/w0NDf8ODg7/Dw8P/xAQEP8RERH/EhIS + /xMTE/8UFBT/FRUV/xYWFv8XFxf/GBgY/xkZGf8aGhr/Gxsb/xwcHP8dHR3/Hh4e/x8fH/8gICD/ISEh + /yIiIv8jIyP/JCQk/yUlJf8mJib/Jycn/ygoKP8pKSn/Kioq/ysrK/8sLCz/LS0t/y4uLv8vLy//MDAw + /zExMf8yMjL/MzMz/zQ0NP81NTX/NjY2/zc3N/84ODj/OTk5/zo6Ov87Ozv/PDw8/z09Pf8+Pj7/Pz8/ + /0BAQP9BQUH/QkJC/0NDQ/9ERET/RUVF/0ZGRv9HR0f/SEhI/0lJSf9KSkr/S0tL/0xMTP9NTU3/Tk5O + /09PT/9RUVH/U1NT/1RUVP9VVVX/VlZW/1dXV/9aWlr/XFxc/11dXf9eXl7/X19f/2FhYf9iYmL/Y2Nj + /2VlZf9nZ2f/aGho/2lpaf9sbGz/bW1t/25ubv9zc3P/dnZ2/3d3d/95eXn/enp6/3t7e/98fHz/fX19 + /35+fv9/f3//gYGB/4iIiP+JiYn/kpKS/5WVlf+Wlpb/l5eX/5iYmP+ZmZn/mpqa/5ubm/+cnJz/nZ2d + /56env+fn5//oKCg/6Ghof+ioqL/pKSk/6Wlpf+mpqb/p6en/6ioqP+pqan/qqqq/6urq/+srKz/ra2t + /6+vr/+xsbH/srKy/7S0tP+1tbX/t7e3/7i4uP+5ubn/urq6/7u7u/+8vLz/v7+//8DAwP/BwcH/wsLC + /8PDw//ExMT/xcXF/8bGxv/Hx8f/yMjI/8nJyf/Kysr/zMzM/83Nzf/Ozs7/z8/P/9LS0v/U1NT/1dXV + /9bW1v/Y2Nj/2tra/9vb2//e3t7/39/f/+Dg4P/h4eH/4uLi/+Pj4//k5OT/5+fn/+jo6P/v7+//8fHx + //Ly8v8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkWlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV1ABAAEBAAAAAAAA + AAAAAAAAAAAAB3hmSEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRFRybwAAAAAAAAAAAAAAAAAAAAAAgykA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT3IAAAAAAAAAAAAAAAAAAARVWwAACRAXEBcQFxASEhAS + EhAREhIQEREXEBcQDAcAAGVHAAAAAAAAAAAAAAAAAACHCgQKKCwvKi8qLyoxLyoxLyoxMDAqMTAwKjAq + NCYHABSEAAAAAAAAAAAAAAAAAACBAQEXLzRvcnJoN2tpOG5zc25pc3JdaWlodXRpNC8UAACBAAAAAAAA + AAAAAAAAAACEAAAaMDdJT4N1N3h1NHh4eHh4f3h+dXh4f3h4NDEaAQCEAAAAAAAAAAAAAAAAAACEAAAc + NDZ1hpuENoeDNoiDhIiHg4GJhIODg4OINzEcAACEAAAAAAAAAAAAAAAAAACEAAAcMTaXkFpUNpKONpOO + jpKRjoyUkJCQkImVNzAaAQGEAAAAAAAAAAAAAAAAAACEAAAcNDmlrpJ3frGvdp+WmJ+bsLGOnZuesrCh + ODcaAACEAAAAAAAAAAAAAAAAAACEAAAcNzhpcXFhX2dlX2tpaGtpcGdZaWdhcXFnNzQaBACEAAAAAAAA + AAAAAAAAAACEBAcaNzl2hYVNOTo8OoOEhoSGhE2Gh3RNhIN1OTQcAQCEAAAAAAAAAAAAAAAAAACEAQEa + ODl+jIxNNjg5OpCOjHh6eFSLjHhUi454OjcaBASEAAAAAAAAAAAAAAAAAACDBwcgODmDkpNUOjo6OpCS + kzo6N1SUlIdgk5KEOjYfBASEAAAAAAAAAAAAAAAAAACDBwcgNzqJnpthUlRURJ2enTo8OlSbm5ubm52I + OjYgBgaDAAAAAAAAAAAAAAAAAACDCAgiOTqQo6OioqKjVqKkpD88PFajo6KhnpB+OTchCAiDAAAAAAAA + AAAAAAAAAACDCgghNjqeqamWqampV6mpqTo6OlipqampnVZUOjoiCAmFAQAAAAAAAAAAAAAAAAGFDAon + Ojqerq5Wm66uWa2urTw/Olivraygra+fOjkkCgqDAAAAAAAAAAAAAAAAAACEChAhNz+ltbVmqbS1W7S0 + tFpaWlm0taNYtLSiOjomCg+EAAAAAAAAAAAAAAAAAACEEA8nOkCquLi4uLi3W7i4uLi4tl24tqZfuLan + OjkiDw+EAAAAAAAAAAAAAAAAAACEEhEnOT+drKysrKysWqysrKysqVusrJ1YrKyXPzknERGEAAAAAAAA + AAAAAAAAAACEERIoOjpAQEBAQEBAQEBAQEBBOkE6Pzo/Oj86RzonEhKEAAAAAAAAAAAAAAAAAACFFxcn + Okc/QEFBQUFBQUE/QD8/R0BGRkZGRkZGQTopFBSEAAAAAAAAAAAAAAAAAACFFxcpOkFGQUBBQEE/QEFG + QUc6QDo6Ojo6Ojo6OjkiFhaFAAAAAAAAAAAAAAAAAACFGRgoP0ZEQUZARkBGRj8/QT83KikoJycnJycn + JyIaGheFAAAAAAAAAAAAAAAAAACFHBoqOkBARkBGQEZAQEZHQTQnGiAgICAgICAgHxoaHBqQAAAAAAAA + AAAAAAAAAACFHBwqOkdGQUZBRkFGR0FBPCcgNDY5NjY5ODc3NyAcH3hrAAAAAAAAAAAAAAAAAACGHx8p + OkdHR0dHR0dHREdGNyA0Ojo8Ojo4OTk3JCAheGgAAAAAAAAAAAAAAAAAAACGICAqRkdGRkZGRkZGRkRG + NyA4PDo6Oj86QTgiHCJ4aQEAAAAAAAAAAAAAAAAAAACFICIqQERGRkZGRkZGRkdHNyQ6RzpAOjo6Oicn + J3hoAAAAAAAAAAAAAAAAAAAAAACGJyIqRkdHR0dHR0dHR0dHOCFAPzpGOkY8JCImeGkAAAAAAAAAAAAA + AAAAAAAAAACGJicsR0hISEhISEhISEhGOCdARkZARz8mJyh+aAAAAAAAAAAAAAAAAAAAAAAAAACHJycq + R0pJSUlJSUlJSUlHOSZHRkZHPyknKoFoAAAAAAAAAAAAAAAAAAAAAAAAAACIKikqRElJSUlJSUlJSUlI + OihHSEdGKSoqg2gAAAAAAAAAAAAAAAAAAAAAAAAAAACHKio0SEtKSkpKSkpKSkpIOilKSEcqKjCEaAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAGLKioqRktLS0tLS0tLS0tKPClMRyosNIdiAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACHKio0RElMTEtJS0tJS0tIOipENC80iGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCQNyoq + Njo/QD86OkY6PEA6NyoqLzeIYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvZzQxKikqKioqLCoqKiwq + Jyo3N4hhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk0sxNzc3NDc0NzQ3NDc0NzQ5iV4AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAJpZyZGJiYmJiYmJiYmJiYmKOXAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAABVd3R0dHR0dHR0dHR0dXhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP///////wAA/4AAAAP/AAD/AAAAAf8A + AP8AAAAA/wAA/wAAAAD/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAA + AAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8A + AP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAA + AAB/AAD+AAAAAP8AAP4AAAAB/wAA/gAAAAP/AAD+AAAAB/8AAP4AAAAP/wAA/gAAAB//AAD+AAAAP/8A + AP4AAAB//wAA/gAAAP//AAD+AAAB//8AAP4AAAP//wAA/wAAB///AAD/AAAP//8AAP8AAB///wAA/4AA + P///AAD///////8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + NgAAAIkAAACRAAAAkQAAAJEAAACRAAAAkQAAAJEAAACRAAAAkQAAAJEAAACRAAAAkQAAAJEAAACRAAAA + kQAAAJEAAACRAAAAfQAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAE4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAADo6Oj/wAAAP8UFBT/IyMj/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk + /yQkJP8kJCT/JCQk/yQkJP8kJCT/IiIi/wAAAP8AAAD/8fHx/wAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA8AAAD/AAAA/ysrK/8zMzP/oaGh/6Ghof8zMzP/oaGh/zMzM/+hoaH/oaGh + /5aWlv+hoaH/oaGh/3x8fP+Tk5P/oaGh/6Ghof8zMzP/Kioq/wAAAP8AAAD/AAAADgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAP8AAAD/Ly8v/zU1Nf81NTX/vr6+/zU1Nf++vr7/NTU1 + /76+vv9tbW3/sLCw/76+vv++vr7/i4uL/6urq/++vr7/vr6+/zU1Nf8vLy//AAAA/wAAAP8AAAARAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAA/wAAAP8wMDD/NjY2/9nZ2f+NjY3/NjY2 + /9nZ2f82Njb/2dnZ/3R0dP/IyMj/2dnZ/9nZ2f+Xl5f/wMDA/9nZ2f/Z2dn/NjY2/zAwMP8AAAD/AAAA + /wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAD/AAAA/zExMf83Nzf/9PT0 + //T09P/v7+//9PT0//T09P/09PT/enp6/+Hh4f/09PT/9PT0/6Ojo//W1tb/9PT0//T09P83Nzf/MDAw + /wAAAP8AAAD/AAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQEBAf8BAQH/MjIy + /zk5Of+mpqb/pqam/zg4OP84ODj/ODg4/6ampv+mpqb/pqam/6ampv85OTn/pqam/6Wlpf+mpqb/pqam + /zg4OP8xMTH/AAAA/wAAAP8AAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAwMD + /wMDA/8zMzP/Ojo6/7Ozs/+zs7P/Ojo6/zo6Ov86Ojr/s7Oz/7Ozs/+ysrL/srKy/zo6Ov+zs7P/s7Oz + /7Ozs/+zs7P/OTk5/zIyMv8DAwP/AwMD/wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABEGBgb/BgYG/zQ0NP87Ozv/wcHB/8HBwf87Ozv/Ozs7/zs7O//BwcH/wcHB/zs7O/87Ozv/PDw8 + /8HBwf/BwcH/wcHB/8HBwf86Ojr/MzMz/wYGBv8FBQX/AAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAEQkJCf8JCQn/NTU1/zw8PP/Pz8//z8/P/8/Pz//Pz8//Pz8//8/Pz//Pz8//PDw8 + /zw8PP89PT3/z8/P/8/Pz//Pz8//z8/P/zw8PP81NTX/CAgI/wgICP8AAAARAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAARCwsL/wsLC/82Njb/PT09/93d3f/d3d3/3Nzc/93d3f9AQED/3d3d + /93d3f89PT3/PT09/z4+Pv/d3d3/3d3d/93d3f/d3d3/PT09/zY2Nv8LCwv/CwsL/wAAABEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEODg7/Dg4O/zc3N/8+Pj7/6urq/+rq6v/p6en/6urq + /0FBQf/q6ur/6urq/0NDQ/9DQ0P/Pz8//+rq6v/o6Oj/6urq/+rq6v8+Pj7/Nzc3/w4ODv8ODg7/AAAA + EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREf8RERH/ODg4/z8/P//4+Pj/+Pj4 + //j4+P/4+Pj/QkJC//j4+P/4+Pj/+Pj4//j4+P9AQED/+Pj4//b29v/4+Pj/+Pj4/z8/P/84ODj/EBAQ + /xAQEP8AAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARFBQU/xQUFP85OTn/QUFB + /0FBQf9BQUH/QUFB/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /zk5Of8TExP/ExMT/wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEWFhb/FhYW + /zo6Ov9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9BQUH/QUFB/0FBQf8/Pz//Pj4+/z4+Pv8+Pj7/Pj4+ + /z4+Pv8+Pj7/Nzc3/xYWFv8WFhb/AAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ERkZGf8ZGRn/Ozs7/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/PDw8/ykpKf8gICD/Hx8f + /x8fH/8fHx//Hx8f/x8fH/8bGxv/GBgY/xgYGP8AAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAARHBwc/xwcHP88PDz/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0FBQf8kJCT/NDQ0 + /zc3N/82Njb/NjY2/zY2Nv82Njb/NjY2/xsbG/8bGxv//v7+/wAAAAIAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABEeHh7/Hh4e/z09Pf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/Pj4+ + /x4eHv86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov8eHh7/Hh4e//////8AAAAHAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESEhIf8hISH/Pj4+/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv89PT3/ISEh/z4+Pv8+Pj7/Pj4+/z4+Pv89PT3/ISEh/yEhIf//////AAAACAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARJCQk/yQkJP8/Pz//R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/z4+Pv8jIyP/QUFB/0FBQf9BQUH/QUFB/yMjI/8jIyP//////wAAAAcAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEmJib/JiYm/0BAQP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/Pz8//yYmJv9FRUX/RUVF/0VFRf8mJib/JiYm//////8AAAAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESkpKf8pKSn/QUFB + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9AQED/KSkp/0lJSf9ISEj/KSkp/ykpKf//////AAAA + BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARLCws + /ywsLP9CQkL/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0FBQf8sLCz/TExM/ysrK/8rKyv///// + /wAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAA4vLy//Li4u/z09Pf9JSUn/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/QUFB/y4uLv8uLi7/Li4u + //////8AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAk5OTv8xMTH/IiIi/ycnJ/8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8iIiL/MTEx + /zExMf//////AAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT//////wAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAEQAAABJAAAASQAAAEkAAABJAAAA + SQAAAEkAAABJAAAASQAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////+AAD//AAAP/gAAB/4AAAf+AAA + H/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAA/+AAA + f/gAAP/4AAH/+AAD//gAB//4AA//+AAf//wAP/////////////////8oAAAAIAAAAEAAAAABAAgAAAAA + AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wICAv8DAwP/BQUF/wYGBv8ICAj/CQkJ/woKCv8LCwv/DQ0N + /w4ODv8PDw//EBAQ/xEREf8SEhL/FBQU/xYWFv8XFxf/GBgY/xkZGf8aGhr/Gxsb/xwcHP8eHh7/Hx8f + /yAgIP8iIiL/IyMj/yQkJP8lJSX/JiYm/ycnJ/8oKCj/KSkp/yoqKv8rKyv/LCws/y0tLf8uLi7/Ly8v + /zAwMP8xMTH/MjIy/zMzM/80NDT/NTU1/zY2Nv83Nzf/ODg4/zk5Of86Ojr/Ozs7/zw8PP89PT3/Pj4+ + /z8/P/9AQED/QUFB/0JCQv9DQ0P/RERE/0VFRf9GRkb/R0dH/0hISP9JSUn/SkpK/0tLS/9MTEz/TU1N + /05OTv9PT0//UFBQ/1FRUf9SUlL/U1NT/1RUVP9VVVX/VlZW/1dXV/9YWFj/WVlZ/1paWv9bW1v/XV1d + /15eXv9fX1//YGBg/2FhYf9iYmL/Y2Nj/2VlZf9mZmb/Z2dn/2lpaf9qamr/bGxs/3Jycv95eXn/e3t7 + /3x8fP9+fn7/f39//4CAgP+BgYH/hYWF/4aGhv+IiIj/jIyM/42Njf+Ojo7/j4+P/5CQkP+RkZH/k5OT + /5WVlf+ampr/m5ub/5ycnP+enp7/oaGh/6ampv+np6f/qKio/6mpqf+qqqr/q6ur/7CwsP+zs7P/tLS0 + /7a2tv+7u7v/vLy8/729vf++vr7/v7+//8HBwf/CwsL/w8PD/8fHx//IyMj/ysrK/87Ozv/Pz8//09PT + /9TU1P/V1dX/19fX/9zc3P/d3d3/4eHh/+Pj4//q6ur/6+vr/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + 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 + APAD/wDwB/8A////AP///wAoAAAAGAAAADAAAAABAAgAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /wICAv8FBQX/BgYG/wkJCf8MDAz/DQ0N/w8PD/8QEBD/ERER/xMTE/8UFBT/FxcX/xgYGP8bGxv/HBwc + /x8fH/8gICD/IiIi/yMjI/8kJCT/JSUl/yYmJv8nJyf/KCgo/ykpKf8qKir/Kysr/ywsLP8tLS3/Li4u + /y8vL/8wMDD/MTEx/zMzM/80NDT/NTU1/zY2Nv83Nzf/ODg4/zk5Of86Ojr/Ozs7/z09Pf8+Pj7/Pz8/ + /0BAQP9BQUH/QkJC/0NDQ/9ERET/RUVF/0dHR/9ISEj/SkpK/0tLS/9NTU3/Tk5O/09PT/9QUFD/UlJS + /1VVVf9aWlr/W1tb/19fX/9hYWH/aWlp/2pqav9sbGz/bm5u/3BwcP9xcXH/c3Nz/3R0dP91dXX/eXl5 + /3x8fP+AgID/goKC/4SEhP+FhYX/hoaG/4uLi/+MjIz/kZGR/5SUlP+Wlpb/mJiY/5qamv+cnJz/oaGh + /6Kiov+jo6P/pqam/6urq/+srKz/ra2t/6+vr/+xsbH/s7Oz/7W1tf+/v7//y8vL/9HR0f/j4+P/5OTk + /+bm5v8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAMz4+Pj4+Pj4+PT4+PiUAAAAAAAAAAQFBHxMTExQU + EhQVERMTEyVDAAAAAAAAAFEPCBERERARDxIQERIREAUQTwAAAAABAFkAFThQQFJBVlJWUFJXQRYAWQAA + AAAAAFkBF0ZaPmFJXmJhYmFeShcAWQEAAAABAFgAGEVeTV5WWVthVVhkRBkAWQAAAAAAAFkCGkJgMyhJ + X1pLYUlgQxkBWQABAAABAFkCHEllPDVNZSg0ZV1lSRkEWQAAAAAAAFkFHE1nZmdWZyw1Z2ddPxkGWQAA + AAABAFkHGk9pWGlaaDo9aWNpURoGWQEAAAAAAFkLIVFqampcampbalVqTxkIWQEAAAAAAFkLIS0vLy8v + Ly8sLi4sLSUMWQAAAAAAAFoMIzMwMDAwMCwlISElIRcMWQAAAAAAAFoNIzIyMjIzMBkZHxkcHA4nWgAA + AAAAAFoRJzMzMzMzLBkrKCgoGihUAAAAAAAAAFkSJjQ0NDQ0LCAvLygaLlQAAAAAAAAAAFoXKDU1NTU1 + LiUyMxozVAAAAAAAAAABAFoaKTY2NjY2Lyc1ITVWAAAAAAAAAAAAAFwfKTc3Nzc2LiglOFUAAAAAAAAA + AAAAAFowISMjJSUlJRo5VgAAAAAAAAAAAAAAAABRPjs7Ozo5OUBWAAAAAAAAAAAAAAAAAAAATVZWVlZW + Vk8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A8AAPAPAADwDwAA8A8AAP + APAADwDwAA8A8AAPAPAADwDwAA8A8AAPAPAADwDwAA8A8AAPAPAAHwDwAD8A8AB/APAA/wDwAf8A8AP/ + APAH/wD///8A////ACgAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAOzs7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAbQAAAP8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/wAAAP8AAABpAAAA + AAAAAAAAAAAAAAAAANzc3N0hISH/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP8hISH/3Nzc + 3QAAAAAAAAAAAAAAAAAAAADc3NzdIyMj/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/IyMj + /9zc3N0AAAAAAAAAAAAAAAAAAAAA3Nzc3SQkJP+6urr/Ojo6/zo6Ov+6urr/Ojo6/7q6uv86Ojr/urq6 + /yQkJP/c3NzdAAAAAAAAAAAAAAAAAAAAANzc3N0mJib/1tbW/9bW1v/W1tb/1tbW/zw8PP/W1tb/1tbW + /zw8PP8lJSX/3Nzc3QAAAAAAAAAAAAAAAAAAAADc3NzdJycn//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy + /z8/P//y8vL/JiYm/9zc3N0AAAAAAAAAAAAAAAAAAAAA3Nzc3SgoKP9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/ygoKP/c3NzdAAAAAAAAAAAAAAAAAAAAANzc3N0qKir/Q0ND/0NDQ/9DQ0P/Q0ND + /yAgIP8aGhr/Ghoa/xoaGv8aGhr/wMDAvAAAAAAAAAAAAAAAAAAAAADc3NzdLCws/0ZGRv9GRkb/RkZG + /0VFRf88PDz/PDw8/zw8PP8fHx///v7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA3Nzc3S0tLf9ISEj/SEhI + /0hISP9HR0f/Q0ND/0NDQ/8lJSX//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3N0uLi7/SkpK + /0pKSv9KSkr/SUlJ/0pKSv8qKir//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlIiIi + /z4+Pv8+Pj7/Pj4+/z09Pf8wMDD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AExMTP81NTX/NTU1/zU1Nf81NTX//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8A + AOAHAADgBwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAHAADADwAAwB8AAOA/AADgfwAA//8A + ACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAANDQ3/Dw8P/xoaGv8bGxv/HBwc + /x4eHv8hISH/JCQk/yUlJf8nJyf/KCgo/yoqKv8rKyv/LS0t/y8vL/8xMTH/MjIy/zU1Nf82Njb/ODg4 + /zk5Of87Ozv/PDw8/z09Pf8+Pj7/Pz8//0BAQP9BQUH/QkJC/0NDQ/9ERET/RkZG/0hISP9KSkr/W1tb + /3BwcP9xcXH/cnJy/3x8fP9/f3//goKC/4ODg/+IiIj/iYmJ/5aWlv+YmJj/mZmZ/5ubm/+ioqL/o6Oj + /6Wlpf+mpqb/qKio/6mpqf+qqqr/ra2t/7CwsP+4uLj/urq6/8HBwf/Q0ND/1dXV/9jY2P/n5+f/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA + AAAAIxIODQwNCw0MDhkjAAAAACEAFBURHx8WGxMAHwAAAAASAiMkKDM2MzUpAhsAAAAAGwMpJyYzNSws + KAISAAAAABQDKyUbOSItMyoEHgAAAAAgBy87Nz0WNzwmBRYAAAAAGAczPjo/Ojo4MwcgAAAAACEJGRsY + GRkYGRsKHwAAAAAfCR8aHx8NCwwLAiIAAAAAIg4gHx8aDxUYCyIiAAAAACEPICAfHxIfDiIlAAAAAAAi + ESEhIR4VFCIiAAAAAAAAIg4WGBUUESMiAAAAAAAAACwiISIhISMhAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP//AADgBwAA4AcAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADABwAAwA8AAMAfAADgPwAA4H8A + AP//AAA= + + + \ No newline at end of file diff --git a/PCK-Studio/Forms/Utilities/Skins/BoxEditor.Designer.cs b/PCK-Studio/Forms/Editor/BoxEditor.Designer.cs similarity index 99% rename from PCK-Studio/Forms/Utilities/Skins/BoxEditor.Designer.cs rename to PCK-Studio/Forms/Editor/BoxEditor.Designer.cs index 51426dda..4fdcdbc3 100644 --- a/PCK-Studio/Forms/Utilities/Skins/BoxEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/BoxEditor.Designer.cs @@ -1,4 +1,4 @@ -namespace PckStudio.Forms.Utilities.Skins +namespace PckStudio.Forms.Editor { partial class BoxEditor { diff --git a/PCK-Studio/Forms/Utilities/Skins/BoxEditor.cs b/PCK-Studio/Forms/Editor/BoxEditor.cs similarity index 75% rename from PCK-Studio/Forms/Utilities/Skins/BoxEditor.cs rename to PCK-Studio/Forms/Editor/BoxEditor.cs index ddf89fe0..a7972c68 100644 --- a/PCK-Studio/Forms/Utilities/Skins/BoxEditor.cs +++ b/PCK-Studio/Forms/Editor/BoxEditor.cs @@ -1,8 +1,9 @@ using System; +using System.Numerics; using System.Text.RegularExpressions; using System.Windows.Forms; -namespace PckStudio.Forms.Utilities.Skins +namespace PckStudio.Forms.Editor { public partial class BoxEditor : MetroFramework.Forms.MetroForm { @@ -11,13 +12,12 @@ namespace PckStudio.Forms.Utilities.Skins class BOX { public string Parent; - public (float X, float Y, float Z) Pos; - public (float X, float Y, float Z) Size; - public float uvX, uvY; + public Vector3 Pos; + public Vector3 Size; + public float U, V; public bool HideWithArmor; public bool Mirror; public float Inflation; - public BOX(string input) { string[] arguments = Regex.Split(input, @"\s+"); @@ -25,16 +25,12 @@ namespace PckStudio.Forms.Utilities.Skins try { Parent = arguments[0].ToUpper(); // just in case a box has all lower, the editor still parses correctly - Pos.X = float.Parse(arguments[1]); - Pos.Y = float.Parse(arguments[2]); - Pos.Z = float.Parse(arguments[3]); - Size.X = float.Parse(arguments[4]); - Size.Y = float.Parse(arguments[5]); - Size.Z = float.Parse(arguments[6]); - uvX = float.Parse(arguments[7]); - uvY = float.Parse(arguments[8]); - HideWithArmor = Convert.ToBoolean(Int32.Parse(arguments[9])); - Mirror = Convert.ToBoolean(Int32.Parse(arguments[10])); + Pos = new Vector3(float.Parse(arguments[1]), float.Parse(arguments[2]), float.Parse(arguments[3])); + Size = new Vector3(float.Parse(arguments[4]), float.Parse(arguments[5]), float.Parse(arguments[6])); + U = float.Parse(arguments[7]); + V = float.Parse(arguments[8]); + HideWithArmor = Convert.ToBoolean(int.Parse(arguments[9])); + Mirror = Convert.ToBoolean(int.Parse(arguments[10])); Inflation = float.Parse(arguments[11]); } catch (IndexOutOfRangeException) @@ -70,8 +66,8 @@ namespace PckStudio.Forms.Utilities.Skins SizeXUpDown.Value = (decimal)box.Size.X; SizeYUpDown.Value = (decimal)box.Size.Y; SizeZUpDown.Value = (decimal)box.Size.Z; - uvXUpDown.Value = (decimal)box.uvX; - uvYUpDown.Value = (decimal)box.uvY; + uvXUpDown.Value = (decimal)box.U; + uvYUpDown.Value = (decimal)box.V; armorCheckBox.Checked = box.HideWithArmor; mirrorCheckBox.Checked = box.Mirror; inflationUpDown.Value = (decimal)box.Inflation; diff --git a/PCK-Studio/Forms/Utilities/Skins/BoxEditor.resx b/PCK-Studio/Forms/Editor/BoxEditor.resx similarity index 100% rename from PCK-Studio/Forms/Utilities/Skins/BoxEditor.resx rename to PCK-Studio/Forms/Editor/BoxEditor.resx diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index 1ed91eca..611f1d31 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -8,6 +8,7 @@ using PckStudio.Classes.Utils; using PckStudio.Classes._3ds.Utils; using OMI.Formats.Languages; using OMI.Formats.Pck; +using PckStudio.Forms.Editor; namespace PckStudio { @@ -365,10 +366,10 @@ namespace PckStudio private void buttonAnimGen_Click(object sender, EventArgs e) { - using Forms.Utilities.Skins.ANIMEditor diag = new Forms.Utilities.Skins.ANIMEditor(anim.ToString()); + using ANIMEditor diag = new ANIMEditor(anim.ToString()); if (diag.ShowDialog(this) == DialogResult.OK) { - anim = new SkinANIM(diag.outANIM); + anim = SkinANIM.FromString(diag.outANIM); DrawModel(); } } diff --git a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.resx b/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.resx deleted file mode 100644 index 8766f298..00000000 --- a/PCK-Studio/Forms/Utilities/Skins/ANIMEditor.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/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index f4308bfb..0117a036 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -20,7 +20,6 @@ using PckStudio.Classes.Utils; using PckStudio.Classes.Utils.ARC; using PckStudio.Classes._3ds.Utils; using PckStudio.Forms; -using PckStudio.Forms.Utilities.Skins; using PckStudio.Forms.Utilities; using PckStudio.Forms.Editor; using PckStudio.Forms.Additional_Popups.Animation; @@ -449,7 +448,7 @@ namespace PckStudio using (var ms = new MemoryStream(file.Data)) { var texture = Image.FromStream(ms); - SkinPreview frm = new SkinPreview(texture, file.Properties.GetPropertyValue("ANIM", s => new SkinANIM(s))); + SkinPreview frm = new SkinPreview(texture, file.Properties.GetPropertyValue("ANIM", SkinANIM.FromString)); frm.ShowDialog(this); frm.Dispose(); } @@ -486,7 +485,7 @@ namespace PckStudio buttonEdit.Visible = true; } else if (file.Properties.HasProperty("ANIM") && - file.Properties.GetPropertyValue("ANIM", s => new SkinANIM(s)) == (ANIM_EFFECTS.RESOLUTION_64x64 | ANIM_EFFECTS.SLIM_MODEL)) + file.Properties.GetPropertyValue("ANIM", s => SkinANIM.FromString(s) == (ANIM_EFFECTS.RESOLUTION_64x64 | ANIM_EFFECTS.SLIM_MODEL))) { buttonEdit.Text = "View Skin"; buttonEdit.Visible = true; @@ -958,7 +957,10 @@ namespace PckStudio if (parent_file.Filetype is PckFile.FileData.FileType.TexturePackInfoFile || parent_file.Filetype is PckFile.FileData.FileType.SkinDataFile) { Console.WriteLine("Rebuilding " + parent_file.Filename); - PckFile newPCKFile = new PckFile(3); + PckFile newPCKFile = new PckFile(3) + { + HasVerionString = parent_file.Filetype is PckFile.FileData.FileType.SkinDataFile + }; foreach (TreeNode node in GetAllChildNodes(parent.Nodes)) { @@ -970,9 +972,6 @@ namespace PckStudio } } - // Bool to add the XMLVersion property - bool isSkinsPCK = parent_file.Filetype is PckFile.FileData.FileType.SkinDataFile; - using (MemoryStream ms = new MemoryStream()) { var writer = new PckFileWriter(newPCKFile, LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); @@ -1081,21 +1080,19 @@ namespace PckStudio // Creates new empty file entry PckFile.FileData mf = new PckFile.FileData(string.Empty, mfO.Filetype); - mf.SetData(mfO.Data); // adds file data to minefile + mf.SetData(mfO.Data); string dirName = Path.GetDirectoryName(mfO.Filename); int clone_number = 0; - string prev_clone_str = "_clone1"; string nameWithoutExt = Path.GetFileNameWithoutExtension(mfO.Filename); string newFileName = mfO.Filename; - do // Checks for existing clones and names it accordingly + do { clone_number++; string clone_str = "_clone" + clone_number.ToString(); bool isClone = nameWithoutExt.Contains("_clone"); if (isClone) newFileName = nameWithoutExt.Remove(nameWithoutExt.Length - 7) + clone_str + Path.GetExtension(mfO.Filename); else newFileName = nameWithoutExt + clone_str + Path.GetExtension(mfO.Filename); - prev_clone_str = clone_str; } while (currentPCK.HasFile(dirName + (string.IsNullOrEmpty(dirName) ? "" : "/") + newFileName, mf.Filetype)); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 75617c94..9fde86b1 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -350,16 +350,16 @@ - + Form - + BoxEditor.cs - + Form - + ANIMEditor.cs @@ -550,10 +550,10 @@ pleaseWait.cs - + BoxEditor.cs - + ANIMEditor.cs From fafb4b85bf76b8663164a1257d833a1ebd963847 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 28 Mar 2023 19:30:37 +0200 Subject: [PATCH 14/79] SkinANIM - Add ICloneable and IEquatable interface --- PCK-Studio/Classes/Utils/SkinANIM.cs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Classes/Utils/SkinANIM.cs b/PCK-Studio/Classes/Utils/SkinANIM.cs index f7796c54..58f56a2e 100644 --- a/PCK-Studio/Classes/Utils/SkinANIM.cs +++ b/PCK-Studio/Classes/Utils/SkinANIM.cs @@ -69,8 +69,8 @@ namespace PckStudio.Classes.Utils DINNERBONE = 1 << 31, // 0x80000000 } - public class SkinANIM - { + public class SkinANIM : ICloneable, IEquatable + { private ANIM_EFFECTS _ANIM; public static readonly Regex animRegex = new Regex(@"^0x[0-9a-f]{1,8}\b", RegexOptions.IgnoreCase); @@ -102,10 +102,16 @@ namespace PckStudio.Classes.Utils public static implicit operator SkinANIM(ANIM_EFFECTS anim) => new SkinANIM(anim); public static bool operator ==(SkinANIM a, ANIM_EFFECTS b) => a._ANIM == b; - public static bool operator !=(SkinANIM a, ANIM_EFFECTS b) => !(a == b); + public static bool operator ==(SkinANIM a, SkinANIM b) => a.Equals(b); + public static bool operator !=(SkinANIM a, SkinANIM b) => !a.Equals(b); - public override bool Equals(object obj) => obj is SkinANIM a && a == _ANIM; + public bool Equals(SkinANIM other) + { + return _ANIM == other._ANIM; + } + + public override bool Equals(object obj) => obj is SkinANIM a && Equals(a); public override int GetHashCode() => (int)_ANIM; @@ -129,5 +135,10 @@ namespace PckStudio.Classes.Utils { return (_ANIM & flag) != 0; } - } + + public object Clone() + { + return MemberwiseClone(); + } + } } From f0de26fc97ff1e87d25d7cffd0ffb0c80c755128 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 28 Mar 2023 20:10:43 +0200 Subject: [PATCH 15/79] Improved ANIMEditor --- PCK-Studio/Forms/Editor/ANIMEditor.cs | 134 ++++++++++-------- .../Forms/Skins-And-Textures/addnewskin.cs | 2 +- PCK-Studio/MainForm.cs | 2 +- 3 files changed, 78 insertions(+), 60 deletions(-) diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.cs b/PCK-Studio/Forms/Editor/ANIMEditor.cs index 2d912263..eee62455 100644 --- a/PCK-Studio/Forms/Editor/ANIMEditor.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.cs @@ -1,9 +1,10 @@ using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; using System.Linq; +using System.Drawing; +using System.Diagnostics; using System.Windows.Forms; +using System.Collections.Generic; + using PckStudio.Classes.Utils; using PckStudio.Forms.Additional_Popups; @@ -11,13 +12,16 @@ namespace PckStudio.Forms.Editor { public partial class ANIMEditor : MetroFramework.Forms.MetroForm { - readonly SkinANIM initialANIM; - public string outANIM => animValue.Text; - SkinANIM anim = new SkinANIM(); - ANIMRuleSet ruleset; + public SkinANIM ResultAnim => ruleset.Value; + + private readonly SkinANIM initialANIM; + private ANIMRuleSet ruleset; sealed class ANIMRuleSet { + public SkinANIM Value => anim; + public Action OnCheckboxChanged; + private class Bictionary : Dictionary { public Bictionary(int capacity) @@ -43,14 +47,12 @@ namespace PckStudio.Forms.Editor } } private Bictionary checkBoxLinkage; - private SkinANIM ANIM; + private SkinANIM anim; private bool ignoreCheckChanged = false; - public Action OnCheckboxChanged; - - public ANIMRuleSet(ref SkinANIM anim, params (CheckBox, ANIM_EFFECTS)[] linkage) + public ANIMRuleSet(SkinANIM anim, params (CheckBox, ANIM_EFFECTS)[] linkage) { - ANIM = anim; + this.anim = anim; checkBoxLinkage = new Bictionary(32); if (linkage.Length < 32) Debug.WriteLine($"Not all {nameof(ANIM_EFFECTS)} are mapped to a given checkbox."); @@ -65,20 +67,23 @@ namespace PckStudio.Forms.Editor internal void SetAll(bool state) { - ignoreCheckChanged = true; foreach (var item in checkBoxLinkage) { - ANIM.SetFlag(item.Value, state); - item.Key.Checked = state; + IgnoreAndDo(item.Key, checkbox => + { + anim.SetFlag(item.Value, state); + checkbox.Checked = state; + checkbox.Enabled = true; + }); } - ignoreCheckChanged = false; } - internal void ApplyAnim(ref SkinANIM anim) + internal void ApplyAnim(SkinANIM anim) { - ANIM = anim; + this.anim = anim; foreach (var item in checkBoxLinkage) { + IgnoreAndDo(item.Key, checkbox => checkbox.Enabled = true); item.Key.Checked = anim.GetFlag(item.Value); } } @@ -109,18 +114,34 @@ namespace PckStudio.Forms.Editor break; case ANIM_EFFECTS.RESOLUTION_64x64: + + if (checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Checked) + { + checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Checked = false; + } checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Enabled = !checkBox.Checked; break; case ANIM_EFFECTS.SLIM_MODEL: + if (checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Checked) + { + checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Checked = false; + } checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Enabled = !checkBox.Checked; break; default: break; } - ANIM.SetFlag(checkBoxLinkage[checkBox], checkBox.Checked && checkBox.Enabled); - OnCheckboxChanged?.Invoke(); + anim.SetFlag(checkBoxLinkage[checkBox], checkBox.Checked && checkBox.Enabled); + OnCheckboxChanged?.Invoke(anim); } } + + private void IgnoreAndDo(CheckBox checkBox, Action action) + { + ignoreCheckChanged = true; + action.Invoke(checkBox); + ignoreCheckChanged = false; + } } public ANIMEditor(string ANIM) @@ -131,10 +152,10 @@ namespace PckStudio.Forms.Editor DialogResult = DialogResult.Abort; Close(); } - initialANIM = anim = SkinANIM.FromString(ANIM); - setDisplayAnim(); + var anim = initialANIM = SkinANIM.FromString(ANIM); + setDisplayAnim(anim); - ruleset = new ANIMRuleSet(ref anim, + ruleset = new ANIMRuleSet(anim, (bobbingCheckBox, ANIM_EFFECTS.HEAD_BOBBING_DISABLED), (bodyCheckBox, ANIM_EFFECTS.BODY_DISABLED), (bodyOCheckBox, ANIM_EFFECTS.BODY_OVERLAY_DISABLED), @@ -172,7 +193,7 @@ namespace PckStudio.Forms.Editor ruleset.OnCheckboxChanged = setDisplayAnim; } - private void setDisplayAnim() + private void setDisplayAnim(SkinANIM anim) { animValue.Text = anim.ToString(); } @@ -190,24 +211,20 @@ namespace PckStudio.Forms.Editor private void importButton_Click(object sender, EventArgs e) { - string new_value = ""; - - bool first = true; - while (!SkinANIM.IsValidANIM(new_value)) + string value = string.Empty; + while (!SkinANIM.IsValidANIM(value)) { - if (!first) MessageBox.Show($"The following value \"{new_value}\" is not valid. Please try again."); - RenamePrompt diag = new RenamePrompt(new_value); + if (!string.IsNullOrWhiteSpace(value)) MessageBox.Show($"The following value \"{value}\" is not valid. Please try again."); + RenamePrompt diag = new RenamePrompt(value); diag.TextLabel.Text = "ANIM"; diag.OKButton.Text = "Ok"; if (diag.ShowDialog() == DialogResult.OK) { - new_value = diag.NewText; + value = diag.NewText; } else return; - first = false; } - anim = SkinANIM.FromString(new_value); - ruleset.ApplyAnim(ref anim); + ruleset.ApplyAnim(SkinANIM.FromString(value)); } private void uncheckButton_Click(object sender, EventArgs e) @@ -229,8 +246,8 @@ namespace PckStudio.Forms.Editor }; if (saveFileDialog.ShowDialog() != DialogResult.OK) return; - bool isSlim = anim.GetFlag(ANIM_EFFECTS.SLIM_MODEL); - bool is64x64 = anim.GetFlag(ANIM_EFFECTS.RESOLUTION_64x64); + bool isSlim = ruleset.Value.GetFlag(ANIM_EFFECTS.SLIM_MODEL); + bool is64x64 = ruleset.Value.GetFlag(ANIM_EFFECTS.RESOLUTION_64x64); bool isClassic32 = !isSlim && !is64x64; Image skin = isSlim ? Properties.Resources.slim_template : Properties.Resources.classic_template; @@ -239,31 +256,31 @@ namespace PckStudio.Forms.Editor using (Graphics graphic = Graphics.FromImage(img)) { graphic.DrawImage(skin, new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), GraphicsUnit.Pixel); - if (anim.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) + if (ruleset.Value.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(32, 0, 32, 16)); - if (anim.GetFlag(ANIM_EFFECTS.HEAD_DISABLED)) + if (ruleset.Value.GetFlag(ANIM_EFFECTS.HEAD_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 0, 32, 16)); - if (anim.GetFlag(ANIM_EFFECTS.BODY_DISABLED)) + if (ruleset.Value.GetFlag(ANIM_EFFECTS.BODY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 16, 24, 16)); if (img.Height == 64) { - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.BODY_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 32, 24, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 32, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 32, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 48, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 48, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(32, 48, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(48, 48, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.BODY_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 32, 24, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.RIGHT_ARM_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 32, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.RIGHT_LEG_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 32, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.LEFT_LEG_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 48, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(16, 48, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(32, 48, 16, 16)); + if (ruleset.Value.GetFlag(ANIM_EFFECTS.LEFT_ARM_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(48, 48, 16, 16)); } else { // Since both classic 32 arms and legs use the same texture, removing the texture would remove both limbs instead of just one. // So both must be disabled by the user before they're removed from the texture; - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED) && anim.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) + if (ruleset.Value.GetFlag(ANIM_EFFECTS.RIGHT_ARM_DISABLED) && ruleset.Value.GetFlag(ANIM_EFFECTS.LEFT_ARM_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(40, 16, 16, 16)); - if (anim.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED) && anim.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) + if (ruleset.Value.GetFlag(ANIM_EFFECTS.RIGHT_LEG_DISABLED) && ruleset.Value.GetFlag(ANIM_EFFECTS.LEFT_LEG_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(0, 16, 16, 16)); } img.MakeTransparent(Color.Magenta); @@ -274,13 +291,13 @@ namespace PckStudio.Forms.Editor private void resetButton_Click(object sender, EventArgs e) { - anim = initialANIM; - ruleset.ApplyAnim(ref anim); + ruleset.ApplyAnim((SkinANIM)initialANIM.Clone()); } static readonly Dictionary Templates = new Dictionary() { - { "Steve (64x32)", ANIM_EFFECTS.NONE }, + // TODO + //{ "Steve (64x32)", 0 }, { "Steve (64x64)", ANIM_EFFECTS.RESOLUTION_64x64 }, { "Alex (64x64)", ANIM_EFFECTS.SLIM_MODEL }, { "Zombie Skins", ANIM_EFFECTS.ZOMBIE_ARMS }, @@ -298,13 +315,14 @@ namespace PckStudio.Forms.Editor diag.label2.Text = "Presets"; diag.okBtn.Text = "Load"; - if (diag.ShowDialog() != DialogResult.OK) return; + if (diag.ShowDialog() != DialogResult.OK) + return; - var templateANIM = Templates[diag.SelectedItem]; + var templateANIM = new SkinANIM(Templates[diag.SelectedItem]); DialogResult prompt = MessageBox.Show(this, "Would you like to add this preset's effects to your current ANIM? Otherwise all of your effects will be cleared. Either choice can be undone by pressing \"Restore ANIM\".", "", MessageBoxButtons.YesNo); - if (prompt == DialogResult.Yes) anim |= templateANIM; - else anim = templateANIM; - ruleset.ApplyAnim(ref anim); + if (prompt == DialogResult.Yes) + templateANIM = ruleset.Value | templateANIM; + ruleset.ApplyAnim(templateANIM); } } } diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index 611f1d31..1fda9bed 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -369,7 +369,7 @@ namespace PckStudio using ANIMEditor diag = new ANIMEditor(anim.ToString()); if (diag.ShowDialog(this) == DialogResult.OK) { - anim = SkinANIM.FromString(diag.outANIM); + anim = diag.ResultAnim; DrawModel(); } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 0117a036..69ff6639 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -1017,7 +1017,7 @@ namespace PckStudio using ANIMEditor diag = new ANIMEditor(property.Item2); if (diag.ShowDialog(this) == DialogResult.OK) { - file.Properties[i] = ("ANIM", diag.outANIM); + file.Properties[i] = ("ANIM", diag.ResultAnim.ToString()); if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); ReloadMetaTreeView(); From cc788d35cb093fde5476ed824e22ae4efb06c6cc Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 29 Mar 2023 19:40:53 +0200 Subject: [PATCH 16/79] Animation - Removed implicit frame to image operator --- PCK-Studio/Forms/Editor/Animation.cs | 4 +--- PCK-Studio/Forms/Editor/AnimationEditor.cs | 9 ++------- PCK-Studio/Forms/Editor/AnimationPlayer.cs | 2 +- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/PCK-Studio/Forms/Editor/Animation.cs b/PCK-Studio/Forms/Editor/Animation.cs index 7ef4b203..a80785af 100644 --- a/PCK-Studio/Forms/Editor/Animation.cs +++ b/PCK-Studio/Forms/Editor/Animation.cs @@ -41,8 +41,6 @@ namespace PckStudio.Forms.Editor public readonly Image Texture; public int Ticks; - public static implicit operator Image(Frame f) => f.Texture; - public Frame(Image texture) : this(texture, MinimumFrameTime) { } @@ -131,7 +129,7 @@ namespace PckStudio.Forms.Editor { StringBuilder stringBuilder = new StringBuilder(Interpolate ? "#" : string.Empty); foreach (var frame in frames) - stringBuilder.Append($"{GetTextureIndex(frame)}*{frame.Ticks},"); + stringBuilder.Append($"{GetTextureIndex(frame.Texture)}*{frame.Ticks},"); return stringBuilder.ToString(0, stringBuilder.Length - 1); } diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 715e48f0..c8f3c303 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -265,14 +265,9 @@ namespace PckStudio.Forms.Editor private void bulkAnimationSpeedToolStripMenuItem_Click(object sender, EventArgs e) { SetBulkSpeed diag = new SetBulkSpeed(frameTreeView); - if(diag.ShowDialog(this) == DialogResult.OK) + if (diag.ShowDialog(this) == DialogResult.OK) { - var list = currentAnimation.GetFrames(); - for (int i = 0; i < list.Count; i++) - { - Animation.Frame f = list[i]; - currentAnimation.SetFrame(f, currentAnimation.GetTextureIndex(f), diag.time); - } + currentAnimation.GetFrames().ForEach(frame => frame.Ticks = diag.time); LoadAnimationTreeView(); } diag.Dispose(); diff --git a/PCK-Studio/Forms/Editor/AnimationPlayer.cs b/PCK-Studio/Forms/Editor/AnimationPlayer.cs index 4a87299d..bca7ca62 100644 --- a/PCK-Studio/Forms/Editor/AnimationPlayer.cs +++ b/PCK-Studio/Forms/Editor/AnimationPlayer.cs @@ -68,7 +68,7 @@ namespace PckStudio.Forms.Editor { Monitor.Enter(_animation); Animation.Frame frame = _animation[frameIndex]; - display.Image = frame; + display.Image = frame.Texture; Monitor.Exit(_animation); return frame; } From 04fda240a2def6875d0f6bf2d49855c5797edaa1 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 1 Apr 2023 11:12:07 +0200 Subject: [PATCH 17/79] Update Discord RPC class --- PCK-Studio/Classes/Misc/RichPresenceClient.cs | 28 +++++++++++++++---- PCK-Studio/Forms/Utilities/pckCenter.cs | 2 +- PCK-Studio/MainForm.cs | 9 +++--- PCK-Studio/Program.cs | 1 + 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/PCK-Studio/Classes/Misc/RichPresenceClient.cs b/PCK-Studio/Classes/Misc/RichPresenceClient.cs index 27939801..d64dfbdf 100644 --- a/PCK-Studio/Classes/Misc/RichPresenceClient.cs +++ b/PCK-Studio/Classes/Misc/RichPresenceClient.cs @@ -10,12 +10,32 @@ namespace PckStudio.Classes.Misc public static DiscordRpcClient Client; public static readonly DateTime StartUpTime = DateTime.UtcNow; + private static readonly Assets _assets = new Assets() + { + LargeImageKey = "pcklgo", + LargeImageText = "PCK-Studio", + }; + + private static readonly Button[] _buttons = new Button[] + { + new Button() + { + Label = "Check it out.", + Url = Program.ProjectUrl, + } + }; + public static void Initialize() { Client = new DiscordRpcClient(Settings.Default.RichPresenceId); Client.Initialize(); } + public static void SetPresence(string details) + { + SetPresence(details, null); + } + public static void SetPresence(string details, string state) { Client?.SetPresence(new RichPresence() @@ -23,16 +43,14 @@ namespace PckStudio.Classes.Misc Details = details, State = state, Timestamps = new Timestamps() { Start = StartUpTime }, - Assets = new Assets() - { - LargeImageKey = "pcklgo", - LargeImageText = "PCK-Studio", - } + Assets = _assets, + Buttons = _buttons }); } public static void Deinitialize() { + Client?.ClearPresence(); Client?.Dispose(); Client = null; } diff --git a/PCK-Studio/Forms/Utilities/pckCenter.cs b/PCK-Studio/Forms/Utilities/pckCenter.cs index 89e50d14..4dc5203b 100644 --- a/PCK-Studio/Forms/Utilities/pckCenter.cs +++ b/PCK-Studio/Forms/Utilities/pckCenter.cs @@ -312,7 +312,7 @@ namespace PckStudio.Forms.Utilities try { - RPC.SetPresence("Viewing the PCK Center", "Program by PhoenixARC"); + RPC.SetPresence("Viewing the PCK Center"); } catch { diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 69ff6639..15d22087 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -113,8 +113,7 @@ namespace PckStudio private void Form1_Load(object sender, EventArgs e) { RPC.Initialize(); - if (currentPCK == null) - RPC.SetPresence("An Open Source .PCK File Editor", "Program by PhoenixARC"); + UpdateRPC(); skinToolStripMenuItem1.Click += (sender, e) => setFileType_Click(sender, e, PckFile.FileData.FileType.SkinFile); capeToolStripMenuItem.Click += (sender, e) => setFileType_Click(sender, e, PckFile.FileData.FileType.CapeFile); @@ -385,7 +384,7 @@ namespace PckStudio { if (currentPCK == null) { - RPC.SetPresence("An Open Source .PCK File Editor", "Program by PhoenixARC"); + RPC.SetPresence("An Open Source .PCK File Editor"); return; }; @@ -393,11 +392,11 @@ namespace PckStudio locfile.HasLocEntry("IDS_DISPLAY_NAME") && locfile.Languages.Contains("en-EN")) { - RPC.SetPresence($"Editing a Pack: {locfile.GetLocEntry("IDS_DISPLAY_NAME", "en-EN")}", "Program by PhoenixARC"); + RPC.SetPresence($"Editing a Pack: {locfile.GetLocEntry("IDS_DISPLAY_NAME", "en-EN")}"); return; } // default - RPC.SetPresence("An Open Source .PCK File Editor", "Program by PhoenixARC"); + RPC.SetPresence("An Open Source .PCK File Editor"); } private void HandleAudioFile(PckFile.FileData file) diff --git a/PCK-Studio/Program.cs b/PCK-Studio/Program.cs index 0a9080c1..8a8f5c1c 100644 --- a/PCK-Studio/Program.cs +++ b/PCK-Studio/Program.cs @@ -37,6 +37,7 @@ namespace PckStudio static class Program { + public static readonly string ProjectUrl = "https://github.com/PhoenixARC/-PCK-Studio"; public static readonly string BaseAPIUrl = "http://api.pckstudio.xyz/api/pck"; public static readonly string BackUpAPIUrl = "https://raw.githubusercontent.com/PhoenixARC/pckstudio.tk/main/studio/PCK/api/"; public static readonly string AppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PCK-Studio"); From 083ebaeb8c3a338c732e6416cb098c028a73db16 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 1 Apr 2023 11:14:23 +0200 Subject: [PATCH 18/79] FrameEditor - removed unused variable and set label text directly --- .../Animation/FrameEditor.Designer.cs | 240 +++++++++--------- .../Animation/FrameEditor.cs | 13 +- 2 files changed, 125 insertions(+), 128 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs index 3c8a510f..290635f4 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.Designer.cs @@ -29,138 +29,138 @@ namespace PckStudio.Forms.Additional_Popups.Animation /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.SaveBtn = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.CancelBtn = new System.Windows.Forms.Button(); - this.FrameTimeUpDown = new System.Windows.Forms.NumericUpDown(); - this.FrameList = new System.Windows.Forms.TreeView(); - this.TextureIcons = new System.Windows.Forms.ImageList(this.components); - ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).BeginInit(); - this.SuspendLayout(); - // - // SaveBtn - // - this.SaveBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.SaveBtn.ForeColor = System.Drawing.Color.White; - this.SaveBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.SaveBtn.Location = new System.Drawing.Point(12, 228); - this.SaveBtn.Name = "SaveBtn"; - this.SaveBtn.Size = new System.Drawing.Size(75, 23); - this.SaveBtn.TabIndex = 7; - this.SaveBtn.Text = "Save"; - this.SaveBtn.UseVisualStyleBackColor = true; - this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label1.Location = new System.Drawing.Point(19, 204); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(62, 13); - this.label1.TabIndex = 10; - this.label1.Text = "Frame Time"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.ForeColor = System.Drawing.Color.White; - this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label3.Location = new System.Drawing.Point(14, 13); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(109, 13); - this.label3.TabIndex = 12; - this.label3.Text = "may/matt was here :3"; - // - // CancelBtn - // - this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.CancelBtn.ForeColor = System.Drawing.Color.White; - this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.CancelBtn.Location = new System.Drawing.Point(92, 228); - this.CancelBtn.Name = "CancelBtn"; - this.CancelBtn.Size = new System.Drawing.Size(75, 23); - this.CancelBtn.TabIndex = 13; - this.CancelBtn.Text = "Cancel"; - this.CancelBtn.UseVisualStyleBackColor = true; - this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); - // - // FrameTimeUpDown - // - this.FrameTimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); - this.FrameTimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.FrameTimeUpDown.ForeColor = System.Drawing.SystemColors.Window; - this.FrameTimeUpDown.Location = new System.Drawing.Point(87, 202); - this.FrameTimeUpDown.Maximum = new decimal(new int[] { + this.components = new System.ComponentModel.Container(); + this.SaveBtn = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.CancelBtn = new System.Windows.Forms.Button(); + this.FrameTimeUpDown = new System.Windows.Forms.NumericUpDown(); + this.FrameList = new System.Windows.Forms.TreeView(); + this.TextureIcons = new System.Windows.Forms.ImageList(this.components); + ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).BeginInit(); + this.SuspendLayout(); + // + // SaveBtn + // + this.SaveBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.SaveBtn.ForeColor = System.Drawing.Color.White; + this.SaveBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.SaveBtn.Location = new System.Drawing.Point(12, 228); + this.SaveBtn.Name = "SaveBtn"; + this.SaveBtn.Size = new System.Drawing.Size(75, 23); + this.SaveBtn.TabIndex = 7; + this.SaveBtn.Text = "Save"; + this.SaveBtn.UseVisualStyleBackColor = true; + this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(19, 204); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(62, 13); + this.label1.TabIndex = 10; + this.label1.Text = "Frame Time"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label3.Location = new System.Drawing.Point(14, 13); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(150, 13); + this.label3.TabIndex = 12; + this.label3.Text = "Select a frame and frame time:"; + // + // CancelBtn + // + this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.CancelBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.CancelBtn.ForeColor = System.Drawing.Color.White; + this.CancelBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.CancelBtn.Location = new System.Drawing.Point(92, 228); + this.CancelBtn.Name = "CancelBtn"; + this.CancelBtn.Size = new System.Drawing.Size(75, 23); + this.CancelBtn.TabIndex = 13; + this.CancelBtn.Text = "Cancel"; + this.CancelBtn.UseVisualStyleBackColor = true; + this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click); + // + // FrameTimeUpDown + // + this.FrameTimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); + this.FrameTimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.FrameTimeUpDown.ForeColor = System.Drawing.SystemColors.Window; + this.FrameTimeUpDown.Location = new System.Drawing.Point(87, 202); + this.FrameTimeUpDown.Maximum = new decimal(new int[] { 10000, 0, 0, 0}); - this.FrameTimeUpDown.Minimum = new decimal(new int[] { + this.FrameTimeUpDown.Minimum = new decimal(new int[] { 1, 0, 0, 0}); - this.FrameTimeUpDown.Name = "FrameTimeUpDown"; - this.FrameTimeUpDown.Size = new System.Drawing.Size(73, 20); - this.FrameTimeUpDown.TabIndex = 15; - this.FrameTimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.FrameTimeUpDown.Value = new decimal(new int[] { + this.FrameTimeUpDown.Name = "FrameTimeUpDown"; + this.FrameTimeUpDown.Size = new System.Drawing.Size(73, 20); + this.FrameTimeUpDown.TabIndex = 15; + this.FrameTimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.FrameTimeUpDown.Value = new decimal(new int[] { 1, 0, 0, 0}); - // - // FrameList - // - this.FrameList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.FrameList.ForeColor = System.Drawing.SystemColors.Window; - this.FrameList.HideSelection = false; - this.FrameList.ImageIndex = 0; - this.FrameList.ImageList = this.TextureIcons; - this.FrameList.Location = new System.Drawing.Point(12, 37); - this.FrameList.Name = "FrameList"; - this.FrameList.SelectedImageIndex = 0; - this.FrameList.ShowLines = false; - this.FrameList.ShowRootLines = false; - this.FrameList.Size = new System.Drawing.Size(155, 159); - this.FrameList.TabIndex = 1; - // - // TextureIcons - // - this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; - this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32); - this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent; - // - // FrameEditor - // - this.AcceptButton = this.SaveBtn; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.CancelBtn; - this.ClientSize = new System.Drawing.Size(178, 264); - this.ControlBox = false; - this.Controls.Add(this.FrameList); - this.Controls.Add(this.FrameTimeUpDown); - this.Controls.Add(this.CancelBtn); - this.Controls.Add(this.label3); - this.Controls.Add(this.label1); - this.Controls.Add(this.SaveBtn); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "FrameEditor"; - this.Resizable = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + // + // FrameList + // + this.FrameList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.FrameList.ForeColor = System.Drawing.SystemColors.Window; + this.FrameList.HideSelection = false; + this.FrameList.ImageIndex = 0; + this.FrameList.ImageList = this.TextureIcons; + this.FrameList.Location = new System.Drawing.Point(12, 37); + this.FrameList.Name = "FrameList"; + this.FrameList.SelectedImageIndex = 0; + this.FrameList.ShowLines = false; + this.FrameList.ShowRootLines = false; + this.FrameList.Size = new System.Drawing.Size(155, 159); + this.FrameList.TabIndex = 1; + // + // TextureIcons + // + this.TextureIcons.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + this.TextureIcons.ImageSize = new System.Drawing.Size(32, 32); + this.TextureIcons.TransparentColor = System.Drawing.Color.Transparent; + // + // FrameEditor + // + this.AcceptButton = this.SaveBtn; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelBtn; + this.ClientSize = new System.Drawing.Size(178, 264); + this.ControlBox = false; + this.Controls.Add(this.FrameList); + this.Controls.Add(this.FrameTimeUpDown); + this.Controls.Add(this.CancelBtn); + this.Controls.Add(this.label3); + this.Controls.Add(this.label1); + this.Controls.Add(this.SaveBtn); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrameEditor"; + this.Resizable = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + ((System.ComponentModel.ISupportInitialize)(this.FrameTimeUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs index b3836f82..1369cae6 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/FrameEditor.cs @@ -1,7 +1,7 @@ using System; -using System.Drawing; using MetroFramework.Forms; using System.Windows.Forms; +using System.Diagnostics; namespace PckStudio.Forms.Additional_Popups.Animation { @@ -13,16 +13,12 @@ namespace PckStudio.Forms.Additional_Popups.Animation public FrameEditor(ImageList texList) { InitializeComponent(); - label3.Text = "Select a frame and frame time:"; FrameList.ImageList = texList; - - int index = 0; - foreach (Image frameTex in texList.Images) + for (int index = 0; index < texList.Images.Count; index++) { TreeNode frame = new TreeNode($"Frame {index}", index, index); FrameList.Nodes.Add(frame); - Console.WriteLine(index); - index++; + Debug.WriteLine(index); } } @@ -41,7 +37,8 @@ namespace PckStudio.Forms.Additional_Popups.Animation private void CancelBtn_Click(object sender, EventArgs e) { - Close(); + DialogResult = DialogResult.Cancel; + Close(); } } } From 43e69798d3f1d21712b8641d8332a578f112ff6d Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 1 Apr 2023 16:41:35 +0200 Subject: [PATCH 19/79] MainForm - Fixed Pck File label showing previous file name when opening a template file --- PCK-Studio/MainForm.Designer.cs | 14 +- PCK-Studio/MainForm.cs | 60 +-- PCK-Studio/MainForm.resx | 810 +++++++++++++++++++++----------- 3 files changed, 562 insertions(+), 322 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index 2745b917..66055269 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -124,7 +124,7 @@ this.labelVersion = new MetroFramework.Controls.MetroLabel(); this.ChangelogRichTextBox = new System.Windows.Forms.RichTextBox(); this.editorTab = new MetroFramework.Controls.MetroTabPage(); - this.metroLabel3 = new MetroFramework.Controls.MetroLabel(); + this.pckFileLabel = new MetroFramework.Controls.MetroLabel(); this.labelImageSize = new MetroFramework.Controls.MetroLabel(); this.fileEntryCountLabel = new MetroFramework.Controls.MetroLabel(); this.PropertiesTabControl = new MetroFramework.Controls.MetroTabControl(); @@ -834,7 +834,7 @@ // this.editorTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); resources.ApplyResources(this.editorTab, "editorTab"); - this.editorTab.Controls.Add(this.metroLabel3); + this.editorTab.Controls.Add(this.pckFileLabel); this.editorTab.Controls.Add(this.labelImageSize); this.editorTab.Controls.Add(this.fileEntryCountLabel); this.editorTab.Controls.Add(this.PropertiesTabControl); @@ -853,11 +853,11 @@ this.editorTab.VerticalScrollbarHighlightOnWheel = false; this.editorTab.VerticalScrollbarSize = 0; // - // metroLabel3 + // pckFileLabel // - resources.ApplyResources(this.metroLabel3, "metroLabel3"); - this.metroLabel3.Name = "metroLabel3"; - this.metroLabel3.Theme = MetroFramework.MetroThemeStyle.Dark; + resources.ApplyResources(this.pckFileLabel, "pckFileLabel"); + this.pckFileLabel.Name = "pckFileLabel"; + this.pckFileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; // // labelImageSize // @@ -1184,7 +1184,7 @@ private System.Windows.Forms.ToolStripMenuItem CreateSkinsPCKToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem editAllEntriesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addFileToolStripMenuItem; - private MetroFramework.Controls.MetroLabel metroLabel3; + private MetroFramework.Controls.MetroLabel pckFileLabel; private System.Windows.Forms.ToolStripMenuItem behavioursbinToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem entityMaterialsbinToolStripMenuItem; } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 15d22087..123704aa 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -8,10 +8,11 @@ using System.Drawing.Drawing2D; using System.Diagnostics; using System.Drawing.Imaging; +using OMI.Formats.Pck; using OMI.Formats.GameRule; -using OMI.Workers.GameRule; -using OMI.Workers.Pck; using OMI.Formats.Languages; +using OMI.Workers.Pck; +using OMI.Workers.GameRule; using OMI.Workers.Language; using PckStudio.Properties; @@ -25,7 +26,6 @@ using PckStudio.Forms.Editor; using PckStudio.Forms.Additional_Popups.Animation; using PckStudio.Forms.Additional_Popups; using PckStudio.Classes.Misc; -using OMI.Formats.Pck; using PckStudio.Classes.IO.PCK; namespace PckStudio @@ -163,30 +163,25 @@ namespace PckStudio isTemplateFile = false; saveLocation = filePath; var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); - PckFile pck = reader.FromFile(filePath); - - metroLabel3.Text = "Current PCK File: " + Path.GetFileName(filePath); - // using (var fileStream = File.OpenRead(filePath)) - //{ - // try - // { - // } - // catch (OverflowException ex) - // { - // MessageBox.Show("Failed to open pck\n" + - // $"Try {(LittleEndianCheckBox.Checked ? "unchecking" : "checking")} the 'Open/Save as Vita/PS4 pck' check box in the upper right corner.", - // "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - // Debug.WriteLine(ex.Message); - // } - // catch (Exception ex) - // { - // MessageBox.Show("Failed to open pck\n" + - // "If this is an Audio/Music Cues pck, please use the specialized editor while inside of the parent pck.", - // "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - // Debug.WriteLine("Can't open pck file of type: " + pck?.type.ToString()); - // } - //} - return pck; + try + { + PckFile pck = reader.FromFile(filePath); + return pck; + } + catch (OverflowException ex) + { + MessageBox.Show("Failed to open pck\n" + + $"Try {(LittleEndianCheckBox.Checked ? "unchecking" : "checking")} the 'Open/Save as Vita/PS4 pck' check box in the upper right corner.", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + Debug.WriteLine(ex.Message); + } + catch + { + MessageBox.Show("Failed to open pck\n" + + "If this is an Audio/Music Cues pck, please use the specialized editor while inside of the parent pck.", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + return null; } private void CheckForPasswordAndRemove() @@ -200,7 +195,11 @@ namespace PckStudio private void LoadEditorTab() { fileEntryCountLabel.Text = "Files:" + currentPCK.Files.Count; - treeViewMain.Enabled = treeMeta.Enabled = true; + if (isTemplateFile) + pckFileLabel.Text = "Unsaved File!"; + else + pckFileLabel.Text = "Current PCK File: " + Path.GetFileName(saveLocation); + treeViewMain.Enabled = treeMeta.Enabled = true; closeToolStripMenuItem.Visible = true; saveToolStripMenuItem.Enabled = true; saveToolStripMenuItem1.Enabled = true; @@ -235,7 +234,8 @@ namespace PckStudio convertToBedrockToolStripMenuItem.Enabled = false; addCustomPackImageToolStripMenuItem.Enabled = false; fileEntryCountLabel.Text = string.Empty; - UpdateRPC(); + pckFileLabel.Text = string.Empty; + UpdateRPC(); } @@ -2208,7 +2208,7 @@ namespace PckStudio using AddFilePrompt diag = new AddFilePrompt("res/" + Path.GetFileName(ofd.FileName)); if (diag.ShowDialog(this) == DialogResult.OK) { - PckFile.FileData file = currentPCK.CreateNewFile(diag.filepath, (PckFile.FileData.FileType)diag.filetype); + PckFile.FileData file = currentPCK.CreateNewFile(diag.Filepath, (PckFile.FileData.FileType)diag.Filetype); file.SetData(File.ReadAllBytes(ofd.FileName)); if (IsSubPCKNode(treeViewMain.SelectedNode.FullPath)) RebuildSubPCK(treeViewMain.SelectedNode); diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index 1cb663dc..da4b593e 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -121,6 +121,29 @@ 116, 17 + + 158, 224 + + + contextMenuPCKEntries + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/ + /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF + TkSuQmCC + + + + 157, 22 + + + Create + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -209,19 +232,20 @@ EntityMaterials.bin - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAAA3SURBVDhPY/j/ - /z9FGKsgGIsCKWSMTQ0QYxUE45FmALpiYvFwMgAbxqIYG8YqCMajBhCJ/zMAAPGwpV/Xje8RAAAAAElF + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAABzSURBVDhPpYzB + DQAhCARp4hr3Txu254WTjYRb9cEmk/BgRjBVHTv85Twmgt77PcJEYIFrhIkAgWOEiSAGthEmgtbaD9fW + mBgpB4xywCgFxiMf5YDdrq3l5wjEjKtzTARMNlydY2IGot2ureVnRjkQmZbICyCi7XU5cfqKAAAAAElF TkSuQmCC - + 157, 22 - - Create + + Import @@ -275,20 +299,11 @@ Add File - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xOdTWsmQAAABzSURBVDhPpYzB - DQAhCARp4hr3Txu254WTjYRb9cEmk/BgRjBVHTv85Twmgt77PcJEYIFrhIkAgWOEiSAGthEmgtbaD9fW - mBgpB4xywCgFxiMf5YDdrq3l5wjEjKtzTARMNlydY2IGot2ureVnRjkQmZbICyCi7XU5cfqKAAAAAElF - TkSuQmCC - - - + 157, 22 - - Import + + Export 186, 22 @@ -296,11 +311,11 @@ Export as 3DS Texture - + 157, 22 - - Export + + Set File Type 222, 22 @@ -374,11 +389,11 @@ Entity Materials File (.BIN) - + 157, 22 - - Set File Type + + Misc. Functions 210, 22 @@ -398,12 +413,6 @@ Correct Skin Decimals - - 157, 22 - - - Misc. Functions - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -469,15 +478,6 @@ Delete - - 158, 224 - - - contextMenuPCKEntries - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 17, 17 @@ -492,6 +492,84 @@ None + + 37, 20 + + + File + + + 39, 20 + + + Edit + + + 44, 20 + + + Help + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAuSURBVDhPY/j/ + /z9FGMYgFwwbA8gFcANARpEJho0B5AK4ASCjyATDyQAy8X8GAKAaUNpxMP6IAAAAAElFTkSuQmCC + + + + 63, 20 + + + More + + + 47, 20 + + + Misc. + + + 24, 44 + + + 1016, 24 + + + 2 + + + menuStrip1 + + + menuStrip + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADuSURBVFhH7ZbB + CsMgEERDbv5A/v83e2jNTmCKGdegJk0heHgUn7vrKBQyxRj/iivJPM9WMTWjc45wJeAwhAghVJEG1nkl + XNkziLCvtteXphFCfQ08nOi+4kvTeFL1NfBQ/BLuefjS9NkAADOwPnpNX14UADBEaV4mNnkygN34Y/1v + AgeWZXll9So2eTLAEVm9ik2a7g1Qgn9t9bvFV/4gAOZdHgB1RPeUEeAZAeBr0d4R4JIACuqI7ikjwDMD + tDACNAfo/Sou0fQ9wGKvoQfO8i61W6SkTXi+XtLLgOwcFSna3It3c+LKO3HlfcRpBa3JBjU5E8DiAAAA + AElFTkSuQmCC + + + + 217, 22 + + + New + 151, 22 @@ -510,23 +588,6 @@ Mash-Up Pack - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADuSURBVFhH7ZbB - CsMgEERDbv5A/v83e2jNTmCKGdegJk0heHgUn7vrKBQyxRj/iivJPM9WMTWjc45wJeAwhAghVJEG1nkl - XNkziLCvtteXphFCfQ08nOi+4kvTeFL1NfBQ/BLuefjS9NkAADOwPnpNX14UADBEaV4mNnkygN34Y/1v - AgeWZXll9So2eTLAEVm9ik2a7g1Qgn9t9bvFV/4gAOZdHgB1RPeUEeAZAeBr0d4R4JIACuqI7ikjwDMD - tDACNAfo/Sou0fQ9wGKvoQfO8i61W6SkTXi+XtLLgOwcFSna3It3c+LKO3HlfcRpBa3JBjU5E8DiAAAA - AElFTkSuQmCC - - - - 217, 22 - - - New - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -611,12 +672,6 @@ False - - 37, 20 - - - File - False @@ -661,12 +716,6 @@ Convert to Bedrock - - 39, 20 - - - Edit - iVBORw0KGgoAAAANSUhEUgAAAtAAAALQCAYAAAC5V0ecAAAABGdBTUEAALGPC/xhBQAAazFJREFUeF7t @@ -1207,6 +1256,20 @@ Binka Conversion + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAKdJREFUOE+1 + jzEKwzAQBNUEXKQIBOwifcgTUvkDbt2p9qP0Ev1E31FYkVXOx2FLRRYWi7NnTnZ/z/MxZPY7aguhbZlq + myQafL+ubRINshCwnO0kFqi3HkpwWOf7DkC1RBfvx9slV4ElscqbxBiz9/4nwOBIQjCEUL7FswhwDYAp + JVMiN0oYs/ILiCXRIGHOwVQBoiXsKSgjJdzaBMpQ0g3KEOoG++PcBx9PFJGNjU4vAAAAAElFTkSuQmCC + + + + 181, 22 + + + Tutorials + iVBORw0KGgoAAAANSUhEUgAACOAAAAaoCAYAAAAgNTafAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m @@ -21892,20 +21955,6 @@ How PCKs work - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAKdJREFUOE+1 - jzEKwzAQBNUEXKQIBOwifcgTUvkDbt2p9qP0Ev1E31FYkVXOx2FLRRYWi7NnTnZ/z/MxZPY7aguhbZlq - myQafL+ubRINshCwnO0kFqi3HkpwWOf7DkC1RBfvx9slV4ElscqbxBiz9/4nwOBIQjCEUL7FswhwDYAp - JVMiN0oYs/ILiCXRIGHOwVQBoiXsKSgjJdzaBMpQ0g3KEOoG++PcBx9PFJGNjU4vAAAAAElFTkSuQmCC - - - - 181, 22 - - - Tutorials - iVBORw0KGgoAAAANSUhEUgAABkAAAAZACAYAAAAhDI6nAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -23909,6 +23958,12 @@ FAQ + + 181, 22 + + + Buy a coffee + 253, 22 @@ -23927,12 +23982,6 @@ For MattNL (Other Developer) - - 181, 22 - - - Buy a coffee - 181, 22 @@ -25780,12 +25829,6 @@ Administrative Tools - - 44, 20 - - - Help - iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -28483,19 +28526,6 @@ Join Development Discord - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAAAuSURBVDhPY/j/ - /z9FGMYgFwwbA8gFcANARpEJho0B5AK4ASCjyATDyQAy8X8GAKAaUNpxMP6IAAAAAElFTkSuQmCC - - - - 63, 20 - - - More - False @@ -28505,39 +28535,18 @@ Add Custom Pack Icon - - 47, 20 - - - Misc. - - - 24, 44 - - - 1016, 24 - - - 2 - - - menuStrip1 - - - menuStrip - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - 298, 17 + + 182, 92 + + + contextMenuMetaTree + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -28587,15 +28596,6 @@ Edit All Entries - - 182, 92 - - - contextMenuMetaTree - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - iVBORw0KGgoAAAANSUhEUgAAAbYAAAB7CAYAAAAYCKWuAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -29282,6 +29282,129 @@ 8 + + openTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 0 + + + editorTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 1 + + + Fill + + + 20, 30 + + + 0, 0, 0, 0 + + + 1024, 600 + + + 0 + + + tabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + $this + + + 4 + + + pckOpen + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openTab + + + 2 + + + label5 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + openTab + + + 3 + + + labelVersion + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + openTab + + + 4 + + + ChangelogRichTextBox + + + System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + openTab + + + 5 + + + 4, 38 + + + 18, 30, 20, 5 + + + 1016, 558 + + + 1 + + + openTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 0 + None @@ -30392,55 +30515,139 @@ 5 - - 4, 38 - - - 18, 30, 20, 5 - - - 1016, 558 - - - 1 - - - openTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 0 - + + True + None - - 9, 28 - - - 326, 19 - - - 0 - - + pckFileLabel - - metroLabel3 - - + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - + editorTab - + + 2 + + + labelImageSize + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 3 + + + fileEntryCountLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 4 + + + PropertiesTabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 5 + + + label11 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 6 + + + treeViewMain + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + editorTab + + + 7 + + + pictureBoxImagePreview + + + PckStudio.PictureBoxWithInterpolationMode, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null + + + editorTab + + + 9 + + + 4, 38 + + + 5, 50, 5, 7 + + + 1016, 558 + + + 0 + + + editorTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + tabControl + + + 1 + + + 3, 17 + + + 332, 23 + + + 2 + + + pckFileLabel + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + 2 @@ -30500,6 +30707,138 @@ Top, Bottom, Right + + MetaTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + PropertiesTabControl + + + 0 + + + 338, 277 + + + 671, 282 + + + 11 + + + PropertiesTabControl + + + MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + editorTab + + + 5 + + + metroLabel2 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 2 + + + treeMeta + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + MetaTab + + + 3 + + + entryTypeTextBox + + + MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 4 + + + entryDataTextBox + + + MetroFramework.Controls.MetroTextBox, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 5 + + + buttonEdit + + + MetroFramework.Controls.MetroButton, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 6 + + + metroLabel1 + + + MetroFramework.Controls.MetroLabel, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + MetaTab + + + 7 + + + 4, 38 + + + 3, 3, 3, 3 + + + 663, 240 + + + 0 + + + Properties + + + MetaTab + + + MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a + + + PropertiesTabControl + + + 0 + Top, Right @@ -30701,54 +31040,6 @@ 7 - - 4, 38 - - - 3, 3, 3, 3 - - - 663, 240 - - - 0 - - - Properties - - - MetaTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - PropertiesTabControl - - - 0 - - - 338, 277 - - - 671, 282 - - - 11 - - - PropertiesTabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - editorTab - - - 5 - True @@ -30851,57 +31142,6 @@ 9 - - 4, 38 - - - 5, 50, 5, 7 - - - 1016, 558 - - - 0 - - - editorTab - - - MetroFramework.Controls.MetroTabPage, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - tabControl - - - 1 - - - Fill - - - 20, 30 - - - 0, 0, 0, 0 - - - 1024, 600 - - - 0 - - - tabControl - - - MetroFramework.Controls.MetroTabControl, MetroFramework, Version=1.4.0.0, Culture=neutral, PublicKeyToken=5f91a84759bf584a - - - $this - - - 4 - Top, Right From deab8b7bef2ad9ded283f9e89bfc77ebb67b8903 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 10:38:17 +0200 Subject: [PATCH 20/79] Update AddFilePrompt --- .../AddFilePrompt.Designer.cs | 2 +- .../Forms/Additional-Popups/AddFilePrompt.cs | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs index 51d72dcc..50dbca23 100644 --- a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.Designer.cs @@ -122,7 +122,7 @@ this.Controls.Add(this.InputTextBox); this.Controls.Add(this.OKButton); this.Controls.Add(this.TextLabel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AddFilePrompt"; diff --git a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs index e2b533f6..70b1b436 100644 --- a/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs +++ b/PCK-Studio/Forms/Additional-Popups/AddFilePrompt.cs @@ -6,26 +6,27 @@ namespace PckStudio { public partial class AddFilePrompt : MetroForm { - /// - /// Text entered only access when DialogResult == DialogResult.OK - /// - public string filepath => InputTextBox.Text; - public int filetype => FileTypeComboBox.SelectedIndex; + /// + /// Text entered only valid when == , + /// otherwise + /// + public string Filepath => DialogResult == DialogResult.OK ? InputTextBox.Text : string.Empty; + public int Filetype => FileTypeComboBox.SelectedIndex; - public AddFilePrompt(string InitialText) : this(InitialText, -1) + public AddFilePrompt(string initialText) : this(initialText, -1) { } - public AddFilePrompt(string InitialText, int maxChar) + public AddFilePrompt(string initialText, int maxChar) { InitializeComponent(); - InputTextBox.Text = InitialText; + InputTextBox.Text = initialText; InputTextBox.MaxLength = maxChar < 0 ? short.MaxValue : maxChar; - FormBorderStyle = FormBorderStyle.None; } private void OKBtn_Click(object sender, EventArgs e) { - if(FileTypeComboBox.SelectedIndex > -1) DialogResult = DialogResult.OK; + if(FileTypeComboBox.SelectedIndex > -1) + DialogResult = DialogResult.OK; } private void InputTextBox_KeyDown(object sender, KeyEventArgs e) From 04305c409f772820df7049fce2f20783f280a60a Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 11:24:16 +0200 Subject: [PATCH 21/79] TextPrompt - Update default 'TextOutput' to be Array.Empty instead of null --- PCK-Studio/Forms/Additional-Popups/TextPrompt.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Additional-Popups/TextPrompt.cs b/PCK-Studio/Forms/Additional-Popups/TextPrompt.cs index 962ac918..942d8e8a 100644 --- a/PCK-Studio/Forms/Additional-Popups/TextPrompt.cs +++ b/PCK-Studio/Forms/Additional-Popups/TextPrompt.cs @@ -5,7 +5,7 @@ namespace PckStudio.Forms.Additional_Popups { public partial class TextPrompt : MetroFramework.Forms.MetroForm { - public string[] TextOutput => DialogResult == DialogResult.OK ? PromptTextBox.Lines : null; + public string[] TextOutput => DialogResult == DialogResult.OK ? PromptTextBox.Lines : Array.Empty(); public TextPrompt(string[] list = null) { InitializeComponent(); From 9bf4b77ee06fc5089fd906f5ed55824b850a9734 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 11:25:59 +0200 Subject: [PATCH 22/79] Update 'SetBulkSpeed' member variable name --- .../Animation/SetBulkSpeed.Designer.cs | 184 +++++++++--------- .../Animation/SetBulkSpeed.cs | 11 +- PCK-Studio/Forms/Editor/AnimationEditor.cs | 4 +- 3 files changed, 100 insertions(+), 99 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.Designer.cs b/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.Designer.cs index f38ca1c0..e7a23f35 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.Designer.cs @@ -29,108 +29,108 @@ namespace PckStudio.Forms.Additional_Popups.Animation /// private void InitializeComponent() { - this.button1 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); - this.TimeUpDown = new System.Windows.Forms.NumericUpDown(); - ((System.ComponentModel.ISupportInitialize)(this.TimeUpDown)).BeginInit(); - this.SuspendLayout(); - // - // button1 - // - this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button1.ForeColor = System.Drawing.Color.White; - this.button1.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.button1.Location = new System.Drawing.Point(55, 63); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(75, 23); - this.button1.TabIndex = 7; - this.button1.Text = "Save"; - this.button1.UseVisualStyleBackColor = true; - this.button1.Click += new System.EventHandler(this.button1_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.ForeColor = System.Drawing.Color.White; - this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label1.Location = new System.Drawing.Point(9, 35); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(79, 13); - this.label1.TabIndex = 10; - this.label1.Text = "Animation Time"; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.ForeColor = System.Drawing.Color.White; - this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.label3.Location = new System.Drawing.Point(47, 13); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(174, 13); - this.label3.TabIndex = 12; - this.label3.Text = "Frame Time must be greater than 0."; - // - // button2 - // - this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button2.ForeColor = System.Drawing.Color.White; - this.button2.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.button2.Location = new System.Drawing.Point(135, 63); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(75, 23); - this.button2.TabIndex = 13; - this.button2.Text = "Cancel"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); - // - // TimeUpDown - // - this.TimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); - this.TimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.TimeUpDown.ForeColor = System.Drawing.SystemColors.Window; - this.TimeUpDown.Location = new System.Drawing.Point(94, 33); - this.TimeUpDown.Maximum = new decimal(new int[] { + this.saveButton = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.cancelButton = new System.Windows.Forms.Button(); + this.TimeUpDown = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)(this.TimeUpDown)).BeginInit(); + this.SuspendLayout(); + // + // saveButton + // + this.saveButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.saveButton.ForeColor = System.Drawing.Color.White; + this.saveButton.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.saveButton.Location = new System.Drawing.Point(55, 63); + this.saveButton.Name = "saveButton"; + this.saveButton.Size = new System.Drawing.Size(75, 23); + this.saveButton.TabIndex = 7; + this.saveButton.Text = "Save"; + this.saveButton.UseVisualStyleBackColor = true; + this.saveButton.Click += new System.EventHandler(this.saveButton_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.White; + this.label1.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label1.Location = new System.Drawing.Point(9, 35); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(79, 13); + this.label1.TabIndex = 10; + this.label1.Text = "Animation Time"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.label3.Location = new System.Drawing.Point(47, 13); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(174, 13); + this.label3.TabIndex = 12; + this.label3.Text = "Frame Time must be greater than 0."; + // + // cancelButton + // + this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.cancelButton.ForeColor = System.Drawing.Color.White; + this.cancelButton.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.cancelButton.Location = new System.Drawing.Point(135, 63); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 13; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // TimeUpDown + // + this.TimeUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(17)))), ((int)(((byte)(17)))), ((int)(((byte)(17))))); + this.TimeUpDown.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.TimeUpDown.ForeColor = System.Drawing.SystemColors.Window; + this.TimeUpDown.Location = new System.Drawing.Point(94, 33); + this.TimeUpDown.Maximum = new decimal(new int[] { 10000, 0, 0, 0}); - this.TimeUpDown.Name = "TimeUpDown"; - this.TimeUpDown.Size = new System.Drawing.Size(162, 20); - this.TimeUpDown.TabIndex = 15; - this.TimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // - // SetBulkSpeed - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(264, 94); - this.ControlBox = false; - this.Controls.Add(this.button2); - this.Controls.Add(this.label3); - this.Controls.Add(this.label1); - this.Controls.Add(this.button1); - this.Controls.Add(this.TimeUpDown); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(266, 96); - this.Name = "SetBulkSpeed"; - this.Resizable = false; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - ((System.ComponentModel.ISupportInitialize)(this.TimeUpDown)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + this.TimeUpDown.Name = "TimeUpDown"; + this.TimeUpDown.Size = new System.Drawing.Size(162, 20); + this.TimeUpDown.TabIndex = 15; + this.TimeUpDown.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + // + // SetBulkSpeed + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(264, 94); + this.ControlBox = false; + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.label3); + this.Controls.Add(this.label1); + this.Controls.Add(this.saveButton); + this.Controls.Add(this.TimeUpDown); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.MinimumSize = new System.Drawing.Size(266, 96); + this.Name = "SetBulkSpeed"; + this.Resizable = false; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + ((System.ComponentModel.ISupportInitialize)(this.TimeUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } #endregion - private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button saveButton; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button cancelButton; private System.Windows.Forms.NumericUpDown TimeUpDown; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.cs b/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.cs index 3d0590fd..af34f4b6 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/SetBulkSpeed.cs @@ -6,19 +6,20 @@ namespace PckStudio.Forms.Additional_Popups.Animation { public partial class SetBulkSpeed : MetroForm { - public int time => (int)TimeUpDown.Value; - public SetBulkSpeed(TreeView treeView) + public int Ticks => (int)TimeUpDown.Value; + + public SetBulkSpeed() { InitializeComponent(); } - private void button1_Click(object sender, EventArgs e) + private void saveButton_Click(object sender, EventArgs e) { - if (time < 0) return; + if (Ticks < 0) return; DialogResult = DialogResult.OK; } - private void button2_Click(object sender, EventArgs e) + private void cancelButton_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; } diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index c8f3c303..b678c7d2 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -264,10 +264,10 @@ namespace PckStudio.Forms.Editor private void bulkAnimationSpeedToolStripMenuItem_Click(object sender, EventArgs e) { - SetBulkSpeed diag = new SetBulkSpeed(frameTreeView); + SetBulkSpeed diag = new SetBulkSpeed(); if (diag.ShowDialog(this) == DialogResult.OK) { - currentAnimation.GetFrames().ForEach(frame => frame.Ticks = diag.time); + currentAnimation.GetFrames().ForEach(frame => frame.Ticks = diag.Ticks); LoadAnimationTreeView(); } diag.Dispose(); From a4aac09f588f226447faa8e6520b90d183a4d77f Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:29:32 +0200 Subject: [PATCH 23/79] Update CreateTexturePack prompt --- .../CreateTexturePack.Designer.cs | 2 +- .../Additional-Popups/CreateTexturePack.cs | 11 +- .../Additional-Popups/CreateTexturePack.resx | 4564 +++++++++-------- PCK-Studio/MainForm.cs | 8 +- 4 files changed, 2435 insertions(+), 2150 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.Designer.cs b/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.Designer.cs index 1bd906e4..242f1dcd 100644 --- a/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.Designer.cs @@ -116,7 +116,7 @@ this.Controls.Add(this.InputTextBox); this.Controls.Add(this.OKButton); this.Controls.Add(this.TextLabel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "CreateTexturePack"; diff --git a/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.cs b/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.cs index 348ceea4..5a2946d4 100644 --- a/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.cs +++ b/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.cs @@ -9,19 +9,18 @@ namespace PckStudio /// /// Text entered only access when DialogResult == DialogResult.OK /// - public string packName => InputTextBox.Text; - public string packRes => metroComboBox1.Text; + public string PackName => InputTextBox.Text; + public string PackRes => metroComboBox1.Text; - public CreateTexturePack(string InitialText) + public CreateTexturePack() { InitializeComponent(); - InputTextBox.Text = InitialText; - FormBorderStyle = FormBorderStyle.None; } private void OKBtn_Click(object sender, EventArgs e) { - if (metroComboBox1.SelectedIndex < 0) return; + if (metroComboBox1.SelectedIndex < 0) + return; DialogResult = DialogResult.OK; } } diff --git a/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.resx b/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.resx index cdfe0893..8c770886 100644 --- a/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.resx +++ b/PCK-Studio/Forms/Additional-Popups/CreateTexturePack.resx @@ -308,2222 +308,2508 @@ - AAABAAYAEBAAAAEAIABoBAAAZgAAACAgAAABACAAqBAAAM4EAAAwMAAAAQAgAKglAAB2FQAAQEAAAAEA - IAAoQgAAHjsAAICAAAABACAAKAgBAEZ9AAAAAAAAAQAgAOOBAABuhQEAKAAAABAAAAAgAAAAAQAgAAAA - AAAABAAAwg4AAMIOAAAAAAAAAAAAAO3t7QCTk5MA4ODgf8/Pz+DMzMzcysrK3MnJydzHx8fcxsbG3MTE - xNzDw8PcwcHB3MLCwuDX19d/bWxtAOzs7AD7+/sAAAAAANfX15y6urr/tbW1/7Ozs/+xsbH/r6+v/6ys - rP+qqqr/qKio/6Wlpf+np6f/ysrKnAAAAAD6+voA/Pz8AAAAAADZ2dmcwMDA/7u7u/+3t7f/tra2/7e3 - t/+0tLT/r6+v/62trf+rq6v/q6ur/8zMzJwAAAAA+vr6APz8/AAAAAAA3t7enL+/v/++vr7/v7+//7q6 - uv+ZmZn/oqKi/7q6uv+2trb/sbGx/7a2tv/Qz8+cAAAAAPv7+wD9/f0AAAAAAObm5pyenp7/pKSk/8zM - zP+Wlpb/cnJy/29vb/+fn5//lJSU/4SFhf+4uLj/0tLSnAAAAAD7+/sA/f39AAAAAADp6emcnJyc/4aG - hv++vr7/l5eX/5ubm/+srKz/pKSk/2ZmZv+ZmZn/v76+/9TU1JwAAAAA+/v7AP39/QAAAAAA7OzsnJ2d - nf9paWn/bGxs/5CQkP+Wlpb/1dXV/6ampv8+Pj7/ubm5/729vf/V1dWcAAAAAPv7+wD9/f0AERERAO/u - 7pyhoaH/paWl/35+fv+MjIz/np6e/7i4uP+oqKj/W1tb/6CgoP/BwcH/1tbWnAAAAAD7+/sA/f39AC8v - LwDx8fGcpKSk/3l5ef9ubm7/lZWV/3d3d/9zc3P/pKSk/5GRkf+EhIT/w8PD/9nZ2ZwAAAAA+/v7AP39 - /QBDQ0MA7+/vnNXV1f+0tLT/vr6+/9LS0v+ysrL/ubm5/87Ozv/Kysr/wsLC/8nJyf/c3NycAAAAAPz8 - /AD9/f0AW1tbAO/v75zl5eX/5OTk/+Hh4f/d3d3/3d3d/9rb2v/V1dX/0tLS/9DQ0P/Q0ND/4+PjlG5u - bwD6+voA/v7+AHd3dwDy8vKc6eno/+Xl5f/j4+P/4eHh/97e3v/f39//4+Pj/+Hh4f/g4OD/5+fnze/v - 7zDs7OwA8fHxAP7+/gCVlZQA9fX1nO3t7f/q6ur/6Ojo/+bm5v/j4+P/5OTk/+fn5//n5+f/7OzszPPz - 8zHu7u4A+vr6AAAAAAD+/v4AtLS0APj4+Jzy8vL/7+/v/+3t7f/r6+v/6Ojo/+jo6P/s7Oz/8PDwy/X1 - 9TDy8vIA+/v7AAAAAAAAAAAA/f39ANbW1QD7+/uc9/f3//T09P/y8vL/8PDw/+3t7f/u7u7/8vLyyfT0 - 9C7u7u4A/f39AAAAAAAAAAAAAAAAAO/v7wD///8A+vr6f/v7++D6+vrc+Pj43Pf399z19fXe9fX1xvPz - 8zX5+fkA4+TkAAAAAAAAAAAAAAAAAAAAAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD - AADAAwAAwAMAAMADAADABwAAwA8AAMAfAADAPwAAKAAAACAAAABAAAAAAQAgAAAAAAAAEAAAwg4AAMIO - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOvr6wDo6Ogd7OzsnOnp6bLo6Oix6Ojosejo6LHn5+ex5+fnsefn - 57Hm5uax5ubmsebm5rHl5eWx5eXlseXl5bHk5OSx5OTkseTk5LHj4+Ox4+PjsePj47Hj4+Oy6enpnOjo - 6B7q6uoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8vLyAPPz80fb29v4w8PD/8HBwf/AwcD/v7/A/7+/ - v/++vr7/vb29/7y8vP+7u7v/urq6/7m5uf+4uLj/t7e3/7a2tv+1tbX/tLS0/7Ozs/+ysrL/srGx/7Gx - sf/Q0ND48PHwR+7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADy8vIA9fX1SdPT0/m2trb/tbW1/7S0 - tP+zsrP/sbGx/7CwsP+vr6//rq6u/62trf+srKz/qqqq/6mpqf+oqKj/p6en/6ampv+lpaX/pKSk/6Kj - o/+hoaH/oKCg/8XFxfnx8fFJ7e3tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLy8gD19fVJ1dXV+bm5 - uf+4uLj/t7e3/7a2tv+0tLT/s7Oz/7Kysv+xsbH/sLCw/6+vr/+urq7/rays/6urq/+qqqr/qamp/6io - qP+np6f/pqam/6SlpP+kpKT/x8fH+fLy8knu7u4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8/PzAPb2 - 9knW1tb5vLy8/7q6uv+5ubn/uLi4/7e3t/+2trb/tbW0/7Ozs/+ysrL/sbGx/7CwsP+vr6//rq6u/62t - rf+rq6v/qqqq/6mpqf+oqKj/p6en/6ampv/IyMj58vLySe7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADz8/MA9vb2SdjY2Pm+vr7/vLy8/7u7u/+6urr/ubm5/7i4uP+3t7f/trW2/7S0tP+zs7P/srKy/7Gx - sf+wsLD/r6+v/62trf+tra3/q6ur/6qqqv+pqan/qKio/8rKyvny8vJJ7+/vAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPT09AD29vZJ2dnZ+cPDw//Ozs7/zc3N/8DAwP+8vLz/u7u7/7q6uv/ExMT/zMzM/8vL - y//Kysr/xMTE/7e3t/+/v7//xMTE/7a2tv+3t7f/w8PD/7q6uv+srKz/y8vL+fPz80nw8PAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA9PT0APf390na29v50tLS/6Kiov+vr6//0NDQ/76+vv+9vb3/ycnJ/729 - vf96enr/cnJy/3Nzc/+ioqL/1tbW/7S0tP+Xl5f/0tLS/8jIyP+Kior/xcXF/7e3t//MzMz58/PzSfDw - 8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD19fUA9/f3Sdzc3PnZ2dn/XFxc/3Z2dv/Z2dn/wMDA/7+/ - v//U1NT/ZmZm/yIiIv9fX1//Pz8//zU1Nf/h4eH/jo6O/0ZGRv/o6Oj/lZWV/zs7O//Kysr/tbW1/87O - zvnz8/NJ8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX19QD39/dJ3d7d+dra2v9cXFz/dnZ2/9ra - 2v/CwsL/wcHB/9XV1f9aWlr/XFxc/+7u7v+oqKj/NTU1/+Li4v+Pj4//SEhI/+rq6v9MTEz/i4uL/8rK - yv+ysrL/0M/Q+fT09Enx8fEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vX2APj4+Enf39/53Nzc/1xc - XP94eHj/5OTl/9DQ0P/Ly8v/19fX/1tbW/9aWlr/4+Pj/6ampv86Ojr/4+Li/4+Pj/9LS0v/tLS0/zw8 - PP/Jycn/vLy8/7S0tP/R0dH59PT0SfHx8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYA+Pj4SeHg - 4fnd3t3/XV1d/1NTU/+srKz/p6en/8fHx//l5eX/W1tb/1paWv/d3d3/zs3O/7S0tP/i4uL/jo6O/0VF - Rf9dXV3/gYGB/9DQ0P+4uLj/t7e3/9PT0/n09PRJ8vLyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2 - 9wD4+PhJ4uLi+d/f3/9fX1//FxcX/zg4OP8hISH/SUlJ/+rq6v9cXFz/W1tb/9jY2P/Jycn/y8zL/9PT - 0/+Pj4//GRkZ/zg4OP/Gxsf/w8PD/7q6uv+5ubn/0tPT+fT09Enx8fEAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA9/f3APn5+Unj4+P54eHh/11dXf9vb2//4+Pj/4iIiP8wMDD/5ubm/11dXf9bW1v/2dnZ/8jI - yP/Jycn/09PT/5CQkP8HBwf/PDw8/9TU1P/CwsL/vLy8/7i4uP/R0dH59PT0SfHx8QAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD39/cA+fn5SeXl5fni4uL/XV1d/3R0dP/j4+P/jIyM/zExMf/n5+f/XV1d/1tb - W//f39//2NjY/9DQ0P/j4+P/j4+P/zs7O/9GRkb/mZmZ/9HR0f+7u7v/t7e3/9LS0vn09PRJ8vLyAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj4+AD5+flJ5ubm+eTk5P9dXV3/dHR0/+Hh4f+Li4v/MTEx/+fn - 5/9dXV3/W1tb/+np6f+vr6//TExM/+bm5v+RkZH/S0tL/5KSkv9MTEz/1dXV/76+vv+5urr/1NTU+fX1 - 9Uny8vIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Pj4APn5+Uno6Oj55ubm/11dXf92dnb/7u7u/4+P - j/8xMTH/6Ojo/11dXf9cXFz/9PTz/6qqqv81NTX/5ubm/5GRkf9JSUn/3Nzc/zU1Nf+ioqL/zc3N/7y8 - vP/W1tb59fX1SfLy8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4+PgA+vr6Senp6fnn5+f/X19f/yws - LP9jY2P/ODg4/zs7O//r6+v/bGxs/yMjI/9jY2P/QkJC/zc3N//n5+f/kZGR/0dHR//x8fH/c3Nz/0xM - TP/V1dX/wcHB/9fX1/n19fVJ8/PzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn5+QD6+vpJ6+vr+ebm - 5v+7u7v/k5OT/5KSkv+SkpL/urq6/+np6f/Ly8v/lZWV/5GRkf+RkZH/srKy/+Tk5P/IyMj/rq6u/+Li - 4v/MzMz/oqKi/9bW1v/FxcX/2dnZ+fX29Unz8/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+fn5APr6 - +kns7Oz54eHh/+jo6P/q6ur/6enp/+jo6P/j4+P/2tra/9/f3//l5eX/5OTk/+Pj4//e3t7/1NTU/9jY - 2P/Z2tn/zs7O/9DQ0P/X19f/zc3N/8XFxf/a2tr59vb2SfP09AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD6+voA+/v7Se7u7vni4uL/4eHh/+Dg4P/e3t7/3d3d/9zc3P/b29v/2tra/9nZ2f/Y2Nj/1tbW/9XV - 1f/S0tL/zs7O/83Nzf/MzMz/ysrK/8nJyf/Ix8f/x8fH/9zc3Pn39/ZJ9PT0AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPr6+gD7+/tJ7+/v+eXl5f/k5OT/4uLi/+Hh4f/g4OD/39/f/97e3v/d3d3/3Nzc/9ra - 2v/Z2dn/2dnZ/9fX1//W1tb/1NXU/9PT0//S0tL/0dHR/9DQ0P/S0tL/5ubm8vf39z/19fUAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+/v7APv7+0nx8fH55+fn/+bm5v/l5eX/5OTk/+Pj4//h4eH/4ODg/9/f - 3//e3t7/3d3d/9zc3P/h4eH/4+Pj/+Li4v/h4eH/4ODg/9/f3//e3t7/4ODg/+vr6/fy8vKB6ejoCOvr - 6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/sA/Pz8SfLy8vnq6un/6Ojo/+fn5//m5ub/5eXl/+Tk - 5P/j4+P/4uLi/+Dg4P/f39//3t7e/+Pj4//l5eX/5OTk/+Pj4//i4uL/4eHh/+Pj4//t7e338/Pzf+rq - 6gjt7e0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD8/PxJ9PT0+ezs7P/r6+v/6urq/+jo - 6P/n5+f/5ubm/+Xl5f/k5OT/4+Pj/+Li4v/h4OH/5eXl/+fn5//m5ub/5eXl/+Tk5P/l5eX/7u7u9/T0 - 9H7s7OwI7+/vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8AP39/Un19fX57u7u/+3t - 7f/s7Oz/6+vr/+rq6v/p6en/5+fn/+bm5v/l5eX/5OTk/+Pj4//n5+f/6enp/+jo6P/n5+f/6Ojo//Dw - 8Pb19fV87e3tB/Dw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/PwA/f39Sff3 - 9/nx8fH/8PDw/+/v7//t7u3/7Ozs/+vr6//q6ur/6enp/+jo6P/n5uf/5uXl/+np6f/q6ur/6enp/+rq - 6v/x8fL29vb2e/Dw8Afy8vIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD9/f1J+Pj4+fPz8//y8vL/8fHx//Dw8P/v7+//7u7u/+zt7P/r6+v/6urq/+np6f/o6Oj/6+vr/+zs - 7P/t7e3/8/Pz9vf493ry8vIH9PT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/f39AP39/Un6+vr59vb2//T09f/z8/P/8vLy//Hx8f/w8PD/7+/v/+7u7v/t7e3/6+vr/+rq - 6v/t7e3/8PDw//T09PXz8/N49PT0Bvb29gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD+/v4A/v7+Sfv7+/n4+Pj/9/f3//b29v/19fX/8/Pz//Ly8v/x8fH/8PDw/+/v - 7//u7u7/7e3t//Dw8P/29vX18vLyd9jY2Abi4uIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+wD6+vpH/Pz8+Pv7+//6+vr/+fn5//j4+P/39/f/9vb2//X1 - 9f/09fX/8/T0//Pz8//y8vL/9vb28/Ly8nTZ2dkF4+PjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7u7uAOrq6h74+Pic/v7+sv39/bH9/f2x/f39sfz8 - /LH8/Pyx/Pz8sfv7+7H7+/ux+/v7sfv7+7P09fRy3NzcB+Tk5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AA - AA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AA - AB/wAAA/8AAAf/AAAP/wAAH/8AAD//AAB//wAA//8AAf/ygAAAAwAAAAYAAAAAEAIAAAAAAAACQAAMIO - AADCDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeHhwD///8A5eXlNPLy8n729vaB9fX1gfX1 - 9YH19fWB9fX1gfX19YH19fWB9fX1gfX19YH09PSB9PT0gfT09IH09PSB9PT0gfT09IH09PSB8/PzgfPz - 84Hz8/OB8/PzgfPz84Hz8/OB8/PzgfPz84Hz8/OB8/PzgfLy8oHy8vKB8vLygfPz84Hw8PB+5eXlNP// - /wCHh4cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANra2gDa29sK7+/vtuXl - 5f/a2tr/2dnZ/9jY2P/Y2Nj/2NjY/9fX1//X19f/19fX/9bW1v/W1tb/1dXV/9XV1f/V1dX/1NTU/9TU - 1P/U1NT/09PT/9PT0//T0tP/0tLS/9LS0v/R0dH/0dHR/9DQ0P/Q0ND/0NDQ/8/Pz//Pz8//z8/O/8/P - z//e3t7/7O3tttzc3ArZ2dkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr6 - +gD///8Q7u7uzc3Nzf+5ubn/uLi4/7e3t/+3t7b/tra2/7W1tf+0tLT/tLS0/7Ozs/+ysrL/srKy/7Gx - sf+wsLD/r6+v/66urv+urq7/ra2t/6ysrP+srKz/q6ur/6qqqv+qqqr/qamp/6ioqP+nqKf/p6en/6am - pv+lpaX/pKSk/6SkpP+9vb3/6enpzf///xD5+fkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPv7+wD///8Q7e3tzcrJyv+2trb/tbW1/7S0tf+0tLT/s7Oz/7Kysv+ysbH/sbGx/7Cw - sP+vr6//rq6v/66urv+tra3/rKys/6urq/+rqqv/qqqq/6mpqf+oqKj/qKeo/6enp/+mpqb/paWl/6Wl - pf+kpKT/o6Oj/6Kiov+hoqL/oaCh/6CgoP+4uLj/5+fnzf///xD6+voAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+wD///8Q7u7uzcvLy/+4uLj/t7e3/7e3t/+2trb/tbW1/7S0 - tP+ztLT/s7Oz/7Kysv+xsbH/sLCx/7CwsP+vr6//rq6u/62urv+tra3/rKys/6urq/+qqqr/qqmq/6mp - qf+oqKj/p6en/6enpv+mpqb/paWl/6SkpP+kpKT/o6Oj/6Kiov+6urr/5+fnzf///xD6+voAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7+wD///8Q7u7uzczMzP+6urr/ubm5/7i4 - uP+3uLf/t7e3/7a2tv+1tbX/tLS0/7S0tP+zs7P/srKy/7Gxsf+xsbH/sLCw/6+vr/+urq7/rq6u/62t - rf+srKz/q6ur/6qqqv+qqqr/qamp/6ioqP+np6f/p6en/6ampv+lpaX/pKSk/6SkpP+7u7v/6Ojozf// - /xD6+voAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q7u7uzc3N - zf+7u7v/u7u7/7q6uv+5ubn/uLi4/7i4uP+3t7f/tra2/7W1tf+0tLT/tLS0/7Ozs/+ysrL/sbGx/7Gx - sf+wsLD/r6+v/66urv+urq7/ra2t/6ysrP+rq6v/qqqq/6qqqv+pqan/qKio/6enp/+np6f/pqam/6Wl - pf+8vLz/6Ojozf///xD6+voAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8 - /AD///8Q7+/vzc/Pz/+9vb3/vLy8/7u7u/+7u7v/urq6/7m5uf+4uLj/uLi4/7e3t/+2trb/tbW1/7S0 - tP+0tLT/s7Oz/7Kysv+xsbH/sbGx/7CwsP+vr6//rq6u/66urv+tra3/rKys/6urq/+qqqv/qqqq/6mp - qf+oqKj/p6en/6enp/++vb7/6enpzf///xD6+voAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPz8/AD///8Q7+/vzdDQ0P++vr7/vr69/729vf+8vLz/u7u7/7u7u/+6urr/ubm5/7m4 - uP+4uLj/t7e3/7a2tv+1tbX/tLS0/7OztP+zs7P/srKy/7Gxsf+xsbH/sLCw/6+vr/+urq7/rq6u/62t - rf+srKz/q6ur/6qqqv+qqqr/qamp/6ioqP+/vr//6enpzf///xD6+voAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q8PDwzdHR0f/AwMD/wsLC/8XFxf/ExMT/wMDA/7y8 - vP+7u7v/u7u7/7q6uv+5ubn/ubm5/7y8vP++vr7/vr6+/729vf+8vL3/vLy8/7i4uP+zs7P/s7Oz/7e3 - t/+4uLj/tbS1/6+vr/+vr6//s7Oz/7W1tf+ysrL/rKys/6qqqv/AwMD/6urqzf///xD7+/sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q8PDwzdLS0v/FxcX/1tXW/9/f - 3//g4OD/1dTU/8LCwv+9vb3/vLy8/7y8u/+8vLz/x8fH/9zc3P/f39//3d3d/93d3f/d3d3/3d3d/9nZ - 2f/CwsL/xMTF/9fX1//b29v/09PT/7y8vP/AwMD/1tbW/9nZ2f/U1NT/vr6+/62trf/BwcH/6urqzf// - /xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q8PHwzdPT - 0//Nzc3/2tra/2BgYP94eHj/5eXl/8nJyf++vr7/vr6+/729vf/DwsL/3t7e/6Ojo/9OTk7/RERE/0VF - Rf9ERET/TU1N/6Wlpf/e3d3/3t7e/5GRkf9PT0//zMzM/9LT0//b29v/l5eX/0tLS/++vr7/zs7O/7Cw - sP/CwsL/6urqzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8 - /AD///8Q8fHxzdTU1P/Q0ND/2NjY/yMjI/9FRUX/5+fn/8zMzP/AwMD/v8DA/76+vv/Jycn/29vb/zQ0 - NP8CAgL/ICAg/yMjI/8hISH/AwMD/z4+Pv/j5OP/6urq/2xsbP8LCwv/w8PD/+Xl5f/Y2Nj/Ly8v/y4u - Lv/W1tb/xcXF/6+vr//Dw8P/6+vrzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPz8/AD///8Q8fHxzdXV1f/R0tH/2NjY/yMjI/9FRUX/5+jn/83Nzf/CwsL/wcHB/8DA - wP/MzMz/1tbW/yUlJf8hISH/z8/P/9/f3//T09P/Jycn/zc3N//l5eX/7e3t/2xsbP8LCwv/xsbG//j4 - +P+enp7/BgYG/4aGhv/d3d3/uLi4/7CwsP/ExMT/6+vrzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q8fLxzdfX1//T09P/2NjY/yMjI/9FRUX/6Ojo/87O - zv/Dw8P/w8PD/8LCwv/Nzc3/1tbW/yUlJf8lJSX/2tra/+Li4v/h4eH/Kysr/zc3N//l5eX/7e3t/2xs - bP8LCwv/y8vL//b29v9JSUn/KSkp/9PT0//Kysr/tLS0/7Kysv/Gxcb/6+vrzf///xD7+/sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q8vLyzdjY2P/U1NT/2dnZ/yMj - I/9FRUX/6enp/9HR0f/Gxsb/xsbG/8TExP/Ozs7/19fX/yUlJf8lJSX/1tbW/9vb2//e3t7/Kysr/zc3 - N//m5ub/7e3u/2xsbP8LCwv/z8/P/8PDw/8ODg7/fHx8/+Hh4f+8vL3/tLS0/7S0tP/Hx8f/7Ozszf// - /xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD///8Q8vLyzdnZ - 2f/W1db/2dnZ/yMjI/9GRkb/8/Pz/+fn5//h4eH/39/f/9XV1f/U1NT/19fX/yUlJf8lJSX/1tbW/9ra - 2v/f39//U1NT/11dXf/m5ub/7O3s/2xsbP8LCwv/ycnJ/2NjY/8cHBz/ycnJ/9HR0f+4uLj/tra2/7W1 - tf/IyMj/7Ozszf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8 - /QD///8Q8/Pzzdra2v/X19f/2tra/yUlJf8pKSn/lpaW/5eXl/+VlZX/oqKi/9fX1//m5ub/2tra/yQk - JP8lJSX/19fX/9TU1P/b29v/3d3d/93d3f/c3dz/5+fn/21sbf8ODg7/n5+f/x0dHf90dHT/4+Pj/8LC - wv+4uLj/uLi4/7e3t//Jycn/7e3tzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP39/QD///8Q8/Pzzdvc2//Y2Nj/2tra/ycnJ/8AAAD/AQEB/wEBAf8BAQH/AAAA/2Zm - Zv/x8fH/3t7e/yQkJP8lJSX/2NjY/9DQ0P/IyMf/zMzL/8rKyv/Jycj/4uLi/21tbf8LCwv/SkpK/xgY - GP/Dw8P/1tbW/7y8vP+6urr/ubm5/7m5uf/Kysr/7Ozszf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9PT0zd3d3f/Z2dn/29vb/yQkJP8tLS3/oqKi/6Wl - pf+NjY3/CwsL/zw8PP/s7Oz/4ODg/yQkJP8lJSX/2NjY/9DR0f/ExMT/xMTE/8PDw//FxcX/4uPj/25u - bv8AAAD/AAAA/1hYWP/o6Oj/ycnJ/7y8vP+8vLz/u7u7/7m5uf/HyMj/7Ozszf///xD7+/sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9PT0zd7e3v/b29v/29vb/yMj - I/9GRkb/7+/v/+np6f/Pz8//ExMT/zo6Ov/t7e3/4ODg/yQkJP8lJSX/2NjY/9LS0v/IyMj/ysrK/8nJ - yf/Jycn/5OPj/25ubv8CAgL/FRUV/zs7O//e3t7/z8/P/76+vv+9vb3/u7u7/7a2tv/Hx8f/7Ozszf// - /xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9PT0zd/f - 3//c3Nz/3Nzc/yMjI/9ERET/4+Pj/9XV1f/Gxsb/ExMT/zo6Ov/t7e3/4ODg/yQkJP8lJSX/2dnZ/9bW - 1v/Z2dn/5+fn/+bm5v/a2tr/5+fn/21tbf8ODg7/enp6/w8PD/+YmJj/4eHh/8TExP+9vr7/uLm4/7a2 - tv/Jycj/7Ozszf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD///8Q9fX1zeDg4P/d3d3/3Nzc/yMjI/9ERET/4+Pj/9TU1P/Gxsb/ExMT/zo6Ov/t7e3/4eHh/yQk - JP8lJSX/2dnZ/97e3v/k5OT/jo6O/5SUlP/o6Oj/7u7u/21tbf8MDAz/ubm5/zY2Nv8/Pz//4uLi/87O - zv+7u7v/ubm5/7i4uP/Kysr/7e3tzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP39/QD///8Q9fX1zeHh4f/f39//3d3d/yMjI/9ERET/4+Pj/9TU1P/Gxsb/ExMT/zo6 - Ov/u7u7/4eHh/yQkJP8lJSX/2tra/+Li4v/g4OD/Kysr/zc3N//o6Oj/8fHx/21tbf8LCwv/zs7O/42N - jf8KCgr/q6ur/93d3f+/vr//urq6/7q6uv/Ly8v/7e3tzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9fX1zePj4v/g4OD/3d3d/yMjI/9FRUX/6Ojo/97e - 3v/Kysr/ExMT/zo6Ov/u7u7/4eHh/yQkJP8lJSX/3t7e/+rq6v/k5OT/Kysr/zc3N//p6en/8vLy/21t - bf8LCwv/zs7O/9vb2/8dHR3/SUlJ/+Dg4P/Kysr/vLy8/7u7u//MzMz/7u7uzf///xD7+/sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9vb2zeTk5P/h4uH/3t7e/yQk - JP8/Pz//3d3d/93d3f/AwMD/ERER/zs7O//u7u7/4uLi/yUlJf8hISH/0NDQ/+Li4v/V1dX/Jycn/zg4 - OP/p6en/8vLy/21tbf8LCwv/ysrK//39/f9paWn/BwcH/6qqqv/c3Nz/wMDA/729vf/Ozs7/7u7uzf// - /xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9vb2zeXl - 5f/j4+P/3t7e/ycnJ/8HBwf/IiIi/yMjI/8eHh7/AAAA/09PT//x8fH/6Ofn/zg4OP8CAgL/ICAg/yMj - I/8hISH/AwMD/0BAQP/p6en/8fHx/21tbf8LCwv/x8fH//b29v+3t7f/CgoK/1JSUv/i4uL/ysrK/7+/ - v//Pz8//7u7uzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD///8Q9vb3zebm5v/j4+P/5ubm/4WFhf9tbW3/bW1t/21tbf9tbW3/cXFx/8DAwP/t7e3/7e3t/7Ky - sv9ubm7/bW1t/21tbf9tbW3/bW1t/7CwsP/p6en/6urq/6qqqv91dXX/19fX/+Tk5P/i4uL/ioqK/319 - ff/b29v/0NDQ/8HBwf/Q0ND/7+/vzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP39/QD///8Q9/f3zefn5//g4OD/6enp//Py8//09PT/8/Pz//Pz8//z8/P/8fHy/+rq - 6v/d3d3/3t7e/+rq6v/w8PD/8fHx//Hw8f/w8PD/7+/v/+jo6P/Z2dn/29vb/+np6f/s7Oz/4uLi/9LS - 0v/X19f/5+jo/+np6f/d3d3/ysrK/8LCwv/S0tL/7+/vzf///xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q9/f3zenp6f/g4OD/4eHh/+Li4v/h4eH/4eHh/+Dg - 4P/f39//3t7e/9zc3P/a2tr/2dnZ/9ra2v/b29v/29vb/9ra2v/Z2dn/2NjY/9bW1v/T09P/0tLS/9HR - 0f/Q0ND/zs7O/8rKyv/Kysr/zMzM/8zMzP/Jycn/xsbG/8XFxf/T09P/8PDwzf///xD7+/sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q+Pj4zerq6v/i4uL/4eHh/+Dg - 4P/f39//39/f/97e3v/d3d3/3dzc/9zc3P/b29v/29ra/9rZ2v/Z2dn/2NjY/9fX1//W1tb/1dXV/9XV - 1f/U09P/0NDP/83Nzf/Nzc3/zMzM/8zLzP/Ky8r/ycnJ/8jIyP/IyMj/x8fH/8bGxv/U1NT/8PDwzf// - /xD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD///8Q+Pj4zevr - 6//k5OT/4+Pj/+Li4v/h4eH/4OHh/+Dg4P/f39//3t7e/93d3f/d3d3/3Nzc/9vb2//b29v/2tra/9nZ - 2f/Y2Nj/2NjY/9bW1v/S0tL/0NDQ/8/Pz//Ozs7/zc7O/83Nzf/MzMz/y8vL/8rKy//Kycn/yMjI/8jI - yP/X19f/8vLyzf///xD8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD///8Q+fn5zezs7P/l5eX/5eXl/+Tk5P/j4+P/4uLi/+Li4f/g4eH/4ODg/9/f3//e3t7/3t7e/93d - 3f/c3Nz/29vb/9vb2//a2tr/2tra/9ra2v/Z2dn/2NjY/9jY2P/X19f/1tbW/9XV1f/V1dX/1NTU/9PT - 0//T0tP/0tLS/9XV1f/n5+f/9PT0uPf39wr19fUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP39/QD///8Q+fn5ze7t7f/n5+f/5ubm/+bl5f/l5eX/5OTk/+Pj4//i4+P/4uLi/+Hh - 4f/g4OD/39/f/97e3//e3t7/3d3d/9zc3P/b29v/3Nzc/+Pj4//j4+P/4uLi/+Li4v/h4eH/4eHh/+Dg - 4P/g4OD/39/f/97e3v/e3t7/4eHh/+zs7f/09PTO6+vrNP///wDBwcEAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD///8Q+fn5ze/v7//p6ej/6Ojo/+fn5//m5ub/5ubm/+Xl - 5f/k5OT/4+Pj/+Pj4//i4uL/4eHh/+Dg4P/f39//39/f/97e3v/d3d3/3t7e/+Tk5P/k5OT/5OTk/+Pj - 4//i4uL/4uLi/+Hh4f/h4eH/4ODg/+Dg4P/i4uL/7e3t//T09M7t7e0y////ALS0tAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD///8Q+vr6zfDw8P/q6ur/6enp/+np - 6f/o6Oj/5+fn/+bm5v/m5ub/5eXl/+Tk5P/j4+P/4+Pj/+Li4v/h4eH/4ODg/9/f3//f39//39/f/+Xl - 5f/l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Li4v/i4uL/4eHh/+Tk5P/u7u7/9fX1zO7u7jH///8Azc3NAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD///8Q+vr6zfHx - 8f/s7Oz/6+vr/+rq6v/p6en/6enp/+jo6P/n5+f/5ubm/+bm5v/l5eX/5OTk/+Pj4//j4+P/4uLi/+Hh - 4f/g4OD/4eHh/+bm5v/m5+b/5ubm/+Xl5f/l5eX/5OTk/+Tk5P/j4+P/5ubm/+/v7//19fXL7u7uMf// - /wDExMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ - /gD///8Q+/v7zfLy8v/t7e3/7e3t/+zs7P/r6+v/6urq/+np6f/p6en/6Ojo/+fn5//m5ub/5ubm/+Xl - 5f/k5OT/4+Pj/+Pj4//i4uL/4uLi/+jo6P/o6Oj/5+fn/+bm5//m5ub/5eXl/+Xl5f/n5+f/8PDw//b2 - 9srw8PAv////ALCwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP7+/gD///8Q+/v7zfP08//v7+//7u7u/+3t7f/t7e3/7Ozs/+vr6//q6ur/6enp/+np - 6f/o6Oj/5+fn/+bn5//m5ub/5eXl/+Tk5P/k4+T/5OTk/+np6f/p6en/6Ojo/+jo6P/n5+f/5+fn/+np - 6f/x8fH/9/f3yfLx8S7///8Az8/PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD///8Q+/v7zfX19f/w8PH/8PDw/+/v7//u7u7/7u7u/+3t - 7f/s7Oz/6+vr/+rq6v/q6ur/6enp/+jo6P/n5+f/5+fn/+bm5v/l5eX/5uXm/+rq6v/q6ur/6urp/+np - 6f/o6Oj/6urq//Ly8v/39/fI8vLyLf///wDGxsYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD///8Q/Pz8zfb29v/y8vL/8fHx//Hw - 8f/w8PD/7+/v/+7v7v/u7u7/7e3t/+zs7P/r7Oz/6uvr/+rq6v/p6en/6Ojo/+fo6P/n5+f/5+fn/+vr - 6//r6+v/6+vr/+rq6v/s7Oz/8/Pz//j4+Mf09PQs/Pz8AN/f3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD///8Q/Pz8zff3 - 9//09PT/8/Pz//Ly8v/y8fL/8fHx//Dw8P/v7+//7+7v/+7u7v/t7e3/7ezs/+zs7P/r6+v/6urq/+np - 6f/o6Oj/6enp/+zt7f/t7e3/7Ozs/+7u7v/19fX/+fn5xvX19Sv///8A1NTTAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ - /gD///8Q/Pz8zfj4+P/29vb/9fX1//T09P/z8/P/8vLy//Hy8v/x8fH/8PDw/+/v8P/v7+//7u7u/+3t - 7f/s7ez/7Ozs/+vr6//q6ur/6urq/+7u7v/u7u7/8PDw//b29v/09PTF8vLyK/n5+QDKysoAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP7+/gD///8Q/f39zfn5+f/39/f/9vb3//b29v/19fX/9PT0//Pz8//z8vL/8vLy//Hx - 8f/w8PD/8PDw/+/v7//u7u7/7e3t/+3t7f/s7Oz/7Ozs/+/v7//x8fH/9/f3//Pz88Tj4uMp9PT0ALW1 - tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v8Q/f39zfv6+v/5+fn/+Pj4//f39//29/f/9vb2//X1 - 9f/09PT/8/Pz//Py8//y8vL/8fHx//Dw8P/v8PD/7+/v/+7u7v/t7e3/7e3t//Ly8v/3+Pf/9PT0w+Li - 4ij4+PgAlpaWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD9/f0Q/f39zfz8/P/6+vr/+vr6//n5 - +f/4+Pj/+Pj4//f39//29vb/9fX1//T19P/09PT/8/Pz//Ly8//y8vL/8fHx//Dw8P/v8PD/8fHx//j4 - +P/09PTC5OTjKPPz8wCvr68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvb2wDW1tYK9vb2tv39 - /f/9/f3//Pz8//z8/P/8/Pz/+/v7//v7+//7+/v/+vr6//r6+v/5+vr/+fn5//n5+f/4+Pj/+Pj4//j4 - +P/3+Pj/+fn5//T09MDk5OQm9PT0AK6urgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIeH - hwD///8A5ubmNPf3937+/v6B/v7+gf7+/oH+/v6B/v7+gf7+/oH+/v6B/f39gf39/YH9/f2B/f39gf39 - /YH9/f2B/f39gf39/YH9/f2B+vr6fObm5ij9/f0AfX19AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAAAH8AAPwA - AAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/ - AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA - AAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/ - AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwAAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA - AAAAPwAA/AAAAAA/AAD8AAAAAH8AAPwAAAAA/wAA/AAAAAH/AAD8AAAAA/8AAPwAAAAH/wAA/AAAAA// - AAD8AAAAH/8AAPwAAAA//wAA/AAAAH//AAD8AAAA//8AAPwAAAH//wAA/AAAA///AAD8AAAH//8AAPwA - AA///wAA/gAAH///AAAoAAAAQAAAAIAAAAABACAAAAAAAABAAADCDgAAwg4AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDw8MAvLy8Atvb2zL29vZT+/v7Uvr6+lL6+vpS+vr6Uvr6 - +lL6+vpS+vr6Uvr6+lL6+vpS+vr6Uvr6+lL6+vpS+vr6Uvr6+lL6+vpS+vr6Uvr6+lL6+vpS+fr5Uvn5 - +VL5+flS+fn5Uvn5+VL5+flS+fn5Uvn5+VL5+flS+fn5Uvn5+VL5+flS+fn5Uvn5+VL5+flS+fn5Uvn5 - +VL5+flS+Pn5Uvj5+VL5+flS+fn5UvX19VPc29wyvLy8AsPCwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8/PzAOHh4UDx8fHf7u7u+erq - 6vjp6en46enp+Onp6fjp6en46enp+Onp6Pjo6Oj46Ojo+Ojo6Pjo6Oj46Ojo+Ofo6Pjn5+f45+fn+Ofn - 5/jn5+f45+fn+Ofn5/jm5ub45ubm+Obm5vjm5ub45ubm+Obm5vjl5eX45eXl+OXl5fjl5eX45eXl+OTl - 5fjk5OT45OTk+OTk5Pjk5OT45OTk+OPk4/jj4+P44+Pj+OTk5Pjp6ur57/Dw3+Hh4UHy8vIAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn5 - +QDx8fF97Ozs/9XV1f/Jycn/yMjI/8fHx//Hx8f/xsfG/8bGxv/Gxsb/xcXF/8XFxf/FxMX/xMTE/8TE - xP/Dw8P/w8PD/8LCwv/CwsL/wsLC/8HBwf/BwcH/wMDA/8DAwP+/v7//v7+//7+/v/++vr7/vr6+/76+ - vv+9vb3/vb29/7y8vP+8vLz/u7u7/7u7u/+6urr/urq6/7q6uv+5ubn/ubm5/7i4uP+5ubn/yMjI/+bm - 5v/w8PB99vb2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADz8vMA+Pj4f+Xk5P/ExMT/tra2/7a1tf+1tbX/tbW0/7S0tP+zs7P/s7Oz/7Ky - sv+ysrL/sbGx/7Gwsf+wsLD/r6+v/6+vr/+urq//rq6u/62trf+sraz/rKys/6urq/+rq6v/qqqq/6qq - qv+pqan/qamp/6ioqP+oqKj/p6en/6anpv+mpqb/paWl/6Wlpf+kpaT/o6Sk/6Ojo/+ioqL/oqKi/6Gh - of+hoaH/oKGh/7Kysv/c3Nz/9vb2f+7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8vLyAPj4+H/k5OT/w8PD/7a2tv+2trb/tbW1/7S0 - tP+0tLT/s7Oz/7Ozs/+ysrL/srGx/7Gxsf+xsbH/sLCw/6+vr/+vr6//rq6u/66urv+tra3/ra2t/6ys - rP+rq6v/q6qr/6qqqv+qqqr/qamp/6ipqP+oqKj/p6en/6enp/+mpqb/pqam/6Wlpf+kpaT/pKSk/6Oj - o/+jo6P/oqKi/6Kiov+hoaH/oKCg/6CgoP+wsLD/2tra//X19X/t7e0AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLy8gD4+Ph/5OTk/8TE - xf+4uLj/t7e3/7a2tv+2trb/tbW1/7W0tf+0tLT/tLSz/7Ozs/+ysrP/srKy/7Gxsf+xsbH/sLCw/7Cw - sP+vr6//rq6u/66urv+tra7/ra2t/6ysrP+rq6v/q6ur/6qqqv+qqqr/qamp/6mpqf+oqKj/p6eo/6en - p/+np6b/pqam/6Wlpf+kpaT/pKSk/6SkpP+jo6P/oqKj/6Kiov+hoaH/sbGx/9vb2//19fV/7e3tAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADz8vMA+Pj4f+Tk5f/FxcX/ubm5/7i4uP+4uLj/t7e3/7e3t/+2trb/tbW1/7S0tf+0tLT/tLS0/7Oz - s/+zsrL/srKy/7Gxsf+xsbH/sLCw/6+wr/+vr6//r66u/66urv+urq3/ra2t/6ysrP+sq6v/q6ur/6qq - qv+qqqr/qamp/6mpqf+oqKj/p6en/6enp/+np6f/pqam/6Wlpf+lpaX/pKSk/6SkpP+jo6P/o6Oj/7Ky - sv/b29v/9fX1f+7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA8/LzAPj4+H/l5eX/xsbG/7q6uv+5ubn/ubm5/7i4uP+4uLj/t7e3/7e3 - t/+2trb/tbW1/7S1tf+0tLT/tLS0/7Ozs/+ysrL/srKy/7Gxsf+xsbH/sLCw/7CwsP+vr6//rq+u/66u - rv+urq7/ra2t/6ysrP+srKv/q6ur/6qqqv+qqqr/qamp/6mpqf+oqKj/qKeo/6enp/+np6f/pqam/6Wl - pf+lpaX/pKSk/6SkpP+ztLP/3Nzc//X19X/u7u4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPz8wD4+Ph/5eXl/8fHx/+7u7v/u7u7/7q6 - uv+6ubn/ubm5/7i4uP+4uLj/uLe3/7e3t/+2trb/tbW1/7W1tf+0tLT/tLS0/7Ozs/+zsrP/srKy/7Gx - sf+xsbH/sLGx/7CwsP+vr6//rq+u/66urv+urq7/ra2t/6ysrP+srKz/q6ur/6qqqv+qqqr/qqqq/6mp - qf+oqKj/qKeo/6enp/+np6f/pqam/6alpv+lpaX/tLS0/9zc3P/19fV/7u7uAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/MA+Pj4f+bm - 5v/JyMj/vLy8/7y8vP+7u7v/u7u7/7q6uv+5urr/ubm5/7i4uP+4uLj/t7i3/7e3t/+2trb/tbW1/7W1 - tf+0tLT/tLS0/7Ozs/+zs7P/srKy/7Gxsf+xsbH/sLCx/7CwsP+vr6//r6+v/66urv+urq7/ra2t/62t - rP+srKz/q6ur/6qqqv+qqqr/qqqq/6mpqf+oqKj/qKio/6enp/+np6f/pqam/7W1tf/d3d3/9vb2f+/v - 7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA8/PzAPn5+X/m5ub/ycnJ/76+vv+9vb3/vLy8/7y8vP+7u7v/u7u7/7q6uv+6urr/ubm5/7i4 - uP+4uLj/uLi4/7e3t/+2trb/tbW2/7W1tf+0tLT/tLS0/7Ozs/+zs7P/srKy/7Gxsf+xsbH/sbGx/7Cw - sP+vr6//r6+v/66urv+urq7/ra2t/62srP+srKz/q6ur/6qqq/+qqqr/qqqq/6mpqf+oqKj/qKio/6en - p/+2trb/3d3d//b29n/v7+8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPz8wD5+fl/5+fn/8rKyv+/vr7/vr6+/76+vv+9vb3/vLy8/7y8 - vP+7u7v/u7u7/7q6uv+6urr/ubm5/7m4uP+4uLj/uLi4/7e3t/+2trb/tbW1/7W1tf+0tLT/tLS0/7Oz - s/+zsrP/srKy/7Gxsf+xsbH/sbGx/7CwsP+vr6//rq6u/66urv+urq7/ra2t/62trf+srKz/q6ur/6qq - qv+qqqr/qqqq/6mpqf+pqan/t7e3/97e3v/29vZ/7+/vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADz8/MA+fn5f+fn5//Ly8v/wMDA/8C/ - v//AwMD/wcHB/8HBwf+/v7//vb29/7y8vP+7u7v/u7u7/7u6uv+6urr/ubm5/7m4uf+4uLj/urq6/7q6 - uv+5urn/ubm5/7i4uP+4uLj/uLe4/7e3t/+0tbT/srKy/7Kysv+ysrL/tLS0/7S0tP+zsrL/sLCw/66u - rv+urq7/r6+v/7CwsP+wsLD/rq6u/6ysrP+qqqr/qqqq/7i4uP/e3t7/9vb2f/Dw8AAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9PT0APn5 - +X/o6Oj/zMzM/8LCwv/Hx8f/0tLS/9nY2P/Y2Nj/0NDQ/8XFxf++vr7/vb29/7y8vP+7u7v/u7u7/7q7 - uv+7vLv/w8PD/83Nzf/T09P/1NTU/9TU1P/U1NT/09PT/9PT0//Q0ND/x8bH/7q6uv+2trb/wcHB/83N - zf/Q0ND/zMzM/7+/v/+zs7P/tLW0/8LBwv/MzMz/zs7O/8nJyf+8vLz/r6+v/6urq/+5ubn/39/f//f3 - 93/w8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPT09AD5+fl/6Ojo/83Nzf/FxcX/1tbW/+Hh4f/V1dX/2NjY/+Xl5f/U1NT/wsLB/76+ - vv+9vb3/vb29/7y8vP+8vLz/xsbG/9vb2//p6en/2tra/9TU1P/U1NT/1NTU/9TU1P/U09P/3t7e/+Xl - 5f/Pz8//xsbG/9jZ2f/X19f/0tLS/93d3f/Y2Nj/wMDA/8bGxv/e3t7/2NjY/9HR0f/b29v/1dXV/7m5 - uf+tra3/urq6/9/f3//39/d/8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD09PQA+fn5f+np6f/Ozs7/ycnJ/+Li4v+3t7f/ISEh/zc3 - N//b29v/39/f/8XFxf+/v7//vr6+/76+vv+9vb3/wMDA/9XU1f/l5eX/dnZ2/ycnJ/8dHR3/Hh4e/x4e - Hv8eHh7/HR0d/zY2Nv+rq6v/5eXl/9nZ2f/l5eX/XFxc/xcXF/+Kior/6urq/87Ozv/a2tr/z8/P/zc3 - N/8gICD/qKio/+Hh4f+8vLz/rq6u/7u7u//f39//9/f3f/Dw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9fX1APn5+X/p6en/z8/P/8vL - yv/l5uX/sLCw/wMDA/8dHR3/2dnZ/+Li4v/Hx8f/wMDA/8DAwP+/v7//vr6+/8TExP/f39//w8PD/xIS - Ev8AAAD/AgIC/wMDA/8DAwP/AwMD/wEBAf8AAAD/S0tL/+rq6v/j4+P/6enp/0dHR/8AAAD/fHx8/+/v - 7//b29v/6urr/4WFhf8AAAD/Li4u/9vb2//X19f/uLe3/6+ur/+8vLz/4ODg//f393/w8PAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX1 - 9QD5+fl/6enp/9DQ0P/MzMz/5ubm/7CwsP8DAwP/HR0d/9nZ2f/i4uL/yMjI/8HCwv/BwcH/wMHB/7+/ - wP/FxcX/4+Pj/6+vsP8FBQX/AwMD/4KCgv+2trb/sbGx/7e3t/9XV1f/AAAA/0VFRf/s7Oz/5+fn/+rq - 6v9HR0f/AAAA/3x8fP/19fX/6+vr/93d3f81NTX/AAAA/3t7e//p6en/x8fH/7Ozs/+wsLD/vb29/+Dg - 4f/39/d/8PDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD19fUA+fn5f+rq6v/R0dH/zc3N/+fn5/+wsLD/AwMD/x0dHf/Z2dn/4+Pj/8nJ - yf/CwsP/wsLC/8LCwv/BwcH/x8fH/+Pj4/+wsLD/BQUF/wUFBf+1tbX/9/f3/+7u7v/8/Pz/enp6/wAA - AP9FRUX/7e3t/+fn5//q6ur/R0dH/wAAAP98fHz//Pz8//r6+v+lpaX/AwMD/yMjI//Q0ND/29vb/7y8 - vP+xsbH/sbGx/76+vv/h4eH/9/f3f/Hx8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9fX1APr6+n/q6ur/0tLS/87Ozv/n5+f/sLCw/wMD - A/8dHR3/2dnZ/+Tk5P/Kysr/xMTE/8PDw//Dw8P/wsLC/8jIyP/k5OT/sLCw/wUFBf8FBQX/sLCw/+fn - 5//b29v/8fHx/3h4eP8AAAD/RUVF/+3t7f/o6Oj/6urq/0dHR/8AAAD/fX19///////z8/P/S0tL/wAA - AP98fHz/6urq/8rKyv+2trb/s7Oy/7Kysv+/v7//4eHh//f393/x8fEAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPX19QD6+vp/6+vr/9PT - 0//Pz8//6Ojo/7Gxsf8DAwP/HR0d/9nZ2f/k5OT/y8vL/8XFxf/FxcX/xMTE/8PDw//Iycj/5OTk/7Cw - sP8FBQX/BQUF/6+vr//k5OT/1tfX//Dw8P94eHj/AAAA/0VFRf/t7e3/6Ojo/+rq6v9HR0f/AAAA/319 - ff//////xMTE/w8PD/8ZGRn/zc3N/97e3v+/v7//tLS0/7S0tP+0s7T/wMDA/+Li4v/39/d/8fHxAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD29vYA+vr6f+zr7P/U1NT/0NDQ/+jo6f+xsbH/AwMD/x0dHf/a2tr/6urq/9XV1f/Q0ND/0NDQ/87O - zv/Jycn/y8vL/+Xl5f+wsLD/BQUF/wUFBf+wsLD/5eXl/9fX1//w7/D/eHh4/wAAAP9FRUX/7e3t/+jo - 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 - fP/39/f/7u7u/+Pj4/83Nzf/AAAA/1xcXP/r6+v/1dXV/8LCwv+/v7//ysrK/+bm5v/4+Ph/8/PzAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD5+fkA+/v7f/Ly8v/j4+P/4ODg/+/v7//Gxsb/S0tL/0dHR/9HR0f/R0dH/0dHR/9HR0f/RkZG/1hY - WP/Nzc3/8PDw/+vr6//v7+//jIyM/0ZGRv9HR0f/R0dH/0dHR/9HR0f/R0dH/0xMTP+2trb/7u7u/+bl - 5f/t7e3/e3t7/0JCQv+fn5//8PDw/+Li4v/t7e3/pKSk/0VFRf9bW1v/2NjY/93d3f/Gxsb/wcHB/8vL - y//m5ub/+Pj4f/Pz8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+fn5APv7+3/z8/P/5OTk/+Dg4P/o6Oj/8vLy//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Ly8v/y8vL/7+/v/+Li4v/e3t7/6Ojo//Lx8v/x8fH/8vLy//Ly8v/y8fL/8fHx//Hx - 8f/w8PD/7u7u/+Dg4P/b29v/5+fn/+/v7//w8PD/7u7u/+Pj4//V1dX/3Nzd/+zs7P/u7u7/7e3t/+jo - 6P/W1tb/xcXF/8LBwv/MzMz/5+fn//j4+H/z8/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn5+QD7+/t/8/Pz/+Xl5f/f39//4uLi/+fn - 5//q6ur/6urq/+rq6v/p6en/6enp/+np6f/o6Oj/5uXm/+Dg4P/a2tr/2dnZ/9zc3P/h4eH/5eXl/+bm - 5v/l5eX/5eXl/+Tk5f/k5OT/4uLi/9zc3P/V1dX/09PT/9nZ2f/e3t7/3t7e/9vc2//T09P/y8vL/87O - zv/X19f/29vb/9vb2//V1dX/y8vL/8TExP/Dw8P/zc3N/+fn5//4+Ph/8/PzAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5+fkA+/v7f/T0 - 8//m5ub/4eHh/+Dg4P/g4OD/4ODg/+Dg4P/f39//39/f/97e3v/d3t3/3d3d/9zc3P/b29v/2tra/9nZ - 2f/Z2dn/2dnZ/9nZ2f/Z2dn/2NjY/9fY1//X19f/1tbW/9bW1v/U1NT/09PT/9LS0v/Q0ND/z87O/87O - zv/Nzc3/y8vL/8rKyf/Jycn/ysrK/8rKyv/Jycn/yMjI/8bGxv/FxcX/xcXF/87Ozv/o6Oj/+Pn4f/T0 - 9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vr6APz8/H/09PT/5+fn/+Li4v/h4uH/4eHh/+Dg4P/f39//39/f/97e3v/e3t7/3d3d/93c - 3P/c3Nz/3Nzc/9vb2//b29v/2tra/9nZ2f/Z2dn/2NjY/9jY2P/X19f/1tbW/9bW1f/V1dX/1dXV/9TU - 1P/R0dH/zs7O/83Nzf/Nzc3/zMzM/8zMzP/Ly8v/ysrK/8nKyf/Jycn/yMjI/8fHyP/Hx8f/x8fH/8bG - xv/Pz9D/6Ojp//n5+X/09PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr6+gD8/Px/9fX1/+jo6P/j4+P/4+Pj/+Li4v/i4uL/4eHh/+Dg - 4P/f4OD/39/f/9/f3//e3t7/3d3d/93d3f/c3Nz/3Nzc/9vb2//b29v/2tra/9nZ2f/Z2dn/2NnY/9jY - 2P/X19f/1tbX/9bW1v/T09P/0NDQ/9DQz//Pz8//zs7O/83Nzf/Nzc3/zc3N/8zMzP/Ly8v/ysrL/8rK - yv/Jycn/yMjI/8jIyP/Hx8f/0NDR/+np6f/5+fl/9PT0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/sA/Pz8f/X19f/p6en/5OTk/+Tk - 5P/j4+P/4+Pj/+Li4v/i4uL/4eHh/+Dg4P/f4OD/39/f/9/f3//e3t7/3t3e/93d3f/c3Nz/3Nzc/9vb - 2//b29v/2tra/9na2f/Z2dn/2dnZ/9jY2P/V1dX/0tLS/9LS0v/R0dH/0NDQ/8/Pz//Pz8//zs7O/83N - zf/Nzc3/zM3M/8zMzP/Ly8v/y8rL/8rKyv/Jycn/ycnJ/9XV1f/t7e3/+vr6f/f39wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7APz8 - /H/19fX/6urq/+bm5v/l5eX/5eXk/+Tk5P/j4+P/4+Pj/+Li4v/i4uL/4eHh/+Dg4P/g4OD/39/f/9/f - 3//e3t7/3d7e/93d3f/c3Nz/3Nzc/9vb2//b29v/2tra/9nZ2f/b29v/29zc/9vb2//b29r/2tra/9rZ - 2f/Z2dn/2NnY/9jY2P/X19f/19fX/9bW1v/W1tb/1dXV/9XV1f/U1NT/1NTU/9nZ2f/n5+f/9PT0+PT0 - 9GL29vYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPv7+wD8/Px/9vb2/+vr6//n5+f/5ubm/+bm5v/l5eX/5eXl/+Tk5P/j4+P/4+Pj/+Li - 4//i4uL/4eHh/+Dg4P/g4OD/39/f/9/f3//e3t7/3t3e/93d3f/c3Nz/3Nzc/9vc2//b29v/397e/+Tk - 4//j4+P/4+Li/+Li4v/i4uL/4eHh/+Hh4f/h4eH/4ODg/+Dg4P/f39//39/f/97e3v/e3t7/3t7e/+Li - 4v/t7e3/9fX19+/v74PNzc0J3d3dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7+/sA/Pz8f/b29v/s7Oz/6Ojo/+fn5//n5+f/5ubm/+bm - 5v/l5eX/5eXl/+Tk5P/j4+P/4+Pj/+Lj4//i4uL/4eHh/+Dg4P/g4OD/39/f/9/f3//e3t7/3t7e/93d - 3f/c3N3/3Nzc/9/f3//k5OT/5OTk/+Tj4//j4+P/4uLi/+Li4v/h4eL/4eHh/+Hh4f/h4OD/4ODg/+Dg - 4P/f39//39/f/+Pj4//t7e3/9fX19/Dw8IDOzs4J3t7eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/v7AP39/X/39/f/7e3t/+np - 6f/p6en/6Ojo/+fn5//n5+f/5ubm/+bm5v/l5eX/5eXl/+Tk5P/j4+P/4+Pj/+Lj4//i4uL/4eHh/+Hh - 4f/g4OD/39/f/9/f3//e3t//3t7e/93d3f/g4OD/5eXl/+Xl5f/k5OT/5OTk/+Pj5P/j4+P/4uLi/+Li - 4v/i4uH/4eHh/+Hh4f/g4OD/4ODg/+Tk5P/u7u7/9vb29/Hx8YDS0tII39/fAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv7 - +wD9/f1/9/f3/+7u7v/q6ur/6urp/+np6f/p6en/6Ojo/+jn6P/n5+f/5ubm/+bm5v/l5eX/5eXl/+Tk - 5P/k4+P/4+Pj/+Pj4//i4uL/4eHh/+Hh4f/g4OD/39/f/9/f3//e3t7/4eHh/+bm5v/l5uX/5eXl/+Xl - 5f/k5OT/5OTk/+Tk5P/j4+P/4uLi/+Li4v/i4uL/4uLi/+bm5v/u7u7/9vb29vLy8n7T09MI4ODgAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD8/PwA/f39f/j4+P/v7+//7Ozs/+vr6//q6ur/6urq/+np6f/p6en/6Ojo/+jo - 6P/n5+f/5+bn/+bm5v/l5uX/5eXl/+Tk5P/j5OT/4+Pj/+Pj4//i4uL/4eHi/+Hh4f/g4OD/39/f/+Li - 4v/n5+f/5ubm/+bm5v/m5eb/5eXl/+Xl5f/k5OT/5OTk/+Tk5P/j4+P/4+Pj/+fn5//v7+//9vb29vLy - 8n3X19cI4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8AP39/X/4+Pj/8PDw/+3t7f/t7e3/7Ozs/+vr - 6//q6+r/6urq/+np6f/p6en/6Ojo/+jo6P/n5+f/5ufm/+bm5v/m5ub/5eXl/+Tk5P/k5OT/4+Pj/+Pj - 4//i4uL/4uHi/+Hg4f/j4+P/6Ojo/+fn5//n5+f/5ubm/+bm5v/m5ub/5eXl/+Xl5f/k5OT/5OTk/+jo - 6P/w8PD/9/f39vPz83vY2NgH4uLiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD9/f1/+fn5//Hx - 8f/u7u7/7e3t/+3t7f/t7e3/7Ozs/+vr6//r6+v/6urq/+np6f/p6en/6Ojo/+jo6P/n5+f/5ubn/+bm - 5v/m5ub/5eXl/+Tk5P/k5OT/4+Pj/+Pj4//i4uL/5eXl/+np6f/o6Oj/6Ojo/+jo6P/n5+f/5ubm/+bm - 5v/m5ub/5ubm/+np6f/w8fD/9/f39fPz83rZ2dkH4uLiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD8/PwA/f39f/n5+f/y8vL/7+/v/+/v7//u7u7/7e3u/+3t7f/t7e3/7Ozs/+vr6//r6+v/6urq/+np - 6f/p6en/6eno/+jo6P/n5+f/5ufn/+bm5v/m5ub/5eXl/+Xl5P/k5OT/4+Pj/+bm5v/p6un/6enp/+np - 6f/o6Oj/6Ojo/+jn6P/n5+f/5+fn/+rq6v/x8fH/+Pj49fX19Xjc3NwG5eXlAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/Pz8AP39/X/5+fn/8/Pz//Dw8P/w8PD/8O/w/+/v7//u7u7/7u7u/+3t - 7f/t7e3/7Ozs/+vr6//r6+v/6urq/+np6f/p6en/6ejp/+jo6P/n5+f/5+fn/+bm5v/m5ub/5eXl/+Tk - 5P/n5+f/6urq/+rq6v/q6ur/6enp/+np6f/o6Oj/6Ojo/+vr6//y8vL/+Pj49PX19Xfd3d0G5eXlAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD9/f1/+vr6//T09P/y8vL/8fHx//Dw - 8P/w8PD/8O/w/+/v7//u7u7/7u7u/+3t7f/t7e3/7Ozs/+zs6//r6+v/6urq/+np6f/p6en/6enp/+jo - 6P/n5+f/5+fn/+bm5v/m5ub/6Ojo/+vs6//r6+v/6urq/+rq6v/q6er/6enp/+zs7P/z8vP/+Pj49Pb2 - 9nXf398G6OjnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/f39f/v6 - +//19fX/8/Pz//Lz8v/y8vL/8fHx//Hw8P/w8PD/8PDw/+/v7//u7u7/7u7u/+3t7f/t7e3/7Ozs/+zs - 7P/r6+v/6urq/+np6v/p6en/6enp/+jo6P/o5+f/5+fn/+np6f/s7Oz/7Ozs/+zs7P/r6+v/6+vr/+3t - 7v/z8/P/+fn59Pb29nXf398G6OjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/f39AP39/X/7+/v/9vb2//T09P/z8/P/8/Pz//Pz8//y8vL/8fHx//Hw8f/w8PD/8PDw/+/v - 7//v7u//7u7u/+3t7f/t7e3/7ezs/+zs7P/r6+v/6urq/+rq6v/p6en/6enp/+jo6P/q6ur/7e3t/+3t - 7f/s7Oz/7Ozt/+/v7//19fX/+fn58/j4+HPk5OQF7OzsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD9/f1/+/v7//f39//29vX/9fX1//T09P/z8/P/8/Pz//Pz - 8v/y8vL/8fHx//Hx8f/w8PD/8PDw/+/v7//u7+//7u7u/+3t7f/t7e3/7O3s/+zs7P/r6+v/6urq/+rq - 6v/p6en/6+vr/+7u7v/u7e7/7u7u//Hx8f/29vb/9/f38vLy8nLr6+sF7OzsAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v7+f/z8/P/4+Pj/9/f3//b2 - 9v/19vb/9fX1//T09P/z8/P/8/Pz//Pz8//y8vL/8fHx//Hx8f/w8PD/8PDw/+/v7//v7+//7u7u/+7t - 7f/t7e3/7O3s/+zs7P/r6+v/6urq/+zs7P/v7+//7+/v//Ly8v/39/f/9/f38ujo6G+0tLQFy8vLAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+ - /n/8/Pz/+fn5//j4+P/39/f/9/f3//b29v/19vb/9fX1//T09P/09PT/8/Pz//Pz8//y8vL/8fHy//Hx - 8f/w8PD/8PDw/+/v7//v7+//7u7u/+3t7f/t7e3/7e3t/+zs7P/t7e3/8PDw//Pz8//4+Pj/9/f38ujo - 6G+0tLQFy8vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP3+/QD+/v5//f39//r6+v/5+fn/+Pn5//j4+P/39/f/9/f3//b29v/29vb/9fX1//T0 - 9P/09PT/8/Pz//Pz8//y8vL/8vHy//Hx8f/w8PD/8PDw/+/v7//v7+//7u7u/+7t7v/t7e3/7+/v//T0 - 9P/4+Pj/9/f38ejo6G2wsLAEy8vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+f/39/f/7+/v/+vr6//r6+v/5+fn/+Pn4//j4 - +P/39/f/9/f3//f29//29vb/9fX1//T09f/09PT/8/Pz//Pz8//y8vP/8vLy//Hx8f/x8fD/8PDw/+/w - 8P/v7+//7+/v//Py8v/5+fn/+Pj48ejo6GyxsbEEy8vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////APX19X39/f3//f39//z8 - /P/8+/z/+/v7//v7+//6+vr/+vr6//r6+v/5+fn/+fn5//j4+P/4+Pj/9/f3//f39//29/f/9vb2//b2 - 9v/19vX/9fX1//T09P/09PT/9PT0//T09f/4+Pj/+Pj48enp6WusrKwEy8vLAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT0 - 9ADi4uJB9/f33/39/fn+/v74/v79+P39/fj9/f34/f39+P39/fj9/f34/f39+P39/fj8/Pz4/Pz8+Pz8 - /Pj8/Pz4/Pz8+Pz8/Pj8/Pz4+/v7+Pv7+/j7+/v4+/v7+Pv7+/j7+/v5+Pj46+np6Wmtra0Ey8vLAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADBwcEAubm5Atzc3DL4+PhT/v7+Uv7+/lL+/v5S/v7+Uv7+/lL+/v5S/v7+Uv7+ - /lL+/v5S/v7+Uv7+/lL+/v5S/v7+Uv7+/lL+/v5S/v7+Uv7+/lL+/v5S/v7+Uv7+/lL+/v5S/v7+U/Dw - 8EDBwcEGysrKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+A - AAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAA - Af//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+A - AAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAA - Af//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+A - AAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAA - Af//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+A - AAAAAAP//4AAAAAAB///gAAAAAAP//+AAAAAAB///4AAAAAAP///gAAAAAB///+AAAAAAP///4AAAAAB - ////gAAAAAP///+AAAAAB////4AAAAAP////gAAAAB////+AAAAAP////4AAAAB/////gAAAAP////+A - AAAB/////4AAAAP/////gAAAB/////+AAAAP////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAEAwg4AAMIO - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3d3AAAA - AADCwsIfx8fHa/X19X/8/Px/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7 - +3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7 - +3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+/v7f/v7+3/7+/t/+vr6f/r6+n/6+vp/+vr6f/r6 - +n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6 - +n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6+n/6+vp/+vr6f/r6 - +n/6+vp/+fr6f/r6+n/5+vp/+fr6f/n6+n/6+vl/+vr6f/n6+n/7+/t/9fX1f8fGxmvCwsIfAAAAAHp6 - egAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJiYgDa2toAzMzMMe/v78Xz8/P99vb2//T09P/z8/P/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vHy//Lx - 8f/y8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx - 8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8PHw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw - 8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw/+/w - 8P/v8O//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v - 7//v7+//7+/v//Hx8f/09PT/8vLz/e/v78bMzMwx29raAGFhYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoaGhAHd3 - dwrh4eGp+vr6//Pz8//s7Oz/5ubm/+Pj4//i4uL/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh - 4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/g4eH/4eDh/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/9/f - 4P/f39//39/f/9/f3//f39//39/f/9/f3//e397/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e - 3v/e3t7/3t3d/97d3f/d3d3/3d3d/93d3f/d3d3/3d3d/93d3f/d3d3/3dzc/9zc3P/c3Nz/3Nzc/9zc - 3P/c3Nz/3Nzc/9zc3P/c3Nz/29zb/9vc3P/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb - 2v/a2tr/2tra/9ra2v/a2tr/2tra/9ra2v/a2tr/2tra/9ra2v/b29v/39/f/+bm5v/w8PD/+fn5/+Hh - 4al4eHgKoaGhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADU1NQAzs7OG+rq6uH19fX/6urq/9/f4P/X19f/0dLR/9DQ - 0P/P0M//z8/P/8/Pz//Pz8//z8/P/87Pzv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/83Ozf/Nzc3/zc3N/83N - zf/Nzc3/zc3N/83NzP/MzMz/zMzM/8zMzP/LzMz/y8vL/8vLy//Ly8v/y8vK/8vKyv/Kysr/ysrK/8rK - yv/Kysr/ysrK/8rKyv/Kysr/ysrK/8nJyv/Jycn/ycnJ/8nJyf/Jycn/yMnJ/8jIyP/IyMj/yMjI/8jI - x//Ix8j/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/xsfH/8bGxv/Gxsb/xsbG/8bGxv/FxcX/xcXF/8XF - xf/ExcT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMPD/8PDw//Dw8P/w8PD/8PDwv/DwsL/wsLC/8LC - wv/CwsL/wsLC/8TExP/Ly8v/1tbW/+Pk4//y8vL/6erq4c7OzhvU1NQAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ - /gD///8c+vr64/Dw8P/i4uL/1NXV/8jIyP/BwcH/wMDA/8DAwP/AwL//v7+//7+/v/+/vr7/vr6+/76+ - vv++vr7/vr6+/76+vv+9vb3/vb29/729vf+8vLz/vLy8/7y8vP+8vLz/u7y8/7u7u/+7u7v/u7u7/7u7 - uv+7u7r/urq6/7q6uv+6urn/ubm5/7m5uf+5ubn/uLm5/7i4uf+4uLj/uLi4/7i4uP+3uLj/t7e3/7e3 - t/+3t7b/t7a2/7a2tv+2trb/tbW2/7W1tv+1tbX/tbW1/7W1tf+1tbX/tbW1/7W0tP+0tLT/tLS0/7O0 - s/+zs7T/s7Oz/7Ozs/+zsrP/s7Ky/7Kysv+ysrL/srKx/7Gysf+xsbH/sLCx/7CwsP+wsLD/sLCw/6+v - r/+vr6//r6+v/6+vr/+vr6//r6+v/6+vrv+urq7/rq6u/66urf+trq3/rq6u/7e3t//Hx8f/2dnZ/+vr - 6//5+fnj////HP39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8AP39/Rz5+fnj7e3t/93d3f/MzMz/vr6+/7e3 - t/+2trb/tra2/7a2tv+2tbX/tbW1/7W1tf+0tbT/tLS0/7S0tP+0tLT/s7Oz/7Ozs/+zs7P/s7Kz/7Ky - sv+ysrL/srKy/7Kysf+xsbH/sbCx/7CwsP+wsLD/sLCw/7CwsP+wsK//r7Cw/6+vr/+vr6//rq6v/66u - rv+urq7/rq2u/62trf+tra3/ra2s/6ysrP+srKz/rKys/6usq/+rq6v/q6ur/6uqqv+qqqr/qqqq/6mq - qv+pqar/qamp/6mpqf+pqan/qamp/6mpqf+oqKj/qKio/6inqP+np6f/p6en/6anpv+mpqb/pqam/6am - pv+mpqb/pqam/6alpf+lpaX/pKWk/6SkpP+kpKT/o6Oj/6Ojo/+jo6P/o6Kj/6Kiov+ioqL/oqKi/6Ki - ov+hoaH/oaGh/6Ghof+hoaH/qamp/7y8vP/S0tL/5+fn//b29uP8/fwc+/v7AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD8/PwA/f39HPn5+ePs7Oz/29ra/8nJyf+7u7v/tba1/7W1tf+1tbX/tLS0/7S0tP+0tLT/tLS0/7S0 - s/+0s7P/s7Oz/7Ozsv+ysrP/srKy/7Gxsv+xsbL/sbGx/7Gxsf+xsbH/sbGx/7CwsP+wsLD/r6+w/6+v - r/+vr6//rq6u/66urv+urq7/rq6u/66urv+ura7/ra2t/62trf+trKz/rKys/6usq/+rq6v/q6ur/6qr - q/+qqqr/qqqq/6qqqv+qqqr/qqqq/6mpqv+pqan/qaip/6ioqP+oqKj/p6in/6enp/+np6f/p6en/6em - p/+npqf/pqam/6ampv+lpqb/paal/6WlpP+kpaT/pKSk/6SkpP+kpKT/pKSk/6Oko/+jo6P/oqOj/6Ki - ov+ioqL/oaKh/6Ghof+hoaH/oKCh/6CgoP+goKD/oKCg/6CgoP+foKD/n6Cf/5+fn/+mpqb/uLi4/8/P - z//l5eX/9vb24/39/Rz7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD9/f0c+fn54+zs7P/b2tr/ycnJ/7y7 - vP+2trb/tra1/7a1tf+1tbX/tbW1/7W0tf+0tLT/tLS0/7S0tP+0tLT/s7Oz/7Ozs/+zs7P/srKy/7Ky - sv+ysrL/sbGx/7Gxsf+xsbH/sbGx/7Gxsf+wsbD/sLCw/7CwsP+wr6//r6+v/6+urv+urq7/rq6u/66u - rv+urq7/ra2u/62trf+tra3/rays/6ysrP+srKz/rKur/6urq/+rq6v/qqqr/6qqqv+qqqr/qqqq/6qq - qv+pqar/qamp/6mpqf+oqKj/qKio/6iop/+np6f/p6en/6enp/+np6f/p6en/6amp/+mpqb/pqal/6Wl - pf+lpaX/paSl/6SkpP+kpKT/pKSk/6SkpP+ko6T/o6Oj/6Ojo/+io6P/oqKi/6Kiov+ioaL/oaGh/6Gh - of+goKD/oKCg/6CgoP+goKD/oKCg/6enp/+4uLj/zs7O/+Xl5f/29vbj/f39HPv7+wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/Pz8AP39/Rz5+fnj7Ozs/9vb2//Kysr/vLy8/7e3t/+2t7f/tra2/7a2tv+2tbX/tbW1/7W1 - tf+0tLT/tLS0/7S0tP+0tLT/tLS0/7SztP+zs7P/s7Oz/7Kysv+ysrL/srKy/7Gxsf+xsbH/sbGx/7Gx - sf+xsbH/sLCw/7CwsP+wsLD/r6+v/6+vr/+vr6//rq6u/66urv+urq7/rq6u/66urf+tra3/ra2t/6yt - rf+srKz/rKys/6yrq/+rq6v/q6ur/6uqqv+qqqr/qqqq/6qqqv+qqqr/qaqq/6mpqf+pqan/qaip/6io - qP+np6j/p6en/6enp/+np6f/p6en/6enp/+np6b/pqam/6ampv+lpaX/paWl/6SlpP+kpaT/pKSk/6Sk - pP+kpKT/pKSk/6Oko/+jo6P/o6Oi/6Kiov+ioqL/oqKi/6Ghof+hoaH/oaCg/6CgoP+goKD/p6en/7i4 - uP/Pz8//5eXl//b29uP9/f0c+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/PwA/f39HPn5+ePs7Oz/29vb/8rK - yv+9vb3/uLi4/7e4uP+3t7f/t7e3/7a2tv+1trb/tba2/7W1tf+1tbX/tbS0/7W0tP+0tLT/tLS0/7S0 - tP+0tLP/s7Oz/7Oys/+ysrP/srKy/7Kxsv+xsbL/sbGx/7Gxsf+xsbH/sbCx/7Cwsf+wsLD/sK+w/6+v - r/+vr6//r6+v/66urv+urq7/rq6u/66urv+urq7/ra2t/62trf+tra3/rKys/6ysrP+sq6v/q6ur/6ur - qv+rq6r/qquq/6qqqv+qqqr/qqqq/6mqqv+pqan/qamp/6moqf+oqKj/qKeo/6enp/+np6f/p6en/6en - p/+npqf/pqen/6ampv+mpqX/paal/6Wlpf+lpaX/pKSk/6SkpP+kpKT/pKSk/6SkpP+jo6P/o6Oj/6Kj - o/+ioqL/oqKi/6Kiof+hoaH/oaGh/6Ghof+np6j/ubm5/8/Pz//l5eX/9vb24/39/Rz7+/sAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAPz8/AD9/f0c+fn54+zs7f/b29v/y8vL/76+vv+4uLj/uLi4/7i4uP+4t7f/t7e3/7e2 - t/+2trb/tra2/7a2tv+1tbX/tbS1/7W0tf+0tLT/tLS0/7S0tP+0tLT/tLO0/7Ozs/+zs7P/s7Kz/7Ky - sv+ysrL/sbGx/7Gxsf+xsbH/sbGx/7Gxsf+wsbH/sLCw/7CwsP+wr7D/r6+v/6+vr/+vrq7/rq6u/66u - rv+urq7/rq6u/62trv+tra3/ra2s/6ysrP+srKz/rKyr/6urq/+rq6v/qqqr/6qqqv+qqqr/qqqq/6qq - qv+qqqr/qqmp/6mpqf+pqKn/qKio/6inqP+op6j/p6en/6enp/+np6f/p6en/6empv+mpqb/pqal/6Wl - pf+lpaX/pKWl/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKOk/6Ojo/+jo6P/oqKj/6Giov+hoqL/oaGh/6io - qP+5ubn/z9DP/+bm5v/29vbj/f39HPv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/Pz8AP39/Rz5+fnj7e3t/9zc - 3P/Ly8v/vr6+/7i4uf+4uLj/uLi4/7i4uP+3uLj/uLe4/7e3t/+3t7f/tre2/7a2tv+2trX/tbW1/7W1 - tf+0tbX/tLS0/7S0tP+0tLT/tLS0/7S0tP+ztLP/s7Oz/7Ozsv+zsrL/srKy/7Kysf+xsbH/sbGx/7Gx - sf+xsbH/sLGw/7CwsP+vsLD/r7Cv/6+vr/+vr6//rq6v/66urv+urq7/rq6u/62urv+trq3/ra2t/62t - rf+srKz/rKys/6yrq/+sq6v/q6ur/6qrqv+qqqr/qqqq/6qqqv+qqqr/qqqq/6mpqf+pqan/qKip/6io - qP+oqKj/p6in/6enp/+np6f/p6en/6enp/+npqb/pqam/6ampv+lpqX/paWl/6Slpf+lpKX/pKSk/6Sk - pP+kpKT/pKSk/6SjpP+jo6P/o6Oj/6Kiov+ioqL/qaip/7m5uf/Qz8//5ubm//b29uP9/f0c+/v7AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD8/PwA/f39HPn5+ePt7e3/3Nzc/8zMzP+/v7//ubm5/7m5uf+4ubj/uLi4/7i4 - uP+4uLj/uLi4/7i3uP+3t7f/t7e3/7a3tv+2trb/tra2/7W2tf+1tbX/tbW0/7S0tP+0tLT/tLS0/7S0 - tP+ztLT/tLOz/7Ozs/+zs7P/srKy/7Kysv+ysbL/sbGx/7Gxsf+xsbH/sbGx/7CxsP+wsLD/r7Cw/7Cw - sP+vr6//r66v/6+urv+vrq7/rq6u/66urv+urq7/ra2t/62trf+tra3/rKys/6ysrP+srKz/q6ur/6ur - q/+rqqv/qqqq/6qqqv+qqqr/qqqq/6qqqf+pqan/qamp/6ipqP+oqKj/qKin/6eop/+np6f/p6en/6en - p/+np6f/pqen/6ampv+mpqb/pqWm/6Wlpf+lpaX/pKWk/6SkpP+kpKT/pKSk/6SkpP+jo6P/o6Oj/6Oj - o/+pqqn/urq6/9DQ0P/m5ub/9vb24/39/Rz7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD9/f0c+fn54+3t - 7f/c3Nz/zMzM/7+/v/+6urr/urm6/7m5uf+5ubn/ubi5/7i4uP+4uLj/uLi4/7i4uP+3uLf/t7e3/7e3 - t/+2trf/tra2/7a2tv+1tbb/tbW1/7S1tP+0tbT/tLS0/7S0tP+0tLT/tLS0/7O0s/+zs7P/s7Oz/7Ky - sv+ysrL/srGx/7Gxsf+xsbH/sbGx/7Gxsf+xsLD/sLCw/7CwsP+vr7D/r6+v/6+vr/+urq//rq6u/66u - rv+urq7/rq6u/66trv+tra3/ra2t/62srf+srKz/rKys/6yrq/+rq6v/q6qr/6qqqv+qqqr/qqqq/6qq - qv+qqqr/qamp/6mpqf+pqaj/qKio/6ioqP+oqKj/p6eo/6enp/+np6f/p6en/6enpv+mp6b/pqam/6al - pf+lpaX/paWl/6SlpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6qqqv+6u7r/0NDQ/+bm5v/29vbj/f39HPv7 - +wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/Pz8AP39/Rz5+fnj7e3t/93d3f/MzMz/wMDA/7q7u/+6urr/urq6/7q6 - uv+5ubn/ubm5/7i4uf+4uLj/uLi4/7i4uP+4uLj/t7e4/7e3t/+3t7f/t7a3/7a2t/+2tbb/tbW2/7W1 - tf+1tbX/tLS0/7S0tP+0tLT/tLS0/7S0tP+zs7T/s7Oz/7Ozsv+ysrL/srKy/7Kxsv+xsbH/sbGx/7Gx - sf+xsbH/sbGx/7CwsP+wsLD/sK+w/6+vr/+vr6//rq+u/66urv+urq7/rq6u/66urv+urq3/ra2t/62t - rf+traz/rKys/6ysrP+rq6v/q6ur/6urq/+qqqr/qqqq/6qqqv+qqqr/qqqq/6qpqf+pqan/qamp/6io - qP+oqKj/qKeo/6enp/+np6f/p6en/6enp/+np6b/pqam/6ampv+mpqb/paWl/6Wlpf+lpKX/pKSk/6Sk - pP+kpKT/q6ur/7u8u//R0dH/5ubm//b29uP9/f0c+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/PwA/f39HPn5 - +ePt7e3/3d3d/83Nzf/AwcD/u7u7/7u7u/+7u7v/uru6/7q6uv+5urn/urm5/7m5uf+5ubn/uLi4/7i4 - uP+4uLj/uLi4/7i4uP+4t7f/t7e3/7e2t/+2trb/tra2/7W2tf+1tbX/tbW1/7S1tP+0tLT/tLS0/7S0 - tP+0s7T/tLSz/7Ozs/+zs7P/srKy/7Kysv+xsrH/sbGx/7Gxsf+xsbH/sbGx/7Gxsf+wsLH/sLCw/6+w - sP+vr6//r6+v/6+vrv+urq7/rq6u/66urv+urq7/rq6u/62trf+tra3/rK2s/6ysrP+srKz/q6yr/6ur - q/+qq6v/q6qq/6qqqv+qqqr/qqqq/6qqqv+qqqn/qamp/6mpqf+oqKj/qKio/6eoqP+np6f/p6en/6en - p/+np6f/p6en/6anpv+mpqb/pqWm/6Wlpf+lpaX/paWl/6SlpP+rq6v/vLy8/9HR0f/m5ub/9vb24/39 - /Rz7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz8/AD+/f4c+fn54+3t7f/d3d3/zc3O/8HBwf+7u7z/u7u7/7u7 - u/+7u7v/u7u7/7u6uv+6urr/urq6/7m5uf+5ubn/ubm5/7m4uP+4uLj/uLi4/7i4uP+4t7j/t7e3/7e3 - t/+2t7b/tra2/7a2tv+2tbb/tbW1/7W0tf+1tLT/tLS0/7S0tP+0tLT/tLS0/7Ozs/+zs7P/s7Oy/7Ky - sv+ysrL/sbKy/7Gysf+xsbH/sbGx/7Gxsf+xsbH/sbCw/7CwsP+wsLD/r7Cv/6+vr/+ur67/rq6u/66u - rv+urq7/rq6u/66trv+tra3/ra2t/62srf+srKz/rKys/6usq/+rq6v/q6ur/6urqv+qqqr/qqqq/6qq - qv+qqqr/qqmp/6mpqf+pqan/qKio/6ioqP+oqKj/p6en/6enp/+np6f/p6en/6enp/+mp6b/pqam/6al - pv+lpaX/paWl/6yrq/+8vLz/0dHR/+fn5//29vbj/f39HPv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP/+ - /xz5+fnj7e3t/97e3f/Ozs7/wcLB/7y8vP+8vLz/vLy7/7u7u/+7u7v/u7u7/7u7u/+7urr/urq6/7q6 - uv+5ubr/ubm5/7m5uf+4ubj/uLi4/7i4uP+4uLj/uLi4/7e4t/+3t7f/t7e3/7a2tv+2trb/tba1/7W1 - tf+1tbX/tbW0/7S0tP+0tLT/tLS0/7S0tP+0s7T/s7Oz/7Ozs/+zsrL/srKy/7Gysv+xsbL/sbGx/7Gx - sf+xsbH/sbGx/7Cwsf+wsLD/sLCw/6+vr/+vr6//rq+v/66vrv+urq7/rq6u/66urv+urq3/ra2t/62t - rf+tra3/rKys/6ysrP+sq6z/q6ur/6urqv+rqqr/qqqq/6qqqv+qqqr/qqqq/6qqqv+pqan/qamp/6io - qP+oqKj/qKin/6enp/+np6f/p6en/6enp/+np6f/pqan/6ampv+mpqb/rKys/728vf/S0tL/5+fn//b2 - 9uP9/f0c+/v7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v7+HPn5+ePu7u7/3t7e/8/Oz//DwsL/vb29/728 - vf+8vLz/vLy8/7u7u/+7u7v/u7u7/7u7u/+7urv/u7q7/7q6uv+5urr/ubq5/7m5uf+5uLn/uLi4/7i4 - uP+4uLj/uLi4/7i4uP+4uLf/t7e3/7e3t/+2t7b/tra2/7a2tf+1trX/tbW1/7W0tf+0tLT/tLS0/7S0 - tP+0tLT/s7Oz/7Ozs/+zs7P/srKz/7Kysv+ysrH/sbGx/7Gxsf+xsbH/sbGx/7Gxsf+xsLH/sLCw/7Cw - sP+wr7D/r6+v/6+vr/+urq7/rq6u/66urv+urq7/rq6u/62urf+tra3/ra2t/62srf+srKz/rKys/6ur - q/+rq6v/qqur/6qqqv+qqqr/qqqq/6qqqv+qqqn/qamp/6mpqf+oqan/qKio/6ioqP+np6f/p6en/6en - p/+np6f/p6en/6enp/+tra3/vb29/9LS0v/n5+f/9vb24/39/Rz7+/sAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD+/v4c+fn54+7u7v/e3t7/z8/P/8PDw/++vr7/vb29/729vf+8vL3/vLy8/7y8vP+8u7v/u7u7/7u7 - u/+7u7v/u7u7/7u7uv+6urr/urq6/7m6uf+5ubn/ubi5/7i4uP+4uLj/uLi4/7i4uP+4uLj/t7e4/7e3 - t/+3t7f/tra3/7a2tv+2trb/tbW2/7W1tf+1tbT/tLS0/7S0tP+0tLT/tLS0/7O0tP+zs7P/s7Oz/7Kz - sv+ys7L/srKy/7Kxsv+xsbH/sbGx/7Gxsf+xsbH/sLGw/7CwsP+wsLD/r6+v/6+vr/+ur6//r66u/66u - rv+urq7/rq6u/66urv+tra3/ra2t/62trf+srKz/rKys/6usq/+rq6v/q6ur/6uqq/+qqqr/qqqq/6qq - qv+qqqr/qqqq/6mpqf+pqan/qamo/6ioqP+oqKj/p6en/6enp/+np6f/p6en/66urv++vb7/09LS/+fn - 5//29vbj/f39HPv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+/hz5+fnj7u7u/9/f3//Pz8//w8PD/76+ - vv++vr7/vb2+/729vf+9vb3/vL28/7y8vP+8vLz/u7y7/7u7u/+7u7v/u7u7/7u7u/+7u7v/uru6/7q6 - uv+6urr/ubm5/7m5uf+4uLj/uLi4/7i4uP+4uLj/uLi4/7i3t/+3t7f/t7e3/7a2t/+2trb/tra2/7W1 - tv+1tbX/tbS1/7S0tP+0tLT/tLS0/7S0tP+0tLT/s7O0/7Ozs/+zsrL/srKy/7Kysv+ysbH/sbGx/7Gx - sf+xsbH/sbGx/7CxsP+wsLD/sLCw/6+vsP+vr6//r6+v/6+urv+urq7/rq6u/66urv+trq7/rq6t/62t - rf+tra3/rK2s/6ysrP+srKz/q6ur/6urq/+qqqv/qqqq/6qqqv+qqqr/qqqq/6qpqv+pqan/qamp/6mp - qP+oqKj/p6io/6eoqP+nqKj/rq6u/76+vv/T09P/5+fn//b29uP9/f0c+/v7AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD9/f0A/v7+HPn5+ePu7u7/39/f/9DP0P/Dw8T/vr6+/76+vv++vr7/vr6+/76+vv+9vb3/vb29/729 - vP+8vLz/vLy8/7u7vP+7u7v/u7u7/7u7u/+7u7v/uru7/7q6uv+6urr/urm5/7m5uf+5ubn/ubi4/7i4 - uP+4uLj/uLi4/7i4uP+4uLj/t7e3/7e3t/+2t7b/tra2/7a2tv+1tbX/tbW1/7W1tf+0tLT/tLS0/7S0 - tP+0tLT/tLS0/7Ozs/+zs7P/s7Oz/7Kysv+ysrL/srKy/7Gxsf+xsbH/sbGx/7Gxsf+xsLH/sLCw/7Cw - sP+wsK//r6+v/6+vr/+urq7/rq6u/66urv+urq7/rq6u/62urf+tra3/ra2t/6ysrP+srKz/q6ys/6us - q/+rq6v/q6qr/6qqqv+qqqr/qqqq/6qqqv+qqqr/qaqp/6mpqf+oqan/qKio/6ioqP+urq7/vr6+/9PT - 0//n6Oj/9vf34/39/Rz7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD+/v4c+fn54+7u7v/f39//0NDQ/8TE - xP+/v7//v7++/76+vv++vr7/vr6+/76+vv++vr7/vb69/729vf+9vbz/vLy8/7y8vP+8vLz/u7u7/7u7 - u/+7u7v/u7u7/7u7u/+6urr/urq6/7m6uv+6ubn/ubm5/7m4uP+4uLn/uLi4/7i4uP+4uLj/uLe4/7e3 - t/+3t7f/t7e2/7a2tv+2trb/tbW1/7W1tf+1tbX/tLW0/7S0tP+0tLT/tLS0/7S0tP+0s7P/s7Oz/7Oz - s/+ysrL/srKy/7Gysv+xsbH/sbGx/7Gxsf+xsbH/sbGx/7CwsP+wsLD/sK+w/6+vr/+vr6//r66u/66u - rv+urq7/rq6u/66urv+ura7/rq2t/62trf+sraz/rKys/6ysrP+rq6v/q6ur/6urqv+qqqr/qqqq/6qq - qv+qqqr/qqqq/6qpqf+pqan/qamp/66ur/++v7//09PT/+jo6P/39/fj/f39HPv7+wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/f39AP7+/hz5+fnj7u7u/9/g3//Q0dH/xcXF/8DAwP+/v7//v7+//7+/vv++vr7/vr6+/76+ - vv++vr7/vr6+/76+vf+9vb3/vb29/728vP+8vLz/vLy8/7u7vP+7u7v/u7u7/7u7u/+7urv/u7q6/7q6 - uv+6urn/ubm5/7m5uf+4uLn/ubi5/7i4uP+4uLj/uLi4/7i3t/+3t7f/t7e3/7a3t/+2trb/tra2/7W2 - tv+1tbX/tbW1/7W0tf+0tLX/tLS0/7S0tP+0tLT/tLO0/7Ozs/+zs7P/srOy/7Kysv+ysrL/sbKx/7Gx - sf+xsbH/sbGx/7Gxsf+wsLD/sLCw/7CwsP+vr6//r6+v/66urv+urq7/rq6u/66urv+urq7/rq6t/62t - rf+tra3/rayt/6ysrP+srKz/rKus/6urq/+rq6v/qqqq/6qqqv+qqqr/qqqq/6qqqv+qqar/r6+v/7+/ - wP/U09T/6Ojo//f39+P9/f4c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v7+HPn5+ePu7u7/4ODg/9HR - 0f/FxcX/wcDB/8DAwP/AwMD/wMDA/8HBwf/CwsL/w8PD/8PDw//Dw8P/wsPD/8HBwf/Av8D/vr2+/729 - vf+8vL3/vLy8/7y8vP+7u7v/u7u7/7u7u/+7u7v/u7u7/7u6uv+6urr/urq5/7m6uf+5ubn/ubi5/7i4 - uP+5ubn/urq7/7y8vP+8vLz/vLy8/7y8vP+8vLz/u7y7/7u7u/+7u7v/u7u7/7q7u/+6urv/urq6/7q6 - uv+5ubr/uLi4/7e3t/+1tbX/s7Oz/7Kysv+ysrL/srKy/7Kysv+0tLT/tbW2/7a2tv+2trb/tra2/7W1 - tf+0tLT/srKy/6+wsP+vr67/rq6u/66urv+urq7/r6+v/7Gxsf+ysrL/s7Oz/7Kzsv+ysrL/srGy/7Cw - sP+urq7/q6ys/6qqqv+qqqr/qqqq/6qqqv+wsK//wMDA/9TU1P/o6Oj/9/f34/7+/hz8/PwAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP39/QD+/v4c+vr64+/v7//g4OD/0dLS/8XGxv/BwcH/wcDB/8LCwv/FxcX/ysrK/83N - zf/Pz8//z8/Q/8/Pz//Ozs7/zMvM/8jIyP/Dw8P/v7+//729vf+9vb3/vLy8/7y8vP+8vLz/u7u7/7u7 - u/+7u7v/u7u7/7u7uv+7u7r/urq6/7q6uv+6urn/vLy8/8DAwP/ExMT/x8fH/8nJyf/Kysr/ysrK/8nJ - yf/Jycn/ycnJ/8nJyf/Jycn/ycjJ/8jIyP/IyMj/yMjI/8fHx//FxcX/wsLC/729vf+4uLf/tLS0/7Oz - s/+0tLT/ubi4/76+vv/CwsL/xMTE/8XFxf/FxcX/xMTD/8HBwf+8vLz/tra2/7Gxsf+vr6//r6+v/7Ky - sv+4uLj/vb29/8DAwP/CwsL/w8LD/8LCwv/BwcH/vb29/7m5uf+ys7L/ra2t/6urq/+qqqv/qqqq/7Gw - sP/AwMD/1NTU/+jo6P/39/fj/v7+HPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+/hz6+vrj7+/v/+Dg - 4P/S0tL/xsbG/8LCwv/DwsL/x8fH/87Ozv/U1NX/2tra/93d3f/f39//397e/93c3f/Z2dn/1NTT/8zM - zP/ExMT/v7+//769vv+9vb3/vb29/728vf+8vLz/vLu8/7y7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/76+ - vv/FxcX/zMzM/9LS0v/W1tb/2dnZ/9vb2v/b29v/29vb/9vb2//a29r/2tra/9ra2v/a2tr/2tra/9ra - 2v/a2tr/2NjY/9XW1v/R0dH/ysrK/8LCwv+5ubn/tbW2/7q6uv/Dw8P/y8vL/9LS0v/W1tb/19fX/9fX - 1//V1dX/0dHR/8rKyv/CwcH/uLi4/7Gxsf+zs7P/vLy7/8XFxf/MzMz/0tLS/9XV1f/W1tb/1dXV/9PT - 0//Pz8//yMfH/76+vv+0tLT/ra2t/6urq/+rq6v/sbGx/8HAwf/U1NT/6Ojo//f39+P+/v4c/Pz8AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD9/f0A/v7+HPr6+uPv7+//4OHh/9LS0v/Gx8b/wsLC/8bFxv/Nzc3/19fX/+Dh - 4P/p6en/7u7u//Dv8P/v7+//7u7u/+jo6P/f39//1tbW/8vLy//CwsL/vr6+/76+vv++vb7/vb29/729 - vf+8vbz/vLy8/7y8vP+7vLv/u7u7/7u7u/++vr//xsbG/9DQ0P/Z2dn/4eHh/+fn5//r6+v/7u7u/+7u - 7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u3t/+3t7f/s7Oz/5+fn/+Hh4f/Z2dn/zs7O/8PD - w/++vr7/w8PD/87Ozv/a2tr/5OTk/+rq6v/s7Oz/7Ozs/+rp6v/i4uL/2djZ/83Nzf/AwMD/t7e3/7u7 - u//Hx8b/0tLT/93d3f/m5ub/6urq/+vr6//r6+v/6Ojo/+Hh4f/X19f/ysrK/7y8vP+xsbL/rKys/6ys - rP+xsrL/wcHB/9TU1P/o6On/9/f34/7+/hz8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD+/v4c+vr64+/v - 7//h4eH/0tPS/8fHx//DxMP/ycnJ/9PT0//f39//6+vr/+fn5//d3d3/3t7e/97e3v/g4OD/8fHx/+rq - 6v/e3t7/0dHR/8XGxf+/v7//vr6+/76+vv++vr7/vr6+/769vf+9vb3/vb29/7y8vP+8vLz/vb29/8TE - xf/Qz9D/2tvb/+bm5v/x8fH/+vr6/+zs7P/d3d3/3d3d/93d3f/e3d7/3d7e/97e3v/e3t7/3t7e/93e - 3f/d3d3/3d3d/+Hh4f/19fX/8vLy/+fn5//a29v/zs7P/8nJyf/MzMz/19jY/+fn5//k5OT/29vb/93d - 3f/d3d3/39/f/+7u7v/m5ub/1tbW/8fHx/+/v7//xMTE/9LS0f/g4OD/7u7u/+np6f/c3Nz/3d3d/93d - 3P/e3t7/7e3t/+Pj4//R0dH/wcLC/7W1tf+ura7/rK2s/7Kysv/BwcH/1dXV/+np6f/39/fj/v7+HPz8 - /AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+/hz6+vrj8PDv/+Hi4f/T09P/yMjI/8XFxP/Ly8v/19fX/+Tk - 5P/29vb/i4uL/xcXF/8cHBz/Ghoa/zMzM//g4OD/8/Pz/+Pj4//V1dX/yMjI/8DAwP++v77/vr6+/76+ - vv++vr7/vr6+/769vv+9vb3/vb29/729vf/BwMH/y8rL/9jY2P/l5eX/8/Pz/9zc3P+Ghob/S0tL/xoa - Gv8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8bGxv/JSUl/3d3d//W1tb/8fHx/+bm - 5v/Z2dn/09PT/9XV1f/f39//8/Pz/4qKiv8XFxf/HBwc/xoaGv8zMzP/39/f//Dw8P/d3d3/zc3N/8fH - x//MzM3/29vb/+zs7P/s7Oz/WVlZ/xkZGf8cHBz/GRkZ/z09Pf/i4uH/6urq/9XV1f/DxMT/tra2/6+v - rv+tra3/s7Oz/8LCwf/V1dX/6enp//f39+P+/v4c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v7+HPr6 - +uPw8PD/4uLi/9TT1P/Iycn/xcXF/83Nzf/Z2dn/5+fn//n5+f9+fn7/AAAA/wAAAP8AAAD/Ghoa/93d - 3f/29vb/5ubm/9fX1//Kysn/wcHB/7+/v/+/v7//v7+//76+vv++vr7/vr6+/76+vv++vr7/vr6+/8TE - xP/Qz9D/3t7e/+7u7v/r6+v/UVFR/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AQEB/y0tLf/V1dX/8fHx/+Hh4f/c3Nv/3Nzc/+Tk5P/39/f/fn5+/wAA - AP8AAAD/AAAA/xoaGv/d3d3/9PT0/+Hh4f/T09P/z8/P/9TU1P/j4+P/9vb2/6ysrP8KCgr/AAAA/wAA - AP8AAAD/fHx8//f39//n5+f/1NTU/8PDwv+1tbX/rq6u/66urv+0s7P/wsLC/9XW1f/p6en/9/f34/7+ - /hz8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD+/v4c+vr64/Dw8P/i4uL/1NTU/8nKyf/Gxsb/zs7O/9ra - 2v/o6Oj/+vr6/35+fv8AAAD/AAAA/wAAAP8aGhr/3d3d//b39//n5+f/2NjY/8vLy//CwsL/wMDA/8DA - wP+/v8D/v7+//7+/v/++vr7/vr6+/76+vv+/v7//xsbG/9PT0//i4uL/9PT0/9HR0f8XFxf/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4KC - gv/39/f/6Ojo/+Hh4f/h4eH/5+fn//j4+P9+fn7/AAAA/wAAAP8AAAD/Ghoa/93d3f/09PT/4uPj/9jY - 2P/X19f/3Nzc/+vr6//s7Oz/SEhI/wAAAP8AAAD/AAAA/yEhIf/S0tL/9PT0/+Hh4f/Q0ND/v7+//7Ky - sv+urq7/rq6u/7S0tP/Dw8P/1tbW/+np6f/39/fj/v7+HPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+ - /hz6+vrj8PDw/+Li4v/V1dX/ysrK/8fHxv/Ozs7/2tra/+np6f/6+vr/fn5+/wAAAP8AAAD/AAAA/xoa - Gv/e3t3/9/f3/+fn5//Y2Nn/y8vL/8LCwv/BwcH/wMHB/8DAwP/AwMD/v8DA/7+/v/+/v7//vr6+/7/A - wP/IyMj/1tXW/+Xl5f/4+Pj/iIiI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/dnZ2//r6+v/s7Ov/5OTk/+Tj5P/o6Oj/+Pj4/35+ - fv8AAAD/AAAA/wAAAP8aGhr/3d3d//T09P/m5ub/39/f/97e3v/j4+P/8/Pz/9XV1f8YGBj/AAAA/wAA - AP8AAAD/bm5u//b29v/r6+v/2tra/8nJyf+6urr/sbGx/6+vr/+vrq//tLS0/8PDw//W1tb/6enp//f3 - 9+P+/v4c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - x//l5eX/4uLi/+Dg4P/f39//39/f/9/f3//f39//39/f/97e3v/u7u7//Pz8//T09P/q6ur/4uLi/+Dg - 4P/j4+P/6+vr//r6+v9+fn7/AAAA/wAAAP8AAAD/AAAA/35+fv/6+vr/6Ojo/9nZ2f/Q0ND/z8/P/9fX - 1//h4OH/6Ojo/+7u7v/w8O//8PDw/+/v7//r6+v/5OTk/9zc3P/b29v/39/f/+jo6P/5+fn/fn5+/wAA - AP8AAAD/AAAA/xoaGv/g4OD/9fX1/0tLS/8AAAD/AAAA/wAAAP99fX3/+Pj4/+vr6//c3Nz/zc7N/8HB - wf+5urr/uLm4/7i4uP+4uLj/uLi4/7i4uP+4t7j/t7e4/7e3t/+8vLz/ycnJ/9ra2v/r6+v/+Pj44/39 - /Rz8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD+/v4c+vr64/Ly8v/m5ub/29vb/9LS0v/Pz8//1dXV/+Df - 4P/s7Oz/+/v7/35+fv8AAAD/AAAA/wAAAP8DAwP/GBgY/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwc - HP8cHBz/Ghoa/0tLS/+Hh4f/3d3d//X19f/q6uv/5+fn/+jo6P/t7e3/+vr7/35+fv8AAAD/AAAA/wAA - AP8AAAD/fn5+//r6+v/o6Oj/2dnZ/83Nzf/Kysr/z8/P/9bW1v/b29v/3t7e/+Dg3//g4OD/3t7e/9zc - 3P/X19f/0tLS/9PU0//a2tr/5+fn//n5+f9+fn7/AAAA/wAAAP8AAAD/Ghoa/+Li4v+urq7/CgoK/wAA - AP8AAAD/IyMj/9nZ2f/19fX/5OXl/9bW1v/Hx8f/vb29/7m6uv+6ubn/ubm5/7m4uf+4uLj/uLi4/7i4 - uP+4t7j/uLi4/7y8vP/Jycn/2tra/+zs7P/4+Pjj/f39HPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+ - /hz7+/vj8vLy/+fn5//c29v/0tLS/9DQ0P/W1tb/4ODg/+zs7P/7+/v/fn5+/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9RUVH/7Ozs//Ly - 8v/s7Oz/7Ozs/+/v7//7+/v/fn5+/wAAAP8AAAD/AAAA/wAAAP9+fn7/+vr6/+jp6f/a2tr/zczN/8XG - xv/IyMj/zMzM/8/Pz//R0dH/0tLR/9HR0f/R0dH/z8/P/8zMzP/Kysn/zc3N/9jY2P/n5+f/+fn5/35+ - fv8AAAD/AAAA/wAAAP8bGxv/3t7e/3BwcP8AAAD/AAAA/wAAAP9tbW3/+fn5/+3t7f/e3t7/0NDQ/8PC - w/+7u7v/urq6/7q6uv+6ubr/urm5/7m5uf+4ubn/uLi4/7i4uP+4uLj/vL29/8rKyv/a29v/6+vr//j4 - +OP+/v4c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v7+HPv7++Py8/P/5+fn/9zc3P/T09P/0NDQ/9bX - 1//g4OD/7Ozs//v7+/9+fn7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xcXF//S0tL/9/f3//Dw8P/v7+//8fHx//v7+/9+fn7/AAAA/wAA - AP8AAAD/AAAA/35+fv/6+vr/6enp/9ra2v/Nzc3/xcXF/8TExP/FxcX/x8bG/8fHx//Hx8b/xsbG/8bG - xv/GxcX/xMTE/8TEw//Ly8v/2NjY/+fn5//5+fn/fn5+/wAAAP8AAAD/AAAA/x0dHf+8vLz/JCQk/wAA - AP8AAAD/CgoK/6mpqf/4+Pj/5+fn/9jY2P/Kysr/v7+//7u7u/+7u7v/u7u6/7u6u/+6urr/urq6/7m5 - uf+5ubn/ubm4/7i4uf+9vr7/ysrK/9rZ2v/q6ur/+Pj44/7+/hz8/PwAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD+/v4c+/v74/Pz8//n5+f/3Nzc/9PT0//R0dH/19fX/+Hg4f/s7Oz/+/v7/35+fv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4mJ - if/7+/v/8vLy//Hx8f/y8/P//Pz8/35+fv8AAAD/AAAA/wAAAP8AAAD/fn5+//r6+v/p6en/29ra/87O - zv/Gxsb/xcTE/8TExP/ExMT/xMTD/8PDw//Dw8P/wsLC/8LCwv/CwsL/w8PD/8vLy//Y2Nj/5+fn//n5 - +f9+fn7/AAAA/wAAAP8AAAD/EBAQ/zs7O/8CAgL/AAAA/wAAAP9JSUn/7e3t//Dw8P/h4eH/0tLT/8XF - xf++vb3/vLu8/7u7u/+7u7v/u7u7/7u7u/+6u7r/urq6/7q6uv+5ubn/ubm5/76+vv/Jycn/2NjY/+rq - 6v/4+Pjj/v7+HPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+/hz7+/vj8/Pz/+jn6P/c3dz/1NTU/9LR - 0v/X19f/4eHh/+3s7P/8+/v/fn5+/wAAAP8AAAD/AAAA/w0NDf9vb2//gICA/39/f/9+fn7/fn5+/35+ - fv9/f3//goKC/0BAQP8AAAD/AAAA/wAAAP8AAAD/fn5+//z8/P/z8/P/8fHx//Pz8//8/Pz/fn5+/wAA - AP8AAAD/AAAA/wAAAP9+fn7/+vr6/+np6f/b29v/zs7O/8bGxv/FxcX/xcXF/8TExP/ExMT/xMTE/8PD - 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 - AP8aGhr/3d3d//f39//q6ur/5OTl/+Tk5P/o6Oj/9fX1/9fX1/8iIiL/AAAA/wAAAP8AAAD/ICAg/9XV - 1f/y8vL/4eHh/9TU1P/Iycj/wcLC/8HBwf/AwMD/xMXE/9DQ0P/f39//7e7t//n5+eP9/f0c/Pz8AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD9/f0A/v7+HPz8/OP29vb/7u7u/+fm5//g4OD/3t7e/+Hh4v/o6Oj/7+/v//r6 - +v+9vb3/e3t7/319ff99fX3/fX19/319ff99fX3/fX19/319ff99fX3/fX19/319ff99fX3/fX19/319 - ff94eHj/ra2t/+/v7//29vb/7u7u/+np6f/n5+f/6Ojo/+3u7v/19vb/7+/v/62trf94eHj/fX19/319 - ff99fX3/fX19/319ff99fX3/fX19/319ff99fX3/fX19/319ff95eXn/goKC/+Dg4P/5+fn/7u7u/+bm - 5v/i4uL/5OPj/+rq6v/39/f/vLy8/3t7e/99fX3/fX19/4mJif/n5+f/8/T0/+bm5v/f39//3t7e/+Li - 4//t7e3/9vb2/7Gxsf97e3v/fX19/319ff99fX3/xcXF//Py8v/i4uL/1dXV/8nKyv/CwsL/wcHB/8HB - wf/FxcX/0NDQ/9/f3//u7u7/+fn54/39/Rz8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD+/v4c/Pz84/b2 - 9v/v7+//5+fn/+Dh4f/f39//4eHh/+fm5v/t7e3/9PP0//v7+/////////////////////////////// - //////////////////////////////////////////////7+/v/7+/v/9fX1/+7u7v/o6Oj/4uLi/9/g - 4P/i4uL/5+fn/+7u7v/09PT/+/v7//39/f////////////////////////////////////////////// - //////////////7+/v/8+/v/9vb2/+/v7//n5+f/4ODg/93d3f/f3t//5ubm/+/v7//5+fn///////// - /////////f39//X19f/s7O3/4eHh/9nZ2f/X19f/29vc/+Xl5f/v7+//+fn5//79/f/+/v7//v7+//39 - /f/29vb/6+vr/9/f3//T09P/ycnI/8LCwv/BwcH/wcHB/8bFxf/Q0dD/39/f/+7u7v/5+fnj/f39HPz8 - /AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+/hz8/Pzj9vb2/+/v7//n5+f/4eHh/9/f3//g4OD/5OTk/+np - 6f/u7u7/8vLy//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X1 - 9f/19PX/8/Pz//Dw8P/s7Oz/6Ojn/+Li4v/d3d3/2tra/9zc3P/h4eH/5ubm/+vr6//v7+//8vHy//Pz - 8//09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8vLy/+/v7//r6+v/5ubm/+Dg - 4P/Z2dr/19fX/9rZ2f/g4OH/5+jo/+3t7f/w8PD/8fHx//Dw8P/u7+7/6+vr/+Tk5P/b29v/09PT/9DQ - 0P/U1NT/3Nzc/+Tk5P/q6ur/7u3u/+/v7//v7+//7e3t/+np6f/i4uL/2dnZ/8/Pz//Hxsb/wsLD/8LC - wv/CwsL/xsbG/9HR0f/g4OD/7u7u//n5+eP9/f0c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v7+HPz8 - /OP39vb/7+/v/+jo6P/h4uL/39/f/9/f3//i4uH/5eXl/+jp6P/r6+v/7e3t/+7u7v/u7u7/7u7u/+3t - 7v/t7e3/7e3t/+3t7f/t7e3/7e3t/+zs7P/s7Oz/7Ozs/+vr6//q6ur/6Ojo/+Xl5f/h4eH/3d3d/9nZ - 2v/Z2Nj/2dnZ/9zc3P/g4OD/4+Pj/+bm5v/o6Oj/6unp/+rq6v/q6ur/6urq/+rp6f/p6en/6enp/+np - 6f/p6en/6Onp/+jo6P/n5+f/5eXl/+Li4v/e3t7/2dnZ/9TU1P/S0tL/1dXV/9rb2v/f39//4+Pj/+Tk - 5P/k5OT/5OTj/+Li4v/f39//2tva/9TU1P/Nzc3/ysrK/83Ozf/U1NT/2dra/97e3v/g4OH/4uLi/+Li - 4v/g4OD/3d3d/9jY1//R0dH/ycnK/8TFxf/Dw8P/w8PD/8PDwv/Hx8f/0tLS/+Dg4P/u7u7/+fn54/39 - /Rz8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD+/v4c/Pz84/f39v/v8O//6Ojo/+Li4v/g4OD/39/f/9/g - 4P/h4eH/4+Pk/+Xl5f/m5ub/5ubm/+bm5v/m5ub/5ubm/+Xl5f/l5eX/5eXl/+Xl5f/l5OT/5OTk/+Tk - 5P/k5OT/5OTk/+Li4v/h4eH/397f/9zc3P/a2tn/2dnZ/9nZ2f/Z2Nn/2dnZ/9ra2v/c3N3/3t7e/+Dg - 4P/h4eH/4eHh/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/39/f/9/f3//e39//3t7e/97e3v/c3Nz/2tra/9fX - 1//U09T/0tLS/9LS0v/S0tL/1dXV/9jX1//Y2Nj/2NfY/9jY2P/Y2Nf/19fW/9XV1f/S0tL/zc3N/8rK - yv/IyMj/ycnJ/8zMzf/Q0ND/09PT/9XU1f/V1dX/1dXV/9TU1P/S0dH/zs7O/8rKyv/Gxcb/xMXE/8TE - xP/ExMT/w8PD/8fHx//S0tL/4ODg/+7u7v/5+fnj/f39HPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP7+ - /hz8/Pzj9/f3//Dw8P/p6en/4+Pj/+Hg4P/g4OD/3+Dg/9/g4P/g4OD/4eHg/+Hh4f/h4eH/4OHg/+Dg - 4P/g4OD/4ODg/9/g4P/f4N//39/f/97e3v/e3t7/3t7e/97e3v/e3t7/3d3d/9zc3P/b29v/2tra/9ra - 2v/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2tr/2tra/9ra2v/a2tr/2trZ/9nZ2f/Z2dn/2dnY/9jY - 2P/Y2Nj/19fY/9fX1//X19f/19fX/9bW1v/V1dT/09TT/9PT0v/S0tL/0tLS/9LS0v/S0tL/0NDQ/8/P - z//Qz8//z8/P/8/Pz//Oz87/zc7N/8zMzP/Kysr/ycnJ/8nJyf/Jycn/ycjJ/8rKyv/Ly8v/zMvL/8vL - y//Ly8v/ysrL/8rJyf/IyMj/xsbG/8XGxv/FxcX/xcXF/8XFxP/ExMT/yMjI/9PT0v/h4eD/7u/v//n5 - +eP9/f0c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/v3+HPz8/OP39/f/8PDw/+np6f/k5OT/4eLh/+Hh - 4f/h4OD/4ODg/9/g4P/f3+D/39/f/9/f3//f39//39/f/97e3v/e3t7/3t7e/97d3f/d3d3/3N3d/9zc - 3P/c3Nz/3Nzc/9zc3P/c3Nz/3Nvb/9vb2//b2tv/2tra/9ra2v/a2tr/2dnZ/9nZ2f/Z2dn/2dnZ/9jZ - 2f/Y2Nj/2NjY/9jX2P/X19f/19bX/9bX1v/W1tb/1tbW/9XV1v/V1dX/1dXV/9XV1f/V1dX/1dTV/9TU - 1P/U1NT/09TT/9PT0//T09P/0tLS/9DQ0P/Nzc3/zc3N/83Nzf/MzM3/zMzM/8zMzP/Ly8v/y8vL/8vK - yv/Kysr/ysrK/8nJyf/Jycn/ycnJ/8jIyP/IyMj/x8fI/8fHx//Hx8f/x8fH/8fHx//Gx8b/xsbG/8bG - xv/Gxcb/xcXF/8XFxf/Jycn/09PT/+Hh4f/v7+//+fn54/39/Rz8/PwAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39 - /QD9/f0c/Pz84/f39//x8PD/6erp/+Tk5P/i4uL/4eLh/+Hh4f/h4eH/4OHh/+Dg4P/g4OD/4N/f/9/f - 3//f39//39/f/9/f3//f3t//3t7e/97e3v/d3t3/3d3d/93d3P/c3Nz/3Nzc/9zc3P/c3Nz/3Nzc/9vb - 2//b29v/29vb/9rb2v/a2tr/2trZ/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dj/2djY/9jY2P/Y19j/19fX/9fX - 1//W19b/1tbW/9bW1v/V1tX/1dXV/9XV1f/V1dX/1dXU/9TU1f/U1NT/1NTU/9PT0//R0dH/zs7O/83N - zf/Nzc3/zc3N/83Nzf/Nzc3/zMzM/8zMzP/MzMv/y8vL/8vLy//Ly8v/ysrK/8rKyv/Jysr/ycnJ/8jJ - yf/IyMn/yMjI/8jIyP/Hx8j/x8fH/8fHx//Hx8f/x8bH/8bGx//Gxsb/xsXG/8nJyf/U1NT/4eHh/+/v - 7//5+fnj/f39HPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP39/Rz8/Pzj+Pj4//Hx8f/q6ur/5eXl/+Pj - 4//i4uL/4uLi/+Li4f/h4eH/4eHh/+Hg4f/g4OD/4ODg/9/g3//f39//39/f/9/f3//f39//3t/e/97e - 3v/e3t7/3t3d/93d3f/d3d3/3N3c/9zc3P/c3Nz/3Nzc/9zc3P/c29z/29vb/9vb2//b29r/2tra/9rZ - 2v/a2dr/2dnZ/9nZ2f/Z2dn/2dnZ/9jZ2P/Y2Nj/19jY/9fX1//X19f/1tbW/9bW1v/W1tb/1dXW/9XV - 1f/V1dX/1dXV/9XV1f/V1NT/0tLS/8/Pz//Ozs7/zs7O/87Ozv/Nzc7/zc3N/83Nzf/Nzc3/zc3N/8zM - zP/MzMz/zMzM/8vLy//Ly8v/y8vK/8rKyv/Kysr/ysnK/8nJyf/Jycn/yMnI/8jIyP/IyMj/yMfH/8fH - x//Hx8f/x8fH/8fHx//Gxsb/ysrK/9XV1f/i4uL/7+/v//n5+eP9/f0c/Pz8AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD9/f0A/f39HPz8/OP4+Pj/8fHy/+vq6v/l5eX/4+Pj/+Pj4//j4+L/4uLi/+Li4v/i4uL/4eHi/+Hh - 4f/h4eD/4ODg/+Dg4P/g39//39/f/9/f3//f39//39/f/9/f3v/e3t7/3t7e/97d3f/d3d3/3d3d/9zc - 3f/c3Nz/3Nzc/9zc3P/c3Nz/3Nvc/9vb2//b29v/2tvb/9ra2v/a2dr/2dnZ/9nZ2f/Z2dn/2dnZ/9nZ - 2f/Y2Nj/2NjY/9jY2P/X19f/19fX/9fW1v/W1tb/1tbW/9XV1f/V1dX/1dXV/9PT0//Q0ND/0NDP/8/P - z//Pz8//z8/O/87Ozv/Ozs3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/NzMz/zMzM/8zMzP/My8v/y8vL/8vL - y//Kysv/ysrK/8rJyv/Jycn/ycnJ/8nIyf/IyMj/yMjI/8jHx//Hx8f/x8fH/8fHx//Ly8v/1dXV/+Li - 4v/v7+//+fn54/39/Rz8/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD9/f0c/Pz84/j4+P/x8vL/6+vr/+bm - 5f/k5OP/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//i4uL/4uLi/+Lh4f/h4eH/4eHh/+Dg4P/g4OD/3+Dg/9/f - 4P/f39//39/f/9/f3//f39//3t7e/97e3v/d3t3/3d3d/93d3P/d3Nz/3Nzc/9zc3P/c3Nz/3Nzc/9zb - 3P/b29v/29vb/9ra2//a2tr/2tna/9nZ2f/Z2dn/2dnZ/9nZ2f/Z2dn/2djY/9jY2P/Y2Nj/19fX/9fX - 1//X19f/1tbW/9bW1v/U09P/0dHR/9HR0f/R0ND/0NDQ/9DQ0P/Qz8//z8/P/8/Pzv/Ozs7/zs7O/83N - zf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/8zMzP/MzMz/y8zL/8vLy//Ly8v/ysrK/8rKyv/Kycr/ycnJ/8nJ - yf/Iycn/yMjI/8jIyP/Ix8j/x8fI/8vLy//W1db/4+Li//Dw7//5+fnj/f39HPz8/AAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/f39AP39/Rz8/Pzj+Pj4//Ly8v/r6+v/5ubm/+Tk5P/k5OT/4+Pk/+Pj4//j4+P/4+Pj/+Pj - 4//j4+L/4uLi/+Li4v/h4uH/4eHh/+Hh4f/h4OD/4ODg/+Dg4P/f39//39/f/9/f3//f39//397f/97e - 3v/e3t7/3t7e/93d3f/d3d3/3d3d/9zc3P/c3Nz/3Nzc/9zc3P/c29z/29vb/9vb2//b2tv/2tra/9ra - 2v/a2dn/2dnZ/9nZ2f/Z2dn/2dnZ/9jZ2f/Y2Nj/2NjY/9jY1//X19f/1dTV/9LS0v/R0tH/0tLS/9LR - 0f/R0dD/0NHQ/9DQ0P/Q0M//z8/P/8/Pz//Oz8//zs/O/87Ozv/Nzc7/zc3N/83Nzf/Nzc3/zc3N/83N - zP/MzMz/zMzM/8vMzP/Ly8v/y8vL/8vKy//Kysr/ysrK/8nJyf/Jycn/ycnJ/8jIyP/IyMj/zc3N/9jY - 2P/l5eX/8fHx//r6+uP9/f0c/Pz8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9/f0A/f39HPz8/OP4+Pj/8vLy/+zr - 7P/n5+f/5eXl/+Tl5f/k5OT/5OTk/+Tk4//j4+P/4+Pj/+Pj4//j4+P/4uPj/+Li4v/h4uL/4eLh/+Hh - 4f/h4eH/4eDg/+Dg4P/f4OD/39/f/9/f3//f39//39/f/9/f3//f3t//3t7e/97e3v/d3d3/3d3c/9zd - 3f/c3Nz/3Nzc/9zc3P/c3Nz/3Nzc/9vb3P/b29v/29vb/9ra2v/a2tr/2dra/9nZ2f/Z2dn/2dnZ/9jZ - 2f/Z2Nn/2NjY/9XV1f/T09P/09PT/9PT0//S0tL/0tLS/9HS0f/R0dH/0dHR/9DQ0P/Q0ND/z9DQ/8/Q - z//Pz8//zs/P/87Ozv/Ozc7/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zMzM/8zMzP/My8z/y8vL/8vL - y//Kysr/ysrK/8nJyv/Jycn/ycnJ/8rLyv/S0tL/3d3d/+jp6f/z8/T/+/v74/7+/hz9/f0AAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP39/QD9/f0c/Pz84/j4+P/y8vL/7Ozs/+fn5//m5ub/5ebm/+Xl5f/l5eX/5OTk/+Tk - 5P/k5OT/4+Pj/+Pj4//j4+P/4+Pj/+Lj4//i4uL/4uLi/+Li4f/h4eH/4OHh/+Dh4P/g4OD/4ODg/9/f - 3//f39//39/f/9/f3//f3t//397e/97e3v/e3t7/3d3d/93d3f/d3N3/3dzc/9zc3P/c3Nz/3Nzc/9zc - 3P/b29z/29vb/9rb2//a2tr/2tra/9ra2v/Z2dn/2dnZ/9nZ2f/Y2Nj/1tbW/9bW1v/V1tX/1dXV/9XV - 1f/V1dX/1dTU/9TU1P/U1NT/1NTT/9PT0//T09P/09PS/9LS0v/S0tL/0tLS/9HR0f/R0dH/0dHQ/9HQ - 0P/Q0ND/0NDQ/9DQ0P/Q0ND/z8/P/8/Pz//Pz8//zs7P/87Ozv/Ozc3/zc3N/83Nzf/Ozs7/09PT/9vb - 2//l5eX/7+7u//f39//7+/vg+fn5G/n5+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39AP39/Rz8/Pzj+Pj4//Ly - 8v/t7e3/6Ojo/+bm5v/m5ub/5ebm/+Xl5v/l5eX/5eXk/+Tk5P/k5OT/4+Tj/+Pj4//j4+P/4+Pj/+Pj - 4//j4uP/4uLi/+Li4f/h4uH/4eHi/+Hh4f/h4OD/4ODg/+Df4P/g39//39/f/9/f3//f39//39/f/97f - 3v/e3t7/3t7e/93d3v/d3d3/3d3d/9zc3P/c3Nz/3Nzc/9zc3P/c3Nz/29vb/9vb2//b29v/2trb/9ra - 2v/a2dn/2tra/+Dg4P/h4uH/4eHh/+Hh4f/h4eD/4OHg/+Dg4P/g4OD/4ODg/+Dg3//g39//39/f/9/f - 3//f39//39/f/97e3v/e3t7/3t7e/97e3v/d3d3/3d3d/93d3f/d3d3/3d3c/9zc3P/c3Nz/3Nzc/9vc - 3P/b29v/29vb/9vb2//b29v/3Nvb/9/f3//k5OX/6urq//Hx8f/39/f/+Pj49+Xl5YXAwMAH0dHRAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD9/f0A/f39HPz8/OP4+Pn/8/Pz/+3t7f/p6Oj/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5eX/5eXl/+Xk5f/k5OT/5OTk/+Pk4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Li4v/i4uL/4uLh/+Hh - 4f/h4eH/4ODg/+Dg4P/g4OD/4N/f/9/f3//f39//39/f/9/f3//f39//3t7e/97e3v/e3d3/3d3d/93d - 3f/d3Nz/3Nzc/9zc3P/c3Nz/3Nzc/9vc2//b3Nv/2tva/9ra2v/b29v/4eHh/+Tj4//j4+P/4+Lj/+Li - 4v/i4uL/4uLi/+Li4v/i4uH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4OH/4ODg/+Dg4P/g4OD/4ODg/+Dg - 4P/f4N//39/f/9/e3//e3t7/3t7e/97e3v/e3t7/3d7e/93d3f/d3d3/3d3d/97e3v/h4eH/5ubm/+zs - 7P/y8vL/+Pf4//j4+Pfk5OSHs7OzDcfHxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP39/QD9/f4c/Pz84/n4 - +f/z8/P/7u7u/+np6f/n5+f/5+fn/+bn5v/m5ub/5ubm/+bm5v/m5ub/5uXl/+Xl5f/l5eX/5OTk/+Tk - 5P/k5OT/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4uL/4uLi/+Li4f/h4eH/4eHh/+Hg4f/g4OD/4ODg/9/g - 3//f39//39/f/9/f3//f39//3t7f/97e3v/e3t7/3d3e/93d3f/d3dz/3Nzc/9zc3P/c3Nz/3Nzc/9zc - 3P/c29v/29vb/9zb3P/i4uL/5OTk/+Tk4//j4+P/4+Pj/+Pj4v/i4uL/4uLi/+Li4v/i4uL/4eHi/+Hh - 4f/h4eH/4eHh/+Hh4f/h4eH/4eDh/+Dg4P/g4OD/4ODg/9/g4P/f39//39/f/9/f3//e3t//3t7e/97e - 3v/e3t7/3t7e/93d3f/e3t//4uLi/+fn5//s7Oz/8vLy//j4+P/4+Pj25OTkh7Ozsw3Hx8cAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz9/f3j+fn5//T09P/u7u7/6urq/+jo6P/o5+j/5+fn/+fn - 5//m5ub/5ubm/+bm5v/m5ub/5ubm/+Xm5f/l5eX/5eXk/+Tk5P/k5OT/5OTk/+Pj4//j4+P/4+Pj/+Pj - 4//j4+P/4uLj/+Li4v/i4uL/4eHi/+Hh4f/h4OH/4ODg/+Dg4P/f4N//39/f/9/f3//f39//39/f/9/e - 3//e3t7/3t7e/97d3v/d3d3/3d3d/9zd3f/c3Nz/3Nzc/9zc3P/c3Nz/3Nzc/+Li4v/k5OT/5OTk/+Tk - 5P/k4+T/5OPj/+Pj4//j4+L/4uLj/+Li4v/i4uL/4uLi/+Li4v/h4eL/4eHh/+Hh4f/h4eH/4eHh/+Dh - 4f/g4OD/4ODg/+Dg4P/g4OD/3+Dg/9/g3//f39//3t/f/97e3v/e3t7/39/f/+Pi4v/n5+f/7O3t//Ly - 8v/4+Pj/+Pj49ebm5oGzs7MMycnJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7/HP39 - /eP5+fn/9PT0/+/u7//q6ur/6Onp/+jp6P/o6Oj/6Ojo/+fn5//n5+f/5+fm/+bm5v/m5ub/5ubm/+bm - 5v/m5eb/5eXl/+Xl5f/k5OT/5OTk/+Tk5P/j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4v/i4uL/4uLi/+Hh - 4f/h4eH/4OHh/+Dg4P/g4OD/4ODg/9/f3//f39//39/f/9/f3//f39//3t7e/97e3v/d3t7/3d3e/93d - 3f/c3N3/3Nzc/9zc3P/c3Nz/4uPi/+Xl5f/k5OT/5OTk/+Tk5P/k5OT/4+Tk/+Pj4//j4+P/4+Lj/+Li - 4v/i4uL/4uLi/+Li4v/i4uL/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/h4eD/4ODg/+Dg4P/g4OD/4ODg/+Dg - 3//f39//39/f/+Dg4P/k4+P/6Ojo/+3t7f/y8vL/+Pj4//j4+PXm5uaBs7OzC8nJyQAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v4c/f394/n5+f/09PT/7+/v/+vq6//p6en/6enp/+np - 6f/o6Oj/6Ojo/+jn6P/n5+f/5+fn/+bn5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+Xl5f/l5eX/5eTl/+Tk - 5P/k5OT/4+Tj/+Pj4//j4+P/4+Pj/+Pj4//i4+L/4uPi/+Li4v/h4uH/4eHh/+Hh4f/g4eD/4ODg/+Df - 4P/f39//39/f/9/f3//f39//39/f/97e3//e3t7/3d7e/93d3f/d3d3/3N3c/93d3f/j4+P/5eXl/+Xk - 5f/l5eT/5eTk/+Tk5P/k5OT/5OTk/+Pk5P/k4+T/4+Pj/+Lj4//i4uL/4uLi/+Li4v/i4uL/4uLi/+Li - 4f/h4eH/4eHh/+Hh4f/h4eH/4OHh/+Dg4f/g4OD/4ODg/+Dg4P/h4eH/5OTk/+jo6P/t7e3/8/Py//j4 - +P/4+Pj15ubmgbOzswvJyckAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+ - /hz9/f3j+fn5//T09P/v7+//6+vr/+np6f/p6en/6enp/+np6f/p6ej/6Ono/+jo6P/o6Oj/5+fn/+fn - 5//n5+f/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eXl/+Tk5f/k5OT/5OTk/+Pj4//j4+P/4+Pj/+Pj - 4//j4+P/4uLj/+Li4v/i4uL/4uLh/+Hh4f/h4eH/4ODh/+Dg4P/g4OD/39/f/9/f3//f39//39/f/9/f - 3//f3t7/3t7e/93e3v/d3d3/3t3d/+Pj4//l5eX/5eXl/+Xl5f/l5eX/5OTl/+Tk5P/k5OT/5OTk/+Tk - 5P/k5OT/4+Tj/+Pj4//j4uP/4+Li/+Li4v/i4uL/4uLi/+Li4f/h4uH/4eHh/+Hh4f/h4eH/4eHh/+Dh - 4P/g4OD/4eHh/+Tk5P/p6On/7e3t//Pz8//4+Pj/+fn59Obm5oGzs7MLycnJAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+HP39/eP5+vr/9fX1/+/w8P/s7Oz/6urq/+rq - 6v/q6en/6enp/+np6f/p6en/6enp/+jo6P/o6Oj/5+jo/+jn6P/n5+f/5+bn/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5eXl/+Xl5f/k5eX/5OTk/+Pk5P/j4+T/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//i4uL/4uLi/+Hh - 4v/h4eH/4eHh/+Dg4f/g4OD/4ODg/9/g3//f39//39/f/9/f3//f39//3t7e/97e3v/e3t7/5OTk/+bm - 5v/l5eb/5eXl/+Xl5f/l5eX/5eXl/+Xl5P/l5eT/5OTk/+Tk5P/k5OT/5OTk/+Tj5P/j4+P/4+Pj/+Li - 4v/i4uL/4uLi/+Li4v/i4uL/4eLi/+Hh4f/h4eH/4eHh/+Li4v/l5eX/6enp/+7u7v/z8/P/+Pj4//n5 - +fPo6Oh8sbGxCsrKygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ - /gD+/v4c/f394/r6+v/19fX/8PDw/+zs7P/r6+v/6urr/+rq6v/q6un/6enp/+np6f/p6en/6enp/+jp - 6f/o6On/6Ojo/+jn6P/n5+f/5+fn/+fm5//m5ub/5ubm/+bm5v/m5ub/5ubm/+bl5f/l5eX/5eXl/+Tk - 5P/k5OT/5OPk/+Tj4//j4+P/4+Pj/+Pj4//j4+P/4uPi/+Li4v/i4eH/4eHh/+Hh4f/g4eH/4ODg/+Dg - 4P/f3+D/39/f/9/f3//f39//397f/9/f3//k5OT/5ubm/+bm5v/m5ub/5ubl/+bl5f/l5eX/5eXl/+Xl - 5f/l5eX/5eXk/+Xk5P/k5OT/5OTk/+Tk5P/k5OT/4+Pj/+Pj4//i4+P/4uLi/+Li4v/i4uL/4uLi/+Li - 4f/i4uL/5ebm/+rq6v/u7u7/8/Tz//j4+P/5+fnz6Ojoe7GxsQnKysoAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz9/f3j+vr6//X19f/w8PH/7e3t/+zs - 6//r6+v/6+vr/+rr6v/q6ur/6urq/+nq6v/p6en/6enp/+np6f/p6en/6ejo/+jo6P/o6Oj/5+jo/+fn - 5//n5+f/5+bm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eXl/+Tl5f/k5eT/5OTk/+Tj5P/j4+P/4+Pj/+Pj - 4//j4+P/4+Pj/+Lj4v/i4uL/4uLi/+Hh4v/h4eH/4OHg/+Dg4P/g4OD/3+Df/9/f3//f39//39/f/+Xl - 5f/n5+b/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5P/k5OT/5OTk/+Tk - 5P/k5OT/5OTk/+Pj4//j4+P/4+Li/+Li4v/i4uL/4+Pj/+bm5v/q6ur/7+7v//T09P/4+Pj/+fn58+jo - 6HuxsbEJysrKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD+/v4A/v7+HP39/eP6+vr/9vb2//Hx8f/u7e3/7Ozs/+zs7P/s7Ov/6+vr/+vr6//q6+v/6urq/+rq - 6v/p6un/6enp/+np6f/p6en/6enp/+jp6P/o6Oj/6Ojo/+jo5//n5+f/5+bn/+fm5//m5uf/5ubm/+bm - 5v/m5ub/5eXl/+Xl5f/l5eX/5OXl/+Tk5P/j4+T/4+Pj/+Pj4//j4+P/4+Pj/+Lj4//i4uL/4uLi/+Li - 4v/h4eH/4eHh/+Hh4f/g4OD/4ODg/+Df4P/g4OD/5eXl/+fo5//n5+f/5+fn/+bm5v/m5ub/5ubm/+bm - 5v/m5eb/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/k5OX/5OTk/+Tk5P/k5OT/5OTk/+Tj5P/j4+P/4+Pj/+Tk - 5P/m5uf/6+vr/+/v7//09PT/+Pj4//n5+fLo6Oh6sbGxCcrKygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v4c/f394/r6+v/29vb/8fLy/+7u - 7v/t7e3/7e3t/+zt7f/s7Oz/7Ozs/+vr7P/r6+v/6+vr/+rq6v/q6ur/6urp/+np6f/p6en/6enp/+np - 6f/p6en/6Ojo/+jo6P/o6Oj/5+fn/+fn5//n5uf/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eX/5eTl/+Xk - 5P/k5OT/5OTk/+Pj4//j4+P/4+Pj/+Pj4//j4+L/4uLi/+Li4v/i4uL/4eHh/+Hh4f/h4OH/4ODg/+Dg - 4P/m5ub/6Ojo/+jo6P/n6Of/5+fn/+fn5v/m5ub/5ubm/+bm5v/m5ub/5ebm/+Xl5f/l5eX/5eXl/+Xl - 5f/l5eX/5eXk/+Tk5P/k5OT/5OTk/+Tk5P/l5OT/5+fn/+vr6//v7/D/9PT0//j4+f/5+fny6urqdq6u - rQjKysoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/v7+AP7+/hz9/f3j+vr6//b29v/y8vL/7u/u/+3t7f/t7e3/7e3t/+3t7f/t7O3/7Ozs/+zs - 7P/r7Ov/6+vr/+vr6//q6ur/6urq/+nq6v/p6en/6enp/+np6f/p6en/6Onp/+jp6P/o6Oj/6Ojo/+fn - 6P/n5+f/5+fm/+bm5v/m5ub/5ubm/+bm5v/m5eb/5eXl/+Xl5f/k5OT/5OTk/+Tk5P/k4+P/4+Pj/+Pj - 4//j4+P/4+Pj/+Li4v/i4uL/4uHi/+Lh4v/h4eH/4eHh/+bm5v/o6Oj/6Ojo/+jo6P/n6Oj/5+fn/+fn - 5//n5+f/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5eb/5eXl/+Xl5f/l5eX/5eXl/+Xl5P/k5OT/5eXl/+fo - 6P/r6+v/8PDw//T09f/5+fn/+fn58urq6nasrKwIy8vKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+HP39/eP6+vv/9/b3//Ly - 8v/v7+//7u7t/+3t7f/t7e3/7e3t/+3t7f/t7e3/7O3s/+zs7P/s7Oz/6+zr/+vr6//r6uv/6urr/+rq - 6v/q6un/6erp/+np6f/p6en/6enp/+np6f/o6On/6Ojo/+fo6P/n5+f/5+fn/+fm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+Xl5f/l5eX/5OXk/+Tk5P/k5OT/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//i4+L/4uLi/+Lh - 4v/i4uL/5+fn/+np6f/p6ej/6Ojo/+jo6P/o6Oj/6Ojo/+fo5//n5+f/5+fn/+fm5//m5ub/5ubm/+bm - 5v/m5ub/5uXm/+Xl5f/l5eX/5eXl/+Xl5v/o6Oj/7Ozs//Dw8P/19fX/+fn5//r5+vLq6up2rKysCMrK - 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 + vwXE4CgBQThOOEFA2U9y+jXEALFATBwjMKDM4B4xQ+yw8IwRfl5Px9Jexp546vPg0f4+s1Re+dtgZDqZ + r10CmmJsIWZsgL4ZLQJWZaHcLM9klRajtqwhoB9HKwF4a4vT/9DyJxaICWKDgT0+SEPMEDvEEA8VKj4t + Tfr6LE9nbYpX/JKYCgGFwgAh6szKQQZn6KfRZOPDjLQMGLihYBm9ZdUWA4hO/4UYIBaICWKDNfzM5xMz + xA6tSh4qxBQV35v7JTYKhcJBCGgRsHoQxUYMWJpJYdI64B0DFC4wduD0X4gBdpsSE8QGDw2e9MQMsUMM + EUvElFf8DjBtDagQMDpLq4BxAroIKDkFywxCCAM6Tv8hXv7EBLFBhedJT8wQO1rxvbnfgRaKAeMEQIEC + TTnHUTQuiBGt8F7pu8woTMdJws3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N + zc3Nzc3Nzc3Nza2M9r73/T9XFdyT+zuuLAAAAABJRU5ErkJggigAAACAAAAAAAEAAAEAIAAAAAAAAAAC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP7+/gD+/v4c/f394/v6+//39/f/8/Pz//Dw8P/v7+7/7u7u/+7u7v/u7e7/7e3t/+3t - 7f/t7e3/7e3t/+zt7P/s7Oz/7Ozs/+vr7P/r6+v/6+vr/+rq6v/q6ur/6urq/+rp6f/p6en/6enp/+np - 6f/p6en/6Ojo/+jo6P/o6Of/5+fn/+fn5//m5uf/5ubm/+bm5v/m5ub/5ubm/+bm5v/l5uX/5eXl/+Xk - 5f/k5OT/5OTk/+Tj5P/j4+P/4+Pj/+Pj4//j4+P/4+Li/+Pj4//n5+f/6enp/+np6f/p6en/6ejp/+jo - 6P/o6Oj/6Ojo/+jo6P/o6Of/5+fn/+fn5//n5uf/5ubm/+bm5v/m5ub/5ubm/+Xm5v/m5ub/6enp/+zs - 7P/x8PD/9fX1//n5+f/6+vrw6+vrdKysrAjKysoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz9/f3j+/v7//f3 - 9//z9PP/8PDw/+/v7//v7+//7+/v/+7u7v/u7u7/7u3t/+3t7f/t7e3/7e3t/+3t7f/s7e3/7Ozs/+zs - 7P/r7Ov/6+vr/+vr6//r6uv/6urq/+nq6f/p6en/6enp/+np6f/p6en/6enp/+np6P/o6Oj/6Ojo/+fn - 5//n5+f/5+fn/+bm5v/m5ub/5ubm/+bm5v/l5ub/5eXl/+Xl5f/k5eX/5OXk/+Tk5P/k4+P/4+Pj/+Pj - 4//j4+P/4+Pj/+jo5//p6un/6enp/+np6f/p6en/6enp/+np6f/o6Oj/6Ojo/+jo6P/o6Oj/6Ofn/+fn - 5//n5+f/5ubn/+bm5v/m5ub/5+fn/+np6f/t7e3/8fHx//X19f/5+fn/+vr68Ozs7HCrq6sHzc3NAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD+/v4A/v7+HP39/eP7+/v/+Pf3//T09P/x8fH/8PDw//Dw8P/v8O//7+/v/+/v - 7//u7u7/7u7u/+3u7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+zs7P/r7Oz/7Ozs/+vr6//r6+r/6+rq/+rq - 6v/q6ur/6enp/+np6f/p6en/6enp/+np6f/p6Oj/6Ojo/+jo6P/n5+f/5+fn/+fn5//m5ub/5ubm/+bm - 5v/m5ub/5ubm/+Xl5v/l5eX/5eXl/+Tk5P/k5OT/5OTk/+Pj4//j4+T/6Ojo/+rq6v/p6un/6enp/+np - 6f/p6en/6enp/+np6f/o6On/6Ojo/+jo6P/o6Oj/6Ojo/+jo5//n5+f/5+fn/+fn6P/q6ur/7e3t//Hx - 8f/19fX/+fn5//r6+vDs7OxwqqqqBs7OzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v4c/f394/v7 - +//4+Pj/9PT0//Hx8f/w8PD/8PDw//Dw8P/w8PD/7+/w/+/v7//v7+//7u7u/+7u7v/u7u3/7u3t/+3t - 7f/t7e3/7e3t/+3t7f/s7e3/7Ozs/+zs6//r6+v/6+vr/+vr6v/q6ur/6urq/+np6f/p6en/6enp/+np - 6f/p6en/6ejp/+jo6P/o6Oj/5+fn/+fn5//n5+f/5ufm/+bm5v/m5ub/5ubm/+bm5v/l5eb/5eXl/+Xk - 5f/k5OT/5OTk/+Tk5P/o6Oj/6urq/+rq6v/q6ur/6urq/+rq6v/p6en/6enp/+np6f/p6en/6ejp/+jo - 6P/o6Oj/6Ojo/+jo6P/o6Oj/6+rq/+7u7v/y8vL/9fX2//n5+f/6+vrw7OzscKqqqgbOzs4AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz9/f3j+/v7//j4+P/19fX/8vLy//Hx8f/w8PD/8PDw//Dw - 8P/w8PD/8PDw//Dv7//v7+//7+/v/+7u7v/u7u7/7u3u/+3t7f/t7e3/7e3t/+3t7f/t7ez/7Ozs/+zs - 7P/s7Oz/6+vr/+vr6//r6ur/6uvq/+rq6v/q6en/6enp/+np6f/p6en/6enp/+no6f/o6Oj/6Ojo/+fn - 6P/n5+f/5+fm/+fm5//m5ub/5ubm/+bm5v/m5ub/5ubm/+Xl5f/l5eX/5eXl/+np6f/r6+v/6urq/+rq - 6v/q6ur/6urq/+rq6v/p6er/6enp/+np6f/p6en/6enp/+no6f/o6Oj/6enp/+vr6//u7u7/8vLy//b2 - 9v/5+vr/+/v77+3u7W6qqqoGzs7OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+HP39 - /eP7+/v/+Pj4//X19f/y8vP/8fHy//Hx8f/x8fH/8fDw//Dw8P/w8PD/8PDw//Dw8P/v8PD/7+/v/+/v - 7//v7u//7u7u/+7u7v/t7e3/7e3t/+3t7f/t7e3/7e3t/+zs7f/s7Oz/7Ozs/+vr6//r6+v/6+vr/+rq - 6v/q6ur/6erq/+np6f/p6en/6enp/+np6f/p6en/6Ojo/+jo6P/n6Oj/5+fn/+fn5//n5ub/5ubm/+bm - 5v/m5ub/5ubm/+Xl5f/m5uX/6urq/+zs6//r6+v/6+vr/+rq6v/q6ur/6urq/+rq6v/q6ur/6enp/+np - 6f/p6en/6enp/+np6f/s6+z/7+7v//Ly8v/29vb/+vr6//v7++/v7+9roKCfBc7OzgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v4c/f394/v7/P/5+fn/9vb2//Pz8//y8vL/8vLy//Hx - 8v/x8fH/8fHx//Hw8P/w8PD/8PDw//Dw8P/w8PD/8O/w/+/v7//v7+//7u7u/+7u7v/u7u7/7e3t/+3t - 7f/t7e3/7e3t/+3s7f/t7Oz/7Ozs/+zs7P/r7Ov/6+vr/+vr6//q6ur/6urq/+nq6f/p6en/6enp/+np - 6f/p6en/6enp/+jo6f/o6Oj/6Ojn/+fn5//n5+f/5+bm/+bm5v/m5ub/5ubm/+bm5v/q6+r/7Ozs/+zs - 7P/r7Ov/6+vr/+vr6//q6ur/6urq/+rq6v/q6ur/6urq/+nq6f/q6ur/7Ozs/+/w7//z8vP/9vb2//r6 - +v/7+/vv7+/va6CgoAXOzs4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+ - /hz9/f3j/Pz8//n5+f/29vb/8/P0//Pz8//z8/P/8vPy//Ly8v/y8vL/8fHx//Hx8f/x8PH/8PDw//Dw - 8P/w8PD/8PDw//Dv8P/v7+//7+/u/+7v7v/u7u7/7u7u/+7t7f/t7e3/7e3t/+3t7f/t7e3/7Ozt/+zs - 7P/s7Oz/6+zs/+vr6//r6+v/6uvq/+rq6v/q6ur/6erp/+np6f/p6en/6enp/+np6f/o6Oj/6Ojo/+fo - 6P/o5+f/5+fn/+fm5//m5ub/5ubm/+vr6//s7Oz/7Ozs/+zs7P/s7Oz/6+zs/+vr6//r6+v/6+rr/+rq - 6v/q6ur/6+vr/+zt7f/w8PD/8/Pz//b39v/6+vr/+/v77+/v72ugoKAFzs7OAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+HP39/eP8/Pz/+fn5//b29//09PT/8/Pz//Pz - 8//z8/P/8/Pz//Ly8v/y8vL/8vLy//Lx8f/x8fH/8PDx//Dw8P/w8PD/8PDw//Dw8P/v8PD/7/Dv/+/v - 7//u7+7/7u7u/+7u7v/u7e7/7e3t/+3t7f/t7e3/7e3t/+3t7f/s7Oz/7Ozs/+vs6//r6+v/6+vr/+rq - 6v/q6ur/6unq/+np6f/p6en/6enp/+np6f/o6en/6Ono/+jo6P/o6Of/5+jo/+fn5//n5+f/6+vr/+3t - 7f/s7e3/7Ozs/+zs7P/s7Oz/7Ozs/+vs7P/r6+v/6+vr/+zs7P/u7u7/8fDx//P08//39/f/+vr6//v7 - ++3w8PBpoKCgBc7OzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ - /gD+/v4c/f394/z8/P/5+vn/9/f3//X09P/09PT/8/P0//Pz8//z8/P/8/Pz//Lz8//z8vL/8vLy//Ly - 8v/x8fH/8fHx//Hw8f/w8PH/8PDw//Dw8P/w8PD/8PDw/+/w7//v7+//7+/v/+7u7//u7u7/7e3t/+3t - 7f/t7e3/7e3t/+3t7f/t7ez/7O3s/+zs7P/r6+z/6+vr/+rr6//q6uv/6urq/+rq6v/p6en/6enp/+np - 6f/p6en/6ejp/+no6f/o6Oj/6Ojo/+jo6P/s7Oz/7e3t/+3t7f/t7e3/7e3s/+zs7P/s7Oz/7Ozs/+zs - 7P/t7e3/7+/v//Hx8f/09PT/9/j3//r6+v/7+/vt8vLyZpycnAPU1NQAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz9/f3j/Pz8//r6+v/49/f/9fb1//T0 - 9P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8vLz//Ly8v/y8vL/8fHy//Hx8f/x8PH/8PDw//Dw - 8P/w8PD/8PDw//Dw8P/w7+//7+/v/+/v7//u7u7/7u7u/+3u7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+zs - 7P/s7Oz/6+zs/+vr6//r6+v/6urr/+rq6v/q6ur/6enp/+np6f/p6en/6enp/+no6f/o6ej/6eno/+zs - 7P/t7u3/7e3t/+3t7f/t7e3/7e3t/+zs7f/s7O3/7e3t//Dw8P/y8vL/9fX1//j4+P/7+/v/+/v77fLy - 8macnJwD1NTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAD+/v4A/v7+HP39/eP8/Pz/+vr6//j4+P/29vb/9vb1//X19f/19fX/9PT0//T09P/z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Lz8v/y8vL/8vLy//Hx8v/x8fH/8fHw//Dw8P/w8PD/8PDw//Dw8P/w8PD/7+/w/+/v - 7//v7+//7u7v/+7u7v/u7u7/7e3t/+3t7f/t7e3/7e3t/+zt7f/s7Oz/7Ozs/+vs7P/r6+z/6+vr/+rr - 6//q6ur/6urq/+rp6v/p6en/6enp/+np6f/p6en/7e3t/+7u7v/u7u7/7e3t/+3t7f/t7e3/7e3t/+7u - 7v/w8PD/8/Pz//b29v/5+fn/+/v7//r6+u3y8vJmnJycA9TU1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v4c/f394/z8/P/6+vv/+Pj4//f3 - 9//29vb/9vb1//X19v/19fX/9fT1//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8v/z8vL/8vPy//Hy - 8v/y8vH/8fHx//Hx8f/w8PD/8PDw//Dw8P/w8PD/8PDw//Dv8P/v7+//7+/v/+7u7v/u7u7/7u7t/+3t - 7f/t7e3/7e3t/+3t7f/t7e3/7O3s/+zs7P/r7Oz/6+vr/+vr6//q6+v/6urq/+rq6v/p6er/6enp/+np - 6f/t7e3/7u7u/+7u7v/u7u7/7u7u/+3t7v/v7+7/8fHx//Tz8//29vb/+fn5//z8/P/v7+/r2dnZY7e3 - twTU1NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/v7+AP7+/hz9/v3j/fz8//v7+//5+fn/9/f3//f39//39vb/9vb2//b19v/19fX/9fX1//T1 - 9f/09PT/9PT0//Tz8//z8/P/8/Pz//Pz8//z8/P/8vPz//Ly8v/y8vL/8vHx//Hx8f/x8fH/8PDw//Dw - 8P/w8PD/8PDw//Dw8P/w7+//7+/v/+/v7//u7u7/7u7u/+3u7v/t7e7/7e3t/+3t7f/t7e3/7e3t/+zt - 7P/s7Oz/7Ozs/+vr6//r6+v/6+vq/+rq6v/q6ur/6urq/+7u7f/v7+//7u7v/+7u7v/u7u7/7+/v//Hx - 8f/09PT/9/f2//r5+v/8/Pz/7+/v69PT02CEhIQCu7u7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+HP7+/uP9/f3/+/v7//n5 - +f/3+Pj/9/f3//f39//39/f/9vb3//b29v/29vb/9fX2//X19f/19fX/9PT0//T09P/z9PP/8/Pz//Pz - 8//z8/P/8/Pz//Lz8//y8vL/8vLy//Ly8f/x8fH/8fHx//Hw8P/w8PD/8PDw//Dw8P/w8PD/8PDw/+/v - 7//v7+//7u7v/+7v7v/u7u7/7u3u/+3t7f/t7e3/7e3t/+3t7f/s7ez/7Ozs/+zs7P/s6+v/6+vr/+rr - 6//r6uv/7u7u//Dw8P/v7/D/7+/v//Dw8P/y8vL/9PT0//f39//6+vr//Pz8/+/v7+vT09NghISEAru7 - uwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAP7+/gD+/v4c/v7+4/39/f/7+/v/+vr6//j4+P/39/f/9/f3//f39//39/f/9/f3//b3 - 9//29vb/9vb2//X19v/19fX/9fX1//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8vP/8/Ly//Ly - 8v/y8fL/8fHx//Hx8f/x8fH/8PDx//Dw8P/w8PD/8PDw/+/w7//v7+//7+/v/+7v7//u7u7/7u7u/+3t - 7f/t7e3/7e3t/+3t7f/t7e3/7O3t/+zs7P/s7Oz/6+vr/+vr6//v7+7/8PDw//Dw8P/x8fD/8vLy//X1 - 9f/49/f/+vr6//z8/P/v7+/q09PTYISEhAK7u7sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz+/v7j/f39//z8 - +//6+vr/+fn5//j4+P/3+Pj/+Pf4//f39//39/f/9/f3//f39//29/f/9vb2//b29v/29fX/9fX1//X1 - 9P/09fT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly8//y8vL/8vLy//Hx8f/x8fH/8PHx//Dw - 8P/w8PD/8PDw//Dw8P/w7/D/7+/v/+/v7//u7+//7u7u/+7u7v/u7u3/7e3t/+3t7f/t7e3/7e3t/+3t - 7P/s7Oz/7Ozs/+/v7//w8PD/8fHx//Pz8//19fX/+Pj4//r6+v/8/Pz/7+/v6dPT012CgoICurq6AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD+/v4A/v7+HP7+/uP9/f3//Pz8//v6+v/6+fr/+fn5//n5+f/4+Pj/+Pj4//j4 - +P/39/f/9/f3//f39//39/f/9/f2//b29v/29vb/9fb2//X19f/19fX/9PT1//T09P/09PT/8/P0//Pz - 8//z8/P/8/Pz//Py8//y8vL/8vLy//Hy8v/x8fL/8fHx//Hx8P/w8PD/8PDw//Dw8P/w8PD/7/Dw/+/w - 7//v7+//7+/v/+7u7v/u7u7/7u7u/+3t7f/t7e3/7e3t/+3t7f/t7e3/8O/v//Ly8v/z8/P/9fX1//j4 - +P/6+vr//Pz8/+/v7+nU1NRcenp6Ar29vQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/gD+/v4c/v7+4/39 - /f/8/Pz/+/v7//r6+v/6+vr/+fn5//n5+f/5+fn/+Pj4//j4+P/39/j/9/f3//f39//39/f/9/f3//f3 - 9//29vb/9vb2//b29f/19fX/9fX1//X09P/09PT/9PT0//P08//z8/P/8/Pz//Pz8//z8/P/8/Lz//Ly - 8v/y8fL/8fHy//Hx8f/x8fH/8PDw//Dw8P/w8PD/8PDw//Dw7//v7+//7+/v/+7v7//u7+7/7u7u/+7t - 7v/t7e3/7e3t/+3t7f/x8fH/9PT0//b29v/4+Pj/+vr6//39/f/v7+/p1NTUXHp6egK9vb0AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/v7+AP7+/hz+/v7j/f39//39/f/7+/z/+/r6//r6+v/6+vr/+vr6//n5 - +v/5+fn/+fn5//j5+P/3+Pj/9/j4//f39//39/f/9/f3//f39//39/b/9vb2//b29v/29vb/9fX1//X1 - 9f/09PX/9PT0//T09P/z8/T/8/Pz//Pz8//z8/P/8/Lz//Py8//y8vP/8vLy//Hy8v/x8fH/8fHx//Dw - 8P/w8PD/8PDw//Dw8P/w8PD/7/Dw/+/v7//v7+7/7u7u/+7u7v/u7u7/7+/v//Pz8//29vb/+Pn5//v7 - +//9/f3/8PDv6dTU1Ft6enoCvb29AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+/v4A/v7+HP7+ - /uP9/v7//f39//z8/P/7+/v/+vr6//r6+v/6+vr/+vr6//r6+v/6+vn/+fr5//n5+f/4+fj/+Pj4//j4 - +P/39/f/9/f3//f39//39/f/9/f3//f29//29vb/9vb1//X19v/19fX/9fX1//T09P/09PT/9PT0//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8vLy//Ly8v/x8vL/8fHx//Hx8f/x8fD/8PDw//Dw8P/w8PD/8PDw/+/w - 7//v7+//7+/v//Dv8P/y8vL/9vb2//n5+f/7+/v//f39/+/v7+fU1NRYenl6Ab+/vwAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAGAAAA + CAAAAAoAAAAKAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAA + CwAAAAsAAAALAAAACwAAAAsAAAALAAAACgAAAAoAAAAIAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8c/v7+4/7+/v/9/f3//f39//z8/P/7/Pv/+/v7//v7 - +//7+/v/+/r6//r6+v/6+vr/+vr6//r6+v/5+fn/+fn5//n5+f/5+fn/+fj5//j4+P/4+Pj/+Pj4//j3 - +P/49/f/9/f3//b39//29/b/9vb2//b29v/29vb/9fX2//X19f/19fX/9fX1//T09f/09PX/9PT0//T0 - 9P/09PT/8/Pz//Pz8//z8/P/8vPy//Ly8v/y8vL/8vLy//Hy8v/y8vL/8/Pz//X19f/4+Pj/+/v7//39 - /f/v7+/n09PTV11dXQG7u7sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAAAQAAAALAAAAFAAAAB4AAAAlAAAAKwAAACwAAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAA + LQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAtAAAALQAAAC0AAAAsAAAA + KgAAACUAAAAdAAAAFAAAAAsAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1dXVAM3N - zRvs7Ozh//////7+/v/9/f3//f39//39/f/9/Pz//Pz9//z8/P/8/Pz//Pz8//v8/P/7/Pz/+/v7//v7 - +//7+/v/+/v6//r7+v/6+vr/+vr6//r6+v/6+vr/+vr6//r5+f/5+fn/+fn5//n5+f/5+fn/+fn5//j4 - +f/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/39/j/9/f3//f39//39/f/9vb2//b29v/29vb/9vb2//b2 - 9v/29vX/9fb2//b29v/39/f/+Pj5//v7+//9/f3/7+/v59PT01ddXV0Bu7u7AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAAFwAAACoAAABBAAAA + VAAAAGEAAABpAAAAbAAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAA + bQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAGwAAABpAAAAYQAAAFIAAABBAAAALAAAABkAAAAMAAAA + AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAEAAAADwAAACMAAABBAAAAYgAAAIGmpqbN/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + //7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+ + ///////+/v7/p6enzAAAAIEAAABlAAAARgAAACoAAAATAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChoaEAd3d3CuLi4qn+/v7//v7+//7+/v/+/v7//v7+//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pz9//z8/f/8/fz//Pz8//z8/P/8/Pz//Pz8//z8 - /P/8/Pz//Pz8//z8/P/7+/z/+/v8//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//r6 - +//6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr5//n6+f/5+fn/+vr6//r6+v/8/Pv//f39//Dw - 8ObT09NXXV1dAbu7uwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABEAAAArAAAAUgAAAHz///////// + //7+/v+YmJj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5mZmf////////////////8AAACEAAAA + XAAAADcAAAAaAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFh - YQDb29sAzMzMMfDw8Mb39/f9/f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v3+//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f38//z9/P/8/Pz//Pz8//z8 - /P/8/Pz//Pz8//z8/P/8/Pz//f39//39/f/v7+/l1NTUU0ZGRgG+vr4AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAIAAAAPAAAALAAAAFgAAACL//////v7+/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/5OTk///////Y2NjlAAAAawAAAD0AAAAbAAAACAAAAAEAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACUAAABTJSUllf////9LS0v/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC + ////////////AAAAbgAAADwAAAAYAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHp6egAAAAAAwsLCH8fHx2v39/d//v7+f/7+ - /n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+ - /n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+ - /n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5//v7+f/7+/n/+/v5/+fn5f9TU - 1EWCgoIBvLy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAQAAAAaAAAARQAAAID/////ExMT/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA///////+/v7/AAAAaAAAADQAAAAQAAAA + AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////////////////////wAAAAAAAAAAAAAA////// - 4AAAAAAAAAAAAAAH/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD - /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA - AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA - AAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP///// - wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD - /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA - AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA - AAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP///// - wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD - /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA - AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA - AAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP///// - wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD - /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA - AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA - AAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP///// - wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD - /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA - AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA - AAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP///// - wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD - /////8AAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAA - AAAAA//////AAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA//////AAAAA - AAAAAAAAAAf/////wAAAAAAAAAAAAAAP/////8AAAAAAAAAAAAAAH//////AAAAAAAAAAAAAAD////// - wAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAA///////AAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAP/ - /////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////wAAAAAAAAAAAAB///////8AAAAAAAAAA - AAA////////AAAAAAAAAAAAAf///////wAAAAAAAAAAAAP///////8AAAAAAAAAAAAH////////AAAAA - AAAAAAAD////////wAAAAAAAAAAAB////////8AAAAAAAAAAAA/////////AAAAAAAAAAAAf//////// - wAAAAAAAAAAAP////////8AAAAAAAAAAAH/////////AAAAAAAAAAAD/////////wAAAAAAAAAAB//// - /////8AAAAAAAAAAA//////////AAAAAAAAAAAf/////////wAAAAAAAAAAP/////////8AAAAAAAAAA - H//////////AAAAAAAAAAD//////////wAAAAAAAAAB//////////8AAAAAAAAAA///////////AAAAA - AAAAAf//////////wAAAAAAAAAP//////////8AAAAAAAAAH///////////AAAAAAAAAD/////////// - wAAAAAAAAB///////////8AAAAAAAAA////////////AAAAAAAAAf///////////4AAAAAAAAP////// - //////AAAAAAAAH//////////////////////////////4lQTkcNChoKAAAADUlIRFIAAAEAAAABAAgG - AAAAXHKoZgAAgABJREFUeNrtvTuwLdl5Hvb9q/c+cwfPIYEBxBFcGjwImpmrREOhiwQlMpACUZETSiLN - wIEjh1ZZlqXQkQMnNFVFBs4MB1JJRYKlWIJVZTuiBBT4KEBEYTjggMBwZu7ZvdbvYP3P1d37nHvPOffu - Bs6aunP27t29Xr3+9wt4bI/tsT22x/bYHttje2yP7bH9GDV62RO4TfvN3/zNzz558uSfP3ny5G/8vb/3 - 91592fP5cWtEhH/zb/7NN0sp/8XP//zPv/uy5/PY7q9dPAL47d/+7X/yq7/6q/8jM7/sqWw3BkAAg/37 - j0ojgOSY/Nt/+2+/+/Tp0y88IoEfnXbRCOC3f/u3/+mv/uqv/qO7Aj/r/4hBAC4ZlzzzypjAxA+CdIho - 8f0RCfxotYtFAL/1W7/107/2a7/29VsDvxFf9pW9IEDvDEAHxmEWz9gLwKGP55kJMwCSxd9h/dRJf0cC - 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 - A1cQLxcXdYCqViEQqHSt/1QOOBy7fupqmttsAAABnklEQVTq6qrrAo5HHKYjSpnwwQcffO0Bpn8v7WIR - wPX19W+UUr4+XicitNpEGdjAzCYWvPx2s3x706Mx1v9W/O4aID4Pm3xfO+CTv68eERN7GHtwq2Fc0blW - 2/B2o3sqNO+y99vF0C4GTGXCdJhwOBw6RyBiAJWC6+vr/+Zhd/3528UigF//9V//Rinln/yDf/AP/rFe - U6VgmxoO7AggyvL3cfajYszk8YciQy+4uWj7LID0jGMg+ztG2L1Tryn91w1l1B9i7+JaAJRBUV2mCYep - KwanqaBQwe/8zu/8s1//9V//xoub5bO1i0UAAPAP/+E//J8AQJGAbjSrI438exnNzXAj2/8Sye+zLSAr - ubY8Jy+2Bc9Cc1l+8bNXTX93AppA6CJqKQW/8zu/8z///b//9//x3Ud5uHa56snQfvM3f/OzT548+edP - njz5G7/yK7/yKoCXBvj7aZF1ftlzufSWtQFL1ogWv4zfusMP8H995Svvf/DBB//ugw8++LXf+I3f+KOX - vbLH9tge22N7bI/tsT22x/bYHttjC+3/B71iqRn22EDpAAAAAElFTkSuQmCC + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADQAAAC8AAABo/v7+/2tra/8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA////////////AAAAVgAAACQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAQAAAAZAAAASc3Nzdj+/v7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAB7AAAA + PQAAABMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAACgAAABi/////wMDA/8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8ZGRn/Gxsb/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8cHBz/Gxsb/woKCv8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/sbGx//////8AAABYAAAAIgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAPAAAANwAAAHj/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xcXF/8fHx//IyMj + /yUlJf8nJyf/Jycn/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo + /ycnJ/8nJyf/JiYm/yMjI/8gICD/Ghoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///// + /wAAAHEAAAAyAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABUAAABE/////4iIiP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8TExP/Hx8f/yUlJf8pKSn/Kysr/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8sLCz/Kioq/ycnJ/8iIiL/Gxsb + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/r6+v/ycnJ0gAAAEAAAAATAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAADAAAAGgAAAE/+/v7/Dw8P/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0dHf8kJCT/Kioq + /y4uLv8wMDD/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx + /zExMf8xMTH/MTEx/zAwMP8vLy//LCws/ygoKP8hISH/Ghoa/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /xEREf/+/v7/AAAATQAAABkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAeAAAAVv////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/ICAg/ycnJ/8tLS3/MTEx/zIyMv8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MjIy/zIyMv8wMDD/LCws + /yUlJf8eHh7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABVAAAAHQAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABQAAACAAAABa/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP8iIiL/KSkp + /y8vL/8yMjL/MzMz/zQ0NP80NDT/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/paWl + /zQ0NP80NDT/NDQ0/0tLS/+np6f/p6en/6enp/+np6f/NDQ0/zQ0NP80NDT/Q0ND/6enp/+np6f/p6en + /6enp/+np6f/p6en/6enp/+np6f/p6en/zQ0NP+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /0pKSv80NDT/NDQ0/6enp/+np6f/p6en/6enp/80NDT/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /6enp/+np6f/p6en/zQ0NP80NDT/MzMz/zExMf8uLi7/KCgo/yEhIf8HBwf/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD//////wAAAFkAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAIQAAAFv/////AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/GRkZ/yQkJP8rKyv/MTEx/zMzM/80NDT/NDQ0/zQ0NP+urq7/rq6u + /66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+rq6v/NDQ0/zQ0NP80NDT/TExM/66urv+urq7/rq6u + /66urv80NDT/NDQ0/zQ0NP9ERET/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/NDQ0 + /66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv80NDT/rq6u/66urv+urq7/rq6u + /zQ0NP+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/NDQ0/zQ0NP80NDT/MjIy + /y8vL/8qKir/IyMj/xkZGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAAWwAAACEAAAAFAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAUAAAAhAAAAW/////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8cHBz/JSUl + /ywsLP8xMTH/MzMz/zU1Nf81NTX/NTU1/6Ghof+hoaH/oaGh/6Ghof+hoaH/oqKi/7Ozs/+zs7P/s7Oz + /7CwsP81NTX/NTU1/zU1Nf9OTk7/s7Oz/7Ozs/+zs7P/s7Oz/zU1Nf81NTX/NTU1/0RERP+zs7P/s7Oz + /7Ozs/+zs7P/oaGh/7Ozs/+zs7P/s7Oz/7Ozs/80NDT/s7Oz/7Ozs/+zs7P/s7Oz/6CgoP+goKD/s7Oz + /7Ozs/+zs7P/s7Oz/zQ0NP+zs7P/s7Oz/7Ozs/+zs7P/NDQ0/7Ozs/+zs7P/s7Oz/7Ozs/+goKD/oKCg + /7Ozs/+zs7P/s7Oz/7Ozs/80NDT/NDQ0/zQ0NP8yMjL/MDAw/ysrK/8kJCT/Gxsb/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA//////8AAABbAAAAIQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwcHP8lJSX/LCws/zExMf8zMzP/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/urq6/7q6uv+6urr/t7e3/zU1Nf81NTX/NTU1/05OTv+6urr/urq6 + /7q6uv+6urr/NTU1/zU1Nf81NTX/RUVF/7q6uv+6urr/urq6/7S0tP81NTX/urq6/7q6uv+6urr/urq6 + /zU1Nf+6urr/urq6/7q6uv+6urr/NTU1/zU1Nf+6urr/urq6/7q6uv+6urr/NTU1/7q6uv+6urr/urq6 + /7q6uv81NTX/urq6/7q6uv+6urr/urq6/zU1Nf81NTX/urq6/7q6uv+6urr/urq6/zU1Nf81NTX/NTU1 + /zMzM/8xMTH/LCws/yUlJf8cHBz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/HBwc + /yUlJf8sLCz/MTEx/zMzM/81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf/BwcH/wcHB + /8HBwf++vr7/NTU1/zU1Nf81NTX/T09P/8HBwf/BwcH/wcHB/8HBwf81NTX/NTU1/zU1Nf9ERET/wcHB + /8HBwf/BwcH/u7u7/zU1Nf/BwcH/wcHB/8HBwf/BwcH/NTU1/8HBwf/BwcH/wcHB/8HBwf81NTX/NTU1 + /8HBwf/BwcH/wcHB/8HBwf81NTX/wcHB/8HBwf/BwcH/wcHB/zU1Nf/BwcH/wcHB/8HBwf/BwcH/NTU1 + /zU1Nf/BwcH/wcHB/8HBwf/BwcH/NTU1/zU1Nf81NTX/MzMz/zExMf8sLCz/JSUl/xwcHP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8dHR3/JiYm/y0tLf8yMjL/NDQ0/zY2Nv82Njb/NjY2 + /8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8TExP82Njb/NjY2/zY2Nv9RUVH/yMjI + /8jIyP/IyMj/yMjI/zY2Nv82Njb/NTU1/0ZGRv/IyMj/yMjI/8jIyP/BwcH/NTU1/8jIyP/IyMj/yMjI + /8jIyP81NTX/yMjI/8jIyP/IyMj/yMjI/zU1Nf81NTX/yMjI/8jIyP/IyMj/yMjI/zU1Nf/IyMj/yMjI + /8jIyP/IyMj/NTU1/8jIyP/IyMj/yMjI/8jIyP81NTX/NTU1/8jIyP/IyMj/yMjI/8jIyP81NTX/NTU1 + /zU1Nf8zMzP/MTEx/ywsLP8lJSX/HBwc/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABcAAAA + IgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /x0dHf8mJib/LS0t/zIyMv80NDT/NjY2/zY2Nv82Njb/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P + /8/Pz//Pz8//y8vL/zY2Nv82Njb/NjY2/1FRUf/Pz8//z8/P/8/Pz//Pz8//NjY2/zY2Nv82Njb/R0dH + /8/Pz//Pz8//z8/P/8jIyP82Njb/z8/P/8/Pz//Pz8//z8/P/zY2Nv/Pz8//z8/P/8/Pz//Pz8//NjY2 + /zY2Nv/Pz8//z8/P/8/Pz//Pz8//NjY2/8/Pz//Pz8//z8/P/8/Pz/82Njb/z8/P/8/Pz//Pz8//z8/P + /zY2Nv82Njb/z8/P/8/Pz//Pz8//z8/P/zY2Nv82Njb/NTU1/zMzM/8xMTH/LCws/yUlJf8cHBz/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/HR0d/yYmJv8tLS3/MjIy/zQ0NP82Njb/NjY2 + /zY2Nv/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/R0dH/NjY2/zY2Nv82Njb/UlJS + /9XV1f/V1dX/1dXV/9XV1f82Njb/NjY2/zY2Nv9HR0f/1dXV/9XV1f/V1dX/zc3N/zY2Nv/V1dX/1dXV + /9XV1f/V1dX/NjY2/9XV1f/V1dX/1dXV/9XV1f82Njb/NjY2/9XV1f/V1dX/1dXV/9XV1f82Njb/1dXV + /9XV1f/V1dX/1dXV/zY2Nv/V1dX/1dXV/9XV1f/V1dX/NjY2/zY2Nv/V1dX/1dXV/9XV1f/V1dX/NjY2 + /zY2Nv82Njb/NDQ0/zIyMv8tLS3/JiYm/x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAA + XAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8dHR3/JiYm/y0tLf8yMjL/NDQ0/zY2Nv82Njb/NjY2/9zc3P/c3Nz/3Nzc/9zc3P82Njb/NjY2 + /zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv9TU1P/3Nzc/9zc3P/c3Nz/3Nzc/zY2Nv82Njb/NjY2 + /0hISP/c3Nz/3Nzc/9zc3P/U1NT/NjY2/9zc3P/c3Nz/3Nzc/9zc3P82Njb/3Nzc/9zc3P/c3Nz/3Nzc + /zY2Nv82Njb/3Nzc/9zc3P/c3Nz/3Nzc/zY2Nv/c3Nz/3Nzc/9zc3P/c3Nz/NjY2/9zc3P/c3Nz/3Nzc + /9zc3P82Njb/NjY2/9zc3P/c3Nz/3Nzc/9zc3P82Njb/NjY2/zY2Nv80NDT/MjIy/y0tLf8mJib/HR0d + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0dHf8nJyf/Li4u/zMzM/81NTX/Nzc3 + /zc3N/83Nzf/4+Pj/+Pj4//j4+P/4+Pj/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /1VVVf/j4+P/4+Pj/+Pj4//j4+P/Nzc3/zc3N/83Nzf/SUlJ/+Pj4//j4+P/4+Pj/9ra2v83Nzf/4+Pj + /+Pj4//j4+P/4+Pj/zY2Nv/j4+P/4+Pj/+Pj4//j4+P/NjY2/zY2Nv/j4+P/4+Pj/+Pj4//j4+P/NjY2 + /+Pj4//j4+P/4+Pj/+Pj4/82Njb/4+Pj/+Pj4//j4+P/4+Pj/zY2Nv82Njb/4+Pj/+Pj4//j4+P/4+Pj + /zY2Nv82Njb/NjY2/zQ0NP8yMjL/LS0t/yYmJv8dHR3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD///// + /wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/HR0d/ycnJ/8uLi7/MzMz/zU1Nf83Nzf/Nzc3/zc3N//q6ur/6urq/+rq6v/q6ur/Nzc3 + /zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/VVVV/+rq6v/q6ur/6urq/+rq6v83Nzf/Nzc3 + /zc3N/9KSkr/6urq/+rq6v/q6ur/4eHh/zc3N//q6ur/6urq/+rq6v/q6ur/Nzc3/+rq6v/q6ur/6urq + /+rq6v83Nzf/Nzc3/+rq6v/q6ur/6urq/+rq6v83Nzf/6urq/+rq6v/q6ur/6urq/zc3N//q6ur/6urq + /+rq6v/q6ur/Nzc3/zc3N//q6ur/6urq/+rq6v/q6ur/Nzc3/zc3N/83Nzf/NTU1/zMzM/8uLi7/Jycn + /x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8dHR3/Jycn/y4uLv8zMzP/NTU1 + /zc3N/83Nzf/Nzc3//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/+zs7P83Nzf/8fHx + //Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/Nzc3/0pKSv/x8fH/8fHx//Hx8f/n5+f/Nzc3 + //Hx8f/x8fH/8fHx//Hx8f83Nzf/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx + /zc3N//x8fH/8fHx//Hx8f/x8fH/Nzc3//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx + //Hx8f83Nzf/Nzc3/zc3N/81NTX/MzMz/y4uLv8nJyf/HR0d/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + //////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/x4eHv8oKCj/Ly8v/zQ0NP82Njb/ODg4/zg4OP84ODj/+Pj4//j4+P/4+Pj/+Pj4 + //j4+P/4+Pj/+Pj4//j4+P/4+Pj/8vLy/zg4OP/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4 + //j4+P83Nzf/SkpK//j4+P/4+Pj/+Pj4/+7u7v83Nzf/+Pj4//j4+P/4+Pj/+Pj4/zc3N//4+Pj/+Pj4 + //j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/1VVVf83Nzf/Nzc3//j4+P/4+Pj/+Pj4//j4+P83Nzf/+Pj4 + //j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/zc3N/83Nzf/Nzc3/zU1Nf8zMzP/Li4u + /ycnJ/8dHR3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Hh4e/ygoKP8vLy//NDQ0 + /zY2Nv84ODj/ODg4/zg4OP9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9vb2//ODg4 + /3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/zg4OP87Ozv/cXFx/3Fxcf9xcXH/bW1t + /zg4OP9xcXH/cXFx/3Fxcf9xcXH/ODg4/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/Pj4+ + /zg4OP84ODj/cXFx/3Fxcf9xcXH/cXFx/zg4OP9xcXH/cXFx/3Fxcf9xcXH/cXFx/3Fxcf9xcXH/cXFx + /3Fxcf9xcXH/Nzc3/zc3N/83Nzf/NTU1/zMzM/8uLi7/Jycn/x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8eHh7/KCgo/y8vL/80NDT/NjY2/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP82Njb/NDQ0 + /y8vL/8oKCj/Hh4e/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAABcAAAAIgAAAAYAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x4eHv8oKCj/Ly8v + /zQ0NP82Njb/ODg4/zg4OP84ODj/pKSk/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/pKSk/6SkpP+kpKT/pKSk + /6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/zg4OP84ODj/pKSk + /6SkpP+kpKT/pKSk/6SkpP+kpKT/pKSk/6SkpP84ODj/ODg4/zg4OP+kpKT/pKSk/6SkpP+kpKT/pKSk + /6SkpP+kpKT/pKSk/zg4OP84ODj/ODg4/zY2Nv80NDT/Ly8v/ygoKP8eHh7/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AQEB + /wEBAf8BAQH/AQEB/wEBAf8BAQH/Hh4e/ygoKP8vLy//NTU1/zc3N/85OTn/OTk5/zk5Of+np6f/p6en + /6enp/+np6f/p6en/6enp/+np6f/p6en/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/zk5Of+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /6enp/+np6f/p6en/6enp/+np6f/ODg4/zg4OP+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en + /zg4OP84ODj/ODg4/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/ODg4/zg4OP84ODj/NjY2 + /zQ0NP8vLy//KCgo/x4eHv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP//////AAAAXAAAACIAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8CAgL/AgIC/wICAv8CAgL/AgIC/wICAv8eHh7/KCgo + /y8vL/81NTX/Nzc3/zk5Of85OTn/OTk5/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/OTk5 + /zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/6urq/+rq6v/q6ur + /6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/85OTn/OTk5 + /6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/OTk5/zk5Of85OTn/q6ur/6urq/+rq6v/q6ur + /6urq/+rq6v/q6ur/6urq/85OTn/OTk5/zk5Of83Nzf/NTU1/y8vL/8oKCj/Hh4e/wEBAf8BAQH/AQEB + /wEBAf8BAQH/AQEB//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD/x4eHv8oKCj/Ly8v/zU1Nf83Nzf/OTk5/zk5Of85OTn/rq6u + /66urv+urq7/rq6u/66urv+urq7/rq6u/66urv85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/zk5Of85OTn/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u + /66urv+urq7/rq6u/66urv+urq7/rq6u/zk5Of85OTn/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u + /66urv85OTn/OTk5/zk5Of+urq7/rq6u/66urv+urq7/rq6u/66urv+urq7/rq6u/zk5Of85OTn/OTk5 + /zc3N/81NTX/Ly8v/ygoKP8eHh7/AgIC/wICAv8CAgL/AgIC/wICAv8CAgL//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////AwMD/wMDA/8DAwP/AwMD/wMDA/8DAwP/Hx8f + /ykpKf8wMDD/NjY2/zg4OP86Ojr/Ojo6/zo6Ov+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy + /zo6Ov86Ojr/Ojo6/zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of+ysrL/srKy + /7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/OTk5 + /zk5Of+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/zk5Of85OTn/OTk5/7Kysv+ysrL/srKy + /7Kysv+ysrL/srKy/7Kysv+ysrL/OTk5/zk5Of85OTn/Nzc3/zU1Nf8vLy//KCgo/x4eHv8DAwP/AwMD + /wMDA/8DAwP/AwMD/wMDA///////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8EBAT/BAQE/wQEBP8EBAT/BAQE/wQEBP8fHx//KSkp/zAwMP82Njb/ODg4/zo6Ov86Ojr/Ojo6 + /7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1/7W1tf+1tbX/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1/7W1tf+1tbX/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1 + /7W1tf+1tbX/Ojo6/zo6Ov86Ojr/tbW1/7W1tf+1tbX/tbW1/7W1tf+1tbX/tbW1/7W1tf85OTn/OTk5 + /zk5Of83Nzf/NTU1/y8vL/8oKCj/Hh4e/wMDA/8DAwP/AwMD/wMDA/8DAwP/AwMD//////8AAABcAAAA + IgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wQEBP8EBAT/BAQE/wQEBP8EBAT/BAQE + /x8fH/8pKSn/MDAw/zY2Nv84ODj/Ojo6/zo6Ov86Ojr/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5 + /7m5uf86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/ubm5 + /7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf86Ojr/Ojo6/zo6Ov+5ubn/ubm5 + /7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/zo6Ov86Ojr/Ojo6/zg4OP82Njb/MDAw/ykpKf8fHx//BAQE + /wQEBP8EBAT/BAQE/wQEBP8EBAT//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////BQUF/wUFBf8FBQX/BQUF/wUFBf8FBQX/Hx8f/ykpKf8wMDD/NjY2/zg4OP86Ojr/Ojo6 + /zo6Ov+8vLz/vLy8/7y8vP+8vLz/vLy8/7y8vP+8vLz/vLy8/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov+8vLz/vLy8/7y8vP+8vLz/vLy8/7y8vP+8vLz/vLy8 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov+8vLz/vLy8/7y8vP+8vLz/vLy8 + /7y8vP+8vLz/vLy8/zo6Ov86Ojr/Ojo6/7y8vP+8vLz/vLy8/7y8vP+8vLz/vLy8/7y8vP+8vLz/Ojo6 + /zo6Ov86Ojr/ODg4/zY2Nv8wMDD/KSkp/x8fH/8FBQX/BAQE/wQEBP8EBAT/BAQE/wQEBP//////AAAA + XAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8GBgb/BgYG/wYGBv8GBgb/BgYG + /wYGBv8gICD/Kioq/zExMf83Nzf/OTk5/zs7O/87Ozv/Ozs7/7+/v/+/v7//v7+//7+/v/+/v7//v7+/ + /7+/v/+/v7//Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/ + /7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/86Ojr/Ojo6/zo6Ov84ODj/NjY2/zAwMP8pKSn/Hx8f + /wUFBf8FBQX/BQUF/wUFBf8FBQX/BQUF//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH/yAgIP8qKir/MTEx/zc3N/85OTn/Ozs7 + /zs7O/87Ozv/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD + /8PDw/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/w8PD/8PDw//Dw8P/w8PD + /8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD + /zs7O/87Ozv/Ozs7/zg4OP82Njb/MDAw/ykpKf8fHx//BgYG/wYGBv8GBgb/BgYG/wYGBv8GBgb///// + /wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////BwcH/wcHB/8HBwf/BwcH + /wcHB/8HBwf/ICAg/yoqKv8xMTH/Nzc3/zk5Of87Ozv/Ozs7/zs7O//Gxsb/xsbG/8bGxv/Gxsb/xsbG + /8bGxv/Gxsb/xsbG/4KCgv+CgoL/goKC/4KCgv+CgoL/goKC/4KCgv+CgoL/goKC/4KCgv+CgoL/Ozs7 + /zs7O//Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O//Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG + /8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/Ozs7/zs7O/87Ozv/OTk5/zc3N/8xMTH/Kioq + /yAgIP8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHB///////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8ICAj/CAgI/wgICP8ICAj/CAgI/wgICP8gICD/Kioq/zIyMv84ODj/Ojo6 + /zw8PP88PDz/PDw8/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK + /8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv87Ozv/Ozs7/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK + /8rKyv/Kysr/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/8rKyv/Kysr/ysrK + /8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK + /8rKyv87Ozv/Ozs7/zs7O/85OTn/Nzc3/zExMf8qKir/ICAg/wcHB/8HBwf/BwcH/wcHB/8HBwf/BwcH + //////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////wkJCf8JCQn/CQkJ + /wkJCf8JCQn/CAgI/yAgIP8qKir/MjIy/zg4OP86Ojr/PDw8/zw8PP88PDz/zs7O/87Ozv/Ozs7/zs7O + /87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O + /zw8PP88PDz/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv88PDz/PDw8/zw8PP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O + /87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/zs7O/87Ozv/Ozs7/zk5Of83Nzf/MTEx + /yoqKv8gICD/CAgI/wgICP8ICAj/CAgI/wgICP8ICAj//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////CQkJ/wkJCf8JCQn/CQkJ/wkJCf8JCQn/ICAg/yoqKv8yMjL/ODg4 + /zo6Ov88PDz/PDw8/zw8PP/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR + /9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/PDw8/zw8PP/R0dH/0dHR/9HR0f/R0dH/0dHR + /9HR0f/R0dH/0dHR/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP/R0dH/0dHR + /9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/qamp/zw8PP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/Ojo6/zg4OP8yMjL/Kioq/yAgIP8JCQn/CQkJ/wkJCf8JCQn/CQkJ + /wkJCf//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8KCgr/CgoK + /woKCv8KCgr/CgoK/woKCv8hISH/Kysr/zMzM/84ODj/Ojo6/zw8PP88PDz/PDw8/9TU1P/U1NT/1NTU + /9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU + /9TU1P88PDz/PDw8/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/PDw8/zw8PP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU/9TU1P/U1NT/1NTU + /9TU1P/U1NT/1NTU/9TU1P+rq6v/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP86Ojr/ODg4 + /zIyMv8qKir/ICAg/wkJCf8JCQn/CQkJ/wkJCf8JCQn/CQkJ//////8AAABcAAAAIgAAAAYAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////wsLC/8LCwv/CwsL/wsLC/8LCwv/CwsL/yEhIf8rKyv/MzMz + /zg4OP87Ozv/PT09/z09Pf89PT3/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX + /9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/z09Pf89PT3/19fX/9fX1//X19f/19fX + /9fX1//X19f/19fX/9fX1/89PT3/PT09/z09Pf89PT3/PT09/zw8PP88PDz/PDw8/zw8PP88PDz/19fX + /9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/6ysrP88PDz/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zo6Ov84ODj/MjIy/yoqKv8gICD/CgoK/woKCv8KCgr/CgoK + /woKCv8KCgr//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////CwsL + /wsLC/8LCwv/CwsL/wsLC/8LCwv/ISEh/ysrK/8zMzP/ODg4/zs7O/89PT3/PT09/z09Pf/b29v/29vb + /9vb2//b29v/29vb/9vb2//b29v/29vb/z09Pf89PT3/PT09/9vb2//b29v/29vb/9vb2//b29v/29vb + /9vb2//b29v/PT09/z09Pf/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf/b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb + /9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/PT09/z09Pf89PT3/Ozs7 + /zg4OP8zMzP/Kysr/yEhIf8LCwv/CwsL/wsLC/8LCwv/CwsL/wsLC///////AAAAXAAAACIAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8MDAz/DAwM/wwMDP8MDAz/DAwM/wwMDP8hISH/Kysr + /zMzM/84ODj/Ozs7/z09Pf89PT3/PT09/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/PT09 + /z09Pf89PT3/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v89PT3/PT09/97e3v/e3t7/3t7e + /97e3v/e3t7/3t7e/97e3v/e3t7/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e + /97e3v/e3t7/3t7e/97e3v89PT3/PT09/z09Pf87Ozv/ODg4/zMzM/8rKyv/ISEh/wsLC/8LCwv/CwsL + /wsLC/8LCwv/CwsL//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /w0NDf8NDQ3/DQ0N/w0NDf8NDQ3/DQ0N/yEhIf8sLCz/NDQ0/zk5Of88PDz/Pj4+/z4+Pv8+Pj7/4uLi + /+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v8+Pj7/PT09/z09Pf/i4uL/4uLi/+Li4v/i4uL/4uLi + /+Li4v/i4uL/4uLi/z09Pf89PT3/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi + /+Li4v/FxcX/xcXF/8XFxf/i4uL/4uLi/+Li4v/i4uL/4uLi/+Li4v/i4uL/4uLi/z09Pf89PT3/PT09 + /zs7O/84ODj/MzMz/ysrK/8hISH/DAwM/wwMDP8MDAz/DAwM/wwMDP8MDAz//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////DQ0N/w0NDf8NDQ3/DQ0N/w0NDf8NDQ3/ISEh + /ywsLP80NDT/OTk5/zw8PP8+Pj7/Pj4+/z4+Pv/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl + /z4+Pv8+Pj7/Pj4+/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/Pj4+/z4+Pv/l5eX/5eXl + /+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+ + /z4+Pv/l5eX/5eXl/+Xl5f/l5eX/5eXl/+Xl5f/l5eX/5eXl/z09Pf89PT3/PT09/+Xl5f/l5eX/5eXl + /+Xl5f/l5eX/5eXl/+Xl5f/l5eX/PT09/z09Pf89PT3/Ozs7/zg4OP8zMzP/Kysr/yEhIf8NDQ3/DQ0N + /w0NDf8NDQ3/DQ0N/w0NDf//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8ODg7/Dg4O/w4ODv8ODg7/Dg4O/w4ODv8hISH/LCws/zQ0NP85OTn/PDw8/z4+Pv8+Pj7/Pj4+ + /+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/Pj4+/z4+Pv8+Pj7/6enp/+np6f/p6en/6enp + /+np6f/p6en/6enp/+np6f8+Pj7/Pj4+/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/Pj4+ + /z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/+np6f/p6en/6enp/+np6f/p6en/6enp + /+np6f/p6en/Pj4+/z4+Pv8+Pj7/6enp/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f8+Pj7/Pj4+ + /z4+Pv88PDz/OTk5/zQ0NP8sLCz/ISEh/w0NDf8NDQ3/DQ0N/w0NDf8NDQ3/DQ0N//////8AAABcAAAA + IgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////w4ODv8ODg7/Dg4O/w4ODv8ODg7/Dg4O + /yIiIv8sLCz/NDQ0/zk5Of88PDz/Pj4+/z4+Pv8+Pj7/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs + /+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/z4+Pv8+Pj7/7Ozs + /+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs + /z4+Pv8+Pj7/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P8+Pj7/Pj4+/z4+Pv/s7Oz/7Ozs + /+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/z4+Pv8+Pj7/Pj4+/zw8PP85OTn/NDQ0/ywsLP8hISH/Dg4O + /w4ODv8ODg7/Dg4O/w4ODv8ODg7//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//IiIi/y0tLf80NDT/Ojo6/z09Pf8/Pz//Pz8/ + /z8/P//w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw + //Dw8P/w8PD/8PDw//Dw8P/w8PD/Pz8//z8/P//w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw + //Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/Pj4+/z4+Pv/w8PD/8PDw//Dw8P/w8PD/8PDw + //Dw8P/w8PD/8PDw/z4+Pv8+Pj7/Pj4+//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/Pj4+ + /z4+Pv8+Pj7/PDw8/zk5Of80NDT/LCws/yEhIf8ODg7/Dg4O/w4ODv8ODg7/Dg4O/w4ODv//////AAAA + XAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8QEBD/EBAQ/xAQEP8QEBD/EBAQ + /xAQEP8iIiL/LS0t/zQ0NP86Ojr/PT09/z8/P/8/Pz//Pz8///Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz + //Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/8/Pz//Pz8/ + //Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz + //Pz8/8/Pz//Pz8///Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/Pz8//z8/P/8/Pz//8/Pz + //Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/8/Pz//Pz8//z8/P/89PT3/Ojo6/zQ0NP8tLS3/IiIi + /w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////xEREf8RERH/ERER/xEREf8RERH/ERER/yIiIv8tLS3/NDQ0/zo6Ov89PT3/Pz8/ + /z8/P/8/Pz//9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2/z8/P/8/Pz//9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2/z8/P/8/Pz//9vb2//b29v/29vb/9vb2 + //b29v/29vb/9vb2//b29v8/Pz//Pz8//z8/P//29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2 + /z8/P/8/Pz//Pz8//z09Pf86Ojr/NDQ0/y0tLf8iIiL/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD///// + /wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////ERER/xEREf8RERH/ERER + /xEREf8RERH/IiIi/y0tLf81NTX/Ozs7/z4+Pv9AQED/QEBA/0BAQP/6+vr/+vr6//r6+v/6+vr/+vr6 + //r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/5+fn/Pz8/ + /z8/P//6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6 + //r6+v/6+vr/Pz8//z8/P//6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6/z8/P/8/Pz//Pz8/ + //r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/Pz8//z8/P/8/Pz//PT09/zo6Ov80NDT/LS0t + /yIiIv8RERH/ERER/xEREf8RERH/ERER/xEREf//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8SEhL/EhIS/xISEv8SEhL/EhIS/xISEv8iIiL/LS0t/zU1Nf87Ozv/Pj4+ + /0BAQP9AQED/QEBA/8DAwP/AwMD/v7+//7+/v//AwMD/wMDA/8DAwP/AwMD/v7+//7+/v/+/v7//v7+/ + /8DAwP/AwMD/v7+//7+/v/+/v7//v7+//7+/v/9AQED/QEBA/7+/v/+/v7//v7+//8DAwP/AwMD/wMDA + /8DAwP+/v7//v7+//7+/v//AwMD/wMDA/8DAwP+/v7//v7+//7+/v/9AQED/QEBA/8DAwP/AwMD/v7+/ + /7+/v/+/v7//v7+//7+/v/+/v7//Pz8//z8/P/8/Pz//vr6+/76+vv+/v7//v7+//7+/v/++vr7/vr6+ + /76+vv8/Pz//Pz8//z8/P/89PT3/Ojo6/zQ0NP8tLS3/IiIi/xEREf8RERH/ERER/xEREf8RERH/ERER + //////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////xISEv8SEhL/EhIS + /xISEv8SEhL/EhIS/yIiIv8tLS3/NTU1/zs7O/8+Pj7/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/z4+Pv87Ozv/NTU1 + /y0tLf8iIiL/EhIS/xISEv8SEhL/EhIS/xISEv8SEhL//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/IiIi/y0tLf81NTX/Ozs7 + /z4+Pv9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/Pj4+/zs7O/81NTX/LS0t/yIiIv8TExP/ExMT/xMTE/8TExP/EhIS + /xISEv//////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8UFBT/FBQU + /xQUFP8UFBT/FBQU/xQUFP8jIyP/Li4u/zY2Nv88PDz/Pz8//0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP8+Pj7/Ozs7 + /zU1Nf8tLS3/IiIi/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT//////8AAABcAAAAIgAAAAYAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////xUVFf8VFRX/FRUV/xUVFf8VFRX/FRUV/yMjI/8uLi7/NjY2 + /zw8PP8/Pz//QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/z8/P/88PDz/NjY2/y4uLv8iIiL/FBQU/xQUFP8UFBT/FBQU + /xQUFP8UFBT//////wAAAFwAAAAiAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////FRUV + /xUVFf8VFRX/FRUV/xUVFf8VFRX/IyMj/y4uLv82Njb/PDw8/z8/P/9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/Pz8/ + /zw8PP82Njb/Li4u/yMjI/8VFRX/FRUV/xUVFf8VFRX/FRUV/xUVFf//////AAAAXAAAACIAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8jIyP/Ly8v + /zc3N/89PT3/QEBA/0JCQv9CQkL/QkJC/0JCQv9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9AQED/QEBA/0BAQP9AQED/Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8+Pj7/Ozs7/zU1Nf8tLS3/IiIi/xUVFf8VFRX/FRUV + /xUVFf8VFRX/FRUV//////8AAABcAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/yMjI/8vLy//Nzc3/z09Pf9AQED/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0FBQf9BQUH/QEBA/0BAQP8/Pz//Pz8//z4+Pv8+Pj7/Pj4+/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /zs7O/84ODj/MzMz/ysrK/8hISH/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb//////wAAAFwAAAAiAAAA + BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/IyMj + /y8vL/83Nzf/PT09/0BAQP9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9BQUH/QEBA/z8/P/8+Pj7/PT09/zs7O/86Ojr/OTk5 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/Nzc3/zQ0NP8uLi7/Jycn/x4eHv8XFxf/FxcX + /xcXF/8XFxf/FxcX/xcXF///////AAAAXAAAACIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8YGBj/GBgY/xgYGP8YGBj/GBgY/xgYGP8jIyP/Ly8v/zc3N/89PT3/QEBA/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QUFB + /0BAQP8/Pz//PT09/zs7O/84ODj/NTU1/zMzM/8yMjL/MTEx/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw + /zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw + /zAwMP8vLy//LS0t/ygoKP8iIiL/Ghoa/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX//////8AAABbAAAA + IQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /yQkJP8vLy//ODg4/z4+Pv9BQUH/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/QkJC/0JCQv9CQkL/QkJC/0FBQf9AQED/Pj4+/zs7O/84ODj/NDQ0/y8vL/8sLCz/KSkp + /ycnJ/8mJib/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl + /yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yQkJP8iIiL/Hh4e/xoaGv8VFRX/GBgY + /xgYGP8YGBj/GBgY/xgYGP8YGBj//////wAAAFoAAAAhAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/JCQk/y8vL/84ODj/Pj4+/0FBQf9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9CQkL/QUFB + /z8/P/87Ozv/Nzc3/zIyMv8sLCz/JiYm/yEhIf8ZGRn/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW + /xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW + /xYWFv8WFhb/FhYW/xYWFv8WFhb/FhYW/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf//////AAAA + VwAAAB8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8kJCT/Ly8v/zg4OP8+Pj7/QUFB/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0JCQv9AQED/PDw8/zc3N/8wMDD/KSkp/yEhIf8aGhr/Ghoa + /xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ//////8AAABPAAAAGgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/yQkJP8wMDD/OTk5/z8/P/9CQkL/RERE + /0RERP9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9CQkL/QUFB + /z09Pf84ODj/MTEx/ygoKP8eHh7/Ghoa/xoaGv8aGhr/Ghoa/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr///// + /wAAAD8AAAATAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////Gxsb/xsbG/8bGxv/Gxsb + /xsbG/8bGxv/JCQk/zAwMP85OTn/Pz8//0JCQv9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0NDQ/9AQED/PDw8/zU1Nf8sLCz/ISEh/xsbG/8bGxv/Gxsb + /ysrK/82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2 + /zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/zY2Nv82Njb/NjY2/xsbG/8bGxv/Gxsb + /xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb////////////AAAAKwAAAAwAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8cHBz/HBwc/xwcHP8cHBz/HBwc/xwcHP8kJCT/MDAw/zk5Of8/Pz//QkJC + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9DQ0P/QkJC + /z8/P/85OTn/MDAw/yYmJv8cHBz/HBwc/xwcHP82Njb/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /zY2Nv82Njb/NjY2/zY2Nv8sLCz/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG//+/v7///// + /wAAADkAAAAVAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////x0dHf8dHR3/HR0d + /x0dHf8dHR3/HR0d/yQkJP8wMDD/OTk5/z8/P/9CQkL/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0NDQ/9BQUH/PT09/zU1Nf8sLCz/GBgY/xwcHP8cHBz/NTU1 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP83Nzf/Nzc3/zc3N/83Nzf/LS0t/xwcHP8cHBz/HBwc + /xwcHP8cHBz/HBwc/xwcHP8cHBz//v7+//////8AAAA+AAAAGgAAAAcAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/JSUl/zExMf85OTn/QEBA + /0NDQ/9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0RERP9ERET/Q0ND + /0FBQf88PDz/MzMz/ygoKP8dHR3/HR0d/xYWFv85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/y0tLf8dHR3/HR0d/x0dHf8dHR3/HR0d/x0dHf8dHR3/HR0d////////////AAAA + PgAAABsAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8eHh7/Hh4e + /x4eHv8eHh7/Hh4e/x4eHv8lJSX/MTEx/zk5Of9AQED/Q0ND/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9DQ0P/QUFB/zs7O/8xMTH/JiYm/x4eHv8eHh7/Nzc3 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of8vLy//HR0d/x0dHf8dHR3/HR0d + /x0dHf8dHR3/HR0d/x0dHf///////////wAAAD4AAAAbAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/yUlJf8xMTH/OTk5 + /0BAQP9DQ0P/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0NDQ/9AQED/Ojo6/zAwMP8eHh7/Hh4e/x4eHv87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O/86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/ICAg/x4eHv8eHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7///////////8AAAA+AAAA + GwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////Hx8f + /x8fH/8fHx//Hx8f/x8fH/8fHx//JiYm/zIyMv86Ojr/QUFB/0RERP9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/Q0ND/0BAQP85OTn/Ly8v/x4eHv8fHx//Hx8f + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/yEhIf8fHx//Hx8f/x8fH/8fHx//Hx8f + /x8fH/8fHx//Hx8f////////////AAAAPgAAABsAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8gICD/ICAg/yAgIP8gICD/ICAg/yAgIP8mJib/MjIy + /zo6Ov9BQUH/RERE/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9ERET/QUFB/zo6Ov8vLy//Hx8f/yAgIP8gICD/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP88PDz/PDw8 + /zw8PP8hISH/Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH////////////wAAAD8AAAAbAAAA + BwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yYmJv8yMjL/Ojo6/0FBQf9ERET/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0RERP9AQED/OTk5/y8vL/8eHh7/ICAg + /x8fH/89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/z09Pf89PT3/ISEh/yAgIP8gICD/ICAg/yAgIP8gICD/ICAg + /yAgIP8gICD///////////8AAAA/AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/JiYm + /zIyMv86Ojr/QUFB/0RERP9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RERE/0BAQP85OTn/Ly8v/x8fH/8hISH/ICAg/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+ + /z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+ + /xoaGv8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh////////////AAAAPgAAABsAAAAIAAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8mJib/MjIy/zs7O/9CQkL/RUVF/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0ZGRv9GRkb/RkZG/0VFRf9ERET/QEBA/zk5Of8vLy//Hx8f + /yIiIv8hISH/Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8YGBj/ISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh + /yEhIf///////////wAAAD4AAAAbAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj + /yYmJv8yMjL/Ozs7/0JCQv9FRUX/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/RkZG/0VFRf9BQUH/Ojo6/y8vL/8gICD/IiIi/yEhIf9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/Ghoa + /yIiIv8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8iIiL//v7+//////8AAAA+AAAAGwAAAAgAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + IgAAAFz/////IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/JiYm/zIyMv87Ozv/QkJC/0VFRf9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9GRkb/RUVF/0FBQf86Ojr/Ly8v + /yAgIP8jIyP/IiIi/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/xwcHP8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj + //7+/v//////AAAAPgAAABsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8kJCT/JCQk/yQkJP8kJCT/JCQk + /yQkJP8nJyf/MzMz/zw8PP9DQ0P/RkZG/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/R0dH/0ZGRv9FRUX/QUFB/zo6Ov8vLy//ICAg/yQkJP8jIyP/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9BQUH/QUFB/0FBQf8eHh7/JCQk + /yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP/+/v7//////wAAAD4AAAAbAAAABwAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BgAAACIAAABc/////yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/ycnJ/8zMzP/PDw8/0NDQ/9GRkb/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/R0dH/0ZGRv9CQkL/Ozs7 + /zAwMP8hISH/JSUl/yQkJP9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/QkJC/0JCQv9CQkL/HBwc/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT///// + //////8AAAA+AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////JSUl/yUlJf8lJSX/JSUl + /yUlJf8lJSX/Jycn/zMzM/88PDz/Q0ND/0ZGRv9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9HR0f/RkZG/0JCQv87Ozv/MDAw/yEhIf8lJSX/JCQk/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/x8fH/8lJSX/JSUl + /yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl////////////AAAAPwAAABsAAAAHAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAYAAAAiAAAAXP////8mJib/JiYm/yYmJv8mJib/JiYm/yYmJv8nJyf/MzMz/zw8PP9DQ0P/RkZG + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0dHR/9GRkb/QkJC + /zs7O/8wMDD/ISEh/yYmJv8lJSX/RUVF/0VFRf9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP8jIyP/JSUl/yUlJf8lJSX/JSUl/yUlJf8lJSX/JSUl/yUlJf/+/v7///// + /wAAAD8AAAAcAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc/////ycnJ/8nJyf/Jycn + /ycnJ/8nJyf/Jycn/ycnJ/80NDT/PT09/0RERP9HR0f/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/R0dH/0ZGRv9CQkL/Ozs7/zAwMP8hISH/JiYm/yUlJf9GRkb/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/IiIi/yYmJv8mJib/JiYm + /yYmJv8mJib/JiYm/yYmJv8mJib//v7+//////8AAAA+AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGAAAAIgAAAFz/////KCgo/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/zQ0NP89PT3/RERE + /0dHR/9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9ISEj/R0dH + /0NDQ/88PDz/MTEx/yEhIf8nJyf/JiYm/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/yMjI/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn////////////AAAA + PgAAABsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP8nJyf/NDQ0/z09Pf9ERET/R0dH/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0hISP9HR0f/Q0ND/zw8PP8xMTH/IiIi/ygoKP8nJyf/R0dH + /0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/8lJSX/KCgo/ygoKP8oKCj/KCgo + /ygoKP8oKCj/KCgo/ygoKP///////f39/gAAAD4AAAAbAAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAACIAAABc/////ykpKf8pKSn/KSkp/ykpKf8pKSn/KSkp/ygoKP80NDT/Pj4+ + /0VFRf9ISEj/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SEhI + /0dHR/9DQ0P/PDw8/zExMf8iIiL/KSkp/ygoKP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9HR0f/Jycn/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj///////////8AAAA+AAAA + GwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////KSkp + /ykpKf8pKSn/KSkp/ykpKf8pKSn/KCgo/zQ0NP8+Pj7/RUVF/0hISP9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9JSUn/R0dH/0RERP88PDz/MTEx/yMjI/8pKSn/KCgo + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SEhI/ykpKf8pKSn/KSkp/ykpKf8pKSn/KSkp + /ykpKf8pKSn/KSkp////////////AAAAPgAAABsAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAAXP////8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8oKCj/NDQ0 + /z4+Pv9FRUX/SEhI/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0lJSf9HR0f/RERE/zw8PP8xMTH/IyMj/yoqKv8pKSn/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv8pKSn/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv///////f39/gAAAD4AAAAbAAAA + CAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAACIAAABc//// + /ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ygoKP80NDT/Pj4+/0VFRf9ISEj/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SUlJ/0dHR/9ERET/PDw8/zExMf8jIyP/Kioq + /ykpKf9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/KSkp/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq + /yoqKv8qKir///////39/f4AAAA+AAAAGwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAIgAAAFz/////LCws/ywsLP8sLCz/LCws/ywsLP8sLCz/KCgo + /zU1Nf8+Pj7/RkZG/0lJSf9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9JSUn/R0dH/0RERP88PDz/MTEx/yQkJP8rKyv/Kioq/0xMTP9MTEz/TExM/0xMTP9MTEz/S0tL + /yoqKv8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr////////////AAAAPAAAABoAAAAIAAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAiAAAA + XP////8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8oKCj/NTU1/z4+Pv9GRkb/SUlJ/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0pKSv9ISEj/RUVF/z09Pf8yMjL/JSUl + /ywsLP8rKyv/TU1N/01NTf9NTU3/TExM/0tLS/8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8sLCz/LCws + /ywsLP///////Pz8/QAAADkAAAAZAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAACEAAABb/////y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + /ycnJ/80NDT/Pj4+/0VFRf9JSUn/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/SkpK/0hISP9FRUX/PT09/zIyMv8lJSX/LCws/ysrK/9OTk7/TU1N/01NTf9LS0v/LCws + /ywsLP8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8sLCz///////v7+/sAAAA5AAAAFwAAAAYAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAA + IQAAAFr/////LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/JiYm/zMzM/89PT3/RUVF/0lJSf9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9KSkr/SEhI/0VFRf89PT3/MjIy + /yUlJf8tLS3/LCws/05OTv9OTk7/TU1N/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t/y0tLf8tLS3/LS0t + ////////////AAAAOAAAABcAAAAHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAfAAAAWP////8uLi7/Li4u/y4uLv8uLi7/Li4u + /y4uLv8kJCT/MDAw/zo6Ov9DQ0P/SEhI/0pKSv9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0pKSv9JSUn/RUVF/z4+Pv8yMjL/JiYm/y4uLv8uLi7/T09P/05OTv8uLi7/Li4u + /y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv///////////wAAADgAAAAXAAAABgAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AwAAABwAAABT/////y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/yQkJP8rKyv/NjY2/z4+Pv9ERET/RkZG + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0ZGRv9CQkL/Ozs7 + /zAwMP8lJSX/Li4u/y4uLv81NTX/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7///// + //////8AAAA5AAAAFwAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFwAAAEn/////MDAw/zAwMP8wMDD/MDAw + /zAwMP8wMDD/LS0t/yUlJf8uLi7/Nzc3/z09Pf9AQED/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QEBA/z09Pf82Njb/LCws/yQkJP8vLy//Ly8v/y8vL/8vLy//Ly8v + /y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v////////////AAAAOQAAABcAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAARAAAAPf////9DQ0P/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/HR0d/yYmJv8tLS3/MzMz + /zc3N/85OTn/OTk5/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /zo6Ov86Ojr/Ojo6/zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of83Nzf/NDQ0 + /y4uLv8lJSX/IiIi/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP8wMDD/MDAw/zAwMP//////+/v7 + +gAAADkAAAAXAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAv0dHRyvv7+/8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH/HBwc/yMjI/8oKCj/Kysr/y0tLf8uLi7/Li4u/y4uLv8uLi7/Li4u + /y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u + /y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y0tLf8qKir/JSUl/x4eHv8lJSX/MDAw/zAwMP8wMDD/MDAw + /zAwMP8wMDD/MDAw/zAwMP8wMDD///////////8AAAA4AAAAGAAAAAcAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAAB8AAABT/////zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MDAw + /ykpKf8iIiL/IyMj/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk + /yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/IyMj + /yIiIv8eHh7/JSUl/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx/zExMf8xMTH/MTEx////////////AAAA + NwAAABYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEQAAADj9/f3+6enp + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv///////////wAAADYAAAAWAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAIAAAAFD/////NTU1/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP///////////8AAAA1AAAA + FQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAOAAAA + LmxsbIH/////NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz///////7+/v7AAAANQAAABUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAATAAAANP//////////NTU1/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP//////29vbzgAAADQAAAAVAAAA + BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAUAAAAVAAAAMvf39/D/////4ODg/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT//////83Nzb4AAAA0AAAAFQAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAATAAAAKAAAAEb9/f3+//// + //X19f+rq6v/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/ra2t///////IyMi2AAAAMgAAABUAAAAFAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAQAAAALAAAAGgAAAC4AAABD0NDQuv/////9/f3+/f39/v39/f79/f3+/f39 + /v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39 + /v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39/v39/f79/f3+/f39 + /v39/f79/f3+AAAARAAAACoAAAATAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAA + DAAAABUAAAAfAAAAJgAAACoAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAA + LAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAA + LAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAArAAAAKAAAACEAAAAXAAAADAAAAAMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAUAAAAHAAAACQAAAAkAAAAKAAAA + CgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAA + CgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAA + CgAAAAkAAAAIAAAABgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////+AAAAAAAAAAAA/////////AAAAAAAAAAAAD////////AAAAAAAAAAAAAf// + /////gAAAAAAAAAAAAD///////wAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAD//////+AAAAAAAAAAA + AAA///////gAAAAAAAAAAAAAH//////4AAAAAAAAAAAAAB//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAB//////8AAAAAAAAAAAAAA///////AAAAAA + AAAAAAAAf//////wAAAAAAAAAAAAAP//////8AAAAAAAAAAAAAH///////AAAAAAAAAAAAAD///////w + AAAAAAAAAAAAB///////8AAAAAAAAAAAAA////////AAAAAAAAAAAAAf///////wAAAAAAAAAAAAP/// + ////8AAAAAAAAAAAAH////////AAAAAAAAAAAAD////////wAAAAAAAAAAAB////////8AAAAAAAAAAA + A/////////AAAAAAAAAAAAf////////wAAAAAAAAAAAP////////8AAAAAAAAAAAH/////////AAAAAA + AAAAAD/////////wAAAAAAAAAAB/////////8AAAAAAAAAAA//////////AAAAAAAAAAAf/////////w + AAAAAAAAAAP/////////8AAAAAAAAAAH//////////AAAAAAAAAAD//////////wAAAAAAAAAB////// + ////8AAAAAAAAAA///////////AAAAAAAAAAf//////////wAAAAAAAAAP//////////8AAAAAAAAAH/ + //////////AAAAAAAAAD///////////wAAAAAAAAB///////////8AAAAAAAAA////////////gAAAAA + AAAf///////////4AAAAAAAAP////////////AAAAAAAAH////////////wAAAAAAAD////////////+ + AAAAAAAB/////////////wAAAAAAA//////////////AAAAAAAf/////////////8AAAAAAf//////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8oAAAAgAAAAAABAAABAAgAAAAA + AACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEBAf8CAgL/AwMD/wQEBP8FBQX/BgYG/wcHB/8ICAj/CQkJ + /woKCv8LCwv/DAwM/w0NDf8ODg7/Dw8P/xAQEP8RERH/EhIS/xMTE/8UFBT/FRUV/xYWFv8XFxf/GBgY + /xkZGf8aGhr/Gxsb/xwcHP8dHR3/Hh4e/x8fH/8gICD/ISEh/yIiIv8jIyP/JCQk/yUlJf8mJib/Jycn + /ygoKP8pKSn/Kioq/ysrK/8sLCz/LS0t/y4uLv8vLy//MDAw/zExMf8yMjL/MzMz/zQ0NP81NTX/NjY2 + /zc3N/84ODj/OTk5/zo6Ov87Ozv/PDw8/z09Pf8+Pj7/Pz8//0BAQP9BQUH/QkJC/0NDQ/9ERET/RUVF + /0ZGRv9HR0f/SEhI/0lJSf9KSkr/S0tL/0xMTP9NTU3/Tk5O/09PT/9QUFD/UVFR/1JSUv9TU1P/VFRU + /1VVVf9WVlb/V1dX/1hYWP9ZWVn/Wlpa/1tbW/9cXFz/XV1d/15eXv9fX1//YGBg/2FhYf9iYmL/Y2Nj + /2RkZP9lZWX/ZmZm/2dnZ/9oaGj/aWlp/2pqav9ra2v/bGxs/21tbf9ubm7/b29v/3BwcP9ycnL/c3Nz + /3R0dP91dXX/dnZ2/3d3d/94eHj/eXl5/3p6ev97e3v/fHx8/319ff9+fn7/f39//4CAgP+BgYH/goKC + /4SEhP+FhYX/hoaG/4eHh/+IiIj/iYmJ/4qKiv+Li4v/jIyM/42Njf+Ojo7/j4+P/5CQkP+RkZH/kpKS + /5OTk/+UlJT/lZWV/5aWlv+Xl5f/mJiY/5mZmf+ampr/m5ub/5ycnP+dnZ3/np6e/5+fn/+goKD/oaGh + /6Kiov+jo6P/pKSk/6Wlpf+mpqb/p6en/6ioqP+pqan/qqqq/6urq/+srKz/ra2t/66urv+vr6//sLCw + /7Gxsf+ysrL/s7Oz/7S0tP+1tbX/tra2/7e3t/+4uLj/ubm5/7q6uv+7u7v/vLy8/729vf++vr7/v7+/ + /8DAwP/BwcH/wsLC/8PDw//ExMT/xcXF/8bGxv/Hx8f/yMjI/8nJyf/Kysr/y8vL/8zMzP/Nzc3/zs7O + /8/Pz//Q0ND/0dHR/9LS0v/T09P/1NTU/9XV1f/W1tb/19fX/9jY2P/Z2dn/2tra/9vb2//c3Nz/3d3d + /97e3v/f39//4eHh/+Li4v/j4+P/5OTk/+Xl5f/m5ub/5+fn/+jo6P/p6en/6urq/+vr6//s7Oz/7e3t + /+7u7v/v7+//8PDw//Hx8f/y8vL/8/Pz//T09P/39/f/+Pj4//r6+v/7+/v//Pz8//////8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAARqfP1dTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU + 1NTU1NTU1NTU1NTU1NTU1NTU1NTV2cihPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAOsj2xoBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRk + ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRniMf2zlgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAH/xuDcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATen9bAKAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACX9HYGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABG5NYZAQEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAefRVAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa + zd0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLwfgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAQ1sQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAuMoEAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAYp8nYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABr0RAAAAAAAAAAGCxEXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcSFxIXEhcS + FxEUFBcSFxIXEhcSFxIXDwsEAAAAAAAAAACG5QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjtoEAAAAAAAAER8kKCcpKCooKigqKConKCkqKCooKigqKCooKigqKCooKigqKCooKigq + KCooKigqKCopKSkoKigqKCooKigpJicmJCAQBgAAAAAAABDsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADNhQAAAAAAAAwhJiovKi8qMCowKjAqMCovMC8qMCowKjAqMCowKjAqMCow + KjAqMCowKjAqMCowKjAqMCowKiovKjAqMCowKjApLywqJyUYAAAAAAAAAKW4BgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOdSAAAAAAAEGigpKjAxMS8vMTExMTEyNCovMTExMTIyLy8w + LzExMTExMTExMTExMDExMTExMTEwLzExMTExNzAxMTExMTEyMjAvMTEsKCEXAAAAAAABWeMAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO9B8AAAAAAAogJyk2MTA3OkdAQUFBQUFBOjcw + MjlBQUE6NzQ3OEFBQUFBQUFBQTc6REFBQUFBQTk3MkFBQUEyOkRBQUFBQUFBOjcxMSosKCAGAAAAAAAf + 8w0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb3HwAAAAAADyQpKi83NzaWpaek + paWmpqZ5NzcyZqekp3k0NDRmpaanpKWlpqenOoaopqSlpaWmaDQ3pqakpjqCpqekpaWmp6aINzcwNyop + IQ0AAAAAASH2FgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvcfAAAAAAAQJCkx + NzExNJeorqiura2qp4U0MjdmqqeugDIxMWmqqqqnra2tqqg/iK6oqK6qra2ceTqqqKitOoavraiuqq2t + qJQ0MjcxLyokEAAAAAAAH/YYAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU9x8A + AAAAABclLDEyNzc0cHl5eXmUsLW1hjE3Nmy1sLKCNzc3bLW1tZ55sLK1tzqUsLK1j4iysrKWOa+ytbU6 + iLCyso+IsLKylzE3MjIxKSQXAAAAAAAg9hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf2IAEAAAAAFiUsMTQ3NDc3Nzc3N2q4uLiINzc0bLi4uIY0NzJvt7e4iDq0t7e3Ope4uLdfWbq4 + t5w6tre3tzqSuLi3ZFi4uLedNzQ3MTEsJRYAAAAAAB/3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/YfAAAAAAAXJywwMjc2Nzc3NjQ3asLCwo83NzZqwsLCiDc3N3DCwsKIOLjCwsM6 + msLCwmdawsLCoTq9wsLDQJS/wsNoWr/CwqM3NDc0MSwlFgAAAAABIPYXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9iAAAAAAABYmKTQ3NDY2iJeXl5qux8bGlDY2NnbFxsaUNzY2dsbG + xpQ2w8fGxUafxsbGZmDGxcalPMTFyMc8l8fHxmhZx8jGpzc2NzQvKicXAAAAAAAf9hcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3HwAAAAAAFygsMDc0Nja4zc3Ox83Nzs6XNjY2dc3O + zpQ2NjZ3zc3NlzrGzc/IQKTNzc1nYM/I1Kg4ysfNzzqezc7ObFrNzc+nNjY0MTcpJhYAAAAAACD2FwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YgAQAAAAAWJik0Nzc2Nr3U1NTUzs/P + z5c3NjZ21dXUlzc2NnnW1dSaOcfW1NRGptbV1Ghn1NTUsDrV1dTUP6LU1NRqYtTU1LU2NjY3LywmFgAA + AAAAH/cXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9h8AAAAAABcpLDA3Njc3 + wtnb21o8PDw8OjY2N3nb29udNjY4edrY2p831drY2USn2NncamfZ2du2PNfZ2tg/ptjY2W9h2dvbuDY2 + Njc3LCYWAAAAAAEg9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2IAAAAAAA + FicqNzQ3NzfH5OHhVjc3Nzc3Njg4fuHh4aE3NzeA4eTkozrZ3uTkRLXh5ORqbOTh4b083eTh5D+q5OTk + cGTk4eG9NjY0NyopKhcAAAAAAB/2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + F/cfAAAAAAAXKSw3Njc3N8/n5+d1XFxcXFE6XFyV5+fntFxcRILp5+enOOTn5+dEt+fn54iE5+fnxDrk + 5+fnQLXn5+mIgOfn58M3Nzc3NyonFgAAAAAAIPYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9iABAAAAABcnKTc3Nzc31O7u7u7u7u7trlTu7u7u7u7u7u53hO7u7qc65+/u7Ue48O7u + 7e7u7u3FOufv7uxBte3u7u7u7u7uyDc3NzY3LCkXAAAAAAAf9xcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABf2HwAAAAAAGCwqNDc4ODja8vLz8/Pz8vKyVfPz8/Pz8/Pz83mI8/Lzrjrs + 8/P0Rr/y8/Py8/P0lEk67fLy8j+68vPy8/Pz8/PNNzc3NjYqJhYAAAAAASD2FwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YgAAAAAAAXKCo4ODg4OISUlJKSkpKSlHNHkpKSkpKSkpKS + Vl+UlJJzOo6SkpI/eZSSkpSSlJJaOjqUlJSUOnmUkpSSkpKSkoA3Nzc2NykpGQAAAAAAH/YXAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9x8AAAAAABgsKjQ3ODg5S09PT09PT1A6ODg4 + ODg4ODg4ODk6TE9PT09PT09PT09PT09QTDk4S09PT09PT1E6OjpPT09PT09PTDg4ODY4KigXAAAAAAAg + 9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2IAEAAAAAFygqNjc4ODico6Ki + oqKiokg4ODg4ODg4ODg4OD+goqKioqKioqKioqKioqKfPDiSoqKioqKiolE4S6OioqKioqKVOTg4NzQq + LBgAAAAAAB/3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YgAQEBAQEXKio3 + Nzk6OqCoqKioqKelSTk5OTk5OTk5OTk4R6eoqKioqKioqKioqKinpqQ8N5Wmp6anpqelUjhPqKioqKin + pZg5ODg3NiooFwAAAAABIPYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9iEA + AAEAABcoMDc2Nzo5oqeoqKenp6dLOTk5OTk5OTk5OTlBpqeop6enp6enp6enp6enpzo6mKeqp6qnqqdV + OU+op6inp6ennDo5ODc3KioXAQEBAQEg9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf3IAYGAAYHGCgwNzk6Ojqkp62tra2trUo5OTo6ODo3OTk5N0enra2tra2tra2tra2trrCoPDma + ra2tra2trVU5Uqitra2tra2dOjk5NzcwKBcAAAEAACH2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/YiBAEGAAAXKTE2ODg6Oqe1r7CwsLCwSzo6Ojg6Ojo6Ojo5Rqqwrq6wsLCusLCw + sK6usKc6PJ6wsLCwsLCwVTlQrrCwsLCwsKA6OTk3Ny8oGAcGAAYGIPcXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9iEBBwEGBhkpMTY6Ojk/qrK0tLS0tbVKOjo8Ojo6Ojo4OjlHtba1 + tbS0tbVVVFVWVVVVUjo6oLS0tLS0tLRWOk+1tLS0tLS0pDo5OTg3MCgXAAAGAQQi9hcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2IgYBBgEGGCkxNjg4OjyouLq4tbi4tks8Ojo4Ojo6 + Ojo8Oke0uLi4ura2tjo8Ojw6Ojk6OjmluLe2uLq4tlg8Vbe3tri6uLWnPDo6ODYxKRkGBgEHASH2FwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/clBwcHBwcZKTE2Ojo8OrW4ur24ur24 + Szo6PDo6Ojo6ODo6SLi4uLq+uLi3Ojo6PDk6Ojk6Oqi6vri4ur64alRpur64uLq9uKo8ODo4NjEpGAcB + BgEGIvYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9iUHBgYGBhkqMjc5OTw6 + t724vri+vr5LPDk8PDo8Ojw6PDlHvbi+uL64wrg/OTk8Ojo6Ojw8qri+uL64vri+uL64vri+uL64rjo6 + PDg2MSkZBwcHBwcl9xcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2JQcHBwcH + GioyNjw6PDq3w8PDw8PCwks6Ojk5OTk6ODk8Oka/w8PDw8PCw0E6Ojo8Pzo6Ojmqw8PDw8PDw8PDw8PD + w8PDw8OyOjk6OTYxKRkGBgYGByX2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + F/YmBwcHBwcaKjI3OTo6QLrFxcXFxcXFiIWAgoKCgoCFhXM5R8TFxcXFxcXCOjo6Ojw8Ojo6OrXExcXF + xcXFxcXExsfGxcXFxbI8Ojo6ODIqGgcHBwcHJfYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9yYICAgJCRgqMjo6Ojo8vsrIysjKyMrIysjKyMrKyMfHrjpIyMjKyMrHyMZAPDw8Ojo6 + PDk8tMjKyMrIysjKysjHyMrIysfItTw8Ojk3MioaBwcHBwcm9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABf2JwoJCQkIGiw3Nzo6OkbCzcjOyM7IzsjOyM7IzsjOyMivPEjKyM7IzsjO + x0E6OjpAPDo/Oj+1yM7IzsjOyM7IzsjIzcjOyM64PDo8PDgyKhoICAgICCb3FwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YnCQkJCgoZKjI5Ojo6OsPNzc/Pz8/Pz8/Pz8/Pz8/O1LU6 + SM3Pz8/Pz9LIP0A6Oj86PEA6PLbPzc/Pz8/Pz8/Pz9SaYWFhYVw/Ojo4NzIsGQkJCQkKJ/YXAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9igKCgoKChosNzc6PD8/xdXV0tLS0tLS0tLS + 0tLS0tLStTpKz9LS0tLS0s46PDo6Pzw6QTo6uNXV0tLS0tLS0tLS0ohAOjo6Ojo6PDo6NyoaCgkJCQkn + 9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3KAsLCwwNHCo0Ojw6PEDH1tbW + 1tbW18XDyNbW1tbW1ta6OknV1tbW1tbW0kc6QDpAOjo/PD+41tbW1tbW1tbW1tbYl1hYWFlWPD86ODg0 + LBoKCgoKCij2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YpDAsLCwsaKjY4 + OkA6Qc7a2dnZ2dnZVTpk2NnZ2dnZ2bo8S9jZ2dnZ2dnVQDo/Oj86Pzw6QMLZ2dnZ2dnZ2dnZ2dnZ2dnZ + 2cM6Pzo6PDQqGg4LCwsLKPcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9ikM + DAwMDxoqNjo6QDo6zdvb29vb29tRPGfb3dvb29vbvTpK2t3b29vb3NxBPz8/Pz9AOj88w9vb29vb29vd + 3d3b29vb29zcxkBAOjo4MikcCwsLCwwp9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf2LA4NDQ0NGik3Nzo6OkbV4eHh4eHh4VU8Z+Te4eHh4eHCPEzc3uHh4eHh3Do6Ojo6Ojo6QTrH + 4eHh4eHh4aaWo+Hh4eHh4eHHPzo6Pzo3KhwMDAwMDCn2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/YqDQ0NDg8aLDQ6OkY6QNbj4+Pj4+PjWDpn4+Pj4+Pj48Q6SuTj4+Pj4+PcRjpG + OkY6RjpBP8fj4+Pj4+PkYjxc4+Th4+Pj480/Pzo6OjIqHA0NDQ0OLPYXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9iwODg4ODBovNzo6QDpE2ubl5+bn5uZVOmrl5+bn5ufmxz9K5Ofl + 5+bn5uRHOkA6QDpAOkA6x+bn5ufm5+ZnOl/m5+fn5+bnzjw6QDo8NykgDg0NDQ0q9hcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3Kg8PDg4XGiw2OjpAOkDc7Ofs5+zn59XN1ufs5+zn + 7efIQUvl7Ofs5+zn6c3Nzc3Nzc3GQTzU5+zn7Ofs52Y6X+fn7Ofs5+nVRj9AOjg3KRwODg4ODiz2FwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YpEQ8PDw8aKjk6P0A/Qd7t7e3t7e3t + 7e3t7e3t7e3t7cc/S+fv7e3t7e3t7e3t7e3t7eNHOtXu7e3t7e3tZzpg7e3t7e3t7dU/Ojo8OjQsGhAO + Dg4OKvcXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9ywOEBAREh8pNjo8Pz9B + 4fDw8PDw8PDw8PDw8PDw8PDv1T9M7PDw8PDw8PDw8PDw8PDx50c61PDw8PDw8PBmP1/w8PDw8PDw2EA/ + Rjo5NywcDQ8PDxEp9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf3LBcRERER + Gi83OTpBQEDj8vLy8vLy8vLy8vLy8vLy8vLOOkzy8/Ly8vLy8vLy8vLy8vLsRjrZ8vLy8vLy8mc/X/Ly + 8vLy8vLbQD8/Ojo3LB8XEBAQDiz3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + FPcqEREREhQgLDc6Pzo/Ruf09PT09PT09PT09PT09PT09NVATPL09PT09PT09PT09PT09OxGP9r09PT0 + 9PT0Zz9g9PT09PT09N1BQUA8PDkqGhERERIXKfYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9i8SEhISEBoqOjw/R0BBnqenp6enp6enp6enp6enp6enlD9Ipaenp6enp6enp6enp6en + okc/laenp6enp6dWP1Knp6anp6aml0A/Ojo/NikgEREREQ8p9xcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABf3LxISEhIXICk4OjpAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEFHOjw4LB8SERARFy/2FwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YxEhIREhEaMDY8P0BAQEBAQEBAQEBAQEBAQEBAQEBAQEBA + QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA6OjkpIhYUFxISL/YXAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9i8XERcSFyUvNjo8P0FBQUFBQUFBQUFBQUFB + QUFBQUFBQUFBQUFBQUFBQUFBQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA6OioaEBESEhYw + 9hcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2MhYXEhcSICk6OkZHQUFBQUFB + QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT9AP0BBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAPzw3 + KSQXFxEXESn2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/YqFxcXFxciKjk6 + Oj9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR0BHQEFBQD9BQUFBQUFBQUFBQUFBQUFB + QUFBQUA/PDkqIBcUFxIXN/YXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9jcX + FhYWFiEvODxBRkFAQUFBQUFBQUFBQT9AP0A/QD9AP0A/QD9AP0A/QD9AP0A/OkE6QEFARj9BQEFAQUBB + QEFAQUBBQEFAQUBBPz88NiwhGBYXFxcx9hcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf3MhcXFxcXIS86Oj9AQUZBQEFAQUBBQEE/RkFGQUZBRkFGQUZBRkFGQUZBRkFGQUZGQUY6QDpA + Oj86Pzo/Oj86Pzo/Oj86Pzo/Oj86PDk3KhoWFhYWFzT2FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/Y0GBcXFxchLzg8QUdBQEFGQUZBRkFGQUY/QUBBQEFAQUBBQEFAQUBBQEFAP0BB + QDo6Ojo8OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg3NDEpGhkXFxcXMPYXAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9jQYGBgYGCEwPDo/QT9GQUBBQEFAQUBBP0ZBRkFGQUZBRkFGQUZB + RkFGQUZHPz8/Ojo3MjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApKCIaFxcXFxY39xYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2NhkXGhoZIi84OkdGRj9ARkBGQEZARkBGQEBAQEBA + QEBAQEBAQEBAQEA/QUA6PzgyMiopKSgnJSUlJSUlJSUlJSUlJSUlJSUlJSUlJCUfGhYYGBgYGDL3FgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/c2GhoYGhoiMjo6OkBGRkZARkBGQEZA + RkBGRkZGRkZGRkZGRkZGRkZGRkZBQTo4NykpIhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhkYGRkZFxcZ + GRkZN/cXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9jYaGRocGiIvOTpHRkBA + QEZARkBGQEZARkBAQEBAQEBAQEBAQEBAQEBAPz8/OTApIRwaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoa + GhoZGRwaGhoZFxg29xoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2NhwaHBwa + IjA5Pz9AR0ZGQEZARkBGQEZARkZGRkZGRkZGRkZGRkZGRkdHOjoyKSIaGhkYICIiIiIiIiIiIiIiIiIi + IiIiIiIiIiIiHBoaHBwcGhoaGkvvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + F/Y5HBocHBokMDc/R0dAQUFHQUdBR0FHQUdBQUFBQUFBQUFBQUFBQUFBQD86NikhGhoaKTc2NjY2NjY2 + NjY2NjY2NjY2NjY2NjY2NjY3HBocGhoaGh8y2NUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9jkfGhoaHCUxOjo/R0dHR0FHQUdBR0FHQUdHR0dHR0dHR0dHR0dGRkdHOjk3JSAaGjE3 + Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc4OSocGhoaGhoaMtbkJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABf2ORoaIBogJTE5P0dBQUFBR0FHQUdBR0FHQUFBQUFBQUFBQUFBQUFHRjo6 + NiwaHxoxNjc6OTg4ODg2Nzo5ODg4ODg4ODg4ODg4NjcsGhofHBofGjbW4SUAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/c5IRohGhokMTpAQEdGR0ZBRkFGQUZBRkFGR0ZHRkdGR0ZH + RkdGR0FBRjg3KRoaJDo6Ojk5ODg6ODo6OTg3OTk6Ojc6NzY4ODk6KRogGiAaGho01+EkAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9jofGiAaICQxOEBHREZBR0ZGRkZGRkZGRkZE + R0FGQUZBRkFGQUZBRkZAOjclGiIwOTo8Ojo6Ojo6PDw6Ojo6Ojw6Ojo6Ojo5OSkfGiEaIRohN9bhJQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2Oh8fHx8fJDI6Oj9GR0dHR0dH + R0dHR0dHR0RGRkZGRkZGRkZGRkZGQUA6MSQaHzo6Ojw8Ojw/Ojo6PDk6PDo6Ojo6Ojo8OjkqGiAaIBog + GjjX4SYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/Y5ICAfHx8lMDhG + RkdHRkZGRkZGRkZGRkZGRkdHR0dHR0dHR0dHR0dHPzkwIh8fOTo/Ojo6Pzw6Oj86Ojw8PDo6Ojo6Ojo6 + KSAfHx8fHx841+ElAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9zog + ICAgICQ3Oj9GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkRAOjAgISY6QEA6QDpAOkA6OjxBOjxB + OkA6PD86PCofICAgICAgONjhJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABf3OiIiISEhJTA6QUZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGREA5LyUgJzpBOjpBOkE6 + QTpBOkE6OkA6Ojo6QTosICAgICAgIDjZ4SQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFPc6ISEhISElNzk/RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZEPzkvISIp + OjxAOkA6QDpAOkA6P0E6P0E6Rzo8KCEhISEhISE52eElAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAX9zoiICIiIiYwOkFGRkdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRkZG + REY6PDAlIig/Rj8/Pz8/Pz8/Pz8/PzpAPzo/OikiISEhHyEhONfhJgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABT3PCUlISEhJjc5RkdHR0dHR0dHR0dHR0dHR0dHR0dH + R0dHR0dHR0dHR0E6MCQhKTpAQEBAQEBAQEBAQEBARj9ARjopICAgICElITzY4SUAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/c6KCUlJSUmMDpBREdHR0dHR0dHR0dH + R0dHR0dHR0dHR0dHR0dHR0ZHQTowJCUqRj9AQUFBQUFBQT9AQUE/OkY6KSQlJSUlJSI62+EkAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU9zokJCQkJCY3PEdGR0hI + SEhISEhISEhISEdHR0dHR0dHR0dHR0dHR0Q/OjAkJSk/RkE/P0BBQEE/RkFAQUZHPyokJCQkJCImOtjh + JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2QCUlJSUl + JzE6REdISEhISEhISEhISEhISEhISEhISEhISEhISEhHREY4MSYlLEZAQEZGRkBGQEZAQEY/QUEpJSQk + JCQkJT/a4SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + F/c/JSUlJSUmNzpBRkhISEhISEhISEhISEhISEhISEhISEhISEhISEdHQTowJigpR0dGQUFBR0FGQEZG + QEdAKiUlJSUlJSc63eElAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAX9kEnJiYmJic3OkdHSEhISEhISEhISEhISEhISEhISEhISEhISEhIR0ZGOjAmJilJRkdH + R0ZBRkFGQURGPyomJiYmJiYlP9zhJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAARf2PycnJycnKTc6REdJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSEhISEhIRkE5 + MSYoKkZGRkZHR0dHR0dHREYqJiYmJiYmJkHc4SUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/ZHKCgoKCgoNDpHSElJSUlJSUlJSUlJSUlJSUlJSUlJSUlJ + SUlJSUhHRzoyJicvRkZGRkZGRkZGRkRBLCgnJycnJyVB4eEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU9kAoKCgoKCk3OkRHSUlJSUlJSUlJSUlJSUlJ + SUlJSUlJSUlJSUlJSEhEOjEnKDBHR0dHR0dHR0ZERikoKCgoKCgoR+HhJAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf2RigqKikpKTQ6RklJSkpKSkpK + SUlJSUlJSUlJSUlJSUlJSUlJSUlIR0E6MicpMUhISEhISEhISEYoKSkoKCgoJkTh4SUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF/ZHKSooKSkqNzpH + SEpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSklHRzowKCgvSUlJSUlJSUlELCkpKCkpKSlH5OEmAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9kYq + KSksLCo0OkZJSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSUhGOjcnKTdKSUpMS0pKRikpLykpKios + SOHhJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAARf2RyopLyksKTc6R0hKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpJRkY8MSopNEtLS0tKTEcp + KSksLCwpKUjh5CUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAF/ZHLCovKSopNzpKSktLS0tLS0tLS0tLS0tLS0tKSkpKSkpKSkpKSkpIRjo3KCk4 + S0xMTExGKSosLCopKipR59omAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAEY9kopLC8pLCo3OkRJS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tL + SklHOjQpKTRPTEtLRCkvLykpLyksVufVDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SCoqMSkwLDc/R0dLS0tLS0tLS0tLS0tLS0tLS0tL + S0tLS0tLS0tKSUc6NiosN0xMTEcpLywqKi8vKVjs1g4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGPZIMSkxKikqNDpHSUtLTExMS0tLS0tL + S0tLS0tLS0tLS0tLS0tLS0pJRzo0Ki80TExGMSkxKTEqKi9Z59UOAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW9kkvKjAqMCkxOkdHSEtJ + SUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlLSklHPDQpLypVRzAvKjAqMCkyWufXDAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARr2SC8vLzAw + KCw5OkdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0ZJR0Q6MSkxKjoqLy8vMDIyKlXs1A0AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + BPFYMDAwMDApJzA3P0ZBR0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFBOjkpKTAvLy8vLy8vLypZ8dcN + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAEB24IwMDAwMDAkJyo2OTk8Ojw6PDo8Ojw6PDo8Ojw6PDo8Ojw6PDo8OTg2MSYnMDAwMDAw + MDAxWe7UBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAC4wjIxMTExMS8lJSgpKjAqMCowKjAqMCowKjAqMCowKjAqMCowKjAqLyol + GigwMDAwMDAwL1zx1QoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlr0RzAyMjIxMTEsKigoKSkpKSkpKSkpKSkpKSkpKSkpKSkp + KSkpKSgoJyUlMDExMTEyMjJZ8ccBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeSnNzQxMTAxMDEwMTAxMDEwMTAxMDEwMTIy + MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjAxWfHPAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABf/ZqMjcwNzI3MjcyNzI3Mjcy + NzI3MjcyMTIxMjEyMTIxMjEyMTIxMjEyMTIxMjEyN1/xxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuO1YNjc0NDQ0 + NDQ0NDQ0NDQ0NDQ0NDQ3MjcyNzI3MjcyNzI3MjcyNzI3MjcyNzJh8MoBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH + 2+dvNDQyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjQ0NDQ0YvDCBgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAGx/awVzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NDQ0NGLuxAEAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAiOf0xJeCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKe + 8M4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITV4+Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl + 5eXl5eXl5uSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////4AAAAAAAAAAAD////////8AAAAAAAAAAAAP///////8AAAAAAAAAAAAB///////+ + AAAAAAAAAAAAAP///////AAAAAAAAAAAAAB///////wAAAAAAAAAAAAAP//////4AAAAAAAAAAAAAD// + ////+AAAAAAAAAAAAAAf//////gAAAAAAAAAAAAAH//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAA + AAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAA + AAAAAAAAD//////wAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////w + AAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAA// + ////8AAAAAAAAAAAAAAP//////AAAAAAAAAAAAAAH//////wAAAAAAAAAAAAAD//////8AAAAAAAAAAA + AAB///////AAAAAAAAAAAAAA///////wAAAAAAAAAAAAAf//////8AAAAAAAAAAAAAP///////AAAAAA + AAAAAAAH///////wAAAAAAAAAAAAD///////8AAAAAAAAAAAAB////////AAAAAAAAAAAAA////////w + AAAAAAAAAAAAf///////8AAAAAAAAAAAAP////////AAAAAAAAAAAAH////////wAAAAAAAAAAAD//// + ////8AAAAAAAAAAAB/////////AAAAAAAAAAAA/////////wAAAAAAAAAAAf////////8AAAAAAAAAAA + P/////////AAAAAAAAAAAH/////////wAAAAAAAAAAD/////////8AAAAAAAAAAB//////////AAAAAA + AAAAA//////////wAAAAAAAAAAf/////////8AAAAAAAAAAP//////////AAAAAAAAAAH//////////w + AAAAAAAAAD//////////8AAAAAAAAAB///////////AAAAAAAAAA///////////wAAAAAAAAAf////// + ////8AAAAAAAAAP///////////AAAAAAAAAH///////////wAAAAAAAAD///////////+AAAAAAAAB// + //////////gAAAAAAAA////////////8AAAAAAAAf////////////AAAAAAAAP////////////4AAAAA + AAH/////////////AAAAAAAD/////////////8AAAAAAB//////////////wAAAAAB////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////ygAAABAAAAAgAAAAAEAIAAAAAAAAIAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAA + AwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAA + AwAAAAMAAAADAAAAAwAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABgAAAB8AAAA8AAAASQAAAEoAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAA + SwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAA + SwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEoAAABKAAAAQwAAAC4AAAASAAAAAgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEtJSUmm//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////AAAA + dQAAADEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAFj/////AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/zIyMv//////AAAAPgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAADv/////AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//////8AAAAsAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAA8AAAB3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8RERH/AAAA + awAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAj/////wAAAP8AAAD/AAAA/xcXF/8kJCT/KSkp/yoqKv8qKir/Kioq + /yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq + /yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/yoqKv8qKir/Kioq/ygoKP8hISH/AAAA + /wAAAP8AAAD/AAAA//7+/v8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANP////8AAAD/AAAA/wAAAP8jIyP/Li4u + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8xMTH/LCws/yEhIf8AAAD/AAAA/wAAAP//////AAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADr/////AAAA + /wAAAP8AAAD/Jycn/zExMf80NDT/NDQ0/6qqqv+qqqr/qqqq/6qqqv80NDT/NDQ0/6qqqv+qqqr/NDQ0 + /zQ0NP+qqqr/qqqq/6qqqv+qqqr/qqqq/zQ0NP+qqqr/qqqq/6qqqv+qqqr/NDQ0/6qqqv+qqqr/NDQ0 + /6qqqv+qqqr/qqqq/6qqqv80NDT/NDQ0/zExMf8nJyf/AAAA/wAAAP8AAAD//////wAAADkAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAA7/////wAAAP8AAAD/AAAA/ykpKf8yMjL/NTU1/zU1Nf81NTX/NTU1/7e3t/+3t7f/NTU1 + /zU1Nf+3t7f/t7e3/zU1Nf81NTX/t7e3/7e3t/81NTX/t7e3/7e3t/81NTX/t7e3/7e3t/+3t7f/t7e3 + /zU1Nf+3t7f/t7e3/zU1Nf+3t7f/t7e3/7e3t/+3t7f/NDQ0/zQ0NP8xMTH/KCgo/wAAAP8AAAD/AAAA + //////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8AAAD/AAAA/wAAAP8qKir/MzMz/zY2Nv82Njb/NTU1 + /zU1Nf/FxcX/xcXF/zU1Nf81NTX/xcXF/8XFxf81NTX/NTU1/8XFxf/FxcX/NTU1/8XFxf/FxcX/NTU1 + /8XFxf/FxcX/xcXF/8XFxf81NTX/xcXF/8XFxf81NTX/xcXF/8XFxf/FxcX/xcXF/zU1Nf81NTX/MjIy + /ykpKf8AAAD/AAAA/wAAAP//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////AAAA/wAAAP8AAAD/Kioq + /zMzM/82Njb/NjY2/9PT0//T09P/09PT/9PT0/82Njb/NjY2/9PT0//T09P/NjY2/zY2Nv/T09P/09PT + /zY2Nv/T09P/09PT/zY2Nv/T09P/09PT/9PT0//T09P/NjY2/9PT0//T09P/NjY2/9PT0//T09P/09PT + /9PT0/82Njb/NjY2/zMzM/8qKir/AAAA/wAAAP8AAAD//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7//// + /wAAAP8AAAD/AAAA/ysrK/80NDT/Nzc3/zc3N//g4OD/4ODg/zc3N/83Nzf/NjY2/zY2Nv/g4OD/4ODg + /zY2Nv82Njb/4ODg/+Dg4P82Njb/4ODg/+Dg4P82Njb/4ODg/+Dg4P/g4OD/4ODg/zY2Nv/g4OD/4ODg + /zY2Nv/g4OD/4ODg/+Dg4P/g4OD/NjY2/zY2Nv8zMzP/Kioq/wAAAP8AAAD/AAAA//////8AAAA7AAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAABAAAAO/////8AAAD/AAAA/wAAAP8rKyv/NDQ0/zc3N/83Nzf/7e3t/+3t7f/t7e3/7e3t + /zc3N//t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/t7e3/Nzc3/+3t7f/t7e3/Nzc3/+3t7f/t7e3/7e3t + /+3t7f83Nzf/7e3t/+3t7f83Nzf/7e3t/+3t7f/t7e3/7e3t/zc3N/83Nzf/NDQ0/ysrK/8AAAD/AAAA + /wAAAP//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////AAAA/wAAAP8AAAD/LCws/zU1Nf84ODj/ODg4 + //r6+v/6+vr/+vr6//r6+v84ODj/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6/zg4OP/6+vr/+vr6 + /zg4OP/6+vr/+vr6//r6+v/6+vr/Nzc3//r6+v/6+vr/Nzc3//r6+v/6+vr/+vr6//r6+v83Nzf/Nzc3 + /zQ0NP8rKyv/AAAA/wAAAP8AAAD//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////wAAAP8AAAD/AAAA + /ywsLP81NTX/ODg4/01NTf+jo6P/o6Oj/6Ojo/+ZmZn/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/o6Oj + /6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/84ODj/o6Oj/6Ojo/+jo6P/o6Oj/zg4OP+fn5//o6Oj + /6Ojo/+jo6P/RUVF/zg4OP81NTX/LCws/wAAAP8AAAD/AAAA//////8AAAA7AAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA + O/////8CAgL/AQEB/wEBAf8sLCz/NjY2/zk5Of9RUVH/qamp/6mpqf+pqan/oKCg/zk5Of85OTn/OTk5 + /zk5Of85OTn/OTk5/6mpqf+pqan/qamp/6mpqf+pqan/qamp/6mpqf+pqan/OTk5/6mpqf+pqan/qamp + /6mpqf84ODj/pqam/6mpqf+pqan/qamp/0ZGRv84ODj/NTU1/ywsLP8BAQH/AQEB/wEBAf//////AAAA + OwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAADv/////AwMD/wMDA/8DAwP/LCws/zY2Nv85OTn/UlJS/7CwsP+wsLD/sLCw + /6Wlpf85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of+wsLD/sLCw/7CwsP+wsLD/sLCw/7CwsP+wsLD/sLCw + /zk5Of+wsLD/sLCw/7CwsP+wsLD/OTk5/6ysrP+wsLD/sLCw/7CwsP9ISEj/OTk5/zY2Nv8sLCz/AgIC + /wICAv8CAgL//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////wQEBP8EBAT/BAQE/y0tLf83Nzf/Ojo6 + /1NTU/+3t7f/t7e3/7e3t/+rq6v/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/t7e3/7e3t/+3t7f/t7e3 + /zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/t7e3/7e3t/+3t7f/t7e3/zo6Ov+ysrL/t7e3/7e3t/+3t7f/SUlJ + /zo6Ov83Nzf/LS0t/wMDA/8DAwP/AwMD//////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8GBgb/BgYG + /wYGBv8uLi7/ODg4/zs7O/9VVVX/vr6+/76+vv++vr7/sbGx/zo6Ov86Ojr/Ojo6/zo6Ov86Ojr/Ojo6 + /76+vv++vr7/vr6+/76+vv86Ojr/Ojo6/zo6Ov86Ojr/Ojo6/76+vv++vr7/vr6+/76+vv+/v7//vr6+ + /76+vv++vr7/vr6+/0lJSf86Ojr/Nzc3/y0tLf8FBQX/BQUF/wUFBf//////AAAAOwAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AQAAADv/////BwcH/wcHB/8HBwf/Li4u/zg4OP87Ozv/VlZW/8XFxf/FxcX/xcXF/7e3t/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zs7O//FxcX/xcXF/8XFxf/FxcX/Ozs7/zs7O/87Ozv/Ozs7/zs7O//FxcX/xcXF + /8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf9KSkr/Ozs7/zg4OP8uLi7/BgYG/wYGBv8GBgb///// + /wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAEAAAA7/////wgICP8ICAj/CAgI/y8vL/85OTn/PDw8/1hYWP/MzMz/zMzM + /8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP88PDz/zMzM/8zMzP/MzMz/zMzM/zw8PP87Ozv/Ozs7 + /zs7O/87Ozv/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/SkpK/zs7O/84ODj/Li4u + /wcHB/8HBwf/BwcH//////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8KCgr/CgoK/woKCv8vLy//OTk5 + /zw8PP9YWFj/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/PDw8/9LS0v/S0tL/0tLS + /9LS0v88PDz/PDw8/zw8PP88PDz/PDw8/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v88PDz/PDw8 + /zw8PP88PDz/OTk5/y8vL/8JCQn/CQkJ/wkJCf//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////CwsL + /wsLC/8LCwv/MDAw/zo6Ov89PT3/WVlZ/9nZ2f/Z2dn/2dnZ/8vLy/9PT0//2dnZ/9nZ2f/Z2dn/2dnZ + /z09Pf/Z2dn/2dnZ/9nZ2f/Z2dn/PT09/z09Pf89PT3/PT09/z09Pf/Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ + /9nZ2f/Z2dn/09PT/9PT0/9KSkr/PDw8/zk5Of8vLy//CgoK/woKCv8KCgr//////wAAADsAAAABAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAA7/////wwMDP8MDAz/DAwM/zAwMP86Ojr/PT09/1paWv/g4OD/4ODg/+Dg4P/Nzc3/PT09 + /+Dg4P/g4OD/4ODg/+Dg4P89PT3/4ODg/+Dg4P/g4OD/4ODg/z09Pf89PT3/PT09/z09Pf89PT3/4ODg + /+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/TU1N/z09Pf86Ojr/MDAw/wwMDP8MDAz/CwsL + //////8AAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8ODg7/Dg4O/w4ODv8wMDD/Ozs7/z4+Pv9cXFz/5+fn + /+fn5//n5+f/1NTU/z4+Pv/n5+f/5+fn/+fn5//n5+f/Pj4+/+fn5//n5+f/5+fn/+fn5/8+Pj7/Pj4+ + /z4+Pv8+Pj7/Pj4+/+fn5//n5+f/5+fn/+fn5/8+Pj7/39/f/+fn5//n5+f/5+fn/05OTv8+Pj7/Ozs7 + /zAwMP8NDQ3/DQ0N/w0NDf//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////Dw8P/w8PD/8PDw//MTEx + /zw8PP8/Pz//XV1d/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/z4+Pv/u7u7/7u7u + /+7u7v/u7u7/7u7u/+7u7v/u7u7/7u7u/z4+Pv/u7u7/7u7u/+7u7v/u7u7/Pj4+/+bm5v/u7u7/7u7u + /+7u7v9OTk7/Pj4+/zs7O/8wMDD/Dg4O/w4ODv8ODg7//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7//// + /xAQEP8QEBD/EBAQ/zExMf88PDz/Pz8//11dXf/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f8/Pz//9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f8/Pz//9fX1//X19f/19fX/9fX1 + /z8/P//s7Oz/9fX1//X19f/19fX/UFBQ/z8/P/88PDz/MTEx/xAQEP8QEBD/EBAQ//////8AAAA7AAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAABAAAAO/////8SEhL/EhIS/xISEv8yMjL/PT09/0BAQP9eXl7//Pz8//z8/P/8/Pz//Pz8 + //z8/P/8/Pz//Pz8//z8/P/8/Pz/QEBA//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/Pz8/ + //z8/P/8/Pz//Pz8//z8/P8/Pz//8/Pz//z8/P/8/Pz//Pz8/1BQUP8/Pz//PDw8/zExMf8RERH/ERER + /xEREf//////AAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////ExMT/xMTE/8TExP/MjIy/z09Pf9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /z09Pf8yMjL/EhIS/xISEv8SEhL//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////xQUFP8UFBT/FBQU + /zMzM/8+Pj7/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP89PT3/MjIy/xQUFP8UFBT/FBQU//////8AAAA7AAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA + O/////8WFhb/FhYW/xYWFv8zMzP/Pj4+/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/Pj4+/zMzM/8VFRX/FRUV/xUVFf//////AAAA + OwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAADv/////FxcX/xcXF/8XFxf/NDQ0/z8/P/9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0FBQf8/Pz//PT09 + /zw8PP87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zg4OP8uLi7/FhYW + /xYWFv8WFhb//////wAAADsAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////xgYGP8YGBj/GBgY/zQ0NP9AQED/Q0ND + /0NDQ/9DQ0P/Q0ND/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0BAQP88PDz/NjY2/y8vL/8sLCz/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr + /ysrK/8pKSn/ISEh/xgYGP8YGBj/GBgY//////8AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8aGhr/Ghoa + /xoaGv80NDT/QEBA/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0FBQf88PDz/MTEx/yQkJP8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ + /xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf8ZGRn/GRkZ/xkZGf//////AAAANAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AQAAADv/////Gxsb/xsbG/8bGxv/NTU1/0FBQf9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0NDQ/9DQ0P/Q0ND/0JCQv8+Pj7/MjIy/x8fH/8bGxv/GBgY/zY2Nv82Njb/NjY2 + /zY2Nv82Njb/NjY2/zY2Nv81NTX/NTU1/zU1Nf81NTX/NTU1/xwcHP8aGhr/Ghoa/xoaGv8aGhr///// + /wAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAEAAAA7/////xwcHP8cHBz/HBwc/zU1Nf9BQUH/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9CQkL/Ozs7/ykpKf8cHBz/Nzc3 + /zg4OP84ODj/ODg4/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/8cHBz/HBwc + /xwcHP8cHBz//v7+/wAAADwAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8eHh7/Hh4e/x4eHv82Njb/QkJC + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/QkJC + /zc3N/8ZGRn/HR0d/zo6Ov85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/zk5Of85OTn/OTk5 + /zk5Of8dHR3/HR0d/x0dHf8dHR3//////wAAAD8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////Hx8f + /x8fH/8fHx//NjY2/0JCQv9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0JCQv81NTX/Hx8f/ykpKf87Ozv/Ozs7/zs7O/87Ozv/Ozs7/zs7O/87Ozv/Ozs7 + /zs7O/87Ozv/Ozs7/zo6Ov8eHh7/Hh4e/x4eHv8eHh7//v7+/wAAAD4AAAAIAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAA7/////yAgIP8gICD/ICAg/zc3N/9DQ0P/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9CQkL/NTU1/yAgIP86Ojr/PT09/z09Pf89PT3/PT09 + /z09Pf89PT3/PT09/z09Pf89PT3/PT09/zw8PP8gICD/ICAg/yAgIP8gICD//v7+/wAAAD4AAAAHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAO/////8iIiL/IiIi/yIiIv84ODj/RERE/0dHR/9HR0f/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/QkJC/zU1Nf8hISH/Pz8/ + /z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8+Pj7/Pj4+/z4+Pv8hISH/ISEh/yEhIf8hISH///// + /wAAAD4AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////IyMj/yMjI/8jIyP/ODg4 + /0RERP9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0NDQ/81NTX/IyMj/0FBQf9BQUH/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP8iIiL/IiIi + /yIiIv8iIiL//////wAAAD8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7//// + /yUlJf8lJSX/JSUl/zg4OP9FRUX/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9DQ0P/NTU1/yQkJP9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC + /0JCQv8kJCT/JCQk/yQkJP8kJCT//////wAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAABAAAAO/////8mJib/JiYm/yYmJv84ODj/RUVF/0hISP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/SEhI/0hISP9ISEj/RERE/zY2Nv8lJSX/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP8lJSX/JSUl/yUlJf8lJSX//////wAAAD4AAAAHAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADv/////Jycn/ycnJ/8nJyf/OTk5/0ZGRv9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0VFRf83Nzf/Jycn + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv8nJyf/Jycn/ycnJ/8nJyf//////wAAAD4AAAAHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7/////ykpKf8pKSn/KSkp + /zk5Of9GRkb/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ + /0lJSf9FRUX/Nzc3/ygoKP9ISEj/SEhI/0hISP9ISEj/SEhI/0dHR/8oKCj/KCgo/ygoKP8oKCj///// + /wAAAD8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA + O/////8qKir/Kioq/yoqKv86Ojr/R0dH/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/RkZG/zc3N/8pKSn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf8pKSn/KSkp + /ykpKf8pKSn//////wAAAD4AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAQAAADv/////Kysr/ysrK/8rKyv/Ojo6/0dHR/9KSkr/SkpK/0pKSv9KSkr/SkpK + /0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0ZGRv83Nzf/Kysr/0tLS/9LS0v/S0tL + /0tLS/8rKyv/Kysr/ysrK/8rKyv//////wAAAD0AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA6/////ywsLP8sLCz/LCws/zo6Ov9ISEj/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9HR0f/ODg4 + /ywsLP9NTU3/TU1N/0tLS/8sLCz/LCws/ywsLP8sLCz//////wAAADoAAAAGAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOf////8uLi7/Li4u + /y4uLv84ODj/R0dH/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0pKSv9KSkr/RkZG/zg4OP8tLS3/SUlJ/05OTv8tLS3/LS0t/y0tLf8tLS3//////wAAADkAAAAHAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAADD/////Ly8v/y8vL/8vLy//Li4u/z4+Pv9FRUX/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG + /0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0JCQv80NDT/Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy////// + /wAAADgAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAd/////zAwMP8wMDD/MDAw/x0dHf8rKyv/MjIy/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP8xMTH/JiYm/zAwMP8wMDD/MDAw + /zAwMP8wMDD//////wAAADcAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsXFxbkyMjL/MjIy/zIyMv8yMjL/MjIy + /zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/zIyMv8xMTH/MTEx + /zExMf8xMTH/MTEx/zExMf8xMTH//////wAAADYAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn//// + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP//////wAAADUAAAAFAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAABQAAADT/////NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0 + /zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT//////wAAADUAAAAGAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIrS0tJ3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /wAAAC8AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA + EgAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAAFwAAABcAAAAXAAAA + FwAAABcAAAAXAAAAFgAAAA4AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////// + ///4AAAAAD////AAAAAAD///4AAAAAAH///gAAAAAAf//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AA + AAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD + ///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AA + AAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD + ///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAB///wAAAAAAP///AAAAAAB///8AA + AAAAP///wAAAAAB////AAAAAAP///8AAAAAB////wAAAAAP////AAAAAB////8AAAAAP////wAAAAB// + ///AAAAAP////8AAAAB/////wAAAAP/////AAAAB/////8AAAAP/////wAAAB//////gAAAP//////AA + AB//////+AAAP/////////////////////////////////////////////////////////8oAAAAQAAA + AIAAAAABAAgAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEBAf8CAgL/AwMD/wQEBP8FBQX/BgYG + /wcHB/8ICAj/CQkJ/woKCv8LCwv/DAwM/w0NDf8ODg7/Dw8P/xAQEP8RERH/EhIS/xMTE/8UFBT/FRUV + /xYWFv8XFxf/GBgY/xkZGf8aGhr/Gxsb/xwcHP8dHR3/Hh4e/x8fH/8gICD/ISEh/yIiIv8jIyP/JCQk + /yUlJf8mJib/Jycn/ygoKP8pKSn/Kioq/ysrK/8sLCz/LS0t/y4uLv8vLy//MDAw/zExMf8yMjL/MzMz + /zQ0NP81NTX/NjY2/zc3N/84ODj/OTk5/zo6Ov87Ozv/PDw8/z09Pf8+Pj7/Pz8//0BAQP9BQUH/QkJC + /0NDQ/9ERET/RUVF/0ZGRv9HR0f/SEhI/0lJSf9KSkr/S0tL/01NTf9PT0//UFBQ/1FRUf9TU1P/VVVV + /1ZWVv9XV1f/WFhY/1lZWf9bW1v/XV1d/15eXv9fX1//YGBg/2NjY/9kZGT/ZWVl/2ZmZv9nZ2f/aGho + /2lpaf9qamr/a2tr/2xsbP9tbW3/bm5u/29vb/9wcHD/cXFx/3Nzc/90dHT/dXV1/3Z2dv93d3f/eHh4 + /3l5ef96enr/e3t7/3x8fP99fX3/fn5+/39/f/+AgID/gYGB/4KCgv+Dg4P/hISE/4WFhf+Ghob/h4eH + /4iIiP+JiYn/ioqK/4yMjP+Ojo7/j4+P/5CQkP+RkZH/kpKS/5OTk/+UlJT/lZWV/5aWlv+Xl5f/mJiY + /5mZmf+ampr/m5ub/5ycnP+dnZ3/np6e/5+fn/+goKD/oaGh/6Kiov+jo6P/pKSk/6Wlpf+mpqb/p6en + /6ioqP+pqan/qqqq/62trf+urq7/r6+v/7CwsP+zs7P/tLS0/7a2tv+3t7f/uLi4/7m5uf+6urr/vb29 + /76+vv+/v7//wMDA/8LCwv/Dw8P/xMTE/8XFxf/Gxsb/x8fH/8rKyv/Ly8v/zMzM/83Nzf/Ozs7/z8/P + /9DQ0P/R0dH/0tLS/9PT0//U1NT/1tbW/9fX1//Y2Nj/2dnZ/9ra2v/c3Nz/3d3d/97e3v/f39//4ODg + /+Hh4f/j4+P/5eXl/+bm5v/n5+f/6Ojo/+np6f/r6+v/7e3t/+7u7v/x8fH/9PT0//X19f8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////// + //////////////////////////////////////////////gAAAAAP///8AAAAAAP///gAAAAAAf//+AA + AAAAB///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD + ///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AA + AAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD + ///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AA + AAAAA///wAAAAAAH///AAAAAAA///8AAAAAAH///wAAAAAA////AAAAAAH///8AAAAAA////wAAAAAH/ + ///AAAAAA////8AAAAAH////wAAAAA/////AAAAAH////8AAAAA/////wAAAAH/////AAAAA/////8AA + AAH/////wAAAA//////AAAAH/////+AAAA//////8AAAH//////4AAA///////////////////////// + /////////////////////////////////ygAAAAwAAAAYAAAAAEAIAAAAAAAAEgAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAA + AQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAF4AAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAA + YQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAGEAAABhAAAA + YQAAAGEAAABXAAAALgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJeXl6tOzs7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAHQAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAB5AAAACQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9ubm7/AAAA + NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + bQAAAP8AAAD/AAAA/ykpKf8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v + /y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y4uLv8mJib/AAAA + /wAAAP8AAAD/AAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAD3Nzc3AAAAP8AAAD/Hh4e/zAwMP80NDT/p6en/6enp/+np6f/p6en/zQ0NP+np6f/p6en + /zQ0NP+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/NDQ0/6enp/+np6f/p6en/6enp/+np6f/p6en + /zQ0NP8vLy//HR0d/wAAAP8AAAD/3d3d3QAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AAAAP8AAAD/ISEh/zIyMv81NTX/NTU1/zU1Nf+6urr/urq6 + /zU1Nf+6urr/urq6/zU1Nf+6urr/urq6/7q6uv+6urr/urq6/7q6uv+6urr/urq6/7q6uv+6urr/urq6 + /7q6uv+6urr/urq6/zU1Nf8yMjL/ISEh/wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AAAAP8AAAD/ISEh/zMzM/82Njb/zMzM + /8zMzP/MzMz/zMzM/zY2Nv/MzMz/zMzM/zY2Nv/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM + /8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/zU1Nf8yMjL/ISEh/wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AAAAP8AAAD/IiIi + /zQ0NP83Nzf/3t7e/97e3v82Njb/NjY2/zY2Nv/e3t7/3t7e/zY2Nv/e3t7/3t7e/97e3v/e3t7/3t7e + /97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/97e3v/e3t7/3t7e/zY2Nv8zMzP/ISEh/wAAAP8AAAD/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3AAAAP8AAAD/IiIi/zQ0NP83Nzf/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v + /+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/zc3N/80NDT/IiIi + /wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3AAAAP8AAAD/IyMj/zU1Nf84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4 + /zg4OP81NTX/IyMj/wAAAP8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AEBAf8BAQH/IyMj/zY2Nv85OTn/qKio/6ioqP+oqKj/OTk5 + /zk5Of85OTn/OTk5/zk5Of+oqKj/qKio/6ioqP+oqKj/qKio/6ioqP84ODj/qKio/6ioqP+oqKj/ODg4 + /6ioqP+oqKj/qKio/zg4OP81NTX/IyMj/wEBAf8AAAD/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AMDA/8DAwP/JCQk/zc3N/86Ojr/sbGx + /7Gxsf+xsbH/OTk5/zk5Of85OTn/OTk5/zk5Of+xsbH/sbGx/7Gxsf+xsbH/sbGx/7Gxsf85OTn/sbGx + /7Gxsf+xsbH/OTk5/7Gxsf+xsbH/sbGx/zk5Of82Njb/IyMj/wICAv8CAgL/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AUFBf8FBQX/JCQk + /zc3N/86Ojr/urq6/7q6uv+6urr/Ojo6/zo6Ov86Ojr/Ojo6/zo6Ov+6urr/urq6/7q6uv86Ojr/Ojo6 + /zo6Ov86Ojr/urq6/7q6uv+6urr/Ojo6/7q6uv+6urr/urq6/zo6Ov83Nzf/JCQk/wQEBP8EBAT/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3AcHB/8HBwf/JSUl/zg4OP87Ozv/xMTE/8TExP/ExMT/Ozs7/zs7O/87Ozv/Ozs7/zs7O//ExMT/xMTE + /8TExP87Ozv/Ozs7/zs7O/87Ozv/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/zs7O/84ODj/JSUl + /wYGBv8GBgb/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3AgICP8ICAj/JSUl/zg4OP88PDz/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N + /zw8PP/Nzc3/zc3N/83Nzf88PDz/PDw8/zw8PP88PDz/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N + /zs7O/84ODj/JSUl/wgICP8ICAj/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AoKCv8KCgr/JiYm/zk5Of89PT3/1tbW/9bW1v/W1tb/1tbW + /9bW1v/W1tb/1tbW/zw8PP/W1tb/1tbW/9bW1v88PDz/PDw8/zw8PP88PDz/1tbW/9bW1v/W1tb/1tbW + /9bW1v88PDz/PDw8/zw8PP84ODj/JSUl/woKCv8KCgr/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3AwMDP8MDAz/JiYm/zk5Of89PT3/39/f + /9/f3//f39//PT09/9/f3//f39//39/f/z09Pf/f39//39/f/9/f3/89PT3/PT09/z09Pf89PT3/39/f + /9/f3//f39//39/f/9/f3//f39//39/f/z09Pf85OTn/JiYm/wsLC/8LCwv/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3A4ODv8ODg7/JiYm + /zo6Ov8+Pj7/6Ojo/+jo6P/o6Oj/Pj4+/+jo6P/o6Oj/6Ojo/z4+Pv/o6Oj/6Ojo/+jo6P8+Pj7/Pj4+ + /z4+Pv8+Pj7/6Ojo/+jo6P/o6Oj/Pj4+/+jo6P/o6Oj/6Ojo/z4+Pv86Ojr/JiYm/w0NDf8NDQ3/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3BAQEP8QEBD/Jycn/zs7O/8/Pz//8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy/z8/P//y8vL/8vLy + //Ly8v/y8vL/8vLy//Ly8v8/Pz//8vLy//Ly8v/y8vL/Pz8///Ly8v/y8vL/8vLy/z4+Pv86Ojr/JiYm + /w8PD/8PDw//3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3BISEv8RERH/KCgo/zw8PP9AQED/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7 + /z8/P//7+/v/+/v7//v7+//7+/v/+/v7//v7+/8/Pz//+/v7//v7+//7+/v/Pz8///v7+//7+/v/+/v7 + /z8/P/87Ozv/Jycn/xEREf8RERH/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BMTE/8TExP/KCgo/zw8PP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA/0BAQP9AQED/QEBA + /0BAQP9AQED/QEBA/0BAQP88PDz/KCgo/xISEv8SEhL/3Nzc3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BUVFf8VFRX/KCgo/z09Pf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/0FBQf9BQUH/QUFB/0FBQf89PT3/KCgo/xQUFP8UFBT/3Nzc3gAAAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BcXF/8XFxf/KSkp + /z4+Pv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/QUFB + /z8/P/89PT3/PT09/z09Pf89PT3/PT09/zw8PP88PDz/PDw8/zw8PP85OTn/JSUl/xYWFv8WFhb/3Nzc + 3gAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3BkZGf8ZGRn/Kioq/z8/P/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0JCQv9CQkL/QkJC + /0JCQv8/Pz//Nzc3/y0tLf8oKCj/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8nJyf/Jycn/ycnJ/8kJCT/GBgY + /xgYGP8YGBj/3d3d3QAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3BoaGv8aGhr/Kioq/z8/P/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/Q0ND + /0NDQ/9DQ0P/Q0ND/0FBQf81NTX/ICAg/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa/xoaGv8aGhr/Ghoa + /xoaGv8aGhr/Ghoa/xoaGv8aGhr/wcHBuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3BwcHP8cHBz/Kioq/0BAQP9ERET/RERE/0RERP9ERET/RERE + /0RERP9ERET/RERE/0RERP9ERET/RERE/z09Pf8nJyf/HBwc/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3 + /zc3N/83Nzf/Nzc3/zc3N/8cHBz/HBwc/xwcHP//////AAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3B4eHv8eHh7/Kysr/0FBQf9FRUX/RUVF + /0VFRf9FRUX/RUVF/0VFRf9FRUX/RUVF/0VFRf9FRUX/RERE/zk5Of8dHR3/Ojo6/zo6Ov86Ojr/Ojo6 + /zk5Of85OTn/OTk5/zk5Of85OTn/OTk5/x0dHf8dHR3/HR0d//7+/v8AAAAlAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CAgIP8gICD/LCws + /0JCQv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RUVF/zc3N/8fHx//PDw8 + /zw8PP88PDz/PDw8/zw8PP88PDz/PDw8/zw8PP87Ozv/Hx8f/x8fH/8fHx///v7+/wAAACUAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3CEhIf8hISH/LCws/0JCQv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RUVF + /zc3N/8hISH/Pz8//z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8hISH/ISEh/yEhIf/+/v7/AAAA + JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3CMjI/8jIyP/LCws/0NDQ/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH + /0dHR/9HR0f/RkZG/zg4OP8jIyP/QUFB/0FBQf9BQUH/QUFB/0FBQf9BQUH/QEBA/yMjI/8jIyP/IyMj + //////8AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CUlJf8lJSX/LS0t/0RERP9ISEj/SEhI/0hISP9ISEj/SEhI + /0hISP9ISEj/SEhI/0hISP9ISEj/R0dH/zk5Of8lJSX/Q0ND/0NDQ/9DQ0P/Q0ND/0NDQ/9DQ0P/JSUl + /yUlJf8lJSX//////wAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CcnJ/8nJyf/LS0t/0VFRf9JSUn/SUlJ + /0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/R0dH/zk5Of8nJyf/RkZG/0ZGRv9GRkb/RUVF + /0VFRf8mJib/JiYm/yYmJv//////AAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc3CkpKf8pKSn/Li4u + /0VFRf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SUlJ/0lJSf9JSUn/SEhI/zo6Ov8oKCj/SEhI + /0hISP9ISEj/SEhI/ygoKP8oKCj/KCgo//////8AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE3Nzc + 3CoqKv8qKir/Li4u/0ZGRv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SkpK/0pKSv9KSkr/SUlJ + /zo6Ov8qKir/SkpK/0pKSv9KSkr/Kioq/yoqKv8qKir//////wAAACQAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAE3Nzc3CwsLP8sLCz/Li4u/0dHR/9LS0v/S0tL/0tLS/9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/SkpK/zs7O/8sLCz/TU1N/01NTf8sLCz/LCws/ywsLP//////AAAAIgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAC3Nzc3C4uLv8uLi7/Kioq/0VFRf9LS0v/S0tL/0tLS/9LS0v/S0tL + /0tLS/9LS0v/S0tL/0tLS/9LS0v/SkpK/zs7O/8uLi7/T09P/y4uLv8uLi7/Li4u//////8AAAAhAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZTAwMP8wMDD/IiIi/zQ0NP89PT3/Pj4+ + /z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/PT09/zExMf8wMDD/MDAw/zAwMP8wMDD///// + /wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjIyMv8yMjL/MjIy + /zIyMv8pKSn/KSkp/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/ygoKP8xMTH/MTEx + /zExMf//////AAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CP39/f4zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz + /zMzM/8zMzP/MzMz//////8AAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA7/////TExM/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1 + /zU1Nf81NTX/NTU1/zU1Nf81NTX//////wAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAFQAAACMAAAAkAAAAJAAAACQAAAAkAAAA + JAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAiAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA//// + ////AAD///////8AAP+AAAAD/wAA/wAAAAH/AAD/AAAAAP8AAP8AAAAA/wAA/gAAAAB/AAD+AAAAAH8A + AP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAA + AAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8A + AP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAD/AAD+AAAAAf8AAP4AAAAD/wAA/gAA + AAf/AAD+AAAAD/8AAP4AAAAf/wAA/gAAAD//AAD+AAAAf/8AAP4AAAD//wAA/gAAAf//AAD+AAAD//8A + AP8AAAf//wAA/wAAD///AAD/AAAf//8AAP+AAD///wAA////////AAD///////8AAP///////wAA//// + ////AAAoAAAAMAAAAGAAAAABAAgAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wEBAf8CAgL/AwMD + /wQEBP8FBQX/BgYG/wcHB/8ICAj/CQkJ/woKCv8LCwv/DAwM/w0NDf8ODg7/Dw8P/xAQEP8RERH/EhIS + /xMTE/8UFBT/FRUV/xYWFv8XFxf/GBgY/xkZGf8aGhr/Gxsb/xwcHP8dHR3/Hh4e/x8fH/8gICD/ISEh + /yIiIv8jIyP/JCQk/yUlJf8mJib/Jycn/ygoKP8pKSn/Kioq/ysrK/8sLCz/LS0t/y4uLv8vLy//MDAw + /zExMf8yMjL/MzMz/zQ0NP81NTX/NjY2/zc3N/84ODj/OTk5/zo6Ov87Ozv/PDw8/z09Pf8+Pj7/Pz8/ + /0BAQP9BQUH/QkJC/0NDQ/9ERET/RUVF/0ZGRv9HR0f/SEhI/0lJSf9KSkr/S0tL/0xMTP9NTU3/Tk5O + /09PT/9RUVH/U1NT/1RUVP9VVVX/VlZW/1dXV/9aWlr/XFxc/11dXf9eXl7/X19f/2FhYf9iYmL/Y2Nj + /2VlZf9nZ2f/aGho/2lpaf9sbGz/bW1t/25ubv9zc3P/dnZ2/3d3d/95eXn/enp6/3t7e/98fHz/fX19 + /35+fv9/f3//gYGB/4iIiP+JiYn/kpKS/5WVlf+Wlpb/l5eX/5iYmP+ZmZn/mpqa/5ubm/+cnJz/nZ2d + /56env+fn5//oKCg/6Ghof+ioqL/pKSk/6Wlpf+mpqb/p6en/6ioqP+pqan/qqqq/6urq/+srKz/ra2t + /6+vr/+xsbH/srKy/7S0tP+1tbX/t7e3/7i4uP+5ubn/urq6/7u7u/+8vLz/v7+//8DAwP/BwcH/wsLC + /8PDw//ExMT/xcXF/8bGxv/Hx8f/yMjI/8nJyf/Kysr/zMzM/83Nzf/Ozs7/z8/P/9LS0v/U1NT/1dXV + /9bW1v/Y2Nj/2tra/9vb2//e3t7/39/f/+Dg4P/h4eH/4uLi/+Pj4//k5OT/5+fn/+jo6P/v7+//8fHx + //Ly8v8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkWlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV1ABAAEBAAAAAAAA + AAAAAAAAAAAAB3hmSEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRFRybwAAAAAAAAAAAAAAAAAAAAAAgykA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAJpZyZGJiYmJiYmJiYmJiYmKOXAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAABVd3R0dHR0dHR0dHR0dXhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP///////wAA/4AAAAP/AAD/AAAAAf8A + AP8AAAAA/wAA/wAAAAD/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAA + AAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8A + AP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAA + AAB/AAD+AAAAAP8AAP4AAAAB/wAA/gAAAAP/AAD+AAAAB/8AAP4AAAAP/wAA/gAAAB//AAD+AAAAP/8A + AP4AAAB//wAA/gAAAP//AAD+AAAB//8AAP4AAAP//wAA/wAAB///AAD/AAAP//8AAP8AAB///wAA/4AA + P///AAD///////8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAACAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + NgAAAIkAAACRAAAAkQAAAJEAAACRAAAAkQAAAJEAAACRAAAAkQAAAJEAAACRAAAAkQAAAJEAAACRAAAA + kQAAAJEAAACRAAAAfQAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAE4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAADo6Oj/wAAAP8UFBT/IyMj/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk/yQkJP8kJCT/JCQk + /yQkJP8kJCT/JCQk/yQkJP8kJCT/IiIi/wAAAP8AAAD/8fHx/wAAAAMAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAA8AAAD/AAAA/ysrK/8zMzP/oaGh/6Ghof8zMzP/oaGh/zMzM/+hoaH/oaGh + /5aWlv+hoaH/oaGh/3x8fP+Tk5P/oaGh/6Ghof8zMzP/Kioq/wAAAP8AAAD/AAAADgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAP8AAAD/Ly8v/zU1Nf81NTX/vr6+/zU1Nf++vr7/NTU1 + /76+vv9tbW3/sLCw/76+vv++vr7/i4uL/6urq/++vr7/vr6+/zU1Nf8vLy//AAAA/wAAAP8AAAARAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAA/wAAAP8wMDD/NjY2/9nZ2f+NjY3/NjY2 + /9nZ2f82Njb/2dnZ/3R0dP/IyMj/2dnZ/9nZ2f+Xl5f/wMDA/9nZ2f/Z2dn/NjY2/zAwMP8AAAD/AAAA + /wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAD/AAAA/zExMf83Nzf/9PT0 + //T09P/v7+//9PT0//T09P/09PT/enp6/+Hh4f/09PT/9PT0/6Ojo//W1tb/9PT0//T09P83Nzf/MDAw + /wAAAP8AAAD/AAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQEBAf8BAQH/MjIy + /zk5Of+mpqb/pqam/zg4OP84ODj/ODg4/6ampv+mpqb/pqam/6ampv85OTn/pqam/6Wlpf+mpqb/pqam + /zg4OP8xMTH/AAAA/wAAAP8AAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAwMD + /wMDA/8zMzP/Ojo6/7Ozs/+zs7P/Ojo6/zo6Ov86Ojr/s7Oz/7Ozs/+ysrL/srKy/zo6Ov+zs7P/s7Oz + /7Ozs/+zs7P/OTk5/zIyMv8DAwP/AwMD/wAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAABEGBgb/BgYG/zQ0NP87Ozv/wcHB/8HBwf87Ozv/Ozs7/zs7O//BwcH/wcHB/zs7O/87Ozv/PDw8 + /8HBwf/BwcH/wcHB/8HBwf86Ojr/MzMz/wYGBv8FBQX/AAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAEQkJCf8JCQn/NTU1/zw8PP/Pz8//z8/P/8/Pz//Pz8//Pz8//8/Pz//Pz8//PDw8 + /zw8PP89PT3/z8/P/8/Pz//Pz8//z8/P/zw8PP81NTX/CAgI/wgICP8AAAARAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAARCwsL/wsLC/82Njb/PT09/93d3f/d3d3/3Nzc/93d3f9AQED/3d3d + /93d3f89PT3/PT09/z4+Pv/d3d3/3d3d/93d3f/d3d3/PT09/zY2Nv8LCwv/CwsL/wAAABEAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEODg7/Dg4O/zc3N/8+Pj7/6urq/+rq6v/p6en/6urq + /0FBQf/q6ur/6urq/0NDQ/9DQ0P/Pz8//+rq6v/o6Oj/6urq/+rq6v8+Pj7/Nzc3/w4ODv8ODg7/AAAA + EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEREREf8RERH/ODg4/z8/P//4+Pj/+Pj4 + //j4+P/4+Pj/QkJC//j4+P/4+Pj/+Pj4//j4+P9AQED/+Pj4//b29v/4+Pj/+Pj4/z8/P/84ODj/EBAQ + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////+AAD//AAAP/gAAB/4AAAf+AAA + H/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAAf+AAAH/gAAB/4AAA/+AAA + f/gAAP/4AAH/+AAD//gAB//4AA//+AAf//wAP/////////////////8oAAAAIAAAAEAAAAABAAgAAAAA + AAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wICAv8DAwP/BQUF/wYGBv8ICAj/CQkJ/woKCv8LCwv/DQ0N + /w4ODv8PDw//EBAQ/xEREf8SEhL/FBQU/xYWFv8XFxf/GBgY/xkZGf8aGhr/Gxsb/xwcHP8eHh7/Hx8f + /yAgIP8iIiL/IyMj/yQkJP8lJSX/JiYm/ycnJ/8oKCj/KSkp/yoqKv8rKyv/LCws/y0tLf8uLi7/Ly8v + /zAwMP8xMTH/MjIy/zMzM/80NDT/NTU1/zY2Nv83Nzf/ODg4/zk5Of86Ojr/Ozs7/zw8PP89PT3/Pj4+ + /z8/P/9AQED/QUFB/0JCQv9DQ0P/RERE/0VFRf9GRkb/R0dH/0hISP9JSUn/SkpK/0tLS/9MTEz/TU1N + /05OTv9PT0//UFBQ/1FRUf9SUlL/U1NT/1RUVP9VVVX/VlZW/1dXV/9YWFj/WVlZ/1paWv9bW1v/XV1d + /15eXv9fX1//YGBg/2FhYf9iYmL/Y2Nj/2VlZf9mZmb/Z2dn/2lpaf9qamr/bGxs/3Jycv95eXn/e3t7 + /3x8fP9+fn7/f39//4CAgP+BgYH/hYWF/4aGhv+IiIj/jIyM/42Njf+Ojo7/j4+P/5CQkP+RkZH/k5OT + /5WVlf+ampr/m5ub/5ycnP+enp7/oaGh/6ampv+np6f/qKio/6mpqf+qqqr/q6ur/7CwsP+zs7P/tLS0 + /7a2tv+7u7v/vLy8/729vf++vr7/v7+//8HBwf/CwsL/w8PD/8fHx//IyMj/ysrK/87Ozv/Pz8//09PT + /9TU1P/V1dX/19fX/9zc3P/d3d3/4eHh/+Pj4//q6ur/6+vr/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAABAAAAAAEAAAEAAAAAAAEAAAABAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABaZ2JhYWFiYmFhYmJhYWFiYWJqPgAAAAAA + AAAAAAAAZj4AAAAEAAAAAAQAAAAEAAAAAAROYQAAAAAAAAAAAABWAAwTExYWExMTExMTExYUFBQTCABc + AAAAAAAAAAAACEAAIThhYTJeMmBhV2FgT1NhYTIhAEEHAAAAAAAAAAAMPwQoMlZ/Qn5BfnNzfXxzc357 + TiQEPwsAAAAAAAAAAAs/AidSi2k+h0mKeHuFhHt5h4NOIgU/CwAAAAAAAAAAC0AELFGQgnGSfIp4e5CN + dnqRkE8nBD8LAAAAAAAAAAALQAQpQXNlMC4ycXFycVhxX2ZxRCgEQAsAAAAAAAAAAAtCBShOgXU0MjKB + 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 + /zw8PP9LS0v/S0tL/0tLS/9LS0v/S0tL/0ZGRv8wMDD/LS0t/y0tLf8AAAAgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMTEx/xwcHP8wMDD/MDAw/zAwMP8wMDD/MDAw + /ywsLP8wMDD/MDAw/wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f39/jQ0NP80NDT/NDQ0/zQ0NP80NDT/NDQ0/zQ0NP80NDT/AAAAHgAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAA + AgAAAAIAAAACAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////APAADwDwAA8A8AAP + APAADwDwAA8A8AAPAPAADwDwAA8A8AAPAPAADwDwAA8A8AAPAPAADwDwAB8A8AA/APAAfwDwAP8A8AH/ + APAD/wDwB/8A////AP///wAoAAAAGAAAADAAAAABAAgAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /wICAv8FBQX/BgYG/wkJCf8MDAz/DQ0N/w8PD/8QEBD/ERER/xMTE/8UFBT/FxcX/xgYGP8bGxv/HBwc + /x8fH/8gICD/IiIi/yMjI/8kJCT/JSUl/yYmJv8nJyf/KCgo/ykpKf8qKir/Kysr/ywsLP8tLS3/Li4u + /y8vL/8wMDD/MTEx/zMzM/80NDT/NTU1/zY2Nv83Nzf/ODg4/zk5Of86Ojr/Ozs7/z09Pf8+Pj7/Pz8/ + /0BAQP9BQUH/QkJC/0NDQ/9ERET/RUVF/0dHR/9ISEj/SkpK/0tLS/9NTU3/Tk5O/09PT/9QUFD/UlJS + /1VVVf9aWlr/W1tb/19fX/9hYWH/aWlp/2pqav9sbGz/bm5u/3BwcP9xcXH/c3Nz/3R0dP91dXX/eXl5 + /3x8fP+AgID/goKC/4SEhP+FhYX/hoaG/4uLi/+MjIz/kZGR/5SUlP+Wlpb/mJiY/5qamv+cnJz/oaGh + /6Kiov+jo6P/pqam/6urq/+srKz/ra2t/6+vr/+xsbH/s7Oz/7W1tf+/v7//y8vL/9HR0f/j4+P/5OTk + /+bm5v8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAMz4+Pj4+Pj4+PT4+PiUAAAAAAAAAAQFBHxMTExQU + EhQVERMTEyVDAAAAAAAAAFEPCBERERARDxIQERIREAUQTwAAAAABAFkAFThQQFJBVlJWUFJXQRYAWQAA + AAAAAFkBF0ZaPmFJXmJhYmFeShcAWQEAAAABAFgAGEVeTV5WWVthVVhkRBkAWQAAAAAAAFkCGkJgMyhJ + X1pLYUlgQxkBWQABAAABAFkCHEllPDVNZSg0ZV1lSRkEWQAAAAAAAFkFHE1nZmdWZyw1Z2ddPxkGWQAA + AAABAFkHGk9pWGlaaDo9aWNpURoGWQEAAAAAAFkLIVFqampcampbalVqTxkIWQEAAAAAAFkLIS0vLy8v + Ly8sLi4sLSUMWQAAAAAAAFoMIzMwMDAwMCwlISElIRcMWQAAAAAAAFoNIzIyMjIzMBkZHxkcHA4nWgAA + AAAAAFoRJzMzMzMzLBkrKCgoGihUAAAAAAAAAFkSJjQ0NDQ0LCAvLygaLlQAAAAAAAAAAFoXKDU1NTU1 + LiUyMxozVAAAAAAAAAABAFoaKTY2NjY2Lyc1ITVWAAAAAAAAAAAAAFwfKTc3Nzc2LiglOFUAAAAAAAAA + AAAAAFowISMjJSUlJRo5VgAAAAAAAAAAAAAAAABRPjs7Ozo5OUBWAAAAAAAAAAAAAAAAAAAATVZWVlZW + Vk8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A8AAPAPAADwDwAA8A8AAP + APAADwDwAA8A8AAPAPAADwDwAA8A8AAPAPAADwDwAA8A8AAPAPAAHwDwAD8A8AB/APAA/wDwAf8A8AP/ + APAH/wD///8A////ACgAAAAQAAAAIAAAAAEAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAOzs7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD//////wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAbQAAAP8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/wAAAP8AAABpAAAA + AAAAAAAAAAAAAAAAANzc3N0hISH/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP8hISH/3Nzc + 3QAAAAAAAAAAAAAAAAAAAADc3NzdIyMj/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/IyMj + /9zc3N0AAAAAAAAAAAAAAAAAAAAA3Nzc3SQkJP+6urr/Ojo6/zo6Ov+6urr/Ojo6/7q6uv86Ojr/urq6 + /yQkJP/c3NzdAAAAAAAAAAAAAAAAAAAAANzc3N0mJib/1tbW/9bW1v/W1tb/1tbW/zw8PP/W1tb/1tbW + /zw8PP8lJSX/3Nzc3QAAAAAAAAAAAAAAAAAAAADc3NzdJycn//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy + /z8/P//y8vL/JiYm/9zc3N0AAAAAAAAAAAAAAAAAAAAA3Nzc3SgoKP9BQUH/QUFB/0FBQf9BQUH/QUFB + /0FBQf9BQUH/QUFB/ygoKP/c3NzdAAAAAAAAAAAAAAAAAAAAANzc3N0qKir/Q0ND/0NDQ/9DQ0P/Q0ND + /yAgIP8aGhr/Ghoa/xoaGv8aGhr/wMDAvAAAAAAAAAAAAAAAAAAAAADc3NzdLCws/0ZGRv9GRkb/RkZG + /0VFRf88PDz/PDw8/zw8PP8fHx///v7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA3Nzc3S0tLf9ISEj/SEhI + /0hISP9HR0f/Q0ND/0NDQ/8lJSX//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzc3N0uLi7/SkpK + /0pKSv9KSkr/SUlJ/0pKSv8qKir//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlIiIi + /z4+Pv8+Pj7/Pj4+/z09Pf8wMDD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AExMTP81NTX/NTU1/zU1Nf81NTX//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8A + AOAHAADgBwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAHAADADwAAwB8AAOA/AADgfwAA//8A + ACgAAAAQAAAAIAAAAAEACAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAANDQ3/Dw8P/xoaGv8bGxv/HBwc + /x4eHv8hISH/JCQk/yUlJf8nJyf/KCgo/yoqKv8rKyv/LS0t/y8vL/8xMTH/MjIy/zU1Nf82Njb/ODg4 + /zk5Of87Ozv/PDw8/z09Pf8+Pj7/Pz8//0BAQP9BQUH/QkJC/0NDQ/9ERET/RkZG/0hISP9KSkr/W1tb + /3BwcP9xcXH/cnJy/3x8fP9/f3//goKC/4ODg/+IiIj/iYmJ/5aWlv+YmJj/mZmZ/5ubm/+ioqL/o6Oj + /6Wlpf+mpqb/qKio/6mpqf+qqqr/ra2t/7CwsP+4uLj/urq6/8HBwf/Q0ND/1dXV/9jY2P/n5+f/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA + /wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAA + AAAAIxIODQwNCw0MDhkjAAAAACEAFBURHx8WGxMAHwAAAAASAiMkKDM2MzUpAhsAAAAAGwMpJyYzNSws + KAISAAAAABQDKyUbOSItMyoEHgAAAAAgBy87Nz0WNzwmBRYAAAAAGAczPjo/Ojo4MwcgAAAAACEJGRsY + GRkYGRsKHwAAAAAfCR8aHx8NCwwLAiIAAAAAIg4gHx8aDxUYCyIiAAAAACEPICAfHxIfDiIlAAAAAAAi + ESEhIR4VFCIiAAAAAAAAIg4WGBUUESMiAAAAAAAAACwiISIhISMhAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP//AADgBwAA4AcAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADABwAAwA8AAMAfAADgPwAA4H8A + AP//AAA= diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 123704aa..4f44bb9d 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -1327,10 +1327,10 @@ namespace PckStudio private void texturePackToolStripMenuItem_Click(object sender, EventArgs e) { checkSaveState(); - CreateTexturePack packPrompt = new CreateTexturePack(""); + CreateTexturePack packPrompt = new CreateTexturePack(); if (packPrompt.ShowDialog() == DialogResult.OK) { - currentPCK = InitializeTexturePack(new Random().Next(8000, int.MaxValue), 0, packPrompt.packName, packPrompt.packRes); + currentPCK = InitializeTexturePack(new Random().Next(8000, int.MaxValue), 0, packPrompt.PackName, packPrompt.PackRes); isTemplateFile = true; wasModified = true; LoadEditorTab(); @@ -1340,10 +1340,10 @@ namespace PckStudio private void mashUpPackToolStripMenuItem_Click(object sender, EventArgs e) { checkSaveState(); - CreateTexturePack packPrompt = new CreateTexturePack(""); + CreateTexturePack packPrompt = new CreateTexturePack(); if (packPrompt.ShowDialog() == DialogResult.OK) { - currentPCK = InitializeMashUpPack(new Random().Next(8000, int.MaxValue), 0, packPrompt.packName, packPrompt.packRes); + currentPCK = InitializeMashUpPack(new Random().Next(8000, int.MaxValue), 0, packPrompt.PackName, packPrompt.PackRes); isTemplateFile = true; wasModified = false; LoadEditorTab(); From 3eaabe840f4091741fe5e732d8ca565575b009b2 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:30:56 +0200 Subject: [PATCH 24/79] MipMapPrompt - Removed unused methods --- .../Forms/Additional-Popups/MipMapPrompt.Designer.cs | 2 +- PCK-Studio/Forms/Additional-Popups/MipMapPrompt.cs | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.Designer.cs b/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.Designer.cs index a428b920..7fae0a04 100644 --- a/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.Designer.cs @@ -87,7 +87,7 @@ this.Controls.Add(this.button1); this.Controls.Add(this.CancelBtn); this.Controls.Add(this.TextLabel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "MipMapPrompt"; diff --git a/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.cs b/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.cs index 666dce75..76f813e4 100644 --- a/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.cs +++ b/PCK-Studio/Forms/Additional-Popups/MipMapPrompt.cs @@ -14,7 +14,6 @@ namespace PckStudio public MipMapPrompt() { InitializeComponent(); - FormBorderStyle = FormBorderStyle.None; } private void OKBtn_Click(object sender, EventArgs e) @@ -22,20 +21,9 @@ namespace PckStudio DialogResult = DialogResult.OK; } - private void InputTextBox_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - OKBtn_Click(sender, e); - } - private void CancelButton_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; } - - private void button1_Click(object sender, EventArgs e) - { - - } } } From bc75726787c74a7d7e9747321fa39d89a55b72da Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:31:49 +0200 Subject: [PATCH 25/79] RenamePrompt - Removed unused methods --- .../Forms/Additional-Popups/RenamePrompt.Designer.cs | 2 +- PCK-Studio/Forms/Additional-Popups/RenamePrompt.cs | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/RenamePrompt.Designer.cs b/PCK-Studio/Forms/Additional-Popups/RenamePrompt.Designer.cs index 4df9158d..bc7b8155 100644 --- a/PCK-Studio/Forms/Additional-Popups/RenamePrompt.Designer.cs +++ b/PCK-Studio/Forms/Additional-Popups/RenamePrompt.Designer.cs @@ -86,7 +86,7 @@ this.Controls.Add(this.InputTextBox); this.Controls.Add(this.OKButton); this.Controls.Add(this.TextLabel); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RenamePrompt"; diff --git a/PCK-Studio/Forms/Additional-Popups/RenamePrompt.cs b/PCK-Studio/Forms/Additional-Popups/RenamePrompt.cs index 4d4fd9e7..8905a343 100644 --- a/PCK-Studio/Forms/Additional-Popups/RenamePrompt.cs +++ b/PCK-Studio/Forms/Additional-Popups/RenamePrompt.cs @@ -19,18 +19,11 @@ namespace PckStudio InitializeComponent(); InputTextBox.Text = InitialText; InputTextBox.MaxLength = maxChar < 0 ? short.MaxValue : maxChar; - FormBorderStyle = FormBorderStyle.None; } private void OKBtn_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; } - - private void InputTextBox_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyCode == Keys.Enter) - OKBtn_Click(sender, e); - } } } From e2ff5a772d4e3bf0d2b606b4c20eae4f03927a6b Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:40:12 +0200 Subject: [PATCH 26/79] Animation - Rename 'FrameTextureCount' to 'TextureCount' --- PCK-Studio/Forms/Editor/Animation.cs | 44 +++++++++++----------- PCK-Studio/Forms/Editor/AnimationEditor.cs | 2 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/PCK-Studio/Forms/Editor/Animation.cs b/PCK-Studio/Forms/Editor/Animation.cs index a80785af..ad8a1ccd 100644 --- a/PCK-Studio/Forms/Editor/Animation.cs +++ b/PCK-Studio/Forms/Editor/Animation.cs @@ -14,11 +14,11 @@ namespace PckStudio.Forms.Editor public int FrameCount => frames.Count; - public int FrameTextureCount => frameTextures.Count; + public int TextureCount => frameTextures.Count; public Frame this[int frameIndex] => frames[frameIndex]; - // not implemented rn... + // TODO: implement this public bool Interpolate { get; set; } = false; private readonly List frameTextures; @@ -51,39 +51,37 @@ namespace PckStudio.Forms.Editor } } - public void ParseAnim(string ANIM) + private void ParseAnim(string ANIM) { _ = ANIM ?? throw new ArgumentNullException(nameof(ANIM)); ANIM = (Interpolate = ANIM.StartsWith("#")) ? ANIM.Substring(1) : ANIM; string[] animData = ANIM.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); int lastFrameTime = MinimumFrameTime; if (animData.Length <= 0) - { - for (int i = 0; i < FrameTextureCount; i++) + for (int i = 0; i < TextureCount; i++) { - AddFrame(i, MinimumFrameTime); + AddFrame(i); } - } - else + + foreach (string frameInfo in animData) { - foreach (string frameInfo in animData) - { - string[] frameData = frameInfo.Split('*'); - //if (frameData.Length < 2) - // continue; // shouldn't happen - int currentFrameIndex = int.TryParse(frameData[0], out currentFrameIndex) ? currentFrameIndex : 0; + string[] frameData = frameInfo.Split('*'); + //if (frameData.Length < 2) + // continue; // shouldn't happen + int currentFrameIndex = 0; + int.TryParse(frameData[0], out currentFrameIndex); - // Some textures like the Halloween 2015's Lava texture don't have a - // frame time parameter for certain frames. - // This will detect that and place the last frame time in its place. - // This is accurate to console edition behavior. - // - MattNL - int currentFrameTime = string.IsNullOrEmpty(frameData[1]) ? lastFrameTime : int.Parse(frameData[1]); - AddFrame(currentFrameIndex, currentFrameTime); - lastFrameTime = currentFrameTime; - } + // Some textures like the Halloween 2015's Lava texture don't have a + // frame time parameter for certain frames. + // This will detect that and place the last frame time in its place. + // This is accurate to console edition behavior. + // - MattNL + int currentFrameTime = string.IsNullOrEmpty(frameData[1]) ? lastFrameTime : int.Parse(frameData[1]); + AddFrame(currentFrameIndex, currentFrameTime); + lastFrameTime = currentFrameTime; } } + public Frame AddFrame(int frameTextureIndex) => AddFrame(frameTextureIndex, MinimumFrameTime); public Frame AddFrame(int frameTextureIndex, int frameTime) { diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index b678c7d2..7f921db2 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -332,7 +332,7 @@ namespace PckStudio.Forms.Editor } else { - for (int i = 0; i < new_animation.FrameTextureCount; i++) + for (int i = 0; i < new_animation.TextureCount; i++) { new_animation.AddFrame(i, frameTime); } From 2fcd7e19ef11265ab87b836afc3e69ce96b8daaf Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:41:47 +0200 Subject: [PATCH 27/79] ANIMEditor - Update ANIMRuleSet --- PCK-Studio/Forms/Editor/ANIMEditor.cs | 36 ++++++++++++--------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.cs b/PCK-Studio/Forms/Editor/ANIMEditor.cs index eee62455..0202a43e 100644 --- a/PCK-Studio/Forms/Editor/ANIMEditor.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.cs @@ -50,18 +50,16 @@ namespace PckStudio.Forms.Editor private SkinANIM anim; private bool ignoreCheckChanged = false; - public ANIMRuleSet(SkinANIM anim, params (CheckBox, ANIM_EFFECTS)[] linkage) + public ANIMRuleSet(params (CheckBox, ANIM_EFFECTS)[] linkage) { - this.anim = anim; checkBoxLinkage = new Bictionary(32); if (linkage.Length < 32) Debug.WriteLine($"Not all {nameof(ANIM_EFFECTS)} are mapped to a given checkbox."); checkBoxLinkage.AddRange(linkage); - foreach (var (checkbox, effect) in linkage) + foreach (var (checkbox, _) in linkage) { checkbox.CheckedChanged += checkedChanged; - checkbox.Checked = anim.GetFlag(effect); } } @@ -81,9 +79,10 @@ namespace PckStudio.Forms.Editor internal void ApplyAnim(SkinANIM anim) { this.anim = anim; + foreach (var item in checkBoxLinkage) + item.Key.Enabled = true; foreach (var item in checkBoxLinkage) { - IgnoreAndDo(item.Key, checkbox => checkbox.Enabled = true); item.Key.Checked = anim.GetFlag(item.Value); } } @@ -114,18 +113,12 @@ namespace PckStudio.Forms.Editor break; case ANIM_EFFECTS.RESOLUTION_64x64: - - if (checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Checked) - { - checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Checked = false; - } + Uncheck(checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL]); checkBoxLinkage[ANIM_EFFECTS.SLIM_MODEL].Enabled = !checkBox.Checked; break; + case ANIM_EFFECTS.SLIM_MODEL: - if (checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Checked) - { - checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Checked = false; - } + Uncheck(checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64]); checkBoxLinkage[ANIM_EFFECTS.RESOLUTION_64x64].Enabled = !checkBox.Checked; break; default: @@ -136,6 +129,11 @@ namespace PckStudio.Forms.Editor } } + private void Uncheck(CheckBox checkBox) + { + checkBox.Checked = false; + } + private void IgnoreAndDo(CheckBox checkBox, Action action) { ignoreCheckChanged = true; @@ -153,9 +151,7 @@ namespace PckStudio.Forms.Editor Close(); } var anim = initialANIM = SkinANIM.FromString(ANIM); - setDisplayAnim(anim); - - ruleset = new ANIMRuleSet(anim, + ruleset = new ANIMRuleSet( (bobbingCheckBox, ANIM_EFFECTS.HEAD_BOBBING_DISABLED), (bodyCheckBox, ANIM_EFFECTS.BODY_DISABLED), (bodyOCheckBox, ANIM_EFFECTS.BODY_OVERLAY_DISABLED), @@ -189,8 +185,9 @@ namespace PckStudio.Forms.Editor (unknownCheckBox, ANIM_EFFECTS.__BIT_4), (zombieCheckBox, ANIM_EFFECTS.ZOMBIE_ARMS) ); - ruleset.OnCheckboxChanged = setDisplayAnim; + setDisplayAnim(anim); + ruleset.ApplyAnim(anim); } private void setDisplayAnim(SkinANIM anim) @@ -296,8 +293,7 @@ namespace PckStudio.Forms.Editor static readonly Dictionary Templates = new Dictionary() { - // TODO - //{ "Steve (64x32)", 0 }, + { "Steve (64x32)", ANIM_EFFECTS.NONE }, { "Steve (64x64)", ANIM_EFFECTS.RESOLUTION_64x64 }, { "Alex (64x64)", ANIM_EFFECTS.SLIM_MODEL }, { "Zombie Skins", ANIM_EFFECTS.ZOMBIE_ARMS }, From 46231069a744f6a89b36ef36bbb70562cf085eab Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:45:53 +0200 Subject: [PATCH 28/79] ANIMEditor - Rename 'uncheckButton' to 'uncheckAllButton' and 'checkButton' to 'checkAllButton' + there respective Click event --- .../Forms/Editor/ANIMEditor.Designer.cs | 48 +++++++++---------- PCK-Studio/Forms/Editor/ANIMEditor.cs | 4 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs b/PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs index bb31ffc1..c2172245 100644 --- a/PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.Designer.cs @@ -69,8 +69,8 @@ this.importButton = new MetroFramework.Controls.MetroButton(); this.exportButton = new MetroFramework.Controls.MetroButton(); this.animValue = new MetroFramework.Controls.MetroLabel(); - this.uncheckButton = new MetroFramework.Controls.MetroButton(); - this.checkButton = new MetroFramework.Controls.MetroButton(); + this.uncheckAllButton = new MetroFramework.Controls.MetroButton(); + this.checkAllButton = new MetroFramework.Controls.MetroButton(); this.toolTip = new MetroFramework.Components.MetroToolTip(); this.resetButton = new MetroFramework.Controls.MetroButton(); this.templateButton = new MetroFramework.Controls.MetroButton(); @@ -647,27 +647,27 @@ this.animValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.animValue.Theme = MetroFramework.MetroThemeStyle.Dark; // - // uncheckButton + // uncheckAllButton // - this.uncheckButton.Location = new System.Drawing.Point(229, 90); - this.uncheckButton.Name = "uncheckButton"; - this.uncheckButton.Size = new System.Drawing.Size(186, 23); - this.uncheckButton.TabIndex = 26; - this.uncheckButton.Text = "Uncheck All"; - this.uncheckButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.uncheckButton.UseSelectable = true; - this.uncheckButton.Click += new System.EventHandler(this.uncheckButton_Click); + this.uncheckAllButton.Location = new System.Drawing.Point(229, 90); + this.uncheckAllButton.Name = "uncheckAllButton"; + this.uncheckAllButton.Size = new System.Drawing.Size(186, 23); + this.uncheckAllButton.TabIndex = 26; + this.uncheckAllButton.Text = "Uncheck All"; + this.uncheckAllButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.uncheckAllButton.UseSelectable = true; + this.uncheckAllButton.Click += new System.EventHandler(this.uncheckAllButton_Click); // - // checkButton + // checkAllButton // - this.checkButton.Location = new System.Drawing.Point(32, 90); - this.checkButton.Name = "checkButton"; - this.checkButton.Size = new System.Drawing.Size(186, 23); - this.checkButton.TabIndex = 27; - this.checkButton.Text = "Check All"; - this.checkButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.checkButton.UseSelectable = true; - this.checkButton.Click += new System.EventHandler(this.checkButton_Click); + this.checkAllButton.Location = new System.Drawing.Point(32, 90); + this.checkAllButton.Name = "checkAllButton"; + this.checkAllButton.Size = new System.Drawing.Size(186, 23); + this.checkAllButton.TabIndex = 27; + this.checkAllButton.Text = "Check All"; + this.checkAllButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.checkAllButton.UseSelectable = true; + this.checkAllButton.Click += new System.EventHandler(this.checkAllButton_Click); // // toolTip // @@ -706,8 +706,8 @@ this.Controls.Add(this.templateButton); this.Controls.Add(this.effectsGroup); this.Controls.Add(this.resetButton); - this.Controls.Add(this.checkButton); - this.Controls.Add(this.uncheckButton); + this.Controls.Add(this.checkAllButton); + this.Controls.Add(this.uncheckAllButton); this.Controls.Add(this.animValue); this.Controls.Add(this.exportButton); this.Controls.Add(this.importButton); @@ -777,8 +777,8 @@ private MetroFramework.Controls.MetroButton importButton; private MetroFramework.Controls.MetroButton exportButton; private MetroFramework.Controls.MetroLabel animValue; - private MetroFramework.Controls.MetroButton uncheckButton; - private MetroFramework.Controls.MetroButton checkButton; + private MetroFramework.Controls.MetroButton uncheckAllButton; + private MetroFramework.Controls.MetroButton checkAllButton; private MetroFramework.Components.MetroToolTip toolTip; private MetroFramework.Controls.MetroButton resetButton; private MetroFramework.Controls.MetroButton templateButton; diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.cs b/PCK-Studio/Forms/Editor/ANIMEditor.cs index 0202a43e..a8c8af9c 100644 --- a/PCK-Studio/Forms/Editor/ANIMEditor.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.cs @@ -224,12 +224,12 @@ namespace PckStudio.Forms.Editor ruleset.ApplyAnim(SkinANIM.FromString(value)); } - private void uncheckButton_Click(object sender, EventArgs e) + private void uncheckAllButton_Click(object sender, EventArgs e) { ruleset.SetAll(false); } - private void checkButton_Click(object sender, EventArgs e) + private void checkAllButton_Click(object sender, EventArgs e) { ruleset.SetAll(true); } From 5ee36b520dab81c1df4974a2e10edc1e386a6c51 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:49:27 +0200 Subject: [PATCH 29/79] ANIMEditor - Simplefied initial image draw in 'exportButton_Click' --- PCK-Studio/Forms/Editor/ANIMEditor.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Forms/Editor/ANIMEditor.cs b/PCK-Studio/Forms/Editor/ANIMEditor.cs index a8c8af9c..d13f2863 100644 --- a/PCK-Studio/Forms/Editor/ANIMEditor.cs +++ b/PCK-Studio/Forms/Editor/ANIMEditor.cs @@ -249,10 +249,12 @@ namespace PckStudio.Forms.Editor Image skin = isSlim ? Properties.Resources.slim_template : Properties.Resources.classic_template; - Bitmap img = new Bitmap(64, isClassic32 ? 32 : 64); + Size imgSize = new Size(64, isClassic32 ? 32 : 64); + + Bitmap img = new Bitmap(imgSize.Width, imgSize.Height); using (Graphics graphic = Graphics.FromImage(img)) { - graphic.DrawImage(skin, new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), new Rectangle(0, 0, 64, isClassic32 ? 32 : 64), GraphicsUnit.Pixel); + graphic.DrawImage(skin, new Rectangle(Point.Empty, imgSize), new Rectangle(Point.Empty, imgSize), GraphicsUnit.Pixel); if (ruleset.Value.GetFlag(ANIM_EFFECTS.HEAD_OVERLAY_DISABLED)) graphic.FillRectangle(Brushes.Magenta, new Rectangle(32, 0, 32, 16)); if (ruleset.Value.GetFlag(ANIM_EFFECTS.HEAD_DISABLED)) From 948a5a3ac8dc66c5350dc3fa011e288d089d3535 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 2 Apr 2023 18:00:44 +0200 Subject: [PATCH 30/79] Imageextentions - Added GraphicsConfig to be used in the Resize Method --- .../Classes/Extentions/ImageExtentions.cs | 21 +++++++++++++------ PCK-Studio/Forms/Utilities/pckCenterOpen.cs | 15 ++++++++++--- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/PCK-Studio/Classes/Extentions/ImageExtentions.cs b/PCK-Studio/Classes/Extentions/ImageExtentions.cs index 5a73613b..6743d1de 100644 --- a/PCK-Studio/Classes/Extentions/ImageExtentions.cs +++ b/PCK-Studio/Classes/Extentions/ImageExtentions.cs @@ -107,7 +107,16 @@ namespace PckStudio.Classes.Extentions return new Size(width, heigh); } - public static Image ResizeImage(this Image image, int width, int height) + public struct GraphicsConfig + { + public CompositingMode CompositingMode { get; set; } + public CompositingQuality CompositingQuality { get; set; } + public InterpolationMode InterpolationMode { get; set; } + public SmoothingMode SmoothingMode {get; set; } + public PixelOffsetMode PixelOffsetMode { get; set; } + } + + public static Image ResizeImage(this Image image, int width, int height, GraphicsConfig graphicsConfig) { var destRect = new Rectangle(0, 0, width, height); var destImage = new Bitmap(width, height); @@ -116,11 +125,11 @@ namespace PckStudio.Classes.Extentions using (var graphics = Graphics.FromImage(destImage)) { - graphics.CompositingMode = CompositingMode.SourceCopy; - graphics.CompositingQuality = CompositingQuality.HighQuality; - graphics.InterpolationMode = InterpolationMode.NearestNeighbor; - graphics.SmoothingMode = SmoothingMode.HighQuality; - graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; + graphics.CompositingMode = graphicsConfig.CompositingMode; + graphics.CompositingQuality = graphicsConfig.CompositingQuality; + graphics.InterpolationMode = graphicsConfig.InterpolationMode; + graphics.SmoothingMode = graphicsConfig.SmoothingMode; + graphics.PixelOffsetMode = graphicsConfig.PixelOffsetMode; using (var wrapMode = new ImageAttributes()) { diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs index beda0468..c16ab9a7 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs @@ -1027,17 +1027,26 @@ namespace PckStudio.Forms { var ms = new MemoryStream(skinTexture.Data); Bitmap saveSkin = new Bitmap(Image.FromStream(ms)); + var config = new ImageExtentions.GraphicsConfig() + { + CompositingMode = CompositingMode.SourceCopy, + CompositingQuality = CompositingQuality.HighQuality, + InterpolationMode = InterpolationMode.NearestNeighbor, + SmoothingMode = SmoothingMode.HighQuality, + PixelOffsetMode = PixelOffsetMode.HighQuality, + }; + if (saveSkin.Width == saveSkin.Height) { - saveSkin.ResizeImage(64, 64); + saveSkin.ResizeImage(64, 64, config); } else if (saveSkin.Height == saveSkin.Width / 2) { - saveSkin.ResizeImage(64, 32); + saveSkin.ResizeImage(64, 32, config); } else { - saveSkin.ResizeImage(64, 64); + saveSkin.ResizeImage(64, 64, config); } saveSkin.Save(root + "/" + skinTexture.Filename, ImageFormat.Png); } From 3aa5a3818a8282ff8dea876857600f9870b9daf7 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 6 Apr 2023 13:27:52 +0200 Subject: [PATCH 31/79] Update OMI Lib ref commit to latest --- Vendor/OMI-Lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 9b991f6d..22037f30 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 9b991f6d1a3591b92693aaff8a39fbe68803f7db +Subproject commit 22037f3061457e05d9dbc0cba1e270e07ac2801a From a5a408a30e9c44bdd557c93ad725e9fe53016e12 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 6 Apr 2023 14:15:34 +0200 Subject: [PATCH 32/79] Remove StreamDataReader/Writer and use OMI.EndianAwareBinaryreader/Writer --- PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs | 91 +++++++++--------- PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs | 68 +++++++------- .../Classes/IO/PCK/PCKAudioFileReader.cs | 91 +++++++++++------- .../Classes/IO/PCK/PCKAudioFileWriter.cs | 82 ++++++++++------- PCK-Studio/Classes/IO/StreamDataReader.cs | 92 ------------------- PCK-Studio/Classes/IO/StreamDataWriter.cs | 89 ------------------ PCK-Studio/Forms/Editor/AudioEditor.cs | 6 +- PCK-Studio/MainForm.cs | 15 +-- PCK-Studio/PckStudio.csproj | 2 - Vendor/OMI-Lib | 2 +- 10 files changed, 206 insertions(+), 332 deletions(-) delete mode 100644 PCK-Studio/Classes/IO/StreamDataReader.cs delete mode 100644 PCK-Studio/Classes/IO/StreamDataWriter.cs diff --git a/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs b/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs index 0e1313a1..6144150a 100644 --- a/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs +++ b/PCK-Studio/Classes/IO/CSMB/CSMBFileReader.cs @@ -1,57 +1,66 @@ using System.IO; using System.Text; +using OMI; +using OMI.Workers; using PckStudio.Classes.FileTypes; namespace PckStudio.Classes.IO.CSMB { - internal class CSMBFileReader : StreamDataReader + internal class CSMBFileReader : IDataFormatReader, IDataFormatReader { - public static CSMBFile Read(Stream stream) - { - return new CSMBFileReader().ReadFromStream(stream); - } - - private CSMBFileReader() : base(false) + private CSMBFileReader() { } - protected override CSMBFile ReadFromStream(Stream stream) + public CSMBFile FromFile(string filename) { - CSMBFile BinFile = new CSMBFile(); - ReadInt(stream); - int NumOfParts = ReadInt(stream); - for(int i = 0; i < NumOfParts; i++) - { - CSMBPart part = new CSMBPart(); - part.Name = ReadString(stream); - part.Parent = (CSMBParentPart)ReadInt(stream); - part.posX = ReadFloat(stream); - part.posY = ReadFloat(stream); - part.posZ = ReadFloat(stream); - part.sizeX = ReadFloat(stream); - part.sizeY = ReadFloat(stream); - part.sizeZ = ReadFloat(stream); - part.uvX = ReadInt(stream); - part.uvY = ReadInt(stream); - part.MirrorTexture = ReadBool(stream); - part.HideWArmour = ReadBool(stream); - part.Inflation = ReadFloat(stream); - BinFile.Parts.Add(part); - } - int NumOfOffsets = ReadInt(stream); - for (int i = 0; i < NumOfOffsets; i++) - { - CSMBOffset offset = new CSMBOffset(); - offset.offsetPart = (CSMBOffsetPart)ReadInt(stream); - offset.VerticalOffset = ReadFloat(stream); - BinFile.Offsets.Add(offset); - } - return BinFile; + throw new System.NotImplementedException(); } - private string ReadString(Stream stream) + public CSMBFile FromStream(Stream stream) { - short strlen = ReadShort(stream); - return ReadString(stream, strlen, Encoding.ASCII); + CSMBFile csmbFile = new CSMBFile(); + using (var reader = new EndiannessAwareBinaryReader(stream, Encoding.ASCII, leaveOpen: true, Endianness.LittleEndian)) + { + reader.ReadInt32(); + int numOfParts = reader.ReadInt32(); + for (int i = 0; i < numOfParts; i++) + { + CSMBPart part = new CSMBPart(); + part.Name = ReadString(reader); + part.Parent = (CSMBParentPart)reader.ReadInt32(); + part.posX = reader.ReadSingle(); + part.posY = reader.ReadSingle(); + part.posZ = reader.ReadSingle(); + part.sizeX = reader.ReadSingle(); + part.sizeY = reader.ReadSingle(); + part.sizeZ = reader.ReadSingle(); + part.uvX = reader.ReadInt32(); + part.uvY = reader.ReadInt32(); + part.MirrorTexture = reader.ReadBoolean(); + part.HideWArmour = reader.ReadBoolean(); + part.Inflation = reader.ReadSingle(); + csmbFile.Parts.Add(part); + } + int numOfOffsets = reader.ReadInt32(); + for (int i = 0; i < numOfOffsets; i++) + { + CSMBOffset offset = new CSMBOffset(); + offset.offsetPart = (CSMBOffsetPart)reader.ReadInt32(); + offset.VerticalOffset = reader.ReadSingle(); + csmbFile.Offsets.Add(offset); + } + } + return csmbFile; } + + private string ReadString(EndiannessAwareBinaryReader reader) + { + ushort strlen = reader.ReadUInt16(); + return reader.ReadString(strlen); + } + + object IDataFormatReader.FromStream(Stream stream) => FromStream(stream); + + object IDataFormatReader.FromFile(string filename) => FromFile(filename); } } diff --git a/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs b/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs index 5855c6e0..0481f3db 100644 --- a/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs +++ b/PCK-Studio/Classes/IO/CSMB/CSMBFileWriter.cs @@ -1,54 +1,58 @@ using System.IO; using System.Text; using PckStudio.Classes.FileTypes; +using OMI.Workers; +using OMI; namespace PckStudio.Classes.IO.CSMB { - internal class CSMBFileWriter : StreamDataWriter + internal class CSMBFileWriter : IDataFormatWriter { CSMBFile _CSMB; - public static void Write(Stream stream, CSMBFile file) - { - new CSMBFileWriter(file).WriteToStream(stream); - } - public CSMBFileWriter(CSMBFile csmb) : base(false) + public CSMBFileWriter(CSMBFile csmb) { _CSMB = csmb; } - protected override void WriteToStream(Stream stream) + public void WriteToFile(string filename) { - WriteInt(stream, 0); - WriteInt(stream, _CSMB.Parts.Count); - foreach(CSMBPart part in _CSMB.Parts) + using(var fs = File.OpenWrite(filename)) { - WriteString(stream, part.Name); - WriteInt(stream, (int)part.Parent); - WriteFloat(stream, part.posX); - WriteFloat(stream, part.posY); - WriteFloat(stream, part.posZ); - WriteFloat(stream, part.sizeX); - WriteFloat(stream, part.sizeY); - WriteFloat(stream, part.sizeZ); - WriteInt(stream, part.uvX); - WriteInt(stream, part.uvY); - WriteBool(stream, part.MirrorTexture); - WriteBool(stream, part.HideWArmour); - WriteFloat(stream, part.Inflation); - } - WriteInt(stream, _CSMB.Offsets.Count); - foreach (CSMBOffset offset in _CSMB.Offsets) - { - WriteInt(stream, (int)offset.offsetPart); - WriteFloat(stream, offset.VerticalOffset); + WriteToStream(fs); } } - private void WriteString(Stream stream, string s) + public void WriteToStream(Stream stream) { - WriteShort(stream, (short)s.Length); - WriteString(stream, s, Encoding.ASCII); + using (var writer = new EndiannessAwareBinaryWriter(stream, Encoding.ASCII, leaveOpen: true, Endianness.LittleEndian)) + { + writer.Write(0); + writer.Write(_CSMB.Parts.Count); + foreach (CSMBPart part in _CSMB.Parts) + { + writer.Write((short)part.Name.Length); + writer.WriteString(part.Name); + writer.Write((int)part.Parent); + writer.Write(part.posX); + writer.Write(part.posY); + writer.Write(part.posZ); + writer.Write(part.sizeX); + writer.Write(part.sizeY); + writer.Write(part.sizeZ); + writer.Write(part.uvX); + writer.Write(part.uvY); + writer.Write(part.MirrorTexture); + writer.Write(part.HideWArmour); + writer.Write(part.Inflation); + } + writer.Write(_CSMB.Offsets.Count); + foreach (CSMBOffset offset in _CSMB.Offsets) + { + writer.Write((int)offset.offsetPart); + writer.Write(offset.VerticalOffset); + } + } } } } diff --git a/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs b/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs index 53d5a793..4eb1710a 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs @@ -1,6 +1,9 @@ -using PckStudio.Classes.FileTypes; +using OMI; +using OMI.Workers; +using PckStudio.Classes.FileTypes; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Text; @@ -14,55 +17,73 @@ namespace PckStudio.Classes.IO.PCK { } } - internal class PCKAudioFileReader : StreamDataReader + internal class PCKAudioFileReader : IDataFormatReader, IDataFormatReader { private PCKAudioFile _file; + private Endianness _endianness; private List LUT = new List(); private List _OriginalAudioTypeOrder = new List(); - - public static PCKAudioFile Read(Stream stream, bool isLittleEndian) + public PCKAudioFileReader(Endianness endianness) { - return new PCKAudioFileReader(isLittleEndian).ReadFromStream(stream); + _endianness = endianness; } - private PCKAudioFileReader(bool isLittleEndian) : base(isLittleEndian) + public PCKAudioFile FromFile(string filename) { + if(File.Exists(filename)) + { + PCKAudioFile file; + using(var fs = File.OpenRead(filename)) + { + file = FromStream(fs); + } + return file; + } + throw new FileNotFoundException(filename); } - protected override PCKAudioFile ReadFromStream(Stream stream) + public PCKAudioFile FromStream(Stream stream) { - int pck_type = ReadInt(stream); - if (pck_type > 0xf00000) // 03 00 00 00 == true - throw new OverflowException(nameof(pck_type)); - if (pck_type > 1) - throw new InvalidAudioPckException(nameof(pck_type)); - _file = new PCKAudioFile(); - ReadLookUpTable(stream); - ReadCategories(stream); - ReadCategorySongs(stream); + using (var reader = new EndiannessAwareBinaryReader(stream, + _endianness == Endianness.BigEndian + ? Encoding.BigEndianUnicode + : Encoding.Unicode, + leaveOpen: true, _endianness)) + { + int pck_type = reader.ReadInt32(); + if (pck_type > 0xf00000) // 03 00 00 00 == true + throw new OverflowException(nameof(pck_type)); + if (pck_type > 1) + throw new InvalidAudioPckException(nameof(pck_type)); + _file = new PCKAudioFile(); + ReadLookUpTable(reader); + ReadCategories(reader); + ReadCategorySongs(reader); + } return _file; } - private void ReadLookUpTable(Stream stream) + private void ReadLookUpTable(EndiannessAwareBinaryReader reader) { - int count = ReadInt(stream); + int count = reader.ReadInt32(); LUT = new List(count); for (int i = 0; i < count; i++) { - int index = ReadInt(stream); - LUT.Insert(index, ReadString(stream)); + int index = reader.ReadInt32(); + string value = ReadString(reader); + LUT.Insert(index, value); } } - private void ReadCategories(Stream stream) + private void ReadCategories(EndiannessAwareBinaryReader reader) { - int categoryEntryCount = ReadInt(stream); + int categoryEntryCount = reader.ReadInt32(); for (; 0 < categoryEntryCount; categoryEntryCount--) { - var parameterType = (PCKAudioFile.AudioCategory.EAudioParameterType)ReadInt(stream); - var audioType = (PCKAudioFile.AudioCategory.EAudioType)ReadInt(stream); - string name = ReadString(stream); + var parameterType = (PCKAudioFile.AudioCategory.EAudioParameterType)reader.ReadInt32(); + var audioType = (PCKAudioFile.AudioCategory.EAudioType)reader.ReadInt32(); + string name = ReadString(reader); // AddCategory puts the file's categories out of order and causes some songs to be put in the wrong categories // This is my simple fix for the issue. _OriginalAudioTypeOrder.Add(audioType); @@ -70,17 +91,17 @@ namespace PckStudio.Classes.IO.PCK } } - private void ReadCategorySongs(Stream stream) + private void ReadCategorySongs(EndiannessAwareBinaryReader reader) { List credits = new List(); List creditIds = new List(); foreach (var c in _OriginalAudioTypeOrder) { - int audioCount = ReadInt(stream); + int audioCount = reader.ReadInt32(); for (; 0 < audioCount; audioCount--) { - string key = LUT[ReadInt(stream)]; - string value = ReadString(stream); + string key = LUT[reader.ReadInt32()]; + string value = ReadString(reader); switch (key) { case "CUENAME": @@ -104,12 +125,16 @@ namespace PckStudio.Classes.IO.PCK } } - private string ReadString(Stream stream) + private string ReadString(EndiannessAwareBinaryReader reader) { - int len = ReadInt(stream); - string s = ReadString(stream, len, IsUsingLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode); - ReadInt(stream); // padding + int len = reader.ReadInt32(); + string s = reader.ReadString(len); + reader.ReadInt32(); // padding return s; } + + object IDataFormatReader.FromStream(Stream stream) => FromStream(stream); + + object IDataFormatReader.FromFile(string filename) => FromFile(filename); } } diff --git a/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs b/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs index 129861d7..3a1d9223 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs +++ b/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs @@ -1,14 +1,17 @@ -using PckStudio.Classes.FileTypes; +using OMI; +using OMI.Workers; +using PckStudio.Classes.FileTypes; using System.Collections.Generic; using System.IO; using System.Text; namespace PckStudio.Classes.IO.PCK { - internal class PCKAudioFileWriter : StreamDataWriter + internal class PCKAudioFileWriter : IDataFormatWriter { private PCKAudioFile _file; + private Endianness _endianness; private static readonly List LUT = new List { "CUENAME", @@ -16,71 +19,82 @@ namespace PckStudio.Classes.IO.PCK "CREDITID" }; - public static void Write(Stream stream, PCKAudioFile file, bool isLittleEndian) - { - new PCKAudioFileWriter(file, isLittleEndian).WriteToStream(stream); - } - - private PCKAudioFileWriter(PCKAudioFile file, bool isLittleEndian) : base(isLittleEndian) + public PCKAudioFileWriter(PCKAudioFile file, Endianness endianness) { _file = file; + _endianness = endianness; } - protected override void WriteToStream(Stream stream) + public void WriteToFile(string filename) { - WriteInt(stream, _file.type); - WriteLookUpTable(stream); - WriteCategories(stream); - WriteCategorySongs(stream); + using(var fs = File.OpenWrite(filename)) + { + WriteToStream(fs); + } } - private void WriteString(Stream stream, string s) + public void WriteToStream(Stream stream) { - WriteInt(stream, s.Length); - WriteString(stream, s, IsUsingLittleEndian ? Encoding.Unicode : Encoding.BigEndianUnicode); - WriteInt(stream, 0); // padding + using (var writer = new EndiannessAwareBinaryWriter(stream, + _endianness == Endianness.BigEndian + ? Encoding.BigEndianUnicode + : Encoding.Unicode, + leaveOpen: true, _endianness)) + { + writer.Write(_file.type); + WriteLookUpTable(writer); + WriteCategories(writer); + WriteCategorySongs(writer); + } } - private void WriteLookUpTable(Stream stream) + private void WriteString(EndiannessAwareBinaryWriter writer, string s) { - WriteInt(stream, 3); + writer.Write(s.Length); + writer.WriteString(s); + writer.Write(0); // padding + } + + private void WriteLookUpTable(EndiannessAwareBinaryWriter writer) + { + writer.Write(3); for (int i = 0; i < 3; i++) { - WriteInt(stream, i); - WriteString(stream, LUT[i]); + writer.Write(i); + WriteString(writer, LUT[i]); } } - private void WriteCategories(Stream stream) + private void WriteCategories(EndiannessAwareBinaryWriter writer) { - WriteInt(stream, _file.Categories.Length); + writer.Write(_file.Categories.Length); foreach (var category in _file.Categories) { - WriteInt(stream, (int)category.parameterType); - WriteInt(stream, (int)category.audioType); - WriteString(stream, category.Name); + writer.Write((int)category.parameterType); + writer.Write((int)category.audioType); + WriteString(writer, category.Name); } } - private void WriteCategorySongs(Stream stream) + private void WriteCategorySongs(EndiannessAwareBinaryWriter writer) { bool addCredit = true; foreach (var category in _file.Categories) { - WriteInt(stream, category.SongNames.Count + (addCredit ? _file.Credits.Count * 2 : 0)); + writer.Write(category.SongNames.Count + (addCredit ? _file.Credits.Count * 2 : 0)); foreach (var name in category.SongNames) { - WriteInt(stream, LUT.IndexOf("CUENAME")); - WriteString(stream, name); + writer.Write(LUT.IndexOf("CUENAME")); + WriteString(writer, name); } if (addCredit) { foreach (var credit in _file.Credits) { - WriteInt(stream, LUT.IndexOf("CREDIT")); - WriteString(stream, credit.Value); - WriteInt(stream, LUT.IndexOf("CREDITID")); - WriteString(stream, credit.Key); + writer.Write(LUT.IndexOf("CREDIT")); + WriteString(writer, credit.Value); + writer.Write(LUT.IndexOf("CREDITID")); + WriteString(writer, credit.Key); } } addCredit = false; diff --git a/PCK-Studio/Classes/IO/StreamDataReader.cs b/PCK-Studio/Classes/IO/StreamDataReader.cs deleted file mode 100644 index 91e0fb97..00000000 --- a/PCK-Studio/Classes/IO/StreamDataReader.cs +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (c) 2022-present miku-666 - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1.The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. -**/ -using PckStudio.Classes.FileTypes; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PckStudio.Classes.IO -{ - public abstract class StreamDataReader - { - private static bool useLittleEndian; - protected static bool IsUsingLittleEndian => useLittleEndian; - protected abstract T ReadFromStream(Stream stream); - - protected StreamDataReader(bool useLittleEndian) - { - StreamDataReader.useLittleEndian = useLittleEndian; - } - - protected static string ReadString(Stream stream, int length, Encoding encoding) - { - byte[] buffer = ReadBytes(stream, length << Convert.ToInt32(encoding is UnicodeEncoding)); - return encoding.GetString(buffer).TrimEnd('\0'); - } - - protected static byte[] ReadBytes(Stream stream, int count) - { - byte[] buffer = new byte[count]; - stream.Read(buffer, 0, count); - return buffer; - } - - protected static bool ReadBool(Stream stream) - { - return stream.ReadByte() != 0; - } - - protected static ushort ReadUShort(Stream stream) => (ushort)ReadShort(stream); - protected static short ReadShort(Stream stream) - { - byte[] bytes = ReadBytes(stream, 2); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(bytes); - return BitConverter.ToInt16(bytes, 0); - } - - protected static uint ReadUInt(Stream stream) => (uint)ReadInt(stream); - protected static int ReadInt(Stream stream) - { - byte[] buffer = ReadBytes(stream, 4); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(buffer); - return BitConverter.ToInt32(buffer, 0); - } - - protected static ulong ReadULong(Stream stream) => (ulong)ReadLong(stream); - protected static long ReadLong(Stream stream) - { - byte[] buffer = ReadBytes(stream, 8); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(buffer); - return BitConverter.ToInt64(buffer, 0); - } - - protected static float ReadFloat(Stream stream) - { - byte[] buffer = ReadBytes(stream, 4); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(buffer); - return BitConverter.ToSingle(buffer, 0); - } - } -} diff --git a/PCK-Studio/Classes/IO/StreamDataWriter.cs b/PCK-Studio/Classes/IO/StreamDataWriter.cs deleted file mode 100644 index 594621f0..00000000 --- a/PCK-Studio/Classes/IO/StreamDataWriter.cs +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (c) 2022-present miku-666 - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1.The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. -**/ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace PckStudio.Classes.IO -{ - public abstract class StreamDataWriter - { - private static bool useLittleEndian; - protected static bool IsUsingLittleEndian => useLittleEndian; - - protected StreamDataWriter(bool littleEndian) - { - useLittleEndian = littleEndian; - } - - protected abstract void WriteToStream(Stream stream); - - protected static void WriteBool(Stream stream, bool state) - { - stream.WriteByte((byte)(state ? 1 : 0)); - } - - protected static void WriteUShort(Stream stream, ushort value) => WriteShort(stream, (short)value); - - protected static void WriteShort(Stream stream, short value) - { - byte[] bytes = BitConverter.GetBytes(value); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(bytes); - WriteBytes(stream, bytes, 2); - } - - protected static void WriteUInt(Stream stream, uint value) => WriteInt(stream, (int)value); - protected static void WriteInt(Stream stream, int value) - { - byte[] buffer = BitConverter.GetBytes(value); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(buffer); - WriteBytes(stream, buffer, 4); - } - - protected static void WriteULong(Stream stream, ulong value) => WriteLong(stream, (long)value); - protected static void WriteLong(Stream stream, long value) - { - byte[] buffer = BitConverter.GetBytes(value); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(buffer); - WriteBytes(stream, buffer, 8); - } - - protected static void WriteString(Stream stream, string s, Encoding encoding) - => WriteBytes(stream, encoding.GetBytes(s)); - - protected static void WriteBytes(Stream stream, byte[] bytes) => WriteBytes(stream, bytes, bytes.Length); - protected static void WriteBytes(Stream stream, byte[] bytes, int count) - { - stream.Write(bytes, 0, count); - } - - protected static void WriteFloat(Stream stream, float value) - { - byte[] buffer = BitConverter.GetBytes(value); - if (BitConverter.IsLittleEndian && !useLittleEndian) - Array.Reverse(buffer); - WriteBytes(stream, buffer, 4); - } - } -} diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index 5f47eb52..746e1eec 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -64,7 +64,8 @@ namespace PckStudio.Forms.Editor audioPCK = file; using (var stream = new MemoryStream(file.Data)) { - audioFile = PCKAudioFileReader.Read(stream, isLittleEndian); + var reader = new PCKAudioFileReader(isLittleEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + audioFile = reader.FromStream(stream); } SetUpTree(); @@ -396,7 +397,8 @@ namespace PckStudio.Forms.Editor using (var stream = new MemoryStream()) { - PCKAudioFileWriter.Write(stream, audioFile, _isLittleEndian); + var writer = new PCKAudioFileWriter(audioFile, _isLittleEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + writer.WriteToStream(stream); audioPCK.SetData(stream.ToArray()); } DialogResult = DialogResult.OK; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 4f44bb9d..1c981353 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -839,12 +839,15 @@ namespace PckStudio audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.Overworld); audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.Nether); audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.End); - PckFile.FileData pckFileData = currentPCK.CreateNewFile("audio.pck", PckFile.FileData.FileType.AudioFile); - using (var stream = new MemoryStream()) - { - PCKAudioFileWriter.Write(stream, audioPck, isLittle); - pckFileData.SetData(stream.ToArray()); - } + PckFile.FileData pckFileData = currentPCK.CreateNewFile("audio.pck", PckFile.FileData.FileType.AudioFile, () => + { + using (var stream = new MemoryStream()) + { + var writer = new PCKAudioFileWriter(audioPck, isLittle ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + writer.WriteToStream(stream); + return stream.ToArray(); + } + }); return pckFileData; } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 9fde86b1..0433db82 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -187,8 +187,6 @@ - - diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 22037f30..806fde8e 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 22037f3061457e05d9dbc0cba1e270e07ac2801a +Subproject commit 806fde8e511de473b885fd7e7311e6f05c05ef47 From 59cd8575b1cce2e479fcbb9bb26b7e485ac00189 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 8 Apr 2023 22:34:44 +0200 Subject: [PATCH 33/79] Fix wrong spelling of 'Extentions' to 'Extensions' and Add blending to 'ImageExtension' --- PCK-Studio/Classes/Extensions/BlendMode.cs | 12 ++ .../EnumerableExtensions.cs} | 4 +- .../ImageExtensions.cs} | 120 +++++++++++++++--- PCK-Studio/Forms/Editor/Animation.cs | 4 +- PCK-Studio/Forms/Editor/AnimationEditor.cs | 8 +- .../Forms/Utilities/AnimationResources.cs | 5 +- .../Forms/Utilities/BehaviourResources.cs | 4 +- .../Forms/Utilities/MaterialResources.cs | 2 +- PCK-Studio/Forms/Utilities/ModelsResources.cs | 2 +- PCK-Studio/Forms/Utilities/pckCenterOpen.cs | 4 +- PCK-Studio/PckStudio.csproj | 5 +- 11 files changed, 133 insertions(+), 37 deletions(-) create mode 100644 PCK-Studio/Classes/Extensions/BlendMode.cs rename PCK-Studio/Classes/{Extentions/EnumerableExtentions.cs => Extensions/EnumerableExtensions.cs} (79%) rename PCK-Studio/Classes/{Extentions/ImageExtentions.cs => Extensions/ImageExtensions.cs} (50%) diff --git a/PCK-Studio/Classes/Extensions/BlendMode.cs b/PCK-Studio/Classes/Extensions/BlendMode.cs new file mode 100644 index 00000000..96cfc36e --- /dev/null +++ b/PCK-Studio/Classes/Extensions/BlendMode.cs @@ -0,0 +1,12 @@ +namespace PckStudio.Extensions +{ + public enum BlendMode + { + Add, + Subtract, + Multiply, + Average, + DescendingOrder, + AscendingOrder + } +} \ No newline at end of file diff --git a/PCK-Studio/Classes/Extentions/EnumerableExtentions.cs b/PCK-Studio/Classes/Extensions/EnumerableExtensions.cs similarity index 79% rename from PCK-Studio/Classes/Extentions/EnumerableExtentions.cs rename to PCK-Studio/Classes/Extensions/EnumerableExtensions.cs index cda71bba..ed95e29f 100644 --- a/PCK-Studio/Classes/Extentions/EnumerableExtentions.cs +++ b/PCK-Studio/Classes/Extensions/EnumerableExtensions.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -namespace PckStudio.Classes.Extentions +namespace PckStudio.Extensions { - internal static class EnumerableExtentions + internal static class EnumerableExtensions { public static IEnumerable<(int index, T type)>enumerate(this IEnumerable array) { diff --git a/PCK-Studio/Classes/Extentions/ImageExtentions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs similarity index 50% rename from PCK-Studio/Classes/Extentions/ImageExtentions.cs rename to PCK-Studio/Classes/Extensions/ImageExtensions.cs index 6743d1de..6313801d 100644 --- a/PCK-Studio/Classes/Extentions/ImageExtentions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -4,11 +4,14 @@ using System.Drawing; using System.Diagnostics; using System; using System.Drawing.Imaging; +using System.Runtime.InteropServices; +using System.Windows.Media.Media3D; +using System.Web; -namespace PckStudio.Classes.Extentions +namespace PckStudio.Extensions { - internal static class ImageExtentions - { + internal static class ImageExtensions + { public enum ImageLayoutDirection { Horizontal, @@ -31,15 +34,15 @@ namespace PckStudio.Classes.Extentions } } - private static Image GetTileImage(Image source, Rectangle area, Size size, GraphicsUnit unit = GraphicsUnit.Pixel) + public static Image GetArea(this Image source, Rectangle area, GraphicsUnit unit = GraphicsUnit.Pixel) { - Image tileImage = new Bitmap(size.Width, size.Height); + Image tileImage = new Bitmap(area.Width, area.Height); using (Graphics gfx = Graphics.FromImage(tileImage)) { gfx.SmoothingMode = SmoothingMode.None; gfx.InterpolationMode = InterpolationMode.NearestNeighbor; gfx.PixelOffsetMode = PixelOffsetMode.HighQuality; - gfx.DrawImage(source, new Rectangle(Point.Empty, size), area, unit); + gfx.DrawImage(source, new Rectangle(Point.Empty, area.Size), area, unit); } return tileImage; } @@ -54,7 +57,7 @@ namespace PckStudio.Classes.Extentions int row = i / img_row_count; int column = i % img_row_count; Rectangle tileArea = new Rectangle(new Point(column * size.Height, row * size.Width), size); - yield return GetTileImage(source, tileArea, size); + yield return source.GetArea(tileArea); } yield break; } @@ -70,7 +73,7 @@ namespace PckStudio.Classes.Extentions { ImageLayoutInfo locationInfo = new ImageLayoutInfo(source.Width, source.Height, i, layoutDirection); Rectangle tileArea = new Rectangle(locationInfo.SectionPoint, locationInfo.SectionSize); - yield return GetTileImage(source, tileArea, locationInfo.SectionSize); + yield return source.GetArea(tileArea); } yield break; } @@ -112,8 +115,18 @@ namespace PckStudio.Classes.Extentions public CompositingMode CompositingMode { get; set; } public CompositingQuality CompositingQuality { get; set; } public InterpolationMode InterpolationMode { get; set; } - public SmoothingMode SmoothingMode {get; set; } + public SmoothingMode SmoothingMode { get; set; } public PixelOffsetMode PixelOffsetMode { get; set; } + + public void Apply(Graphics graphics) + { + graphics.CompositingMode = CompositingMode; + graphics.CompositingQuality = CompositingQuality; + graphics.InterpolationMode = InterpolationMode; + graphics.SmoothingMode = SmoothingMode; + graphics.PixelOffsetMode = PixelOffsetMode; + } + } public static Image ResizeImage(this Image image, int width, int height, GraphicsConfig graphicsConfig) @@ -125,12 +138,7 @@ namespace PckStudio.Classes.Extentions using (var graphics = Graphics.FromImage(destImage)) { - graphics.CompositingMode = graphicsConfig.CompositingMode; - graphics.CompositingQuality = graphicsConfig.CompositingQuality; - graphics.InterpolationMode = graphicsConfig.InterpolationMode; - graphics.SmoothingMode = graphicsConfig.SmoothingMode; - graphics.PixelOffsetMode = graphicsConfig.PixelOffsetMode; - + graphicsConfig.Apply(graphics); using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); @@ -139,5 +147,87 @@ namespace PckStudio.Classes.Extentions } return destImage; } + + public static Image Fill(this Image image, Color color) + { + using (var g = Graphics.FromImage(image)) + { + using (SolidBrush brush = new SolidBrush(color)) + { + g.FillRectangle(brush, new Rectangle(Point.Empty, image.Size)); + } + } + return image; + } + + public static Image Blend(this Image bg, Color foregroundColor, BlendMode mode) + { + Bitmap bitmap = new Bitmap(bg); + bitmap.Fill(foregroundColor); + return bg.Blend(bitmap, mode); + } + + public static Image Blend(this Image image, Image overlay, BlendMode mode) + { + Stopwatch stopwatch = Stopwatch.StartNew(); + if (image is not Bitmap baseImage || overlay is not Bitmap overlayImage) + return image; + BitmapData baseImageData = baseImage.LockBits(new Rectangle(Point.Empty, baseImage.Size), + ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); + byte[] baseImageBuffer = new byte[baseImageData.Stride * baseImageData.Height]; + + Marshal.Copy(baseImageData.Scan0, baseImageBuffer, 0, baseImageBuffer.Length); + + BitmapData overlayImageData = overlayImage.LockBits(new Rectangle(Point.Empty, overlayImage.Size), + ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); + byte[] overlayImageBuffer = new byte[overlayImageData.Stride * overlayImageData.Height]; + + Marshal.Copy(overlayImageData.Scan0, overlayImageBuffer, 0, overlayImageBuffer.Length); + + for (int k = 0; k < baseImageBuffer.Length && k < overlayImageBuffer.Length; k += 4) + { + baseImageBuffer[k + 0] = CalculateColorComponentBlendValue(baseImageBuffer[k + 0] / 255f, overlayImageBuffer[k + 0] / 255f, mode); + baseImageBuffer[k + 1] = CalculateColorComponentBlendValue(baseImageBuffer[k + 1] / 255f, overlayImageBuffer[k + 1] / 255f, mode); + baseImageBuffer[k + 2] = CalculateColorComponentBlendValue(baseImageBuffer[k + 2] / 255f, overlayImageBuffer[k + 2] / 255f, mode); + } + + Bitmap bitmapResult = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb); + BitmapData resultImageData = bitmapResult.LockBits(new Rectangle(Point.Empty, bitmapResult.Size), + ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); + + Marshal.Copy(baseImageBuffer, 0, resultImageData.Scan0, baseImageBuffer.Length); + + bitmapResult.UnlockBits(resultImageData); + baseImage.UnlockBits(baseImageData); + overlayImage.UnlockBits(overlayImageData); + stopwatch.Stop(); + Debug.WriteLine($"{nameof(ImageExtensions.Blend)} took {stopwatch.ElapsedMilliseconds}ms"); + return bitmapResult; + } + + private static T Clamp(T value, T min, T max) where T : IComparable + { + if (value.CompareTo(min) < 0) return min; + else if (value.CompareTo(max) > 0) return max; + else return value; + } + + private static byte CalculateColorComponentBlendValue(float source, float overlay, BlendMode blendType) + { + source = Clamp(source, 0.0f, 1.0f); + overlay = Clamp(overlay, 0.0f, 1.0f); + + float resultValue = blendType switch + { + BlendMode.Add => source + overlay, + BlendMode.Subtract => source - overlay, + BlendMode.Multiply => source * overlay, + BlendMode.Average => (source + overlay) / 2.0f, + BlendMode.AscendingOrder => source > overlay ? overlay : source, + BlendMode.DescendingOrder => source < overlay ? overlay : source, + _ => 0.0f + }; + return (byte)Clamp(resultValue * 255, 0, 255); + } } } diff --git a/PCK-Studio/Forms/Editor/Animation.cs b/PCK-Studio/Forms/Editor/Animation.cs index ad8a1ccd..7aa20194 100644 --- a/PCK-Studio/Forms/Editor/Animation.cs +++ b/PCK-Studio/Forms/Editor/Animation.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; -using PckStudio.Classes.Extentions; +using PckStudio.Extensions; using System.Text; @@ -140,7 +140,7 @@ namespace PckStudio.Forms.Editor var textures = isClockOrCompass ? linearImages : frameTextures; - return ImageExtentions.ImageFromImageArray(textures.ToArray(), ImageExtentions.ImageLayoutDirection.Vertical); + return ImageExtensions.ImageFromImageArray(textures.ToArray(), ImageExtensions.ImageLayoutDirection.Vertical); } } } diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 7f921db2..7ddcdc7e 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -3,15 +3,13 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Drawing; -using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Windows.Forms; -using PckStudio.Classes.FileTypes; using PckStudio.Forms.Additional_Popups.Animation; using PckStudio.Forms.Utilities; -using PckStudio.Classes.Extentions; +using PckStudio.Extensions; using OMI.Formats.Pck; namespace PckStudio.Forms.Editor @@ -51,7 +49,7 @@ namespace PckStudio.Forms.Editor using MemoryStream textureMem = new MemoryStream(animationFile.Data); var texture = new Bitmap(textureMem); - var frameTextures = texture.CreateImageList(ImageExtentions.ImageLayoutDirection.Horizontal); + var frameTextures = texture.CreateImageList(ImageExtensions.ImageLayoutDirection.Horizontal); currentAnimation = animationFile.Properties.HasProperty("ANIM") ? new Animation(frameTextures, animationFile.Properties.GetPropertyValue("ANIM")) @@ -296,7 +294,7 @@ namespace PckStudio.Forms.Editor return; } using MemoryStream textureMem = new MemoryStream(File.ReadAllBytes(textureFile)); - var textures = Image.FromStream(textureMem).CreateImageList(ImageExtentions.ImageLayoutDirection.Horizontal); + var textures = Image.FromStream(textureMem).CreateImageList(ImageExtensions.ImageLayoutDirection.Horizontal); var new_animation = new Animation(textures); try { diff --git a/PCK-Studio/Forms/Utilities/AnimationResources.cs b/PCK-Studio/Forms/Utilities/AnimationResources.cs index 4d8c1f4a..237d153a 100644 --- a/PCK-Studio/Forms/Utilities/AnimationResources.cs +++ b/PCK-Studio/Forms/Utilities/AnimationResources.cs @@ -1,12 +1,9 @@ using Newtonsoft.Json.Linq; using System.Drawing; using System.Linq; -using System.IO; using PckStudio.Properties; -using System.Drawing.Imaging; -using PckStudio.Classes.Extentions; -using OMI.Formats.Pck; +using PckStudio.Extensions; namespace PckStudio.Forms.Utilities { diff --git a/PCK-Studio/Forms/Utilities/BehaviourResources.cs b/PCK-Studio/Forms/Utilities/BehaviourResources.cs index 763c4e71..8eed8e50 100644 --- a/PCK-Studio/Forms/Utilities/BehaviourResources.cs +++ b/PCK-Studio/Forms/Utilities/BehaviourResources.cs @@ -4,11 +4,9 @@ using System.Linq; using System.IO; using PckStudio.Properties; -using PckStudio.Classes.Extentions; +using PckStudio.Extensions; using OMI.Formats.Behaviour; using OMI.Workers.Behaviour; -using OMI.Formats.Pck; -using System; namespace PckStudio.Forms.Utilities { diff --git a/PCK-Studio/Forms/Utilities/MaterialResources.cs b/PCK-Studio/Forms/Utilities/MaterialResources.cs index 7d27eda1..94cd2e4a 100644 --- a/PCK-Studio/Forms/Utilities/MaterialResources.cs +++ b/PCK-Studio/Forms/Utilities/MaterialResources.cs @@ -4,7 +4,7 @@ using System.Linq; using System.IO; using PckStudio.Properties; -using PckStudio.Classes.Extentions; +using PckStudio.Extensions; using OMI.Formats.Pck; using OMI.Formats.Material; using OMI.Workers.Material; diff --git a/PCK-Studio/Forms/Utilities/ModelsResources.cs b/PCK-Studio/Forms/Utilities/ModelsResources.cs index cdf91454..f61e6ee1 100644 --- a/PCK-Studio/Forms/Utilities/ModelsResources.cs +++ b/PCK-Studio/Forms/Utilities/ModelsResources.cs @@ -4,7 +4,7 @@ using System.Linq; using System.IO; using PckStudio.Properties; -using PckStudio.Classes.Extentions; +using PckStudio.Extensions; using OMI.Formats.Model; using OMI.Formats.Pck; using OMI.Workers.Model; diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs index c16ab9a7..b1ba4635 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs @@ -19,7 +19,7 @@ using PckStudio.Classes.FileTypes; using PckStudio.Classes.IO.PCK; using OMI.Formats.Pck; using OMI.Workers.Pck; -using PckStudio.Classes.Extentions; +using PckStudio.Extensions; namespace PckStudio.Forms { @@ -1027,7 +1027,7 @@ namespace PckStudio.Forms { var ms = new MemoryStream(skinTexture.Data); Bitmap saveSkin = new Bitmap(Image.FromStream(ms)); - var config = new ImageExtentions.GraphicsConfig() + var config = new ImageExtensions.GraphicsConfig() { CompositingMode = CompositingMode.SourceCopy, CompositingQuality = CompositingQuality.HighQuality, diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 0433db82..96fbce83 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -170,7 +170,8 @@ - + + @@ -185,7 +186,7 @@ - + From 0e12fd5a8ed081185be0ecf94d4940a46ef4f66b Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 9 Apr 2023 18:34:23 +0200 Subject: [PATCH 34/79] Add GraphicsExtensions and move GraphicsConfig --- .../Classes/Extensions/GraphicsExtensions.cs | 38 +++++++++++++++++++ .../Classes/Extensions/ImageExtensions.cs | 32 ++-------------- PCK-Studio/Forms/Utilities/pckCenterOpen.cs | 2 +- PCK-Studio/PckStudio.csproj | 1 + 4 files changed, 44 insertions(+), 29 deletions(-) create mode 100644 PCK-Studio/Classes/Extensions/GraphicsExtensions.cs diff --git a/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs b/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs new file mode 100644 index 00000000..b29842da --- /dev/null +++ b/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; + +namespace PckStudio.Extensions +{ + public struct GraphicsConfig + { + public GraphicsConfig() + { + CompositingQuality = CompositingQuality.Default; + InterpolationMode = InterpolationMode.Default; + SmoothingMode = SmoothingMode.Default; + PixelOffsetMode = PixelOffsetMode.Default; + } + + public CompositingMode CompositingMode { get; set; } + public CompositingQuality CompositingQuality { get; set; } + public InterpolationMode InterpolationMode { get; set; } + public SmoothingMode SmoothingMode { get; set; } + public PixelOffsetMode PixelOffsetMode { get; set; } + } + + internal static class GraphicsExtensions + { + public static void ApplyConfig(this Graphics graphics, GraphicsConfig config) + { + graphics.CompositingMode = config.CompositingMode; + graphics.CompositingQuality = config.CompositingQuality; + graphics.InterpolationMode = config.InterpolationMode; + graphics.SmoothingMode = config.SmoothingMode; + graphics.PixelOffsetMode = config.PixelOffsetMode; + } + } +} diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index 6313801d..180ff5dc 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -1,12 +1,10 @@ -using System.Collections.Generic; -using System.Drawing.Drawing2D; +using System; using System.Drawing; using System.Diagnostics; -using System; using System.Drawing.Imaging; +using System.Drawing.Drawing2D; +using System.Collections.Generic; using System.Runtime.InteropServices; -using System.Windows.Media.Media3D; -using System.Web; namespace PckStudio.Extensions { @@ -110,25 +108,6 @@ namespace PckStudio.Extensions return new Size(width, heigh); } - public struct GraphicsConfig - { - public CompositingMode CompositingMode { get; set; } - public CompositingQuality CompositingQuality { get; set; } - public InterpolationMode InterpolationMode { get; set; } - public SmoothingMode SmoothingMode { get; set; } - public PixelOffsetMode PixelOffsetMode { get; set; } - - public void Apply(Graphics graphics) - { - graphics.CompositingMode = CompositingMode; - graphics.CompositingQuality = CompositingQuality; - graphics.InterpolationMode = InterpolationMode; - graphics.SmoothingMode = SmoothingMode; - graphics.PixelOffsetMode = PixelOffsetMode; - } - - } - public static Image ResizeImage(this Image image, int width, int height, GraphicsConfig graphicsConfig) { var destRect = new Rectangle(0, 0, width, height); @@ -138,7 +117,7 @@ namespace PckStudio.Extensions using (var graphics = Graphics.FromImage(destImage)) { - graphicsConfig.Apply(graphics); + graphics.ApplyConfig(graphicsConfig); using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); @@ -169,7 +148,6 @@ namespace PckStudio.Extensions public static Image Blend(this Image image, Image overlay, BlendMode mode) { - Stopwatch stopwatch = Stopwatch.StartNew(); if (image is not Bitmap baseImage || overlay is not Bitmap overlayImage) return image; BitmapData baseImageData = baseImage.LockBits(new Rectangle(Point.Empty, baseImage.Size), @@ -200,8 +178,6 @@ namespace PckStudio.Extensions bitmapResult.UnlockBits(resultImageData); baseImage.UnlockBits(baseImageData); overlayImage.UnlockBits(overlayImageData); - stopwatch.Stop(); - Debug.WriteLine($"{nameof(ImageExtensions.Blend)} took {stopwatch.ElapsedMilliseconds}ms"); return bitmapResult; } diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs index b1ba4635..7a978f68 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs @@ -1027,7 +1027,7 @@ namespace PckStudio.Forms { var ms = new MemoryStream(skinTexture.Data); Bitmap saveSkin = new Bitmap(Image.FromStream(ms)); - var config = new ImageExtensions.GraphicsConfig() + var config = new GraphicsConfig() { CompositingMode = CompositingMode.SourceCopy, CompositingQuality = CompositingQuality.HighQuality, diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 96fbce83..ae28ad89 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -172,6 +172,7 @@ + From 9d3104fe9606ba0abd80b914ed690e6c5a5da4c4 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 9 Apr 2023 19:20:12 +0200 Subject: [PATCH 35/79] Added 'BlendMode.Screen' --- PCK-Studio/Classes/Extensions/BlendMode.cs | 3 ++- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Classes/Extensions/BlendMode.cs b/PCK-Studio/Classes/Extensions/BlendMode.cs index 96cfc36e..7fb02709 100644 --- a/PCK-Studio/Classes/Extensions/BlendMode.cs +++ b/PCK-Studio/Classes/Extensions/BlendMode.cs @@ -7,6 +7,7 @@ Multiply, Average, DescendingOrder, - AscendingOrder + AscendingOrder, + Screen } } \ No newline at end of file diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index 180ff5dc..ee800247 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -201,6 +201,7 @@ namespace PckStudio.Extensions BlendMode.Average => (source + overlay) / 2.0f, BlendMode.AscendingOrder => source > overlay ? overlay : source, BlendMode.DescendingOrder => source < overlay ? overlay : source, + BlendMode.Screen => 1f - (1f - source)*(1f - overlay), _ => 0.0f }; return (byte)Clamp(resultValue * 255, 0, 255); From 7ec2a70ee004d127e2439ee0904e61cad16d9fe1 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 9 Apr 2023 19:23:59 +0200 Subject: [PATCH 36/79] ImageExtensions - Remove GraphicsUnit argument from 'GetArea' --- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index ee800247..9f1e109b 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -32,7 +32,7 @@ namespace PckStudio.Extensions } } - public static Image GetArea(this Image source, Rectangle area, GraphicsUnit unit = GraphicsUnit.Pixel) + public static Image GetArea(this Image source, Rectangle area) { Image tileImage = new Bitmap(area.Width, area.Height); using (Graphics gfx = Graphics.FromImage(tileImage)) @@ -40,7 +40,7 @@ namespace PckStudio.Extensions gfx.SmoothingMode = SmoothingMode.None; gfx.InterpolationMode = InterpolationMode.NearestNeighbor; gfx.PixelOffsetMode = PixelOffsetMode.HighQuality; - gfx.DrawImage(source, new Rectangle(Point.Empty, area.Size), area, unit); + gfx.DrawImage(source, new Rectangle(Point.Empty, area.Size), area, GraphicsUnit.Pixel); } return tileImage; } From 499ed6f292099a60bd58f508484ecd0c89440ef4 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 9 Apr 2023 19:25:13 +0200 Subject: [PATCH 37/79] ImageExtensions - 'CalculateImageSize' now checks for all images to be the same size --- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index 9f1e109b..b691b80c 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -5,6 +5,7 @@ using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Collections.Generic; using System.Runtime.InteropServices; +using System.Linq; namespace PckStudio.Extensions { @@ -96,16 +97,17 @@ namespace PckStudio.Extensions { var horizontal = layoutDirection == ImageLayoutDirection.Horizontal; - // TODO: Validate all source images to be the same size. int width = sources[0].Width; - int heigh = sources[0].Height; + int height = sources[0].Height; + if (!sources.All(img => img.Width.Equals(width) && img.Height.Equals(height))) + throw new InvalidOperationException("Images must have the same width and height."); if (horizontal) width *= sources.Length; else - heigh *= sources.Length; + height *= sources.Length; - return new Size(width, heigh); + return new Size(width, height); } public static Image ResizeImage(this Image image, int width, int height, GraphicsConfig graphicsConfig) From 4cd8c64ea3ceeea5a1d9311a690e492e0853a244 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 9 Apr 2023 19:27:43 +0200 Subject: [PATCH 38/79] ImageExtensions- Add 'ImageLayoutInfo.SectionArea' --- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index b691b80c..e1c954a8 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -22,14 +22,16 @@ namespace PckStudio.Extensions /// /// Size of sub section of the image /// - public Size SectionSize; - public Point SectionPoint; + public readonly Size SectionSize; + public readonly Point SectionPoint; + public readonly Rectangle SectionArea; public ImageLayoutInfo(int width, int height, int index, ImageLayoutDirection layoutDirection) { bool horizontal = layoutDirection == ImageLayoutDirection.Horizontal; SectionSize = horizontal ? new Size(width, width) : new Size(height, height); SectionPoint = horizontal ? new Point(0, index * width) : new Point(index * height, 0); + SectionArea = new Rectangle(SectionPoint, SectionSize); } } @@ -71,8 +73,7 @@ namespace PckStudio.Extensions for (int i = 0; i < source.Height / source.Width; i++) { ImageLayoutInfo locationInfo = new ImageLayoutInfo(source.Width, source.Height, i, layoutDirection); - Rectangle tileArea = new Rectangle(locationInfo.SectionPoint, locationInfo.SectionSize); - yield return source.GetArea(tileArea); + yield return source.GetArea(locationInfo.SectionArea); } yield break; } From f2ced4285aba3978197abf6322575996172f6e42 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 10 Apr 2023 10:57:34 +0200 Subject: [PATCH 39/79] ImageExtensions.cs - Move 'ImageLayoutDirection' to namespace level --- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 4 ++-- PCK-Studio/Forms/Editor/Animation.cs | 2 +- PCK-Studio/Forms/Editor/AnimationEditor.cs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index e1c954a8..91c79c08 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -9,14 +9,14 @@ using System.Linq; namespace PckStudio.Extensions { - internal static class ImageExtensions - { public enum ImageLayoutDirection { Horizontal, Vertical } + internal static class ImageExtensions + { private struct ImageLayoutInfo { /// diff --git a/PCK-Studio/Forms/Editor/Animation.cs b/PCK-Studio/Forms/Editor/Animation.cs index 7aa20194..1f1f8065 100644 --- a/PCK-Studio/Forms/Editor/Animation.cs +++ b/PCK-Studio/Forms/Editor/Animation.cs @@ -140,7 +140,7 @@ namespace PckStudio.Forms.Editor var textures = isClockOrCompass ? linearImages : frameTextures; - return ImageExtensions.ImageFromImageArray(textures.ToArray(), ImageExtensions.ImageLayoutDirection.Vertical); + return ImageExtensions.ImageFromImageArray(textures.ToArray(), ImageLayoutDirection.Vertical); } } } diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 7ddcdc7e..b538538b 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -49,7 +49,7 @@ namespace PckStudio.Forms.Editor using MemoryStream textureMem = new MemoryStream(animationFile.Data); var texture = new Bitmap(textureMem); - var frameTextures = texture.CreateImageList(ImageExtensions.ImageLayoutDirection.Horizontal); + var frameTextures = texture.CreateImageList(ImageLayoutDirection.Horizontal); currentAnimation = animationFile.Properties.HasProperty("ANIM") ? new Animation(frameTextures, animationFile.Properties.GetPropertyValue("ANIM")) @@ -294,7 +294,7 @@ namespace PckStudio.Forms.Editor return; } using MemoryStream textureMem = new MemoryStream(File.ReadAllBytes(textureFile)); - var textures = Image.FromStream(textureMem).CreateImageList(ImageExtensions.ImageLayoutDirection.Horizontal); + var textures = Image.FromStream(textureMem).CreateImageList(ImageLayoutDirection.Horizontal); var new_animation = new Animation(textures); try { From 4b105ab8198d9bb35ef592f2472ab55329d89f4c Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 10 Apr 2023 10:59:19 +0200 Subject: [PATCH 40/79] ImageExtensions.cs - Rename some function member names and use Math.DivRem --- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index 91c79c08..72147a9d 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -50,13 +50,12 @@ namespace PckStudio.Extensions public static IEnumerable CreateImageList(this Image source, Size size) { - int img_row_count = source.Width / size.Width; - int img_column_count = source.Height / size.Height; - Debug.WriteLine($"{source.Width} {source.Height} {size} {img_column_count} {img_row_count}"); - for (int i = 0; i < img_column_count * img_row_count; i++) + int rowCount = source.Width / size.Width; + int columnCount = source.Height / size.Height; + Debug.WriteLine($"{source.Width} {source.Height} {size} {columnCount} {rowCount}"); + for (int i = 0; i < columnCount * rowCount; i++) { - int row = i / img_row_count; - int column = i % img_row_count; + int row = Math.DivRem(i, rowCount, out int column); Rectangle tileArea = new Rectangle(new Point(column * size.Height, row * size.Width), size); yield return source.GetArea(tileArea); } From 60fbdfe7957ba1998e54e7a9477753a68a3ed11f Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 10 Apr 2023 11:01:23 +0200 Subject: [PATCH 41/79] ImageExtensions.cs - Improve Blend function when blending with a color --- .../Classes/Extensions/ImageExtensions.cs | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index 72147a9d..c34fb646 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -141,11 +141,38 @@ namespace PckStudio.Extensions return image; } - public static Image Blend(this Image bg, Color foregroundColor, BlendMode mode) + public static Image Blend(this Image image, Color foregroundColor, BlendMode mode) { - Bitmap bitmap = new Bitmap(bg); - bitmap.Fill(foregroundColor); - return bg.Blend(bitmap, mode); + if (image is not Bitmap baseImage) + return image; + + BitmapData baseImageData = baseImage.LockBits(new Rectangle(Point.Empty, baseImage.Size), + ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); + byte[] baseImageBuffer = new byte[baseImageData.Stride * baseImageData.Height]; + + Marshal.Copy(baseImageData.Scan0, baseImageBuffer, 0, baseImageBuffer.Length); + + float overlayR = foregroundColor.R / 255f; + float overlayG = foregroundColor.G / 255f; + float overlayB = foregroundColor.B / 255f; + + for (int k = 0; k < baseImageBuffer.Length; k += 4) + { + baseImageBuffer[k + 0] = CalculateColorComponentBlendValue(baseImageBuffer[k + 0] / 255f, overlayR, mode); + baseImageBuffer[k + 1] = CalculateColorComponentBlendValue(baseImageBuffer[k + 1] / 255f, overlayG, mode); + baseImageBuffer[k + 2] = CalculateColorComponentBlendValue(baseImageBuffer[k + 2] / 255f, overlayB, mode); + } + + Bitmap bitmapResult = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb); + BitmapData resultImageData = bitmapResult.LockBits(new Rectangle(Point.Empty, bitmapResult.Size), + ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); + + Marshal.Copy(baseImageBuffer, 0, resultImageData.Scan0, baseImageBuffer.Length); + + bitmapResult.UnlockBits(resultImageData); + baseImage.UnlockBits(baseImageData); + + return bitmapResult; } public static Image Blend(this Image image, Image overlay, BlendMode mode) From 04b0b66f674725c3cd167bb1bcf3e6e7b65fe1ec Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 10 Apr 2023 11:29:18 +0200 Subject: [PATCH 42/79] Remove CSM.cs and 3DSUtil and created reader/writer for 3ds textures --- PCK-Studio/Classes/FileTypes/CSM.cs | 91 ------------ .../Classes/IO/3DST/3DSTextureReader.cs | 94 +++++++++++++ .../Classes/IO/3DST/3DSTextureWriter.cs | 47 +++++++ .../{Utils/3DS => IO/3DST}/TextureCodec.cs | 27 +++- PCK-Studio/Classes/Utils/3DS/3DSUtil.cs | 131 ------------------ .../Forms/Skins-And-Textures/addnewskin.cs | 5 +- PCK-Studio/MainForm.cs | 8 +- PCK-Studio/PckStudio.csproj | 6 +- 8 files changed, 175 insertions(+), 234 deletions(-) delete mode 100644 PCK-Studio/Classes/FileTypes/CSM.cs create mode 100644 PCK-Studio/Classes/IO/3DST/3DSTextureReader.cs create mode 100644 PCK-Studio/Classes/IO/3DST/3DSTextureWriter.cs rename PCK-Studio/Classes/{Utils/3DS => IO/3DST}/TextureCodec.cs (96%) delete mode 100644 PCK-Studio/Classes/Utils/3DS/3DSUtil.cs diff --git a/PCK-Studio/Classes/FileTypes/CSM.cs b/PCK-Studio/Classes/FileTypes/CSM.cs deleted file mode 100644 index 5c8e27ff..00000000 --- a/PCK-Studio/Classes/FileTypes/CSM.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.Drawing; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using PckStudio.Models; - -namespace PckStudio.Classes -{ - class CSM - { - - //Part Name - //Part Parent(HEAD, BODY, LEG0, LEG1, ARM0, ARM1) - //Part Name - //Position-X - //Position-Y - //Position-Z - //Size-X - //Size-Y - //Size-Z - //UV-Y - //UV-X - - public static List CSMBlock = new List(); - - public static void TryParse(string CSM, MinecraftModelView modelView) - { - try - { - int i = 0; - string[] CSMLines = CSM.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None); - foreach (string line in CSMLines) - { - if (i > 10) - { - GetModelPartFromCSM(CSMBlock, modelView); - CSMBlock.Clear(); - i = 0; - } - CSMBlock.Add(line + "\n"); - i++; - } - - modelView.Invalidate(); - } - catch { } - } - - public static void GetModelPartFromCSM(List CSM, MinecraftModelView modelView) - { - string PartName = CSM[0]; - string PartParent = CSM[1]; - string PartName2 = CSM[2]; - int PositionX = int.Parse(CSM[3]); - int PositionY = int.Parse(CSM[4]); - int PositionZ = int.Parse(CSM[5]); - int SizeX = int.Parse(CSM[6]); - int SizeY = int.Parse(CSM[7]); - int SizeZ = int.Parse(CSM[8]); - int UVY = int.Parse(CSM[9]); - int UVX = int.Parse(CSM[10]); - - //RenderBox - System.Drawing.Image source = Textures[0].Source; - Object3D object3D = new Box(source, new Rectangle(8, 0, 0x10, 8), new Rectangle(0, 8, 0x20, 8), new Point3D(0f, 0f, 0f), Effects.None); - Object3D object3D2 = new Box(source, new Rectangle(0x28, 0, 0x10, 8), new Rectangle(0x20, 8, 0x20, 8), new Point3D(0f, 0f, 0f), Effects.None); - Object3D object3D3 = new Box(source, new Rectangle(0x2C, 0x10, 8, 4), new Rectangle(0x28, 0x14, 0x20, 0xC), new Point3D(0f, 4f, 0f), Effects.FlipHorizontally); - - - //RenderGroup - Object3DGroup object3DGroup = new Object3DGroup(); - object3D2.Scale = 1.16f; - object3DGroup.RotationOrder = RotationOrders.XY; - object3DGroup.MinDegrees1 = -80f; - object3DGroup.MaxDegrees1 = 80f; - object3DGroup.MinDegrees2 = -57f; - object3DGroup.MaxDegrees2 = 57f; - object3DGroup.Add(object3D); - object3DGroup.Add(object3D2); - object3DGroup.Position = new Point3D(0f, 8f, 0f); - object3DGroup.Origin = new Point3D(0f, -4f, 0f); - object3DGroup.RotationOrder = RotationOrders.XY; - modelView.AddDynamic(object3DGroup); - } - - public static Texture[] Textures = new Texture[] { new Texture(Bitmap.FromFile(Environment.CurrentDirectory + "\\default.png")) }; - } -} diff --git a/PCK-Studio/Classes/IO/3DST/3DSTextureReader.cs b/PCK-Studio/Classes/IO/3DST/3DSTextureReader.cs new file mode 100644 index 00000000..e944003f --- /dev/null +++ b/PCK-Studio/Classes/IO/3DST/3DSTextureReader.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OMI.Workers; +using PckStudio.Classes._3ds; +using OMI; + +namespace PckStudio.Classes.IO._3DST +{ + internal class _3DSTextureReader : IDataFormatReader, IDataFormatReader + { + public Image FromFile(string filename) + { + if (File.Exists(filename)) + { + Image img = null; + using (var fs = File.OpenRead(filename)) + { + img = FromStream(fs); + } + return img; + } + throw new FileNotFoundException(filename); + } + + public Image FromStream(Stream stream) + { + Image img = null; + using (var reader = new EndiannessAwareBinaryReader(stream, Encoding.ASCII, leaveOpen: true, Endianness.LittleEndian)) + { + if (reader.ReadString(4) == "3DST") + { + const int offset = 32; + reader.ReadInt32(); // unknown value + _3DSTextureFormat format = reader.ReadInt32() switch + { + 0 => _3DSTextureFormat.argb8, + 1 => _3DSTextureFormat.rgb8, + 2 => _3DSTextureFormat.rgba5551, + 3 => _3DSTextureFormat.rgb8, + 4 => _3DSTextureFormat.rgba4, + 9 => _3DSTextureFormat.la4, + _ => _3DSTextureFormat.dontCare, + }; + int width = reader.ReadInt32(); + int height = reader.ReadInt32(); + int bufferSize = CalcBufferSize(format, width, height); + stream.Seek(offset, SeekOrigin.Begin); + byte[] buffer = new byte[bufferSize]; + reader.Read(buffer, 0, bufferSize); + img = TextureCodec.Decode(buffer, width, height, format); + img.RotateFlip(RotateFlipType.RotateNoneFlipY); + } + } + return img; + } + + private static int CalcBufferSize(_3DSTextureFormat textureFormat, int width, int height) + { + switch (textureFormat) + { + case _3DSTextureFormat.argb8: + return width * height * 4; + case _3DSTextureFormat.rgb8: + return width * height * 3; + case _3DSTextureFormat.rgba5551: + case _3DSTextureFormat.rgb565: + case _3DSTextureFormat.rgba4: + case _3DSTextureFormat.la8: + case _3DSTextureFormat.hilo8: + return width * height * 2; + case _3DSTextureFormat.l8: + case _3DSTextureFormat.a8: + case _3DSTextureFormat.la4: + case _3DSTextureFormat.etc1a4: + return width * height; + case _3DSTextureFormat.l4: + case _3DSTextureFormat.a4: + case _3DSTextureFormat.etc1: + return width * height >> 1; + default: + throw new InvalidDataException("Invalid texture format on BCH!"); + } + } + + object IDataFormatReader.FromFile(string filename) => FromFile(filename); + + object IDataFormatReader.FromStream(Stream stream) => FromStream(stream); + } +} diff --git a/PCK-Studio/Classes/IO/3DST/3DSTextureWriter.cs b/PCK-Studio/Classes/IO/3DST/3DSTextureWriter.cs new file mode 100644 index 00000000..28864ed2 --- /dev/null +++ b/PCK-Studio/Classes/IO/3DST/3DSTextureWriter.cs @@ -0,0 +1,47 @@ +using System; +using System.Drawing; +using System.IO; +using System.Text; +using OMI; +using OMI.Workers; +using PckStudio.Classes._3ds; + +namespace PckStudio.Classes.IO._3DST +{ + internal class _3DSTextureWriter : IDataFormatWriter + { + private Image _image; + private _3DSTextureFormat _format; + public _3DSTextureWriter(Image image, _3DSTextureFormat format = _3DSTextureFormat.argb8) + { + _image = image; + _format = format; + } + + public void WriteToFile(string filename) + { + using(var fs = File.OpenWrite(filename)) + { + WriteToStream(fs); + } + } + + public void WriteToStream(Stream stream) + { + using (var writer = new EndiannessAwareBinaryWriter(stream, Encoding.ASCII, leaveOpen: true, Endianness.LittleEndian)) + { + writer.WriteString("3DST"); // 0 + writer.Write(2); // 4 unknown + writer.Write((int)_format); // 8 + writer.Write(_image.Width); // 12 + writer.Write(_image.Height); // 16 + writer.Write(0); // 20 + writer.Write(0); // 24 + writer.Write(0); // 28 + _image.RotateFlip(RotateFlipType.RotateNoneFlipY); + byte[] buffer = TextureCodec.Encode(new Bitmap(_image), _format); + stream.Write(buffer, 0, buffer.Length); + } + } + } +} diff --git a/PCK-Studio/Classes/Utils/3DS/TextureCodec.cs b/PCK-Studio/Classes/IO/3DST/TextureCodec.cs similarity index 96% rename from PCK-Studio/Classes/Utils/3DS/TextureCodec.cs rename to PCK-Studio/Classes/IO/3DST/TextureCodec.cs index aa0b963a..2f208a2f 100644 --- a/PCK-Studio/Classes/Utils/3DS/TextureCodec.cs +++ b/PCK-Studio/Classes/IO/3DST/TextureCodec.cs @@ -2,14 +2,35 @@ using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; -using PckStudio.Classes._3ds.Utils; namespace PckStudio.Classes._3ds { + /// + /// Format of the texture used on the PICA200. + /// + public enum _3DSTextureFormat + { + argb8 = 0, + rgb8 = 1, + rgba5551 = 2, + rgb565 = 3, + rgba4 = 4, + la8 = 5, + hilo8 = 6, + l8 = 7, + a8 = 8, + la4 = 9, + l4 = 0xa, + a4 = 0xb, + etc1 = 0xc, + etc1a4 = 0xd, + dontCare + } + class TextureCodec { - private static int[] tileOrder = { 0, 1, 8, 9, 2, 3, 10, 11, 16, 17, 24, 25, 18, 19, 26, 27, 4, 5, 12, 13, 6, 7, 14, 15, 20, 21, 28, 29, 22, 23, 30, 31, 32, 33, 40, 41, 34, 35, 42, 43, 48, 49, 56, 57, 50, 51, 58, 59, 36, 37, 44, 45, 38, 39, 46, 47, 52, 53, 60, 61, 54, 55, 62, 63 }; - private static int[,] etc1LUT = { { 2, 8, -2, -8 }, { 5, 17, -5, -17 }, { 9, 29, -9, -29 }, { 13, 42, -13, -42 }, { 18, 60, -18, -60 }, { 24, 80, -24, -80 }, { 33, 106, -33, -106 }, { 47, 183, -47, -183 } }; + private static readonly int[] tileOrder = { 0, 1, 8, 9, 2, 3, 10, 11, 16, 17, 24, 25, 18, 19, 26, 27, 4, 5, 12, 13, 6, 7, 14, 15, 20, 21, 28, 29, 22, 23, 30, 31, 32, 33, 40, 41, 34, 35, 42, 43, 48, 49, 56, 57, 50, 51, 58, 59, 36, 37, 44, 45, 38, 39, 46, 47, 52, 53, 60, 61, 54, 55, 62, 63 }; + private static readonly int[,] etc1LUT = { { 2, 8, -2, -8 }, { 5, 17, -5, -17 }, { 9, 29, -9, -29 }, { 13, 42, -13, -42 }, { 18, 60, -18, -60 }, { 24, 80, -24, -80 }, { 33, 106, -33, -106 }, { 47, 183, -47, -183 } }; private static class TextureConverter { diff --git a/PCK-Studio/Classes/Utils/3DS/3DSUtil.cs b/PCK-Studio/Classes/Utils/3DS/3DSUtil.cs deleted file mode 100644 index 485420a7..00000000 --- a/PCK-Studio/Classes/Utils/3DS/3DSUtil.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Drawing; -using System.IO; -using System.Text; - -namespace PckStudio.Classes._3ds.Utils -{ - /// - /// Format of the texture used on the PICA200. - /// - public enum _3DSTextureFormat - { - argb8 = 0, - rgb8 = 1, - rgba5551 = 2, - rgb565 = 3, - rgba4 = 4, - la8 = 5, - hilo8 = 6, - l8 = 7, - a8 = 8, - la4 = 9, - l4 = 0xa, - a4 = 0xb, - etc1 = 0xc, - etc1a4 = 0xd, - dontCare - } - - internal class _3DSUtil - { - private static string ReadString(Stream stream, int len) - { - byte[] buffer = new byte[len]; - stream.Read(buffer, 0, len); - return Encoding.ASCII.GetString(buffer); - } - - private static int ReadInt32(Stream stream) - { - byte[] buffer = new byte[4]; - stream.Read(buffer, 0, 4); - return BitConverter.ToInt32(buffer, 0); - } - - private static void WriteString(Stream stream, string s) - { - byte[] buffer = Encoding.ASCII.GetBytes(s); - stream.Write(buffer, 0, buffer.Length); - } - - private static void WriteInt32(Stream stream, int value) - { - byte[] buffer = BitConverter.GetBytes(value); - stream.Write(buffer, 0, 4); - } - - public static int CalcBufferSize(_3DSTextureFormat textureFormat, int width, int height) - { - switch (textureFormat) - { - case _3DSTextureFormat.argb8: - return width * height * 4; - case _3DSTextureFormat.rgb8: - return width * height * 3; - case _3DSTextureFormat.rgba5551: - case _3DSTextureFormat.rgb565: - case _3DSTextureFormat.rgba4: - case _3DSTextureFormat.la8: - case _3DSTextureFormat.hilo8: - return width * height * 2; - case _3DSTextureFormat.l8: - case _3DSTextureFormat.a8: - case _3DSTextureFormat.la4: - case _3DSTextureFormat.etc1a4: - return width * height; - case _3DSTextureFormat.l4: - case _3DSTextureFormat.a4: - case _3DSTextureFormat.etc1: - return width * height >> 1; - default: - throw new InvalidDataException("Invalid texture format on BCH!"); - } - } - - public static Image GetImageFrom3DST(Stream stream) - { - if (ReadString(stream, 4) == "3DST") - { - const int offset = 32; - stream.Seek(8L, SeekOrigin.Begin); - _3DSTextureFormat format = ReadInt32(stream) switch - { - 0 => _3DSTextureFormat.argb8, - 1 => _3DSTextureFormat.rgb8, - 2 => _3DSTextureFormat.rgba5551, - 3 => _3DSTextureFormat.rgb8, - 4 => _3DSTextureFormat.rgba4, - 9 => _3DSTextureFormat.la4, - _ => _3DSTextureFormat.dontCare, - }; - int width = ReadInt32(stream); - int height = ReadInt32(stream); - int bufferSize = CalcBufferSize(format, width, height); - stream.Seek(offset, SeekOrigin.Begin); - byte[] buffer = new byte[bufferSize]; - stream.Read(buffer, 0, bufferSize); - var img = TextureCodec.Decode(buffer, width, height, format); - img.RotateFlip(RotateFlipType.RotateNoneFlipY); - return img; - } - return null; - } - - public static void SetImageTo3DST(Stream stream, Image source, _3DSTextureFormat format = _3DSTextureFormat.argb8) - { - // TODO: fix Encoding - WriteString(stream, "3DST"); // 0 - WriteInt32(stream, 2); // 4 unknown - WriteInt32(stream, (int)format); // 8 - WriteInt32(stream, source.Width); // 12 - WriteInt32(stream, source.Height); // 16 - WriteInt32(stream, 0); // 20 - WriteInt32(stream, 0); // 24 - WriteInt32(stream, 0); // 28 - source.RotateFlip(RotateFlipType.RotateNoneFlipY); - byte[] buffer = TextureCodec.Encode(new Bitmap(source), format); - stream.Write(buffer, 0, buffer.Length); - } - } -} diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index 1fda9bed..76a66e8c 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -5,10 +5,10 @@ using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using PckStudio.Classes.Utils; -using PckStudio.Classes._3ds.Utils; using OMI.Formats.Languages; using OMI.Formats.Pck; using PckStudio.Forms.Editor; +using PckStudio.Classes.IO._3DST; namespace PckStudio { @@ -347,7 +347,8 @@ namespace PckStudio { using (var fs = File.OpenRead(ofdd.FileName)) { - CheckImage(_3DSUtil.GetImageFrom3DST(fs)); + var reader = new _3DSTextureReader(); + CheckImage(reader.FromStream(fs)); textSkinName.Text = Path.GetFileNameWithoutExtension(ofdd.FileName); } return; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 1c981353..5be7fa29 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -19,7 +19,6 @@ using PckStudio.Properties; using PckStudio.Classes.FileTypes; using PckStudio.Classes.Utils; using PckStudio.Classes.Utils.ARC; -using PckStudio.Classes._3ds.Utils; using PckStudio.Forms; using PckStudio.Forms.Utilities; using PckStudio.Forms.Editor; @@ -27,6 +26,7 @@ using PckStudio.Forms.Additional_Popups.Animation; using PckStudio.Forms.Additional_Popups; using PckStudio.Classes.Misc; using PckStudio.Classes.IO.PCK; +using PckStudio.Classes.IO._3DST; namespace PckStudio { @@ -2069,11 +2069,11 @@ namespace PckStudio saveFileDialog.DefaultExt = ".3dst"; if (saveFileDialog.ShowDialog() == DialogResult.OK) { - using (var fs = saveFileDialog.OpenFile()) + using (var ms = new MemoryStream(file.Data)) { - using var ms = new MemoryStream(file.Data); Image img = Image.FromStream(ms); - _3DSUtil.SetImageTo3DST(fs, img); + var writer = new _3DSTextureWriter(img); + writer.WriteToFile(saveFileDialog.FileName); } } } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index ae28ad89..47575773 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -176,7 +176,8 @@ - + + @@ -185,7 +186,6 @@ - @@ -464,7 +464,7 @@ CreditsForm.cs - + AddEntry.cs From 092d76e1bcd5a379bf88ce0ddd06346fee64657b Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 10 Apr 2023 12:26:42 +0200 Subject: [PATCH 43/79] Rename and Moved ListUtils --- .../{Utils/ListUtils.cs => Extensions/ListExtensions.cs} | 4 ++-- PCK-Studio/PckStudio.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename PCK-Studio/Classes/{Utils/ListUtils.cs => Extensions/ListExtensions.cs} (80%) diff --git a/PCK-Studio/Classes/Utils/ListUtils.cs b/PCK-Studio/Classes/Extensions/ListExtensions.cs similarity index 80% rename from PCK-Studio/Classes/Utils/ListUtils.cs rename to PCK-Studio/Classes/Extensions/ListExtensions.cs index ff200c6b..8ec3b636 100644 --- a/PCK-Studio/Classes/Utils/ListUtils.cs +++ b/PCK-Studio/Classes/Extensions/ListExtensions.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -namespace PckStudio.Forms.Utilities +namespace PckStudio.Extensions { - public static class ListUtils + public static class ListExtensions { public static IList Swap(this IList list, int index1, int index2) { diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 47575773..6d7d1bfa 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -416,7 +416,7 @@ installWiiU.cs - + Form From ba188630d27fabb17aab968c7bb751b1640da64d Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 13 Apr 2023 10:39:05 +0200 Subject: [PATCH 44/79] Update README update section to recurs submodules --- README.md | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 48f1f058..e918ecda 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # PCK Studio -Modify .PCK archives as you please! +Modify .PCK archives as you please!
+**If you have any issues or would like to suggested a feature, we encourage you to open a new [issue](https://github.com/PhoenixARC/-PCK-Studio/issues) on the github.** ## Features: -#### If you'd like to suggested a feature to be added open an [issue](https://github.com/PhoenixARC/-PCK-Studio/issues) on the github. * Open, Edit and Save .PCK archives (this means models, animations, entire custom packs, etc.) * Add / Remove / Replace skins, audios, textures, animations and much more. * Edit localization data to make your mods support every language supported by minecraft itself! @@ -23,8 +23,8 @@ Modify .PCK archives as you please! ### Setup: ```shell -$ git clone https://github.com/PhoenixARC/-PCK-Studio.git -$ cd "-PCK-Studio" +$ git clone --recursive https://github.com/PhoenixARC/-PCK-Studio.git PCK-Studio +$ cd PCK-Studio ``` ## How to Build: @@ -44,21 +44,19 @@ $ cd "-PCK-Studio" ``` ### A quick note: - * Forms will not load in viewer until the solution is build _at least_ once +## Active Developers: +> [PhoenixARC](https://github.com/PhoenixARC)
+> [MattNL](https://github.com/MattN-L)
+> [Miku-666](https://github.com/NessieHax)
+> [EternalModz](https://github.com/EternalModz)
-## Active Dev Team: -* [PhoenixARC](https://github.com/PhoenixARC) -* [MattNL](https://github.com/MattN-L) -* [Miku-666](https://github.com/NessieHax) -* [EternalModz](https://github.com/EternalModz) - -## Legacy PCK Studio Devs and contributors: -* [Nobledez](https://github.com/Nobledez) -* [XxModZxXWiiPlaza](https://github.com/XxModZxXWiiPlaza) -* [SlothWiiPlaza](https://github.com/Kashiiera) -* [jam1garner](https://github.com/jam1garner) +## Previous Developers and Contributors: +> [Nobledez](https://github.com/Nobledez)
+> [jam1garner](https://github.com/jam1garner)
+> [XxModZxXWiiPlaza](https://github.com/XxModZxXWiiPlaza)
+> [SlothWiiPlaza](https://github.com/Kashiiera)
## Other Credits * [yaboiFoxx](https://github.com/yaboiFoxx) for Improved UI concept From f99d0f4fd2d5d4aabf9ad6aef07d8c1b6932e122 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 16 Apr 2023 19:20:46 +0200 Subject: [PATCH 45/79] Add default value for GraphicsConfig.CompositingMode --- PCK-Studio/Classes/Extensions/GraphicsExtensions.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs b/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs index b29842da..22f7885d 100644 --- a/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs +++ b/PCK-Studio/Classes/Extensions/GraphicsExtensions.cs @@ -15,6 +15,7 @@ namespace PckStudio.Extensions InterpolationMode = InterpolationMode.Default; SmoothingMode = SmoothingMode.Default; PixelOffsetMode = PixelOffsetMode.Default; + CompositingMode = CompositingMode.SourceOver; } public CompositingMode CompositingMode { get; set; } From 876a05d05d7c8ca4f1baa0b63f11670af4038b37 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sun, 16 Apr 2023 19:23:05 +0200 Subject: [PATCH 46/79] ImageExtensions.cs - Add size check when blending two images --- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index c34fb646..b2e5a5df 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -9,11 +9,11 @@ using System.Linq; namespace PckStudio.Extensions { - public enum ImageLayoutDirection - { - Horizontal, - Vertical - } + public enum ImageLayoutDirection + { + Horizontal, + Vertical + } internal static class ImageExtensions { @@ -151,7 +151,7 @@ namespace PckStudio.Extensions byte[] baseImageBuffer = new byte[baseImageData.Stride * baseImageData.Height]; Marshal.Copy(baseImageData.Scan0, baseImageBuffer, 0, baseImageBuffer.Length); - + float overlayR = foregroundColor.R / 255f; float overlayG = foregroundColor.G / 255f; float overlayB = foregroundColor.B / 255f; @@ -177,8 +177,10 @@ namespace PckStudio.Extensions public static Image Blend(this Image image, Image overlay, BlendMode mode) { - if (image is not Bitmap baseImage || overlay is not Bitmap overlayImage) + if (image is not Bitmap baseImage || overlay is not Bitmap overlayImage || + image.Width != overlay.Width || image.Height != overlay.Height) return image; + BitmapData baseImageData = baseImage.LockBits(new Rectangle(Point.Empty, baseImage.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); byte[] baseImageBuffer = new byte[baseImageData.Stride * baseImageData.Height]; From 485011c552cc2209dfe7a7cf0316e7eb31a0c100 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:58:57 +0200 Subject: [PATCH 47/79] Removed unused BedrockJSONtoCSM and CSMtoBedrockJSON --- PCK-Studio/Classes/Utils/BedrockJSONtoCSM.cs | 98 ----------------- PCK-Studio/Classes/Utils/CSMtoBedrockJSON.cs | 105 ------------------- 2 files changed, 203 deletions(-) delete mode 100644 PCK-Studio/Classes/Utils/BedrockJSONtoCSM.cs delete mode 100644 PCK-Studio/Classes/Utils/CSMtoBedrockJSON.cs diff --git a/PCK-Studio/Classes/Utils/BedrockJSONtoCSM.cs b/PCK-Studio/Classes/Utils/BedrockJSONtoCSM.cs deleted file mode 100644 index b9989707..00000000 --- a/PCK-Studio/Classes/Utils/BedrockJSONtoCSM.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace PckStudio.Classes.Utils.ModelConversion -{ - public class BedrockJSONtoCSM - { - public string JSONtoCSM(string JsonString) - { - dynamic jsonDe = JsonConvert.DeserializeObject(JsonString); - string NewJSON = JsonConvert.SerializeObject(jsonDe["minecraft:geometry"]); - JObject[] NewJObject = JsonConvert.DeserializeObject(NewJSON); - - string CSMData = ""; - foreach (JBone bone in NewJObject[0].bones) - { - int i = 0; - string PARENT = bone.name; - foreach (JCube Cube in bone.cubes) - { - string name = PARENT + " " + i; - - float PosXModifier = 0; - float PosYModifier = 0; - float PosZModifier = 0; - - switch (PARENT) - { - case "ARM0": - PosXModifier = 5; - PosYModifier = 22; - break; - case "ARM1": - PosXModifier = -5; - PosYModifier = 22; - break; - case "LEG0": - PosXModifier = 1.9f; - PosYModifier = 12; - break; - case "LEG1": - PosXModifier = -1.9f; - PosYModifier = 12; - break; - case "BODY": - PosYModifier = 24; - break; - case "HEAD": - PosYModifier = 24; - break; - } - - - float PosX = Cube.origin[0] + PosXModifier; - float PosY = Cube.origin[1] + PosYModifier; - float PosZ = Cube.origin[2] + PosZModifier; - float SizeX = Cube.size[0]; - float SizeY = Cube.size[1]; - float SizeZ = Cube.size[2]; - float UvX = Cube.uv[0]; - float UvY = Cube.uv[1]; - - CSMData += name + "\n" + PARENT + "\n" + name + "\n" + PosX + "\n" + PosY + "\n" + PosZ + "\n" + SizeX + "\n" + SizeY + "\n" + SizeZ + "\n" + UvX + "\n" + UvY + "\n"; - i++; - } - } - return CSMData; - } - } - - internal class WholeJSON - { - public string format_version = "1.12.0"; - public Dictionary entries = new Dictionary(); - } - - internal class JObject - { - public Dictionary description = new Dictionary(); - public JBone[] bones = { }; - } - internal class JBone - { - public string name = ""; - public int[] pivot = {0, 0, 0}; - public JCube[] cubes = { }; - } - internal class JCube - { - public float[] origin = new float[3]; - public float[] size = new float [3]; - public float[] uv = new float[2]; - } -} diff --git a/PCK-Studio/Classes/Utils/CSMtoBedrockJSON.cs b/PCK-Studio/Classes/Utils/CSMtoBedrockJSON.cs deleted file mode 100644 index 93df0546..00000000 --- a/PCK-Studio/Classes/Utils/CSMtoBedrockJSON.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Newtonsoft.Json; - -namespace PckStudio.Classes.Utils.ModelConversion -{ - public class CSMtoBedrockJSON - { - public string CSMtoJSON(string CSMString) - { - List CSMLIST = new List(); - CSMLIST.AddRange(CSMString.Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries)); - List> CSMS = SplitToSublists(CSMLIST, 11); - - JObject jobj = new JObject(); - List bones = new List(); - Dictionary> CubeList = new Dictionary> - { - {"HEAD", new List()}, - {"BODY", new List()}, - {"ARM0", new List()}, - {"ARM1", new List()}, - {"LEG0", new List()}, - {"LEG1", new List()} - }; - - foreach (List CSMItem in CSMS) - { - JCube NewCube = new JCube(); - - - float PosXModifier = 0; - float PosYModifier = 0; - float PosZModifier = 0; - - switch (CSMItem[1]) - { - case "ARM0": - PosXModifier = -5; - PosYModifier = -22; - break; - case "ARM1": - PosXModifier = 5; - PosYModifier = -22; - break; - case "LEG0": - PosXModifier = -1.9f; - PosYModifier = -12; - break; - case "LEG1": - PosXModifier = 1.9f; - PosYModifier = -12; - break; - case "BODY": - PosYModifier = -24; - break; - case "HEAD": - PosYModifier = -24; - break; - } - NewCube.origin[0] = float.Parse(CSMItem[3]) + PosXModifier; - NewCube.origin[1] = float.Parse(CSMItem[4]) + PosYModifier; - NewCube.origin[2] = float.Parse(CSMItem[5]) + PosZModifier; - NewCube.size[0] = float.Parse(CSMItem[6]); - NewCube.size[1] = float.Parse(CSMItem[7]); - NewCube.size[2] = float.Parse(CSMItem[8]); - NewCube.uv[0] = float.Parse(CSMItem[9]); - NewCube.uv[1] = float.Parse(CSMItem[10]); - CubeList[CSMItem[1]].Add(NewCube); - } - foreach (KeyValuePair> bone in CubeList) - { - JBone jb = new JBone(); - jb.name = bone.Key; - jb.cubes = bone.Value.ToArray(); - bones.Add(jb); - } - jobj.bones = bones.ToArray(); - jobj.description.Add("identifier", "geometry.steve"); - jobj.description.Add("texture_width", 64); - jobj.description.Add("texture_height", 64); - jobj.description.Add("visible_bounds_width", 2); - jobj.description.Add("visible_bounds_height", 3.5f); - jobj.description.Add("visible_bounds_offset", new float[] { 0, 1.25f, 0 }); - WholeJSON WJ = new WholeJSON(); - WJ.entries.Add("format_version", "1.12.0"); - WJ.entries.Add("minecraft:geometry", new JObject[] { jobj }); - string JSONDATA = JsonConvert.SerializeObject(WJ.entries, Formatting.Indented); - return JSONDATA; - } - - public List> SplitToSublists(List source, int size) - { - return source - .Select((x, i) => new { Index = i, Value = x }) - .GroupBy(x => x.Index / size) - .Select(x => x.Select(v => v.Value).ToList()) - .ToList(); - } - } - -} From 6acbb8c209e9165c2a86f707abcce1c3df16c6ef Mon Sep 17 00:00:00 2001 From: PhoenixARC <46140834+PhoenixARC@users.noreply.github.com> Date: Wed, 19 Apr 2023 16:14:28 -0400 Subject: [PATCH 48/79] remove link to unknown developer as was requested by the developer, their GitHub link has been removed --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e918ecda..956e9118 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ $ cd PCK-Studio > [Nobledez](https://github.com/Nobledez)
> [jam1garner](https://github.com/jam1garner)
> [XxModZxXWiiPlaza](https://github.com/XxModZxXWiiPlaza)
-> [SlothWiiPlaza](https://github.com/Kashiiera)
+> SlothWiiPlaza
## Other Credits * [yaboiFoxx](https://github.com/yaboiFoxx) for Improved UI concept From 995fb47f421cde8a18210e2135282df15616572c Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 24 Apr 2023 15:14:15 +0200 Subject: [PATCH 49/79] Renamed folder 'IO/PCK' to 'IO/PckAudio' and renamed PCKAudioFile to PckAudioFile --- .../{PCKAudioFile.cs => PckAudioFile.cs} | 2 +- .../PckAudioFileReader.cs} | 20 +++---- .../PckAudioFileWriter.cs} | 6 +-- PCK-Studio/Forms/Editor/AudioEditor.cs | 52 +++++++++---------- PCK-Studio/MainForm.cs | 10 ++-- PCK-Studio/PckStudio.csproj | 6 +-- 6 files changed, 48 insertions(+), 48 deletions(-) rename PCK-Studio/Classes/FileTypes/{PCKAudioFile.cs => PckAudioFile.cs} (99%) rename PCK-Studio/Classes/IO/{PCK/PCKAudioFileReader.cs => PckAudio/PckAudioFileReader.cs} (88%) rename PCK-Studio/Classes/IO/{PCK/PCKAudioFileWriter.cs => PckAudio/PckAudioFileWriter.cs} (95%) diff --git a/PCK-Studio/Classes/FileTypes/PCKAudioFile.cs b/PCK-Studio/Classes/FileTypes/PckAudioFile.cs similarity index 99% rename from PCK-Studio/Classes/FileTypes/PCKAudioFile.cs rename to PCK-Studio/Classes/FileTypes/PckAudioFile.cs index f6b02138..d9524b10 100644 --- a/PCK-Studio/Classes/FileTypes/PCKAudioFile.cs +++ b/PCK-Studio/Classes/FileTypes/PckAudioFile.cs @@ -7,7 +7,7 @@ using OMI.Formats.Languages; namespace PckStudio.Classes.FileTypes { - public class PCKAudioFile + public class PckAudioFile { public class InvalidCategoryException : Exception { diff --git a/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs b/PCK-Studio/Classes/IO/PckAudio/PckAudioFileReader.cs similarity index 88% rename from PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs rename to PCK-Studio/Classes/IO/PckAudio/PckAudioFileReader.cs index 4eb1710a..66893c5f 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKAudioFileReader.cs +++ b/PCK-Studio/Classes/IO/PckAudio/PckAudioFileReader.cs @@ -17,23 +17,23 @@ namespace PckStudio.Classes.IO.PCK { } } - internal class PCKAudioFileReader : IDataFormatReader, IDataFormatReader + internal class PckAudioFileReader : IDataFormatReader, IDataFormatReader { - private PCKAudioFile _file; + private PckAudioFile _file; private Endianness _endianness; private List LUT = new List(); - private List _OriginalAudioTypeOrder = new List(); + private List _OriginalAudioTypeOrder = new List(); - public PCKAudioFileReader(Endianness endianness) + public PckAudioFileReader(Endianness endianness) { _endianness = endianness; } - public PCKAudioFile FromFile(string filename) + public PckAudioFile FromFile(string filename) { if(File.Exists(filename)) { - PCKAudioFile file; + PckAudioFile file; using(var fs = File.OpenRead(filename)) { file = FromStream(fs); @@ -43,7 +43,7 @@ namespace PckStudio.Classes.IO.PCK throw new FileNotFoundException(filename); } - public PCKAudioFile FromStream(Stream stream) + public PckAudioFile FromStream(Stream stream) { using (var reader = new EndiannessAwareBinaryReader(stream, _endianness == Endianness.BigEndian @@ -56,7 +56,7 @@ namespace PckStudio.Classes.IO.PCK throw new OverflowException(nameof(pck_type)); if (pck_type > 1) throw new InvalidAudioPckException(nameof(pck_type)); - _file = new PCKAudioFile(); + _file = new PckAudioFile(); ReadLookUpTable(reader); ReadCategories(reader); ReadCategorySongs(reader); @@ -81,8 +81,8 @@ namespace PckStudio.Classes.IO.PCK int categoryEntryCount = reader.ReadInt32(); for (; 0 < categoryEntryCount; categoryEntryCount--) { - var parameterType = (PCKAudioFile.AudioCategory.EAudioParameterType)reader.ReadInt32(); - var audioType = (PCKAudioFile.AudioCategory.EAudioType)reader.ReadInt32(); + var parameterType = (PckAudioFile.AudioCategory.EAudioParameterType)reader.ReadInt32(); + var audioType = (PckAudioFile.AudioCategory.EAudioType)reader.ReadInt32(); string name = ReadString(reader); // AddCategory puts the file's categories out of order and causes some songs to be put in the wrong categories // This is my simple fix for the issue. diff --git a/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs b/PCK-Studio/Classes/IO/PckAudio/PckAudioFileWriter.cs similarity index 95% rename from PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs rename to PCK-Studio/Classes/IO/PckAudio/PckAudioFileWriter.cs index 3a1d9223..afed490a 100644 --- a/PCK-Studio/Classes/IO/PCK/PCKAudioFileWriter.cs +++ b/PCK-Studio/Classes/IO/PckAudio/PckAudioFileWriter.cs @@ -7,10 +7,10 @@ using System.Text; namespace PckStudio.Classes.IO.PCK { - internal class PCKAudioFileWriter : IDataFormatWriter + internal class PckAudioFileWriter : IDataFormatWriter { - private PCKAudioFile _file; + private PckAudioFile _file; private Endianness _endianness; private static readonly List LUT = new List { @@ -19,7 +19,7 @@ namespace PckStudio.Classes.IO.PCK "CREDITID" }; - public PCKAudioFileWriter(PCKAudioFile file, Endianness endianness) + public PckAudioFileWriter(PckAudioFile file, Endianness endianness) { _file = file; _endianness = endianness; diff --git a/PCK-Studio/Forms/Editor/AudioEditor.cs b/PCK-Studio/Forms/Editor/AudioEditor.cs index 746e1eec..76cb8cca 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.cs @@ -25,7 +25,7 @@ namespace PckStudio.Forms.Editor public partial class AudioEditor : MetroForm { public string defaultType = "yes"; - PCKAudioFile audioFile = null; + PckAudioFile audioFile = null; PckFile.FileData audioPCK; LOCFile loc; bool _isLittleEndian = false; @@ -44,15 +44,15 @@ namespace PckStudio.Forms.Editor "Unused?" }; - private string GetCategoryFromId(PCKAudioFile.AudioCategory.EAudioType categoryId) - => categoryId >= PCKAudioFile.AudioCategory.EAudioType.Overworld && - categoryId <= PCKAudioFile.AudioCategory.EAudioType.Unused + private string GetCategoryFromId(PckAudioFile.AudioCategory.EAudioType categoryId) + => categoryId >= PckAudioFile.AudioCategory.EAudioType.Overworld && + categoryId <= PckAudioFile.AudioCategory.EAudioType.Unused ? Categories[(int)categoryId] : "Not valid"; - private PCKAudioFile.AudioCategory.EAudioType GetCategoryId(string category) + private PckAudioFile.AudioCategory.EAudioType GetCategoryId(string category) { - return (PCKAudioFile.AudioCategory.EAudioType)Categories.IndexOf(category); + return (PckAudioFile.AudioCategory.EAudioType)Categories.IndexOf(category); } public AudioEditor(PckFile.FileData file, LOCFile locFile, bool isLittleEndian) @@ -64,7 +64,7 @@ namespace PckStudio.Forms.Editor audioPCK = file; using (var stream = new MemoryStream(file.Data)) { - var reader = new PCKAudioFileReader(isLittleEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + var reader = new PckAudioFileReader(isLittleEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); audioFile = reader.FromStream(stream); } @@ -77,10 +77,10 @@ namespace PckStudio.Forms.Editor treeView1.Nodes.Clear(); foreach (var category in audioFile.Categories) { - if(category.audioType == PCKAudioFile.AudioCategory.EAudioType.Creative) + if(category.audioType == PckAudioFile.AudioCategory.EAudioType.Creative) { if (category.Name == "include_overworld" && - audioFile.TryGetCategory(PCKAudioFile.AudioCategory.EAudioType.Overworld, out PCKAudioFile.AudioCategory overworldCategory)) + audioFile.TryGetCategory(PckAudioFile.AudioCategory.EAudioType.Overworld, out PckAudioFile.AudioCategory overworldCategory)) { foreach (var name in category.SongNames.ToList()) { @@ -96,7 +96,7 @@ namespace PckStudio.Forms.Editor treeNode.Tag = category; treeView1.Nodes.Add(treeNode); } - playOverworldInCreative.Enabled = audioFile.HasCategory(PCKAudioFile.AudioCategory.EAudioType.Creative); + playOverworldInCreative.Enabled = audioFile.HasCategory(PckAudioFile.AudioCategory.EAudioType.Creative); treeView1.EndUpdate(); } @@ -121,7 +121,7 @@ namespace PckStudio.Forms.Editor private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { treeView2.Nodes.Clear(); - if (e.Node.Tag is PCKAudioFile.AudioCategory category) + if (e.Node.Tag is PckAudioFile.AudioCategory category) foreach (var name in category.SongNames) { treeView2.Nodes.Add(name); @@ -141,7 +141,7 @@ namespace PckStudio.Forms.Editor var category = audioFile.GetCategory(GetCategoryId(add.SelectedItem)); - if (GetCategoryId(add.SelectedItem) == PCKAudioFile.AudioCategory.EAudioType.Creative) + if (GetCategoryId(add.SelectedItem) == PckAudioFile.AudioCategory.EAudioType.Creative) { playOverworldInCreative.Visible = true; playOverworldInCreative.Checked = false; @@ -161,7 +161,7 @@ namespace PckStudio.Forms.Editor private void addEntryMenuItem_Click(object sender, EventArgs e) { - if (treeView1.SelectedNode is TreeNode t && t.Tag is PCKAudioFile.AudioCategory) + if (treeView1.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory) { if (!parent.CreateDataFolder()) return; @@ -182,7 +182,7 @@ namespace PckStudio.Forms.Editor if (treeView1.SelectedNode is TreeNode main && audioFile.RemoveCategory(GetCategoryId(treeView1.SelectedNode.Text))) { - if(GetCategoryId(treeView1.SelectedNode.Text) == PCKAudioFile.AudioCategory.EAudioType.Creative) + if(GetCategoryId(treeView1.SelectedNode.Text) == PckAudioFile.AudioCategory.EAudioType.Creative) { playOverworldInCreative.Visible = false; playOverworldInCreative.Checked = false; @@ -206,7 +206,7 @@ namespace PckStudio.Forms.Editor private void removeEntryMenuItem_Click(object sender, EventArgs e) { - if (treeView2.SelectedNode != null && treeView1.SelectedNode.Tag is PCKAudioFile.AudioCategory category) + if (treeView2.SelectedNode != null && treeView1.SelectedNode.Tag is PckAudioFile.AudioCategory category) { category.SongNames.Remove(treeView2.SelectedNode.Text); treeView2.SelectedNode.Remove(); @@ -261,7 +261,7 @@ namespace PckStudio.Forms.Editor } else if (user_prompt == DialogResult.No) { - if (treeView1.SelectedNode is TreeNode node && node.Tag is PCKAudioFile.AudioCategory cat) + if (treeView1.SelectedNode is TreeNode node && node.Tag is PckAudioFile.AudioCategory cat) { //adds song without affecting the binka file cat.SongNames.Add(songName); @@ -318,7 +318,7 @@ namespace PckStudio.Forms.Editor } // this is repeated again becuase this is meant to prevent any files that fail to convert from being added to the category - if (treeView1.SelectedNode is TreeNode t && t.Tag is PCKAudioFile.AudioCategory category) + if (treeView1.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory category) { category.SongNames.Add(songName); treeView2.Nodes.Add(songName); @@ -345,15 +345,15 @@ namespace PckStudio.Forms.Editor private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { - if (!audioFile.HasCategory(PCKAudioFile.AudioCategory.EAudioType.Overworld) || - !audioFile.HasCategory(PCKAudioFile.AudioCategory.EAudioType.Nether) || - !audioFile.HasCategory(PCKAudioFile.AudioCategory.EAudioType.End)) + if (!audioFile.HasCategory(PckAudioFile.AudioCategory.EAudioType.Overworld) || + !audioFile.HasCategory(PckAudioFile.AudioCategory.EAudioType.Nether) || + !audioFile.HasCategory(PckAudioFile.AudioCategory.EAudioType.End)) { MessageBox.Show("Your changes were not saved. The game will crash when loading your pack if the Overworld, Nether and End categories don't all exist with at least one valid song.", "Mandatory Categories Missing"); return; } - PCKAudioFile.AudioCategory overworldCategory = audioFile.GetCategory(PCKAudioFile.AudioCategory.EAudioType.Overworld); + PckAudioFile.AudioCategory overworldCategory = audioFile.GetCategory(PckAudioFile.AudioCategory.EAudioType.Overworld); bool songs_missing = false; foreach (var category in audioFile.Categories) @@ -375,7 +375,7 @@ namespace PckStudio.Forms.Editor } category.Name = ""; - if (playOverworldInCreative.Checked && category.audioType == PCKAudioFile.AudioCategory.EAudioType.Creative) + if (playOverworldInCreative.Checked && category.audioType == PckAudioFile.AudioCategory.EAudioType.Creative) { foreach (var name in overworldCategory.SongNames) { @@ -397,7 +397,7 @@ namespace PckStudio.Forms.Editor using (var stream = new MemoryStream()) { - var writer = new PCKAudioFileWriter(audioFile, _isLittleEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + var writer = new PckAudioFileWriter(audioFile, _isLittleEndian ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); writer.WriteToStream(stream); audioPCK.SetData(stream.ToArray()); } @@ -562,7 +562,7 @@ namespace PckStudio.Forms.Editor private void convertToWAVToolStripMenuItem_Click(object sender, EventArgs e) { - if (treeView2.SelectedNode != null && treeView1.SelectedNode.Tag is PCKAudioFile.AudioCategory) + if (treeView2.SelectedNode != null && treeView1.SelectedNode.Tag is PckAudioFile.AudioCategory) { Binka.ToWav(Path.Combine(parent.GetDataPath(), treeView2.SelectedNode.Text + ".binka"), Path.Combine(parent.GetDataPath())); } @@ -570,7 +570,7 @@ namespace PckStudio.Forms.Editor private void setCategoryToolStripMenuItem_Click(object sender, EventArgs e) { - if (!(treeView1.SelectedNode is TreeNode t && t.Tag is PCKAudioFile.AudioCategory category)) return; + if (!(treeView1.SelectedNode is TreeNode t && t.Tag is PckAudioFile.AudioCategory category)) return; string[] available = Categories.FindAll(str => !audioFile.HasCategory(GetCategoryId(str))).ToArray(); if (available.Length > 0) @@ -581,7 +581,7 @@ namespace PckStudio.Forms.Editor audioFile.RemoveCategory(category.audioType); - audioFile.AddCategory(category.parameterType, GetCategoryId(add.SelectedItem), category.audioType == PCKAudioFile.AudioCategory.EAudioType.Overworld && playOverworldInCreative.Checked ? "include_overworld" : ""); + audioFile.AddCategory(category.parameterType, GetCategoryId(add.SelectedItem), category.audioType == PckAudioFile.AudioCategory.EAudioType.Overworld && playOverworldInCreative.Checked ? "include_overworld" : ""); var newCategory = audioFile.GetCategory(GetCategoryId(add.SelectedItem)); diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 5be7fa29..5c65a8a8 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -835,15 +835,15 @@ namespace PckStudio private PckFile.FileData CreateNewAudioFile(bool isLittle) { // create actual valid pck file structure - PCKAudioFile audioPck = new PCKAudioFile(); - audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.Overworld); - audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.Nether); - audioPck.AddCategory(PCKAudioFile.AudioCategory.EAudioType.End); + PckAudioFile audioPck = new PckAudioFile(); + audioPck.AddCategory(PckAudioFile.AudioCategory.EAudioType.Overworld); + audioPck.AddCategory(PckAudioFile.AudioCategory.EAudioType.Nether); + audioPck.AddCategory(PckAudioFile.AudioCategory.EAudioType.End); PckFile.FileData pckFileData = currentPCK.CreateNewFile("audio.pck", PckFile.FileData.FileType.AudioFile, () => { using (var stream = new MemoryStream()) { - var writer = new PCKAudioFileWriter(audioPck, isLittle ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + var writer = new PckAudioFileWriter(audioPck, isLittle ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); writer.WriteToStream(stream); return stream.ToArray(); } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 6d7d1bfa..3b0cf3ee 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -174,14 +174,14 @@ - + - - + + From 4a41612188f2f802deb07d55fe6390e0d272d21f Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:15:02 +0200 Subject: [PATCH 50/79] Updated ProgramInfo.BuildVersion to only return the version format --- PCK-Studio/MainForm.cs | 2 +- PCK-Studio/Program.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 5c65a8a8..f6078acf 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -72,7 +72,7 @@ namespace PckStudio labelVersion.Text = "PCK Studio: " + Application.ProductVersion; ChangelogRichTextBox.Text = Resources.CHANGELOG; #if DEBUG - labelVersion.Text += Program.Info.BuildVersion + " " + Program.Info.LastCommitHash; + labelVersion.Text += $" (Debug build: {Program.Info.BuildVersion}@{Program.Info.LastCommitHash})"; #endif pckFileTypeHandler = new Dictionary>(15) diff --git a/PCK-Studio/Program.cs b/PCK-Studio/Program.cs index 8a8f5c1c..51fce472 100644 --- a/PCK-Studio/Program.cs +++ b/PCK-Studio/Program.cs @@ -21,7 +21,7 @@ namespace PckStudio { // adopted Minecraft Java Edition Snapshot format (YYwWWn) // to keep better track of work in progress features and builds - return string.Format("(Debug build #{0}w{1}{2})", + return string.Format("#{0}w{1}{2}", date.ToString("yy"), BuildCalendar.GetWeekOfYear(date, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Monday), BuildType); From 931bc861c7e5d536702f239301da645286616002 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:17:09 +0200 Subject: [PATCH 51/79] ImageExtensions.cs - Renamed ImageFromImageArray to CombineImages --- .../Classes/Extensions/ImageExtensions.cs | 19 ++++++++++++------- PCK-Studio/Forms/Editor/Animation.cs | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index b2e5a5df..cd4ce7a2 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -77,12 +77,12 @@ namespace PckStudio.Extensions yield break; } - public static Image ImageFromImageArray(Image[] sources, ImageLayoutDirection layoutDirection) + public static Image CombineImages(IList sources, ImageLayoutDirection layoutDirection) { Size imageSize = CalculateImageSize(sources, layoutDirection); - var result = new Bitmap(imageSize.Width, imageSize.Height); + var image = new Bitmap(imageSize.Width, imageSize.Height); - using (var graphic = Graphics.FromImage(result)) + using (var graphic = Graphics.FromImage(image)) { foreach (var (i, texture) in sources.enumerate()) { @@ -90,22 +90,27 @@ namespace PckStudio.Extensions graphic.DrawImage(texture, info.SectionPoint); }; } - return result; + return image; } - private static Size CalculateImageSize(Image[] sources, ImageLayoutDirection layoutDirection) + private static Size CalculateImageSize(IList sources, ImageLayoutDirection layoutDirection) { + if (sources.Count == 0) + { + return Size.Empty; + } var horizontal = layoutDirection == ImageLayoutDirection.Horizontal; int width = sources[0].Width; int height = sources[0].Height; + if (!sources.All(img => img.Width.Equals(width) && img.Height.Equals(height))) throw new InvalidOperationException("Images must have the same width and height."); if (horizontal) - width *= sources.Length; + width *= sources.Count; else - height *= sources.Length; + height *= sources.Count; return new Size(width, height); } diff --git a/PCK-Studio/Forms/Editor/Animation.cs b/PCK-Studio/Forms/Editor/Animation.cs index 1f1f8065..66f25134 100644 --- a/PCK-Studio/Forms/Editor/Animation.cs +++ b/PCK-Studio/Forms/Editor/Animation.cs @@ -140,7 +140,7 @@ namespace PckStudio.Forms.Editor var textures = isClockOrCompass ? linearImages : frameTextures; - return ImageExtensions.ImageFromImageArray(textures.ToArray(), ImageLayoutDirection.Vertical); + return ImageExtensions.CombineImages(textures, ImageLayoutDirection.Vertical); } } } From 12b7fce6ef14aff6cf8595e76aaf0ad20f44e83d Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:19:10 +0200 Subject: [PATCH 52/79] MainForm.cs - Removed unnecessary mods folder creation on startup --- PCK-Studio/MainForm.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index f6078acf..cb12fb4b 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -127,16 +127,6 @@ namespace PckStudio modelsFileBINToolStripMenuItem.Click += (sender, e) => setFileType_Click(sender, e, PckFile.FileData.FileType.ModelsFile); behavioursFileBINToolStripMenuItem.Click += (sender, e) => setFileType_Click(sender, e, PckFile.FileData.FileType.BehavioursFile); entityMaterialsFileBINToolStripMenuItem.Click += (sender, e) => setFileType_Click(sender, e, PckFile.FileData.FileType.MaterialFile); - - try - { - Directory.CreateDirectory(Program.AppDataCache + "\\mods\\"); - } - catch (UnauthorizedAccessException ex) - { - MessageBox.Show("Could not Create directory due to Unauthorized Access"); - Debug.WriteLine(ex.Message); - } } private void FormMain_FormClosing(object sender, FormClosingEventArgs e) From 2e889ab8f0250f6cce3562150a7407e8699208f2 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:23:40 +0200 Subject: [PATCH 53/79] Added ColorExtensions --- .../Classes/Extensions/ColorExtensions.cs | 45 +++++++++++++++++++ .../Classes/Extensions/ImageExtensions.cs | 44 ++++-------------- PCK-Studio/PckStudio.csproj | 1 + 3 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 PCK-Studio/Classes/Extensions/ColorExtensions.cs diff --git a/PCK-Studio/Classes/Extensions/ColorExtensions.cs b/PCK-Studio/Classes/Extensions/ColorExtensions.cs new file mode 100644 index 00000000..bdc42897 --- /dev/null +++ b/PCK-Studio/Classes/Extensions/ColorExtensions.cs @@ -0,0 +1,45 @@ +using System; +using System.Drawing; +using System.Numerics; + +namespace PckStudio.Extensions +{ + internal static class ColorExtensions + { + /// + /// Normalizes the Color between 0.0 - 1.0 + /// + /// + public static Vector3 Normalize(this Color color) + { + return new Vector3(color.R / 255f, color.G / 255f, color.B / 255f); + } + + private static T Clamp(T value, T min, T max) where T : IComparable + { + if (value.CompareTo(min) < 0) return min; + if (value.CompareTo(max) > 0) return max; + return value; + } + + public static byte CalculateColorBlendValue(float source, float overlay, BlendMode blendType) + { + source = Clamp(source, 0.0f, 1.0f); + overlay = Clamp(overlay, 0.0f, 1.0f); + + float resultValue = blendType switch + { + BlendMode.Add => source + overlay, + BlendMode.Subtract => source - overlay, + BlendMode.Multiply => source * overlay, + BlendMode.Average => (source + overlay) / 2.0f, + BlendMode.AscendingOrder => source > overlay ? overlay : source, + BlendMode.DescendingOrder => source < overlay ? overlay : source, + BlendMode.Screen => 1f - (1f - source) * (1f - overlay), + _ => 0.0f + }; + return (byte)Clamp(resultValue * 255, 0, 255); + } + + } +} diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index cd4ce7a2..a41adb41 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -146,7 +146,7 @@ namespace PckStudio.Extensions return image; } - public static Image Blend(this Image image, Color foregroundColor, BlendMode mode) + public static Image Blend(this Image image, Color overlayColor, BlendMode mode) { if (image is not Bitmap baseImage) return image; @@ -157,15 +157,13 @@ namespace PckStudio.Extensions Marshal.Copy(baseImageData.Scan0, baseImageBuffer, 0, baseImageBuffer.Length); - float overlayR = foregroundColor.R / 255f; - float overlayG = foregroundColor.G / 255f; - float overlayB = foregroundColor.B / 255f; + var normalized = overlayColor.Normalize(); for (int k = 0; k < baseImageBuffer.Length; k += 4) { - baseImageBuffer[k + 0] = CalculateColorComponentBlendValue(baseImageBuffer[k + 0] / 255f, overlayR, mode); - baseImageBuffer[k + 1] = CalculateColorComponentBlendValue(baseImageBuffer[k + 1] / 255f, overlayG, mode); - baseImageBuffer[k + 2] = CalculateColorComponentBlendValue(baseImageBuffer[k + 2] / 255f, overlayB, mode); + baseImageBuffer[k + 0] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 0] / 255f, normalized.X, mode); + baseImageBuffer[k + 1] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 1] / 255f, normalized.Y, mode); + baseImageBuffer[k + 2] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 2] / 255f, normalized.Z, mode); } Bitmap bitmapResult = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb); @@ -200,9 +198,9 @@ namespace PckStudio.Extensions for (int k = 0; k < baseImageBuffer.Length && k < overlayImageBuffer.Length; k += 4) { - baseImageBuffer[k + 0] = CalculateColorComponentBlendValue(baseImageBuffer[k + 0] / 255f, overlayImageBuffer[k + 0] / 255f, mode); - baseImageBuffer[k + 1] = CalculateColorComponentBlendValue(baseImageBuffer[k + 1] / 255f, overlayImageBuffer[k + 1] / 255f, mode); - baseImageBuffer[k + 2] = CalculateColorComponentBlendValue(baseImageBuffer[k + 2] / 255f, overlayImageBuffer[k + 2] / 255f, mode); + baseImageBuffer[k + 0] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 0] / 255f, overlayImageBuffer[k + 0] / 255f, mode); + baseImageBuffer[k + 1] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 1] / 255f, overlayImageBuffer[k + 1] / 255f, mode); + baseImageBuffer[k + 2] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 2] / 255f, overlayImageBuffer[k + 2] / 255f, mode); } Bitmap bitmapResult = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb); @@ -216,31 +214,5 @@ namespace PckStudio.Extensions overlayImage.UnlockBits(overlayImageData); return bitmapResult; } - - private static T Clamp(T value, T min, T max) where T : IComparable - { - if (value.CompareTo(min) < 0) return min; - else if (value.CompareTo(max) > 0) return max; - else return value; - } - - private static byte CalculateColorComponentBlendValue(float source, float overlay, BlendMode blendType) - { - source = Clamp(source, 0.0f, 1.0f); - overlay = Clamp(overlay, 0.0f, 1.0f); - - float resultValue = blendType switch - { - BlendMode.Add => source + overlay, - BlendMode.Subtract => source - overlay, - BlendMode.Multiply => source * overlay, - BlendMode.Average => (source + overlay) / 2.0f, - BlendMode.AscendingOrder => source > overlay ? overlay : source, - BlendMode.DescendingOrder => source < overlay ? overlay : source, - BlendMode.Screen => 1f - (1f - source)*(1f - overlay), - _ => 0.0f - }; - return (byte)Clamp(resultValue * 255, 0, 255); - } } } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3b0cf3ee..3a7b7ebc 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -171,6 +171,7 @@ + From 35fb42ecaa4fc6b75e44dfaaf8f89087a6e0abf3 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 19:29:24 -0400 Subject: [PATCH 54/79] Added a SkinBox class for multiple forms to use --- PCK-Studio/Classes/Models/SkinBox.cs | 61 ++++++++++++++++++++++++++++ PCK-Studio/PckStudio.csproj | 1 + 2 files changed, 62 insertions(+) create mode 100644 PCK-Studio/Classes/Models/SkinBox.cs diff --git a/PCK-Studio/Classes/Models/SkinBox.cs b/PCK-Studio/Classes/Models/SkinBox.cs new file mode 100644 index 00000000..91ae8241 --- /dev/null +++ b/PCK-Studio/Classes/Models/SkinBox.cs @@ -0,0 +1,61 @@ +using System; +using System.Numerics; +using System.Text.RegularExpressions; +using System.Windows.Forms; + +namespace PckStudio.Classes.Models +{ + public class SkinBox + { + public string Parent; + public Vector3 Pos; + public Vector3 Size; + public float U, V; + public bool HideWithArmor; + public bool Mirror; + public float Inflation; + public SkinBox(string input) + { + try + { + string[] arguments = Regex.Split(input, @"\s+"); // split by whitespace + + int old_length = arguments.Length - 1; + + Console.WriteLine($"Old length - {old_length}"); + + Array.Resize(ref arguments, 12); + + for (int x = 11; x > old_length; x--) + { + arguments[x] = "0"; // set any missing arguments to '0' + } + + Parent = arguments[0].ToUpper(); // just in case a box has all lower, the editor still parses correctly + + Pos = new Vector3(float.Parse(arguments[1]), float.Parse(arguments[2]), float.Parse(arguments[3])); + Size = new Vector3(float.Parse(arguments[4]), float.Parse(arguments[5]), float.Parse(arguments[6])); + U = float.Parse(arguments[7]); + V = float.Parse(arguments[8]); + HideWithArmor = Convert.ToBoolean(int.Parse(arguments[9])); + Mirror = Convert.ToBoolean(int.Parse(arguments[10])); + Inflation = float.Parse(arguments[11]); + } + catch (FormatException fex) + { + MessageBox.Show($"A Format Exception was thrown\nFailed to parse BOX value\n{fex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + catch (IndexOutOfRangeException iex) // this should be MUCH more rare now + { + MessageBox.Show($"A box paramater was out of range\nFailed to parse BOX value\n{iex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + catch (Exception ex) + { + Parent = string.Empty; + } + } + + } +} diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3a7b7ebc..5d3cd260 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -187,6 +187,7 @@ + From ffbb8fa5783b4a39d0d87f9e394e6d624c0c48e3 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 19:40:16 -0400 Subject: [PATCH 55/79] Colons are now removed when using the edit all entries function --- PCK-Studio/MainForm.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index cb12fb4b..61a3c068 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -2179,7 +2179,7 @@ namespace PckStudio int idx = line.IndexOf(' '); if (idx == -1 || line.Length - 1 == idx) continue; - file.Properties.Add((line.Substring(0, idx), line.Substring(idx + 1))); + file.Properties.Add((line.Substring(0, idx).Replace(":", string.Empty), line.Substring(idx + 1))); } ReloadMetaTreeView(); if (IsSubPCKNode(node.FullPath)) RebuildSubPCK(node); From 455b266a6bf2b4c311c0a12a7d55b971cb033b0e Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 19:40:39 -0400 Subject: [PATCH 56/79] Box Editor now utilizes the new SkinBox class rather than its own --- PCK-Studio/Forms/Editor/BoxEditor.cs | 42 ++-------------------------- 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/PCK-Studio/Forms/Editor/BoxEditor.cs b/PCK-Studio/Forms/Editor/BoxEditor.cs index a7972c68..f53e158a 100644 --- a/PCK-Studio/Forms/Editor/BoxEditor.cs +++ b/PCK-Studio/Forms/Editor/BoxEditor.cs @@ -1,7 +1,6 @@ using System; -using System.Numerics; -using System.Text.RegularExpressions; using System.Windows.Forms; +using PckStudio.Classes.Models; namespace PckStudio.Forms.Editor { @@ -9,50 +8,13 @@ namespace PckStudio.Forms.Editor { public string Result; - class BOX - { - public string Parent; - public Vector3 Pos; - public Vector3 Size; - public float U, V; - public bool HideWithArmor; - public bool Mirror; - public float Inflation; - public BOX(string input) - { - string[] arguments = Regex.Split(input, @"\s+"); - - try - { - Parent = arguments[0].ToUpper(); // just in case a box has all lower, the editor still parses correctly - Pos = new Vector3(float.Parse(arguments[1]), float.Parse(arguments[2]), float.Parse(arguments[3])); - Size = new Vector3(float.Parse(arguments[4]), float.Parse(arguments[5]), float.Parse(arguments[6])); - U = float.Parse(arguments[7]); - V = float.Parse(arguments[8]); - HideWithArmor = Convert.ToBoolean(int.Parse(arguments[9])); - Mirror = Convert.ToBoolean(int.Parse(arguments[10])); - Inflation = float.Parse(arguments[11]); - } - catch (IndexOutOfRangeException) - { - // This is normal as some box values can have less parameters but no more than 12 - return; - } - catch (Exception ex) - { - Parent = string.Empty; - } - } - - } - public BoxEditor(string inBOX, bool hasInflation) { InitializeComponent(); inflationUpDown.Enabled = hasInflation; - BOX box = new BOX(inBOX); + SkinBox box = new SkinBox(inBOX); if (string.IsNullOrEmpty(box.Parent) || !parentComboBox.Items.Contains(box.Parent)) { From 591e1ac5dc53aaa3a852bcd10f69d95fb94db109 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 19:41:58 -0400 Subject: [PATCH 57/79] Fixed part and offset names in GenerateModel --- .../Forms/Skins-And-Textures/generateModel.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 2a87eeba..651dc56f 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -46,12 +46,23 @@ namespace PckStudio // 64x64 Overlay Parts "HEADWEAR", "JACKET", - "SHOULDER0", - "SHOULDER1", "SLEEVE0", "SLEEVE1", "PANTS0", "PANTS1", + "SOCK0", + "SOCK1", + + // Armor Parts + "HELMET", + "CHEST", + "SHOULDER0", + "SHOULDER1", + "WAIST", + "LEGGING0", + "LEGGING1", + "BOOT0", + "BOOT1", }; private static readonly string[] ValidModelOffsetTypes = new string[] @@ -67,11 +78,11 @@ namespace PckStudio // Armor Offsets "HELMET", "CHEST", + "WAIST", + "LEGGING0", + "LEGGING1", "BOOT0", "BOOT1", - "WAIST", - "PANTS0", - "PANTS1", "TOOL0", "TOOL1", From cd21ee80170d3d9e1d83c5dee2a76f4e16d21774 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 19:42:22 -0400 Subject: [PATCH 58/79] Marked generateModel as obsolete --- PCK-Studio/Forms/Skins-And-Textures/generateModel.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 651dc56f..d57b0e62 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -15,6 +15,7 @@ using OMI.Formats.Pck; namespace PckStudio { + [Obsolete] public partial class generateModel : MetroForm { PictureBox skinPreview; From de6f7e9f35a011cb4c7b811cf2292e504cec0e8a Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 19:48:46 -0400 Subject: [PATCH 59/79] Added ToProperty method to SkinBox --- PCK-Studio/Classes/Models/SkinBox.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/PCK-Studio/Classes/Models/SkinBox.cs b/PCK-Studio/Classes/Models/SkinBox.cs index 91ae8241..eb27a7cf 100644 --- a/PCK-Studio/Classes/Models/SkinBox.cs +++ b/PCK-Studio/Classes/Models/SkinBox.cs @@ -7,13 +7,13 @@ namespace PckStudio.Classes.Models { public class SkinBox { - public string Parent; + public string Type; public Vector3 Pos; public Vector3 Size; public float U, V; public bool HideWithArmor; public bool Mirror; - public float Inflation; + public float Scale; public SkinBox(string input) { try @@ -31,7 +31,7 @@ namespace PckStudio.Classes.Models arguments[x] = "0"; // set any missing arguments to '0' } - Parent = arguments[0].ToUpper(); // just in case a box has all lower, the editor still parses correctly + Type = arguments[0].ToUpper(); // just in case a box has all lower, the editor still parses correctly Pos = new Vector3(float.Parse(arguments[1]), float.Parse(arguments[2]), float.Parse(arguments[3])); Size = new Vector3(float.Parse(arguments[4]), float.Parse(arguments[5]), float.Parse(arguments[6])); @@ -39,7 +39,7 @@ namespace PckStudio.Classes.Models V = float.Parse(arguments[8]); HideWithArmor = Convert.ToBoolean(int.Parse(arguments[9])); Mirror = Convert.ToBoolean(int.Parse(arguments[10])); - Inflation = float.Parse(arguments[11]); + Scale = float.Parse(arguments[11]); } catch (FormatException fex) { @@ -53,9 +53,14 @@ namespace PckStudio.Classes.Models } catch (Exception ex) { - Parent = string.Empty; + Type = string.Empty; } } + public ValueTuple ToProperty() + { + string value = $"{Type} {Pos.X} {Pos.Y} {Pos.Z} {Size.X} {Size.Y} {Size.Z} {U} {V} {HideWithArmor} {Mirror} {Scale}"; + return new ValueTuple("BOX", value.Replace(',', '.')); + } } } From 779a2bb655ec52a80798295d705b8cd3d8b5436a Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:01:15 -0400 Subject: [PATCH 60/79] Fixed member names in BoxEditor --- PCK-Studio/Forms/Editor/BoxEditor.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Forms/Editor/BoxEditor.cs b/PCK-Studio/Forms/Editor/BoxEditor.cs index f53e158a..771f3bc6 100644 --- a/PCK-Studio/Forms/Editor/BoxEditor.cs +++ b/PCK-Studio/Forms/Editor/BoxEditor.cs @@ -16,12 +16,12 @@ namespace PckStudio.Forms.Editor SkinBox box = new SkinBox(inBOX); - if (string.IsNullOrEmpty(box.Parent) || !parentComboBox.Items.Contains(box.Parent)) + if (string.IsNullOrEmpty(box.Type) || !parentComboBox.Items.Contains(box.Type)) { throw new Exception("Failed to parse BOX value"); } - parentComboBox.SelectedItem = parentComboBox.Items[parentComboBox.Items.IndexOf(box.Parent)]; + parentComboBox.SelectedItem = parentComboBox.Items[parentComboBox.Items.IndexOf(box.Type)]; PosXUpDown.Value = (decimal)box.Pos.X; PosYUpDown.Value = (decimal)box.Pos.Y; PosZUpDown.Value = (decimal)box.Pos.Z; @@ -32,7 +32,7 @@ namespace PckStudio.Forms.Editor uvYUpDown.Value = (decimal)box.V; armorCheckBox.Checked = box.HideWithArmor; mirrorCheckBox.Checked = box.Mirror; - inflationUpDown.Value = (decimal)box.Inflation; + inflationUpDown.Value = (decimal)box.Scale; } private void saveButton_Click(object sender, EventArgs e) From 39171fb41a285053dfbbcaacf5bc739c74da7b7a Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:07:33 -0400 Subject: [PATCH 61/79] Replaced ModelPart class and added support for HD Skins --- .../Forms/Skins-And-Textures/generateModel.cs | 322 +++++++----------- 1 file changed, 127 insertions(+), 195 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index d57b0e62..509f9551 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -4,12 +4,14 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Linq; +using System.Numerics; using System.Windows.Forms; using System.Collections; using System.IO; using Newtonsoft.Json; using MetroFramework.Forms; using PckStudio.Classes.FileTypes; +using PckStudio.Classes.Models; using System.Text.RegularExpressions; using OMI.Formats.Pck; @@ -89,39 +91,9 @@ namespace PckStudio "TOOL1", }; - List modelParts = new List(); + List modelBoxes = new List(); List modelOffsets = new List(); - class ModelPart - { - public string Type; - public float X, Y, Z; - public float Width; - public float Height; - public float Length; - public int U, V; - - public ModelPart(string type, float x, float y, float z, float width, float height, float length, int u, int v) - { - Type = type; - X = x; - Y = y; - Z = z; - Width = width; - Height = height; - Length = length; - U = u; - V = v; - } - - public ValueTuple ToProperty() - { - string value = $"{Type} {X} {Y} {Z} {Width} {Height} {Length} {U} {V}"; - return new ValueTuple("BOX", value.Replace(',', '.')); - } - - } - class ModelOffset { public string Name; @@ -164,56 +136,14 @@ namespace PckStudio { case "BOX": { - string[] Format = ReplaceWhitespace(property.Item2, ",").TrimEnd('\n', '\r', ' ').Split(','); - if (Format.Length < 9) - { - Console.WriteLine($"'{property.Item1}' property has too few arguments: {property.Item2}"); - continue; - } - string name = Format[0]; + SkinBox box = new SkinBox(property.Item2); + + string name = box.Type; if (ValidModelBoxTypes.Contains(name)) { - // %10ls = name - // %f - // %f - // %f - // %f - // %f - // %f - // %f - // %f - // %d - // %d - // %f - try - { - float x = float.Parse(Format[1]); - float y = float.Parse(Format[2]); - float z = float.Parse(Format[3]); - float sizeX = float.Parse(Format[4]); - float sizeY = float.Parse(Format[5]); - float sizeZ = float.Parse(Format[6]); - int u = int.Parse(Format[7]); - int v = int.Parse(Format[8]); - modelParts.Add(new ModelPart(name, x, y, z, sizeX, sizeY, sizeZ, u, v)); - } - catch (FormatException ex) - { - Console.WriteLine(ex.Message); - MessageBox.Show("A Format Exception was thrown\nFailed to parse BOX value", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - catch (OverflowException ex) - { - Console.WriteLine(ex.Message); - MessageBox.Show("An Overflow Exception was thrown\nFailed to parse BOX value", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - if (Format.Length >= 11) - { - string unk1 = Format[9]; - string unk2 = Format[10]; - Console.WriteLine($"{unk1} | {unk2}"); + modelBoxes.Add(box); } + comboParent.Enabled = true; break; } @@ -272,25 +202,28 @@ namespace PckStudio float legY = (displayBox.Height / 2) + 85; // -80; float groundLevel = (displayBox.Height / 2) + 145; graphics.DrawLine(Pens.White, 0, groundLevel, displayBox.Width, groundLevel); + float gfx_scale = texturePreview.Image.Width / 64; // used for displaying larger graphics properly; 64 is the base skin width for all models + // Chooses Render settings based on current direction foreach (ListViewItem listViewItem in listViewBoxes.Items) { - if (!(listViewItem.Tag is ModelPart)) continue; - ModelPart part = listViewItem.Tag as ModelPart; + if (!(listViewItem.Tag is SkinBox)) continue; + SkinBox part = listViewItem.Tag as SkinBox; float x = displayBox.Width / 2; float y = 0; + switch (direction) { case eViewDirection.front: { //Sets X & Y based on model part class // listViewItem.Text -> part.Type - // listViewItem.SubItems[1] -> part.X - // listViewItem.SubItems[2] -> part.Y - // listViewItem.SubItems[3] -> part.Z - // listViewItem.SubItems[4] -> part.Width - // listViewItem.SubItems[5] -> part.Height - // listViewItem.SubItems[6] -> part.Length + // listViewItem.SubItems[1] -> part.Pos.X + // listViewItem.SubItems[2] -> part.Pos.Y + // listViewItem.SubItems[3] -> part.Pos.Z + // listViewItem.SubItems[4] -> part.Size.X + // listViewItem.SubItems[5] -> part.Size.Y + // listViewItem.SubItems[6] -> part.Size.Z // listViewItem.SubItems[7] -> part.U // listViewItem.SubItems[8] -> part.V switch (part.Type) @@ -327,20 +260,19 @@ namespace PckStudio if (!checkTextureGenerate.Checked) { RectangleF destRect = new RectangleF( - x + part.X * 5, - y + part.Y * 5, - part.Width * 5, - part.Height * 5); + x + part.Pos.X * 5, + y + part.Pos.Y * 5, + part.Size.X * 5, + part.Size.Y * 5); RectangleF srcRect = new RectangleF( - part.U + part.Length, - part.V + part.Length, - part.Width, - part.Height); - graphics.DrawImage(texturePreview.Image, destRect, srcRect, GraphicsUnit.Pixel); + (part.U + part.Size.Z) * gfx_scale, + (part.V + part.Size.Z) * gfx_scale, + part.Size.X * gfx_scale, + part.Size.Y * gfx_scale); } else { - graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.X * 5, y + part.Y * 5, part.Width * 5, part.Height * 5); + graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.Pos.X * 5, y + part.Pos.Y * 5, part.Size.X * 5, part.Size.Y * 5); } break; @@ -380,21 +312,21 @@ namespace PckStudio if (!checkTextureGenerate.Checked) { RectangleF destRect = new RectangleF( - x + part.Z * 5, - y + part.Y * 5, - part.Length * 5, - part.Height * 5); + x + part.Pos.Z * 5, + y + part.Pos.Y * 5, + part.Size.Z * 5, + part.Size.Y * 5); RectangleF srcRect = new RectangleF( - part.U + part.Length + part.Width, - part.V + part.Length, - part.Length, - part.Height); + (part.U + part.Size.Z + part.Size.X) * gfx_scale, + (part.V + part.Size.Z) * gfx_scale, + part.Size.Z * gfx_scale, + part.Size.Y * gfx_scale); graphics.DrawImage(texturePreview.Image, destRect, srcRect, GraphicsUnit.Pixel); } else { //Draws Part - graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.Z * 5, y + part.Y * 5, part.Length * 5, part.Height * 5); + graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.Pos.Z * 5, y + part.Pos.Y * 5, part.Size.Z * 5, part.Size.Y * 5); } bitmapModelPreview.RotateFlip(RotateFlipType.RotateNoneFlipX); break; @@ -433,21 +365,21 @@ namespace PckStudio if (!checkTextureGenerate.Checked) { RectangleF destRect = new RectangleF( - x + part.X * 5, - y + part.Y * 5, - part.Width * 5, - part.Height * 5); + x + part.Pos.X * 5, + y + part.Pos.Y * 5, + part.Size.X * 5, + part.Size.Y * 5); RectangleF srcRect = new RectangleF( - part.U + part.Length * 2 + part.Width, - part.V + part.Length, - part.Width, - part.Height); + (part.U + part.Size.Z * 2 + part.Size.X) * gfx_scale, + (part.V + part.Size.Z) * gfx_scale, + part.Size.X * gfx_scale, + part.Size.Y * gfx_scale); graphics.DrawImage(texturePreview.Image, destRect, srcRect, GraphicsUnit.Pixel); } else { //Draws Part - graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.X * 5, y + part.Y * 5, part.Width * 5, part.Height * 5); + graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.Pos.X * 5, y + part.Pos.Y * 5, part.Size.X * 5, part.Size.Y * 5); } bitmapModelPreview.RotateFlip(RotateFlipType.RotateNoneFlipX); break; @@ -483,21 +415,21 @@ namespace PckStudio if (!checkTextureGenerate.Checked) { RectangleF destRect = new RectangleF( - x + part.Z * 5, - y + part.Y * 5, - part.Length * 5, - part.Height * 5); + x + part.Pos.Z * 5, + y + part.Pos.Y * 5, + part.Size.Z * 5, + part.Size.Y * 5); RectangleF srcRect = new RectangleF( - part.U + part.Length + part.Width, - part.V + part.Length, - part.Length, - part.Height); + (part.U + part.Size.Z + part.Size.X) * gfx_scale, + (part.V + part.Size.Z) * gfx_scale, + part.Size.Z * gfx_scale, + part.Size.Y * gfx_scale); graphics.DrawImage(texturePreview.Image, destRect, srcRect, GraphicsUnit.Pixel); } else { //Draws Part - graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.Z * 5, y + part.Y * 5, part.Length * 5, part.Height * 5); + graphics.FillRectangle(new SolidBrush(listViewItem.ForeColor), x + part.Pos.Z * 5, y + part.Pos.Y * 5, part.Size.Z * 5, part.Size.Y * 5); } break; } @@ -519,13 +451,13 @@ namespace PckStudio Bitmap bitmapAutoTexture = new Bitmap(texturePreview.Width, texturePreview.Height); using (Graphics graphics = Graphics.FromImage(bitmapAutoTexture)) { - foreach (var part in modelParts) + foreach (var part in modelBoxes) { - float width = part.Width * 2; - float height = part.Height * 2; - float length = part.Length * 2; - int u = part.U * 2; - int v = part.V * 2; + float width = part.Size.X * 2; + float height = part.Size.Y * 2; + float length = part.Size.Z * 2; + float u = part.U * 2; + float v = part.V * 2; Random r = new Random(); Brush brush = new SolidBrush(Color.FromArgb(r.Next(int.MinValue, int.MaxValue))); graphics.FillRectangle(brush, u + length, v, width, length); @@ -851,7 +783,7 @@ namespace PckStudio //Creates Item private void createToolStripMenuItem_Click(object sender, EventArgs e) { - modelParts.Add(new ModelPart("New Part", 0, 0, 0, 0, 0, 0, 0, 0)); + modelBoxes.Add(new SkinBox("NEW_BOX 0 0 0 1 1 1 0 0 0 0 0")); updateListView(); render(); } @@ -861,21 +793,21 @@ namespace PckStudio private void listView1_SelectedIndexChanged(object sender, EventArgs e) { changeColorToolStripMenuItem.Visible = false; - if (listViewBoxes.SelectedItems.Count != 0 && listViewBoxes.SelectedItems[0].Tag is ModelPart) + if (listViewBoxes.SelectedItems.Count != 0 && listViewBoxes.SelectedItems[0].Tag is SkinBox) { changeColorToolStripMenuItem.Visible = true; - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; //graphics.DrawRectangle(Pens.Yellow, x + (float)double.Parse(this.selected.SubItems[3].Text) * 5 - 1, y + (float)double.Parse(this.selected.SubItems[2].Text) * 5 - 1, (float)double.Parse(this.selected.SubItems[6].Text) * 5 + 2, (float)double.Parse(this.selected.SubItems[5].Text) * 5 + 2); //graphics.DrawRectangle(Pens.Black, x + (float)double.Parse(this.selected.SubItems[3].Text) * 5, y + (float)double.Parse(this.selected.SubItems[2].Text) * 5, (float)double.Parse(this.selected.SubItems[6].Text) * 5, (float)double.Parse(this.selected.SubItems[5].Text) * 5); comboParent.Text = part.Type; - PosXUpDown.Value = (decimal)part.X; - PosYUpDown.Value = (decimal)part.Y; - PosZUpDown.Value = (decimal)part.Z; - SizeXUpDown.Value = (decimal)part.Width; - SizeYUpDown.Value = (decimal)part.Height; - SizeZUpDown.Value = (decimal)part.Length; - TextureXUpDown.Value = part.U; - TextureYUpDown.Value = part.V; + PosXUpDown.Value = (decimal)part.Pos.X; + PosYUpDown.Value = (decimal)part.Pos.Y; + PosZUpDown.Value = (decimal)part.Pos.Z; + SizeXUpDown.Value = (decimal)part.Size.X; + SizeYUpDown.Value = (decimal)part.Size.Y; + SizeZUpDown.Value = (decimal)part.Size.Z; + TextureXUpDown.Value = (decimal)part.U; + TextureYUpDown.Value = (decimal)part.V; render(); } } @@ -885,9 +817,9 @@ namespace PckStudio private void comboParent_SelectedIndexChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; part.Type = comboParent.Text; buttonIMPORT.Enabled = true; buttonEXPORT.Enabled = true; @@ -906,10 +838,10 @@ namespace PckStudio private void SizeXUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; - part.Width = (float)SizeXUpDown.Value; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; + part.Size.X = (float)SizeXUpDown.Value; } updateListView(); render(); @@ -918,10 +850,10 @@ namespace PckStudio private void SizeYUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; - part.Height = (float)SizeYUpDown.Value; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; + part.Size.Y = (float)SizeYUpDown.Value; } updateListView(); render(); @@ -930,10 +862,10 @@ namespace PckStudio private void SizeZUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; - part.Length = (float)SizeZUpDown.Value; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; + part.Size.Z = (float)SizeZUpDown.Value; } updateListView(); render(); @@ -942,10 +874,10 @@ namespace PckStudio private void PosXUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; - part.X = (float)PosXUpDown.Value; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; + part.Pos.X = (float)PosXUpDown.Value; } updateListView(); render(); @@ -955,10 +887,10 @@ namespace PckStudio private void PosYUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; - part.Y = (float)PosYUpDown.Value; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; + part.Pos.Y = (float)PosYUpDown.Value; } updateListView(); render(); @@ -968,10 +900,10 @@ namespace PckStudio private void PosZUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; - part.Z = (float)PosZUpDown.Value; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; + part.Pos.Z = (float)PosZUpDown.Value; } updateListView(); render(); @@ -1010,9 +942,9 @@ namespace PckStudio private void TextureXUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; part.U = (int)TextureXUpDown.Value; } updateListView(); @@ -1024,9 +956,9 @@ namespace PckStudio private void TextureYUpDown_ValueChanged(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; part.V = (int)TextureXUpDown.Value; } updateListView(); @@ -1073,7 +1005,7 @@ namespace PckStudio private void buttonDone_Click(object sender, EventArgs e) { Bitmap bitmap1 = new Bitmap(displayBox.Width, displayBox.Height); - foreach (var part in modelParts) + foreach (var part in modelBoxes) { boxes.Add(part.ToProperty()); } @@ -1122,12 +1054,12 @@ namespace PckStudio //Loads in model template(Steve) private void buttonTemplate_Click(object sender, EventArgs e) { - modelParts.Add(new ModelPart("HEAD", -4, -8, -4, 8, 8, 8, 0, 0)); - modelParts.Add(new ModelPart("BODY", -4, 0, -2, 8, 12, 4, 16, 16)); - modelParts.Add(new ModelPart("ARM0", -3, -2, -2, 4, 12, 4, 40, 16)); - modelParts.Add(new ModelPart("ARM1", -1, -2, -2, 4, 12, 4, 40, 16)); - modelParts.Add(new ModelPart("LEG0", -2, 0, -2, 4, 12, 4, 0, 16)); - modelParts.Add(new ModelPart("LEG1", -2, 0, -2, 4, 12, 4, 0, 16)); + modelBoxes.Add(new SkinBox("HEAD -4 -8 -4 8 8 8 0 0 0 0 0")); + modelBoxes.Add(new SkinBox("BODY -4 0 -2 8 12 4 16 16 0 0 0")); + modelBoxes.Add(new SkinBox("ARM0 -3 -2 -2 4 12 4 40 16 0 0 0")); + modelBoxes.Add(new SkinBox("ARM1 -1 -2 -2 4 12 4 40 16 0 1 0")); + modelBoxes.Add(new SkinBox("LEG0 -2 0 -2 4 12 4 0 16 0 0 0")); + modelBoxes.Add(new SkinBox("LEG1 -2 0 -2 4 12 0 16 0 1 0")); comboParent.Enabled = true; updateListView(); render(); @@ -1136,16 +1068,16 @@ namespace PckStudio private void updateListView() { listViewBoxes.Items.Clear(); - foreach (var part in modelParts) + foreach (var part in modelBoxes) { ListViewItem listViewItem = new ListViewItem(part.Type); listViewItem.Tag = part; - listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.X.ToString())); - listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Y.ToString())); - listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Z.ToString())); - listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Width.ToString())); - listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Height.ToString())); - listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Length.ToString())); + listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Pos.X.ToString())); + listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Pos.Y.ToString())); + listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Pos.Z.ToString())); + listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Size.X.ToString())); + listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Size.Y.ToString())); + listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.Size.Z.ToString())); listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.U.ToString())); listViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(listViewItem, part.V.ToString())); listViewBoxes.Items.Add(listViewItem); @@ -1186,11 +1118,10 @@ namespace PckStudio listViewBoxes.Items.Clear(); string str1 = File.ReadAllText(openFileDialog.FileName); - modelParts.Clear(); + modelBoxes.Clear(); List lines = str1.Split(new[] { "\n\r", "\n" }, StringSplitOptions.None).ToList(); if (string.IsNullOrEmpty(lines[lines.Count - 1])) lines.RemoveAt(lines.Count - 1); - int currentLine = 0; int passedlines = 0; for (int i = 0; i < lines.Count;) { @@ -1202,11 +1133,12 @@ namespace PckStudio float SizeX = float.Parse(lines[6 + passedlines]); float SizeY = float.Parse(lines[7 + passedlines]); float SizeZ = float.Parse(lines[8 + passedlines]); - int UvX = int.Parse(lines[9 + passedlines]); - int UvY = int.Parse(lines[10 + passedlines]); + float UvX = float.Parse(lines[9 + passedlines]); + float UvY = float.Parse(lines[10 + passedlines]); passedlines += 11; i += 11; - modelParts.Add(new ModelPart(parent, PosX, PosY, PosZ, SizeX, SizeY, SizeZ, UvX, UvY)); + // CSM doesn't support armor, mirror, or scale values as far as I know of - May + modelBoxes.Add(new SkinBox($"{parent} {PosX} {PosY} {PosZ} {SizeX} {SizeY} {SizeZ} {UvX} {UvY} {false} {false} {0}")); } } comboParent.Enabled = true; @@ -1293,18 +1225,18 @@ namespace PckStudio private void listView1_Click(object sender, EventArgs e) { if (listViewBoxes.SelectedItems.Count != 0 && listViewBoxes.SelectedItems[0] != null && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - var part = listViewBoxes.SelectedItems[0].Tag as ModelPart; + var part = listViewBoxes.SelectedItems[0].Tag as SkinBox; comboParent.Text = part.Type; - PosXUpDown.Value = (decimal)part.X; - PosYUpDown.Value = (decimal)part.Y; - PosZUpDown.Value = (decimal)part.Z; - SizeXUpDown.Value = (decimal)part.Width; - SizeYUpDown.Value = (decimal)part.Height; - SizeZUpDown.Value = (decimal)part.Length; - TextureXUpDown.Value = part.U; - TextureYUpDown.Value = part.V; + PosXUpDown.Value = (decimal)part.Pos.X; + PosYUpDown.Value = (decimal)part.Pos.Y; + PosZUpDown.Value = (decimal)part.Pos.Z; + SizeXUpDown.Value = (decimal)part.Size.X; + SizeYUpDown.Value = (decimal)part.Size.Y; + SizeZUpDown.Value = (decimal)part.Size.Z; + TextureXUpDown.Value = (decimal)part.U; + TextureYUpDown.Value = (decimal)part.V; SizeXUpDown.Enabled = true; SizeYUpDown.Enabled = true; SizeZUpDown.Enabled = true; @@ -1343,9 +1275,9 @@ namespace PckStudio private void delStuffUsingDelKey(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete && listViewBoxes.SelectedItems.Count != 0 && - listViewBoxes.SelectedItems[0].Tag is ModelPart) + listViewBoxes.SelectedItems[0].Tag is SkinBox) { - if (modelParts.Remove(listViewBoxes.SelectedItems[0].Tag as ModelPart)) + if (modelBoxes.Remove(listViewBoxes.SelectedItems[0].Tag as SkinBox)) listViewBoxes.SelectedItems[0].Remove(); render(); } From ee562c2c932b255269af46a7c55a563bd181ea74 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:09:04 -0400 Subject: [PATCH 62/79] ComboBox in GenerateModel now displays all box types --- PCK-Studio/Forms/Skins-And-Textures/generateModel.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 509f9551..d965f74b 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -119,6 +119,8 @@ namespace PckStudio skinPreview = preview; if (texturePreview.Image == null) texturePreview.Image = new Bitmap(64, 64); + comboParent.Items.Clear(); + ValidModelBoxTypes.ToList().ForEach(p => comboParent.Items.Add(p)); loadData(); } private static readonly Regex sWhitespace = new Regex(@"\s+"); From b434df93f43c281f363d8ef6801039c70ccd9746 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:10:04 -0400 Subject: [PATCH 63/79] Added proper offset for all box types --- .../Forms/Skins-And-Textures/generateModel.cs | 106 ++++++++++++++---- 1 file changed, 87 insertions(+), 19 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index d965f74b..ff525426 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -231,28 +231,44 @@ namespace PckStudio switch (part.Type) { case "HEAD": + case "HEADWEAR": + case "HELMET": y = headbodyY + int.Parse(offsetHead.Text) * 5; break; case "BODY": + case "JACKET": + case "CHEST": y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": + case "SLEEVE0": + case "SHOULDER0": x -= 25; y = armY + int.Parse(offsetArms.Text) * 5; break; case "ARM1": + case "SLEEVE1": + case "SHOULDER1": x += 25; y = armY + int.Parse(offsetArms.Text) * 5; break; case "LEG0": + case "PANTS0": + case "SOCK0": + case "LEGGING0": + case "BOOT0": x -= 10; y = legY + int.Parse(offsetLegs.Text) * 5; break; case "LEG1": + case "PANTS1": + case "SOCK1": + case "LEGGING1": + case "BOOT1": x += 10; y = legY + int.Parse(offsetLegs.Text) * 5; break; @@ -286,27 +302,42 @@ namespace PckStudio switch (part.Type) { case "HEAD": - y = headbodyY + float.Parse(offsetHead.Text) * 5; + case "HEADWEAR": + case "HELMET": + y = headbodyY + int.Parse(offsetHead.Text) * 5; break; - case "BODY": - y = headbodyY + float.Parse(offsetBody.Text) * 5; + case "JACKET": + case "CHEST": + y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": - y = armY + float.Parse(offsetArms.Text) * 5; + case "SLEEVE0": + case "SHOULDER0": + y = armY + int.Parse(offsetArms.Text) * 5; break; case "ARM1": - y = armY + float.Parse(offsetArms.Text) * 5; + case "SLEEVE1": + case "SHOULDER1": + y = armY + int.Parse(offsetArms.Text) * 5; break; case "LEG0": - y = legY + float.Parse(offsetLegs.Text) * 5; + case "PANTS0": + case "SOCK0": + case "LEGGING0": + case "BOOT0": + y = legY + int.Parse(offsetLegs.Text) * 5; break; case "LEG1": - y = legY + float.Parse(offsetLegs.Text) * 5; + case "PANTS1": + case "SOCK1": + case "LEGGING1": + case "BOOT1": + y = legY + int.Parse(offsetLegs.Text) * 5; break; } @@ -340,26 +371,46 @@ namespace PckStudio switch (part.Type) { case "HEAD": - y = headbodyY + float.Parse(offsetHead.Text) * 5; + case "HEADWEAR": + case "HELMET": + y = headbodyY + int.Parse(offsetHead.Text) * 5; break; case "BODY": - y = headbodyY + float.Parse(offsetBody.Text) * 5; + case "JACKET": + case "CHEST": + y = headbodyY + int.Parse(offsetBody.Text) * 5; break; + case "ARM0": + case "SLEEVE0": + case "SHOULDER0": x -= 25; - y = armY + float.Parse(offsetArms.Text) * 5; + y = armY + int.Parse(offsetArms.Text) * 5; break; + case "ARM1": + case "SLEEVE1": + case "SHOULDER1": x += 25; - y = armY + float.Parse(offsetArms.Text) * 5; + y = armY + int.Parse(offsetArms.Text) * 5; break; + case "LEG0": + case "PANTS0": + case "SOCK0": + case "LEGGING0": + case "BOOT0": x -= 10; - y = legY + float.Parse(offsetLegs.Text) * 5; + y = legY + int.Parse(offsetLegs.Text) * 5; break; + case "LEG1": + case "PANTS1": + case "SOCK1": + case "LEGGING1": + case "BOOT1": x += 10; - y = legY + float.Parse(offsetLegs.Text) * 5; + y = legY + int.Parse(offsetLegs.Text) * 5; break; } @@ -392,25 +443,42 @@ namespace PckStudio switch (part.Type) { case "HEAD": - y = headbodyY + float.Parse(offsetHead.Text) * 5; + case "HEADWEAR": + case "HELMET": + y = headbodyY + int.Parse(offsetHead.Text) * 5; break; case "BODY": - y = headbodyY + float.Parse(offsetBody.Text) * 5; + case "JACKET": + case "CHEST": + y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": - y = armY + float.Parse(offsetArms.Text) * 5; + case "SLEEVE0": + case "SHOULDER0": + y = armY + int.Parse(offsetArms.Text) * 5; break; + case "ARM1": - y = armY + float.Parse(offsetArms.Text) * 5; + case "SLEEVE1": + case "SHOULDER1": + y = armY + int.Parse(offsetArms.Text) * 5; break; case "LEG0": - y = legY + float.Parse(offsetLegs.Text) * 5; + case "PANTS0": + case "SOCK0": + case "LEGGING0": + case "BOOT0": + y = legY + int.Parse(offsetLegs.Text) * 5; break; case "LEG1": - y = legY + float.Parse(offsetLegs.Text) * 5; + case "PANTS1": + case "SOCK1": + case "LEGGING1": + case "BOOT1": + y = legY + int.Parse(offsetLegs.Text) * 5; break; } //Maps imported Texture if auto texture is disabled From 29910b803ac1b700a903381423abdcc61138b950 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:31:28 -0400 Subject: [PATCH 64/79] Expanded valid skin check for import function --- .../Forms/Skins-And-Textures/generateModel.cs | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index ff525426..fdb4a891 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -1056,18 +1056,29 @@ namespace PckStudio OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "PNG Image Files | *.png"; openFileDialog.Title = "Select Skin Texture"; - if (openFileDialog.ShowDialog() == DialogResult.OK && Image.FromFile(openFileDialog.FileName).Width == Image.FromFile(openFileDialog.FileName).Height) + + if (openFileDialog.ShowDialog() == DialogResult.OK) // skins can only be a 1:1 ratio (base 64x64) or a 2:1 ratio (base 64x32) { - checkTextureGenerate.Checked = false; - Bitmap bitmap = new Bitmap(64, 64); - using (Graphics graphics = Graphics.FromImage(bitmap)) - { - graphics.DrawImage(Image.FromFile(openFileDialog.FileName), 0, 0, 64, 64); - graphics.InterpolationMode = InterpolationMode.NearestNeighbor; + using (var img = Image.FromFile(openFileDialog.FileName)) + { + if ((img.Width == img.Height || img.Height == img.Width / 2)) + { + checkTextureGenerate.Checked = false; + Bitmap bitmap = new Bitmap(img.Width, img.Width); + using (Graphics graphics = Graphics.FromImage(bitmap)) + { + graphics.DrawImage(img, 0, 0, img.Width, img.Height); + graphics.InterpolationMode = InterpolationMode.NearestNeighbor; + } + texturePreview.Image = bitmap; + render(); + } + else + { + MessageBox.Show(this, "Not a valid skin file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } - texturePreview.Image = bitmap; } - render(); } From 518f07768245106f73869215d83801e6d3874f71 Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:49:51 -0400 Subject: [PATCH 65/79] Fixed error with the generator template --- PCK-Studio/Forms/Skins-And-Textures/generateModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index fdb4a891..9123feec 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -1140,7 +1140,7 @@ namespace PckStudio modelBoxes.Add(new SkinBox("ARM0 -3 -2 -2 4 12 4 40 16 0 0 0")); modelBoxes.Add(new SkinBox("ARM1 -1 -2 -2 4 12 4 40 16 0 1 0")); modelBoxes.Add(new SkinBox("LEG0 -2 0 -2 4 12 4 0 16 0 0 0")); - modelBoxes.Add(new SkinBox("LEG1 -2 0 -2 4 12 0 16 0 1 0")); + modelBoxes.Add(new SkinBox("LEG1 -2 0 -2 4 12 4 0 16 0 1 0")); comboParent.Enabled = true; updateListView(); render(); From 2650e115df94422c21c52d06625300f447d8050b Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 20:56:42 -0400 Subject: [PATCH 66/79] GenerateModel now uses the texture immediately --- .../Forms/Skins-And-Textures/addnewskin.cs | 6 +---- .../generateModel.Designer.cs | 10 ++++----- .../Forms/Skins-And-Textures/generateModel.cs | 11 ++++------ .../Skins-And-Textures/generateModel.resx | 22 +++++++++---------- PCK-Studio/MainForm.cs | 2 +- 5 files changed, 21 insertions(+), 30 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index 76a66e8c..1216142c 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -283,14 +283,10 @@ namespace PckStudio if (MessageBox.Show("Create your own custom skin model?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1) != DialogResult.Yes) return; - PictureBox preview = new PictureBox(); //Creates new picture for generated model preview - generateModel generate = new generateModel(generatedModel, preview); + generateModel generate = new generateModel(generatedModel, Properties.Resources.classic_template); if (generate.ShowDialog() == DialogResult.OK) //Opens Model Generator Dialog { - //comboBoxSkinType.Items.Add("Custom"); //Adds skin preset to combobox - //comboBoxSkinType.Text = "Custom"; //Sets combo to custom preset - displayBox.Image = preview.Image; //Sets displayBox to created model preview try { using (FileStream stream = File.OpenRead(Application.StartupPath + "\\temp.png")) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs index d4ce7f7c..4d0b3833 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.Designer.cs @@ -370,8 +370,6 @@ // checkTextureGenerate // resources.ApplyResources(this.checkTextureGenerate, "checkTextureGenerate"); - this.checkTextureGenerate.Checked = true; - this.checkTextureGenerate.CheckState = System.Windows.Forms.CheckState.Checked; this.checkTextureGenerate.Name = "checkTextureGenerate"; this.checkTextureGenerate.Theme = MetroFramework.MetroThemeStyle.Dark; this.checkTextureGenerate.UseSelectable = true; @@ -503,13 +501,13 @@ // resources.ApplyResources(this.Z, "Z"); // - // Width + // _Width // - resources.ApplyResources(this._Width, "Width"); + resources.ApplyResources(this._Width, "_Width"); // - // Height + // _Height // - resources.ApplyResources(this._Height, "Height"); + resources.ApplyResources(this._Height, "_Height"); // // Length // diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 9123feec..c320f46f 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -10,7 +10,6 @@ using System.Collections; using System.IO; using Newtonsoft.Json; using MetroFramework.Forms; -using PckStudio.Classes.FileTypes; using PckStudio.Classes.Models; using System.Text.RegularExpressions; using OMI.Formats.Pck; @@ -20,7 +19,7 @@ namespace PckStudio [Obsolete] public partial class generateModel : MetroForm { - PictureBox skinPreview; + PictureBox skinPreview = new PictureBox(); eViewDirection direction = eViewDirection.front; @@ -111,14 +110,11 @@ namespace PckStudio } } - - public generateModel(PckFile.PCKProperties skinProperties, PictureBox preview) + public generateModel(PckFile.PCKProperties skinProperties, Image texture) { InitializeComponent(); boxes = skinProperties; - skinPreview = preview; - if (texturePreview.Image == null) - texturePreview.Image = new Bitmap(64, 64); + texturePreview.Image = texture; comboParent.Items.Clear(); ValidModelBoxTypes.ToList().ForEach(p => comboParent.Items.Add(p)); loadData(); @@ -287,6 +283,7 @@ namespace PckStudio (part.V + part.Size.Z) * gfx_scale, part.Size.X * gfx_scale, part.Size.Y * gfx_scale); + graphics.DrawImage(texturePreview.Image, destRect, srcRect, GraphicsUnit.Pixel); } else { diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx b/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx index 5c44268a..e5da709a 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.resx @@ -610,7 +610,7 @@ myTablePanel2 - PckStudio.Forms.MyTablePanel, PCK-Studio, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tabPage1 @@ -1413,16 +1413,16 @@ 30 - + Width - + Center - + Height - + Center @@ -3267,16 +3267,16 @@ System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Width + + _Width - + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Height + + _Height - + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 61a3c068..9a3426fc 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -424,7 +424,7 @@ namespace PckStudio { if (file.Properties.HasProperty("BOX")) { - using (generateModel generate = new generateModel(file.Properties, new PictureBox())) + using (generateModel generate = new generateModel(file.Properties, Image.FromStream(new MemoryStream(file.Data)))) if (generate.ShowDialog() == DialogResult.OK) { entryDataTextBox.Text = entryTypeTextBox.Text = string.Empty; From de52230aaa8e29d4516ac16b495180e076ad8adb Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 21:05:43 -0400 Subject: [PATCH 67/79] Removed console stuff --- PCK-Studio/Classes/Models/SkinBox.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/PCK-Studio/Classes/Models/SkinBox.cs b/PCK-Studio/Classes/Models/SkinBox.cs index eb27a7cf..40474734 100644 --- a/PCK-Studio/Classes/Models/SkinBox.cs +++ b/PCK-Studio/Classes/Models/SkinBox.cs @@ -22,8 +22,6 @@ namespace PckStudio.Classes.Models int old_length = arguments.Length - 1; - Console.WriteLine($"Old length - {old_length}"); - Array.Resize(ref arguments, 12); for (int x = 11; x > old_length; x--) From f772711eef221e848d79e9409db94bbfdc8d83cd Mon Sep 17 00:00:00 2001 From: MattNL Date: Tue, 25 Apr 2023 21:15:16 -0400 Subject: [PATCH 68/79] Fixed HD 64x32 skins not working in the Add Skin form --- PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs index 1216142c..b45db1c7 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/addnewskin.cs @@ -87,7 +87,7 @@ namespace PckStudio //comboBoxSkinType.Text = "Steve (64x64)"; skinType = eSkinType._64x64HD; } - else if (img.Width == img.Height / 2) // 64x32 HD + else if (img.Height == img.Width / 2) // 64x32 HD { anim.SetFlag(ANIM_EFFECTS.RESOLUTION_64x64, false); anim.SetFlag(ANIM_EFFECTS.SLIM_MODEL, false); From 0b697e92bb2fc58c5c988af6325e5bcc6efc5310 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 26 Apr 2023 09:01:37 -0400 Subject: [PATCH 69/79] Added missing (duplicate?) armor names Some 4J skins use these names but the ones prior work the same. Adding them just in case. --- .../Forms/Skins-And-Textures/generateModel.cs | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index c320f46f..f5ea6374 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -50,6 +50,7 @@ namespace PckStudio "JACKET", "SLEEVE0", "SLEEVE1", + "WAIST", "PANTS0", "PANTS1", "SOCK0", @@ -57,10 +58,10 @@ namespace PckStudio // Armor Parts "HELMET", - "CHEST", - "SHOULDER0", - "SHOULDER1", - "WAIST", + "CHEST", "BODYARMOR", + "SHOULDER0", "ARMARMOR0", + "SHOULDER1", "ARMARMOR0", + "BELT", "LEGGING0", "LEGGING1", "BOOT0", @@ -79,8 +80,10 @@ namespace PckStudio // Armor Offsets "HELMET", - "CHEST", - "WAIST", + "CHEST", "BODYARMOR", + "SHOULDER0", "ARMARMOR0", + "SHOULDER1", "ARMARMOR0", + "BELT", "LEGGING0", "LEGGING1", "BOOT0", @@ -234,10 +237,14 @@ namespace PckStudio case "BODY": case "JACKET": case "CHEST": + case "BODYARMOR": + case "BELT": + case "WAIST": y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": + case "ARMARMOR0": case "SLEEVE0": case "SHOULDER0": x -= 25; @@ -245,6 +252,7 @@ namespace PckStudio break; case "ARM1": + case "ARMARMOR1": case "SLEEVE1": case "SHOULDER1": x += 25; @@ -306,16 +314,21 @@ namespace PckStudio case "BODY": case "JACKET": case "CHEST": + case "BODYARMOR": + case "BELT": + case "WAIST": y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": + case "ARMARMOR0": case "SLEEVE0": case "SHOULDER0": y = armY + int.Parse(offsetArms.Text) * 5; break; case "ARM1": + case "ARMARMOR1": case "SLEEVE1": case "SHOULDER1": y = armY + int.Parse(offsetArms.Text) * 5; @@ -375,10 +388,14 @@ namespace PckStudio case "BODY": case "JACKET": case "CHEST": + case "BODYARMOR": + case "BELT": + case "WAIST": y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": + case "ARMARMOR0": case "SLEEVE0": case "SHOULDER0": x -= 25; @@ -386,6 +403,7 @@ namespace PckStudio break; case "ARM1": + case "ARMARMOR1": case "SLEEVE1": case "SHOULDER1": x += 25; @@ -447,16 +465,21 @@ namespace PckStudio case "BODY": case "JACKET": case "CHEST": + case "BODYARMOR": + case "BELT": + case "WAIST": y = headbodyY + int.Parse(offsetBody.Text) * 5; break; case "ARM0": + case "ARMARMOR0": case "SLEEVE0": case "SHOULDER0": y = armY + int.Parse(offsetArms.Text) * 5; break; case "ARM1": + case "ARMARMOR1": case "SLEEVE1": case "SHOULDER1": y = armY + int.Parse(offsetArms.Text) * 5; From 95664ad003a669091c63f3a6cd2e2ff6c8b4a046 Mon Sep 17 00:00:00 2001 From: MattNL Date: Wed, 26 Apr 2023 09:04:04 -0400 Subject: [PATCH 70/79] Fixed SkinBox not converting bool to int --- PCK-Studio/Classes/Models/SkinBox.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Classes/Models/SkinBox.cs b/PCK-Studio/Classes/Models/SkinBox.cs index 40474734..e27587cd 100644 --- a/PCK-Studio/Classes/Models/SkinBox.cs +++ b/PCK-Studio/Classes/Models/SkinBox.cs @@ -57,7 +57,7 @@ namespace PckStudio.Classes.Models public ValueTuple ToProperty() { - string value = $"{Type} {Pos.X} {Pos.Y} {Pos.Z} {Size.X} {Size.Y} {Size.Z} {U} {V} {HideWithArmor} {Mirror} {Scale}"; + string value = $"{Type} {Pos.X} {Pos.Y} {Pos.Z} {Size.X} {Size.Y} {Size.Z} {U} {V} {Convert.ToInt32(HideWithArmor)} {Convert.ToInt32(Mirror)} {Scale}"; return new ValueTuple("BOX", value.Replace(',', '.')); } } From d5a3d8fee4cf64adb847fd1eef148f8dcf23e7cf Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 26 Apr 2023 15:10:40 +0200 Subject: [PATCH 71/79] Update OMI-Lib commit ref to fix save issue iun loc editor --- Vendor/OMI-Lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 806fde8e..b5285431 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 806fde8e511de473b885fd7e7311e6f05c05ef47 +Subproject commit b52854318373efaa39f7c480c2b84a9f8d62a495 From 406dbc3ab0499884d701e0ffc2865c8c95b34698 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 29 Apr 2023 15:46:41 +0200 Subject: [PATCH 72/79] ImageExtensions.cs - Update 'ImageLayoutInfo' and fixed issue in 'CombineImages' --- .../Classes/Extensions/ImageExtensions.cs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index a41adb41..9037fa2d 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -28,9 +28,27 @@ namespace PckStudio.Extensions public ImageLayoutInfo(int width, int height, int index, ImageLayoutDirection layoutDirection) { - bool horizontal = layoutDirection == ImageLayoutDirection.Horizontal; - SectionSize = horizontal ? new Size(width, width) : new Size(height, height); - SectionPoint = horizontal ? new Point(0, index * width) : new Point(index * height, 0); + switch(layoutDirection) + { + case ImageLayoutDirection.Horizontal: + { + SectionSize = new Size(height,height); + SectionPoint = new Point(index * height, 0); + } + break; + + case ImageLayoutDirection.Vertical: + { + SectionSize = new Size(width, width); + SectionPoint = new Point(0, index * width); + } + break; + + default: + SectionSize = Size.Empty; + SectionPoint = new Point(-1, -1); + break; + } SectionArea = new Rectangle(SectionPoint, SectionSize); } } @@ -86,7 +104,7 @@ namespace PckStudio.Extensions { foreach (var (i, texture) in sources.enumerate()) { - var info = new ImageLayoutInfo(imageSize.Width, imageSize.Height, i, layoutDirection); + var info = new ImageLayoutInfo(texture.Width, texture.Height, i, layoutDirection); graphic.DrawImage(texture, info.SectionPoint); }; } From 92bc2a20ea8124d690ebbd57da9c14ce7a54c8d7 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 29 Apr 2023 15:48:30 +0200 Subject: [PATCH 73/79] AnimationEditor.cs - Fixed 'CreateImageList' having wrong 'ImageLayoutDirection' when parsing frame textures --- PCK-Studio/Forms/Editor/AnimationEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index b538538b..06970be2 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -49,7 +49,7 @@ namespace PckStudio.Forms.Editor using MemoryStream textureMem = new MemoryStream(animationFile.Data); var texture = new Bitmap(textureMem); - var frameTextures = texture.CreateImageList(ImageLayoutDirection.Horizontal); + var frameTextures = texture.CreateImageList(ImageLayoutDirection.Vertical); currentAnimation = animationFile.Properties.HasProperty("ANIM") ? new Animation(frameTextures, animationFile.Properties.GetPropertyValue("ANIM")) From 1db7e49b05f7e2a509072f4e79f09e7f3e412e5e Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 29 Apr 2023 15:50:44 +0200 Subject: [PATCH 74/79] Network.cs, Update.cs - Marked as Obsolete --- PCK-Studio/Classes/Networking/Network.cs | 1 + PCK-Studio/Classes/Networking/Update.cs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/PCK-Studio/Classes/Networking/Network.cs b/PCK-Studio/Classes/Networking/Network.cs index 2b232564..f35575ac 100644 --- a/PCK-Studio/Classes/Networking/Network.cs +++ b/PCK-Studio/Classes/Networking/Network.cs @@ -5,6 +5,7 @@ using System.Windows.Forms; namespace PckStudio.Classes.Networking { + [Obsolete] class Network { public static string Version = Application.ProductVersion; diff --git a/PCK-Studio/Classes/Networking/Update.cs b/PCK-Studio/Classes/Networking/Update.cs index 7c674e9d..4813ae45 100644 --- a/PCK-Studio/Classes/Networking/Update.cs +++ b/PCK-Studio/Classes/Networking/Update.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; namespace PckStudio.Classes.Networking { + [Obsolete] public enum UpdateResult { // Base Failure value @@ -19,6 +20,7 @@ namespace PckStudio.Classes.Networking UpdateFailure, } + [Obsolete] class UpdateOptions { public bool IsBeta { get; set; } @@ -45,6 +47,7 @@ namespace PckStudio.Classes.Networking } } + [Obsolete] static class Update { public static UpdateResult CheckForUpdate(UpdateOptions options) From f75b58a1ef9c36ac49a1ac8762e6b4bfdb001fe4 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 29 Apr 2023 17:34:09 +0200 Subject: [PATCH 75/79] ColorExtensions.cs - Renamed 'CalculateColorBlendValue' to 'BlendValues' --- PCK-Studio/Classes/Extensions/ColorExtensions.cs | 2 +- PCK-Studio/Classes/Extensions/ImageExtensions.cs | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PCK-Studio/Classes/Extensions/ColorExtensions.cs b/PCK-Studio/Classes/Extensions/ColorExtensions.cs index bdc42897..e2bb0ed7 100644 --- a/PCK-Studio/Classes/Extensions/ColorExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ColorExtensions.cs @@ -22,7 +22,7 @@ namespace PckStudio.Extensions return value; } - public static byte CalculateColorBlendValue(float source, float overlay, BlendMode blendType) + public static byte BlendValues(float source, float overlay, BlendMode blendType) { source = Clamp(source, 0.0f, 1.0f); overlay = Clamp(overlay, 0.0f, 1.0f); diff --git a/PCK-Studio/Classes/Extensions/ImageExtensions.cs b/PCK-Studio/Classes/Extensions/ImageExtensions.cs index 9037fa2d..10820471 100644 --- a/PCK-Studio/Classes/Extensions/ImageExtensions.cs +++ b/PCK-Studio/Classes/Extensions/ImageExtensions.cs @@ -179,9 +179,9 @@ namespace PckStudio.Extensions for (int k = 0; k < baseImageBuffer.Length; k += 4) { - baseImageBuffer[k + 0] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 0] / 255f, normalized.X, mode); - baseImageBuffer[k + 1] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 1] / 255f, normalized.Y, mode); - baseImageBuffer[k + 2] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 2] / 255f, normalized.Z, mode); + baseImageBuffer[k + 0] = ColorExtensions.BlendValues(baseImageBuffer[k + 0] / 255f, normalized.X, mode); + baseImageBuffer[k + 1] = ColorExtensions.BlendValues(baseImageBuffer[k + 1] / 255f, normalized.Y, mode); + baseImageBuffer[k + 2] = ColorExtensions.BlendValues(baseImageBuffer[k + 2] / 255f, normalized.Z, mode); } Bitmap bitmapResult = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb); @@ -216,9 +216,9 @@ namespace PckStudio.Extensions for (int k = 0; k < baseImageBuffer.Length && k < overlayImageBuffer.Length; k += 4) { - baseImageBuffer[k + 0] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 0] / 255f, overlayImageBuffer[k + 0] / 255f, mode); - baseImageBuffer[k + 1] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 1] / 255f, overlayImageBuffer[k + 1] / 255f, mode); - baseImageBuffer[k + 2] = ColorExtensions.CalculateColorBlendValue(baseImageBuffer[k + 2] / 255f, overlayImageBuffer[k + 2] / 255f, mode); + baseImageBuffer[k + 0] = ColorExtensions.BlendValues(baseImageBuffer[k + 0] / 255f, overlayImageBuffer[k + 0] / 255f, mode); + baseImageBuffer[k + 1] = ColorExtensions.BlendValues(baseImageBuffer[k + 1] / 255f, overlayImageBuffer[k + 1] / 255f, mode); + baseImageBuffer[k + 2] = ColorExtensions.BlendValues(baseImageBuffer[k + 2] / 255f, overlayImageBuffer[k + 2] / 255f, mode); } Bitmap bitmapResult = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb); From 1420f8a4916748e47fbd7ec05669fe61610b01db Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 29 Apr 2023 19:14:06 +0200 Subject: [PATCH 76/79] Binka.cs - Implemented 'ToWav' properly --- .gitmodules | 3 + PCK-Studio/Classes/FileTypes/Binka.cs | 140 ++--- PCK-Studio/Classes/Misc/FileCacher.cs | 51 ++ .../Forms/Editor/AudioEditor.Designer.cs | 545 +++++++++--------- PCK-Studio/Forms/Editor/AudioEditor.resx | 150 ++--- PCK-Studio/PckStudio.csproj | 5 + PCK_Studio.sln | 15 + Vendor/SharpMss32 | 1 + 8 files changed, 468 insertions(+), 442 deletions(-) create mode 100644 PCK-Studio/Classes/Misc/FileCacher.cs create mode 160000 Vendor/SharpMss32 diff --git a/.gitmodules b/.gitmodules index ded44002..39456fd0 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "OMI-Lib"] path = Vendor/OMI-Lib url = https://github.com/PhoenixARC/-OMI-Filetype-Library.git +[submodule "Vendor/SharpMss32"] + path = Vendor/SharpMss32 + url = https://github.com/NessieHax/SharpMss32.git diff --git a/PCK-Studio/Classes/FileTypes/Binka.cs b/PCK-Studio/Classes/FileTypes/Binka.cs index 67e731dc..26776e15 100644 --- a/PCK-Studio/Classes/FileTypes/Binka.cs +++ b/PCK-Studio/Classes/FileTypes/Binka.cs @@ -2,43 +2,22 @@ using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; +using System.Web.Caching; +using PckStudio.Classes.Misc; +using SharpMSS; namespace PckStudio.Classes { internal static class Binka { - private class LibHandle - { - [DllImport("kernel32.dll")] - public static extern IntPtr LoadLibrary(string lpFileName); - - [DllImport("kernel32.dll")] - public static extern int FreeLibrary(IntPtr library); - - private IntPtr libHandle; - - public IntPtr Handle => libHandle; - - public LibHandle(string libraryPath) - { - libHandle = LoadLibrary(libraryPath); - } - - ~LibHandle() - { - FreeLibrary(libHandle); - } - } - - private static string dataCache = Program.AppDataCache; - - public static uint LastAILErrorCode = 0xffffffff; + private static FileCacher cacher = new FileCacher(Program.AppDataCache); public static int FromWav(string inputFilepath, string outputFilepath, int compressionLevel) { - var process = Process.Start(new ProcessStartInfo + cacher.Cache(Properties.Resources.binka_encode, "binka_encode.exe"); + var process = Process.Start(new ProcessStartInfo { - FileName = GetAndCacheResource("binka_encode.exe"), + FileName = cacher.GetCachedFilepath("binka_encode.exe"), Arguments = $"\"{inputFilepath}\" \"{outputFilepath}\" -s -b{compressionLevel}", UseShellExecute = true, CreateNoWindow = true, @@ -48,94 +27,45 @@ namespace PckStudio.Classes return process.ExitCode; } - public static unsafe void ToWav(string inputFilename, string outputFilepath) + public static void ToWav(string inputFilepath, string outputFilepath) { - // handle should be closed when function gets out of scope - LibHandle mss32LibHandle = new LibHandle(GetAndCacheResource("mss32.dll")); - - string ext = Path.GetExtension(inputFilename).ToLower(); - switch (ext) + if (!inputFilepath.EndsWith(".binka")) { - case ".binka": - case ".wav": - break; - default: - throw new NotSupportedException(nameof(ext)+":"+ext); + throw new Exception("Not a Bink Audio file."); } - string outputDirectory = Path.GetDirectoryName(outputFilepath); - Directory.CreateDirectory(outputDirectory); - string destinationFilepath = Path.Combine(outputDirectory, Path.GetFileName(inputFilename)); - byte[] inputFiledata = File.ReadAllBytes(inputFilename); - Debug.WriteLine($"{nameof(inputFiledata)}: {inputFiledata.Length}"); + cacher.Cache(Properties.Resources.mss32, "mss32.dll"); + cacher.Cache(Properties.Resources.binkawin, "binkawin.asi"); - AILInternalCalls.SetRedistDirectory("."); - AILInternalCalls.Startup(); // __fastcall + LibHandle mss32LibHandle = new LibHandle(cacher.GetCachedFilepath("mss32.dll")); + + string destinationFilepath = Path.Combine( + Path.GetDirectoryName(outputFilepath), + Path.GetFileNameWithoutExtension(inputFilepath) + ".wav"); + + AILAPI.SetRedistDirectory(cacher.CacheDirectory.Replace('\\', '/')); + + RIBAPI.LoadApplicationProviders("*.asi"); + + byte[] inputFiledata = File.ReadAllBytes(inputFilepath); int resultBufferSize = 0; IntPtr resultBuffer = new IntPtr(); - // crash happens in AIL_decompress_ASI - LastAILErrorCode = (uint)AILInternalCalls.DecompressASI(inputFiledata, inputFiledata.Length, ".binka", resultBuffer, &resultBufferSize); - Debug.WriteLine("AIL Error Code: " + LastAILErrorCode.ToString()); + if (AILAPI.DecompressASI(inputFiledata, inputFiledata.Length, ".binka", ref resultBuffer, ref resultBufferSize, null) == 0) + { + Console.WriteLine(AILAPI.GetLastError()); + return; + } byte[] buffer = new byte[resultBufferSize]; Marshal.Copy(resultBuffer, buffer, 0, resultBufferSize); - AILInternalCalls.MemFreeLock(resultBuffer); - AILInternalCalls.Shutdown(); - File.WriteAllBytes(destinationFilepath, buffer); - } + + AILAPI.MemFreeLock(resultBuffer); + RIBAPI.FreeProviderLibrary(0); // free all loaded providers + AILAPI.Shutdown(); - // Move to a cache class ? - private static string GetAndCacheResource(string resourceName) - { - _ = resourceName ?? throw new ArgumentNullException(nameof(resourceName)); - string destinationFilepath = Path.Combine(dataCache, resourceName); - if (!File.Exists(destinationFilepath)) - { - byte[] resourceData = ExtractResource(resourceName); - using (FileStream fsDst = File.OpenWrite(destinationFilepath)) - { - fsDst.Write(resourceData, 0, resourceData.Length); - } - } - return destinationFilepath; - } + File.WriteAllBytes(destinationFilepath, buffer); - internal static byte[] ExtractResource(string resourceName) - { - byte[] resourceData = (byte[])Properties.Resources.ResourceManager.GetObject(Path.GetFileNameWithoutExtension(resourceName)); - return resourceData; - } - - private class AILInternalCalls - { - public delegate int AIL_decomp_func(); - - [DllImport("mss32.dll", EntryPoint = "_AIL_decompress_ASI@24")] - public unsafe static extern int DecompressASI( - [MarshalAs(UnmanagedType.LPArray)] byte[] indata, - int insize, - [MarshalAs(UnmanagedType.LPStr)] string ext, - IntPtr result, - int *resultSize, - [MarshalAs(UnmanagedType.FunctionPtr)] AIL_decomp_func func = null); - - [DllImport("mss32.dll", EntryPoint = "_AIL_last_error@0")] - [return: MarshalAs(UnmanagedType.LPStr)] - public static extern string LastError(); - - [DllImport("mss32.dll", EntryPoint = "_AIL_set_redist_directory@4")] - [return: MarshalAs(UnmanagedType.LPStr)] - public static extern string SetRedistDirectory([MarshalAs(UnmanagedType.LPStr)] string redistDir); - - [DllImport("mss32.dll", EntryPoint = "_AIL_mem_free_lock@4")] - public static extern void MemFreeLock(IntPtr ptr); - - [DllImport("mss32.dll", EntryPoint = "_AIL_startup@0")] - public static extern int Startup(); - - [DllImport("mss32.dll", EntryPoint = "_AIL_shutdown@0")] - public static extern int Shutdown(); - } - } + } + } } diff --git a/PCK-Studio/Classes/Misc/FileCacher.cs b/PCK-Studio/Classes/Misc/FileCacher.cs new file mode 100644 index 00000000..e2fb623a --- /dev/null +++ b/PCK-Studio/Classes/Misc/FileCacher.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; + +namespace PckStudio.Classes.Misc +{ + internal class FileCacher + { + private string _cacheDirectory; + + public string CacheDirectory => _cacheDirectory; + + public FileCacher(string cacheDirectory) + { + _cacheDirectory = cacheDirectory; + } + + public bool HasFileCached(string filename) + { + string destinationFilepath = Path.Combine(_cacheDirectory, filename); + return File.Exists(destinationFilepath); + } + + public string GetCachedFilepath(string filename) + { + if (HasFileCached(filename)) + { + return Path.Combine(_cacheDirectory, filename); + } + return null; + } + + /// + /// Caches data if the doesn't already exists in the + /// + /// Data to cache + /// Filename with extension + /// + public void Cache(byte[] data, string filename) + { + _ = filename ?? throw new ArgumentNullException("filename"); + string destinationFilepath = Path.Combine(_cacheDirectory, filename); + if (!File.Exists(destinationFilepath)) + { + using (FileStream fsDst = File.OpenWrite(destinationFilepath)) + { + fsDst.Write(data, 0, data.Length); + } + } + } + } +} diff --git a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs index bd643284..a9011a57 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/AudioEditor.Designer.cs @@ -29,304 +29,312 @@ namespace PckStudio.Forms.Editor ///
private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AudioEditor)); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.addCategoryStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.removeCategoryStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.changeCategoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.catImages = new System.Windows.Forms.ImageList(this.components); - this.menuStrip = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.creditsEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteUnusedBINKAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openDataFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.bulkReplaceExistingTracksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.organizeTracksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToAddSongsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.whatAreTheCategoriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToEditCreditsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.optimizeDataFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.bINKACompressionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.treeView2 = new System.Windows.Forms.TreeView(); - this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.addEntryMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.removeEntryMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.verifyFileLocationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.playOverworldInCreative = new MetroFramework.Controls.MetroCheckBox(); - this.compressionUpDown = new System.Windows.Forms.NumericUpDown(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.contextMenuStrip1.SuspendLayout(); - this.menuStrip.SuspendLayout(); - this.contextMenuStrip2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.compressionUpDown)).BeginInit(); - this.SuspendLayout(); - // - // treeView1 - // - resources.ApplyResources(this.treeView1, "treeView1"); - this.treeView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.treeView1.ContextMenuStrip = this.contextMenuStrip1; - this.treeView1.ForeColor = System.Drawing.Color.White; - this.treeView1.ImageList = this.catImages; - this.treeView1.LabelEdit = true; - this.treeView1.Name = "treeView1"; - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); - this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); - // - // contextMenuStrip1 - // - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AudioEditor)); + this.treeView1 = new System.Windows.Forms.TreeView(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addCategoryStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeCategoryStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.changeCategoryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.catImages = new System.Windows.Forms.ImageList(this.components); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.creditsEditorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteUnusedBINKAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openDataFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bulkReplaceExistingTracksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.organizeTracksToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToAddSongsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.whatAreTheCategoriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToEditCreditsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.optimizeDataFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.bINKACompressionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.treeView2 = new System.Windows.Forms.TreeView(); + this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addEntryMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.removeEntryMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.verifyFileLocationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.playOverworldInCreative = new MetroFramework.Controls.MetroCheckBox(); + this.compressionUpDown = new System.Windows.Forms.NumericUpDown(); + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.convertToWAVToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip1.SuspendLayout(); + this.menuStrip.SuspendLayout(); + this.contextMenuStrip2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.compressionUpDown)).BeginInit(); + this.SuspendLayout(); + // + // treeView1 + // + resources.ApplyResources(this.treeView1, "treeView1"); + this.treeView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.treeView1.ContextMenuStrip = this.contextMenuStrip1; + this.treeView1.ForeColor = System.Drawing.Color.White; + this.treeView1.ImageList = this.catImages; + this.treeView1.LabelEdit = true; + this.treeView1.Name = "treeView1"; + this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addCategoryStripMenuItem, this.removeCategoryStripMenuItem, this.changeCategoryToolStripMenuItem}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); - // - // addCategoryStripMenuItem - // - resources.ApplyResources(this.addCategoryStripMenuItem, "addCategoryStripMenuItem"); - this.addCategoryStripMenuItem.Name = "addCategoryStripMenuItem"; - this.addCategoryStripMenuItem.Click += new System.EventHandler(this.addCategoryStripMenuItem_Click); - // - // removeCategoryStripMenuItem - // - this.removeCategoryStripMenuItem.Name = "removeCategoryStripMenuItem"; - resources.ApplyResources(this.removeCategoryStripMenuItem, "removeCategoryStripMenuItem"); - this.removeCategoryStripMenuItem.Click += new System.EventHandler(this.removeCategoryStripMenuItem_Click); - // - // changeCategoryToolStripMenuItem - // - this.changeCategoryToolStripMenuItem.Name = "changeCategoryToolStripMenuItem"; - resources.ApplyResources(this.changeCategoryToolStripMenuItem, "changeCategoryToolStripMenuItem"); - this.changeCategoryToolStripMenuItem.Click += new System.EventHandler(this.setCategoryToolStripMenuItem_Click); - // - // catImages - // - this.catImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("catImages.ImageStream"))); - this.catImages.TransparentColor = System.Drawing.Color.Transparent; - this.catImages.Images.SetKeyName(0, "0_overworld.png"); - this.catImages.Images.SetKeyName(1, "1_nether.png"); - this.catImages.Images.SetKeyName(2, "2_end.png"); - this.catImages.Images.SetKeyName(3, "4_creative.png"); - this.catImages.Images.SetKeyName(4, "3_menu.png"); - this.catImages.Images.SetKeyName(5, "5_mg01.png"); - this.catImages.Images.SetKeyName(6, "6_mg02.png"); - this.catImages.Images.SetKeyName(7, "7_mg03.png"); - this.catImages.Images.SetKeyName(8, "8_unused.png"); - // - // menuStrip - // - resources.ApplyResources(this.menuStrip, "menuStrip"); - this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextMenuStrip1.Name = "contextMenuStrip1"; + resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1"); + // + // addCategoryStripMenuItem + // + resources.ApplyResources(this.addCategoryStripMenuItem, "addCategoryStripMenuItem"); + this.addCategoryStripMenuItem.Name = "addCategoryStripMenuItem"; + this.addCategoryStripMenuItem.Click += new System.EventHandler(this.addCategoryStripMenuItem_Click); + // + // removeCategoryStripMenuItem + // + this.removeCategoryStripMenuItem.Name = "removeCategoryStripMenuItem"; + resources.ApplyResources(this.removeCategoryStripMenuItem, "removeCategoryStripMenuItem"); + this.removeCategoryStripMenuItem.Click += new System.EventHandler(this.removeCategoryStripMenuItem_Click); + // + // changeCategoryToolStripMenuItem + // + this.changeCategoryToolStripMenuItem.Name = "changeCategoryToolStripMenuItem"; + resources.ApplyResources(this.changeCategoryToolStripMenuItem, "changeCategoryToolStripMenuItem"); + this.changeCategoryToolStripMenuItem.Click += new System.EventHandler(this.setCategoryToolStripMenuItem_Click); + // + // catImages + // + this.catImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("catImages.ImageStream"))); + this.catImages.TransparentColor = System.Drawing.Color.Transparent; + this.catImages.Images.SetKeyName(0, "0_overworld.png"); + this.catImages.Images.SetKeyName(1, "1_nether.png"); + this.catImages.Images.SetKeyName(2, "2_end.png"); + this.catImages.Images.SetKeyName(3, "4_creative.png"); + this.catImages.Images.SetKeyName(4, "3_menu.png"); + this.catImages.Images.SetKeyName(5, "5_mg01.png"); + this.catImages.Images.SetKeyName(6, "6_mg02.png"); + this.catImages.Images.SetKeyName(7, "7_mg03.png"); + this.catImages.Images.SetKeyName(8, "8_unused.png"); + // + // menuStrip + // + resources.ApplyResources(this.menuStrip, "menuStrip"); + this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, this.toolsToolStripMenuItem, this.helpToolStripMenuItem}); - this.menuStrip.Name = "menuStrip"; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuStrip.Name = "menuStrip"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.saveToolStripMenuItem1}); - this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); - // - // saveToolStripMenuItem1 - // - resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); - this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; - this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click); - // - // toolsToolStripMenuItem - // - this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); + // + // saveToolStripMenuItem1 + // + resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); + this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; + this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem1_Click); + // + // toolsToolStripMenuItem + // + this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.creditsEditorToolStripMenuItem, this.deleteUnusedBINKAsToolStripMenuItem, this.openDataFolderToolStripMenuItem, this.bulkReplaceExistingTracksToolStripMenuItem, this.organizeTracksToolStripMenuItem}); - this.toolsToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; - resources.ApplyResources(this.toolsToolStripMenuItem, "toolsToolStripMenuItem"); - // - // creditsEditorToolStripMenuItem - // - this.creditsEditorToolStripMenuItem.Name = "creditsEditorToolStripMenuItem"; - resources.ApplyResources(this.creditsEditorToolStripMenuItem, "creditsEditorToolStripMenuItem"); - this.creditsEditorToolStripMenuItem.Click += new System.EventHandler(this.creditsEditorToolStripMenuItem_Click); - // - // deleteUnusedBINKAsToolStripMenuItem - // - this.deleteUnusedBINKAsToolStripMenuItem.Name = "deleteUnusedBINKAsToolStripMenuItem"; - resources.ApplyResources(this.deleteUnusedBINKAsToolStripMenuItem, "deleteUnusedBINKAsToolStripMenuItem"); - this.deleteUnusedBINKAsToolStripMenuItem.Click += new System.EventHandler(this.deleteUnusedBINKAsToolStripMenuItem_Click); - // - // openDataFolderToolStripMenuItem - // - this.openDataFolderToolStripMenuItem.Name = "openDataFolderToolStripMenuItem"; - resources.ApplyResources(this.openDataFolderToolStripMenuItem, "openDataFolderToolStripMenuItem"); - this.openDataFolderToolStripMenuItem.Click += new System.EventHandler(this.openDataFolderToolStripMenuItem_Click); - // - // bulkReplaceExistingTracksToolStripMenuItem - // - this.bulkReplaceExistingTracksToolStripMenuItem.Name = "bulkReplaceExistingTracksToolStripMenuItem"; - resources.ApplyResources(this.bulkReplaceExistingTracksToolStripMenuItem, "bulkReplaceExistingTracksToolStripMenuItem"); - this.bulkReplaceExistingTracksToolStripMenuItem.Click += new System.EventHandler(this.bulkReplaceExistingFilesToolStripMenuItem_Click); - // - // organizeTracksToolStripMenuItem - // - this.organizeTracksToolStripMenuItem.Name = "organizeTracksToolStripMenuItem"; - resources.ApplyResources(this.organizeTracksToolStripMenuItem, "organizeTracksToolStripMenuItem"); - this.organizeTracksToolStripMenuItem.Click += new System.EventHandler(this.organizeTracksToolStripMenuItem_Click); - // - // helpToolStripMenuItem - // - this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolsToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + resources.ApplyResources(this.toolsToolStripMenuItem, "toolsToolStripMenuItem"); + // + // creditsEditorToolStripMenuItem + // + this.creditsEditorToolStripMenuItem.Name = "creditsEditorToolStripMenuItem"; + resources.ApplyResources(this.creditsEditorToolStripMenuItem, "creditsEditorToolStripMenuItem"); + this.creditsEditorToolStripMenuItem.Click += new System.EventHandler(this.creditsEditorToolStripMenuItem_Click); + // + // deleteUnusedBINKAsToolStripMenuItem + // + this.deleteUnusedBINKAsToolStripMenuItem.Name = "deleteUnusedBINKAsToolStripMenuItem"; + resources.ApplyResources(this.deleteUnusedBINKAsToolStripMenuItem, "deleteUnusedBINKAsToolStripMenuItem"); + this.deleteUnusedBINKAsToolStripMenuItem.Click += new System.EventHandler(this.deleteUnusedBINKAsToolStripMenuItem_Click); + // + // openDataFolderToolStripMenuItem + // + this.openDataFolderToolStripMenuItem.Name = "openDataFolderToolStripMenuItem"; + resources.ApplyResources(this.openDataFolderToolStripMenuItem, "openDataFolderToolStripMenuItem"); + this.openDataFolderToolStripMenuItem.Click += new System.EventHandler(this.openDataFolderToolStripMenuItem_Click); + // + // bulkReplaceExistingTracksToolStripMenuItem + // + this.bulkReplaceExistingTracksToolStripMenuItem.Name = "bulkReplaceExistingTracksToolStripMenuItem"; + resources.ApplyResources(this.bulkReplaceExistingTracksToolStripMenuItem, "bulkReplaceExistingTracksToolStripMenuItem"); + this.bulkReplaceExistingTracksToolStripMenuItem.Click += new System.EventHandler(this.bulkReplaceExistingFilesToolStripMenuItem_Click); + // + // organizeTracksToolStripMenuItem + // + this.organizeTracksToolStripMenuItem.Name = "organizeTracksToolStripMenuItem"; + resources.ApplyResources(this.organizeTracksToolStripMenuItem, "organizeTracksToolStripMenuItem"); + this.organizeTracksToolStripMenuItem.Click += new System.EventHandler(this.organizeTracksToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.howToAddSongsToolStripMenuItem, this.whatAreTheCategoriesToolStripMenuItem, this.howToEditCreditsToolStripMenuItem, this.optimizeDataFolderToolStripMenuItem, this.bINKACompressionToolStripMenuItem}); - this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.White; - this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); - // - // howToAddSongsToolStripMenuItem - // - this.howToAddSongsToolStripMenuItem.Name = "howToAddSongsToolStripMenuItem"; - resources.ApplyResources(this.howToAddSongsToolStripMenuItem, "howToAddSongsToolStripMenuItem"); - this.howToAddSongsToolStripMenuItem.Click += new System.EventHandler(this.howToAddSongsToolStripMenuItem_Click); - // - // whatAreTheCategoriesToolStripMenuItem - // - this.whatAreTheCategoriesToolStripMenuItem.Name = "whatAreTheCategoriesToolStripMenuItem"; - resources.ApplyResources(this.whatAreTheCategoriesToolStripMenuItem, "whatAreTheCategoriesToolStripMenuItem"); - this.whatAreTheCategoriesToolStripMenuItem.Click += new System.EventHandler(this.whatAreTheCategoriesToolStripMenuItem_Click); - // - // howToEditCreditsToolStripMenuItem - // - this.howToEditCreditsToolStripMenuItem.Name = "howToEditCreditsToolStripMenuItem"; - resources.ApplyResources(this.howToEditCreditsToolStripMenuItem, "howToEditCreditsToolStripMenuItem"); - this.howToEditCreditsToolStripMenuItem.Click += new System.EventHandler(this.howToEditCreditsToolStripMenuItem_Click); - // - // optimizeDataFolderToolStripMenuItem - // - this.optimizeDataFolderToolStripMenuItem.Name = "optimizeDataFolderToolStripMenuItem"; - resources.ApplyResources(this.optimizeDataFolderToolStripMenuItem, "optimizeDataFolderToolStripMenuItem"); - this.optimizeDataFolderToolStripMenuItem.Click += new System.EventHandler(this.optimizeDataFolderToolStripMenuItem_Click); - // - // bINKACompressionToolStripMenuItem - // - this.bINKACompressionToolStripMenuItem.Name = "bINKACompressionToolStripMenuItem"; - resources.ApplyResources(this.bINKACompressionToolStripMenuItem, "bINKACompressionToolStripMenuItem"); - this.bINKACompressionToolStripMenuItem.Click += new System.EventHandler(this.BINKACompressionToolStripMenuItem_Click); - // - // treeView2 - // - this.treeView2.AllowDrop = true; - resources.ApplyResources(this.treeView2, "treeView2"); - this.treeView2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.treeView2.ContextMenuStrip = this.contextMenuStrip2; - this.treeView2.ForeColor = System.Drawing.Color.White; - this.treeView2.Name = "treeView2"; - this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.Binka_DragDrop); - this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView2_DragEnter); - this.treeView2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); - // - // contextMenuStrip2 - // - this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.White; + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); + // + // howToAddSongsToolStripMenuItem + // + this.howToAddSongsToolStripMenuItem.Name = "howToAddSongsToolStripMenuItem"; + resources.ApplyResources(this.howToAddSongsToolStripMenuItem, "howToAddSongsToolStripMenuItem"); + this.howToAddSongsToolStripMenuItem.Click += new System.EventHandler(this.howToAddSongsToolStripMenuItem_Click); + // + // whatAreTheCategoriesToolStripMenuItem + // + this.whatAreTheCategoriesToolStripMenuItem.Name = "whatAreTheCategoriesToolStripMenuItem"; + resources.ApplyResources(this.whatAreTheCategoriesToolStripMenuItem, "whatAreTheCategoriesToolStripMenuItem"); + this.whatAreTheCategoriesToolStripMenuItem.Click += new System.EventHandler(this.whatAreTheCategoriesToolStripMenuItem_Click); + // + // howToEditCreditsToolStripMenuItem + // + this.howToEditCreditsToolStripMenuItem.Name = "howToEditCreditsToolStripMenuItem"; + resources.ApplyResources(this.howToEditCreditsToolStripMenuItem, "howToEditCreditsToolStripMenuItem"); + this.howToEditCreditsToolStripMenuItem.Click += new System.EventHandler(this.howToEditCreditsToolStripMenuItem_Click); + // + // optimizeDataFolderToolStripMenuItem + // + this.optimizeDataFolderToolStripMenuItem.Name = "optimizeDataFolderToolStripMenuItem"; + resources.ApplyResources(this.optimizeDataFolderToolStripMenuItem, "optimizeDataFolderToolStripMenuItem"); + this.optimizeDataFolderToolStripMenuItem.Click += new System.EventHandler(this.optimizeDataFolderToolStripMenuItem_Click); + // + // bINKACompressionToolStripMenuItem + // + this.bINKACompressionToolStripMenuItem.Name = "bINKACompressionToolStripMenuItem"; + resources.ApplyResources(this.bINKACompressionToolStripMenuItem, "bINKACompressionToolStripMenuItem"); + this.bINKACompressionToolStripMenuItem.Click += new System.EventHandler(this.BINKACompressionToolStripMenuItem_Click); + // + // treeView2 + // + this.treeView2.AllowDrop = true; + resources.ApplyResources(this.treeView2, "treeView2"); + this.treeView2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.treeView2.ContextMenuStrip = this.contextMenuStrip2; + this.treeView2.ForeColor = System.Drawing.Color.White; + this.treeView2.Name = "treeView2"; + this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.Binka_DragDrop); + this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView2_DragEnter); + this.treeView2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView2_KeyDown); + // + // contextMenuStrip2 + // + this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addEntryMenuItem, this.removeEntryMenuItem, - this.verifyFileLocationToolStripMenuItem}); - this.contextMenuStrip2.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuStrip2, "contextMenuStrip2"); - // - // addEntryMenuItem - // - resources.ApplyResources(this.addEntryMenuItem, "addEntryMenuItem"); - this.addEntryMenuItem.Name = "addEntryMenuItem"; - this.addEntryMenuItem.Click += new System.EventHandler(this.addEntryMenuItem_Click); - // - // removeEntryMenuItem - // - this.removeEntryMenuItem.Name = "removeEntryMenuItem"; - resources.ApplyResources(this.removeEntryMenuItem, "removeEntryMenuItem"); - this.removeEntryMenuItem.Click += new System.EventHandler(this.removeEntryMenuItem_Click); - // - // verifyFileLocationToolStripMenuItem - // - this.verifyFileLocationToolStripMenuItem.Name = "verifyFileLocationToolStripMenuItem"; - resources.ApplyResources(this.verifyFileLocationToolStripMenuItem, "verifyFileLocationToolStripMenuItem"); - this.verifyFileLocationToolStripMenuItem.Click += new System.EventHandler(this.verifyFileLocationToolStripMenuItem_Click); - // - // playOverworldInCreative - // - resources.ApplyResources(this.playOverworldInCreative, "playOverworldInCreative"); - this.playOverworldInCreative.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.playOverworldInCreative.ForeColor = System.Drawing.SystemColors.Window; - this.playOverworldInCreative.Name = "playOverworldInCreative"; - this.playOverworldInCreative.Theme = MetroFramework.MetroThemeStyle.Dark; - this.playOverworldInCreative.UseCustomBackColor = true; - this.playOverworldInCreative.UseCustomForeColor = true; - this.playOverworldInCreative.UseSelectable = true; - // - // compressionUpDown - // - this.compressionUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.compressionUpDown.ForeColor = System.Drawing.SystemColors.Window; - resources.ApplyResources(this.compressionUpDown, "compressionUpDown"); - this.compressionUpDown.Maximum = new decimal(new int[] { + this.verifyFileLocationToolStripMenuItem, + this.convertToWAVToolStripMenuItem}); + this.contextMenuStrip2.Name = "contextMenuStrip1"; + resources.ApplyResources(this.contextMenuStrip2, "contextMenuStrip2"); + // + // addEntryMenuItem + // + resources.ApplyResources(this.addEntryMenuItem, "addEntryMenuItem"); + this.addEntryMenuItem.Name = "addEntryMenuItem"; + this.addEntryMenuItem.Click += new System.EventHandler(this.addEntryMenuItem_Click); + // + // removeEntryMenuItem + // + this.removeEntryMenuItem.Name = "removeEntryMenuItem"; + resources.ApplyResources(this.removeEntryMenuItem, "removeEntryMenuItem"); + this.removeEntryMenuItem.Click += new System.EventHandler(this.removeEntryMenuItem_Click); + // + // verifyFileLocationToolStripMenuItem + // + this.verifyFileLocationToolStripMenuItem.Name = "verifyFileLocationToolStripMenuItem"; + resources.ApplyResources(this.verifyFileLocationToolStripMenuItem, "verifyFileLocationToolStripMenuItem"); + this.verifyFileLocationToolStripMenuItem.Click += new System.EventHandler(this.verifyFileLocationToolStripMenuItem_Click); + // + // playOverworldInCreative + // + resources.ApplyResources(this.playOverworldInCreative, "playOverworldInCreative"); + this.playOverworldInCreative.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.playOverworldInCreative.ForeColor = System.Drawing.SystemColors.Window; + this.playOverworldInCreative.Name = "playOverworldInCreative"; + this.playOverworldInCreative.Theme = MetroFramework.MetroThemeStyle.Dark; + this.playOverworldInCreative.UseCustomBackColor = true; + this.playOverworldInCreative.UseCustomForeColor = true; + this.playOverworldInCreative.UseSelectable = true; + // + // compressionUpDown + // + this.compressionUpDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.compressionUpDown.ForeColor = System.Drawing.SystemColors.Window; + resources.ApplyResources(this.compressionUpDown, "compressionUpDown"); + this.compressionUpDown.Maximum = new decimal(new int[] { 9, 0, 0, 0}); - this.compressionUpDown.Minimum = new decimal(new int[] { + this.compressionUpDown.Minimum = new decimal(new int[] { 1, 0, 0, 0}); - this.compressionUpDown.Name = "compressionUpDown"; - this.compressionUpDown.Value = new decimal(new int[] { + this.compressionUpDown.Name = "compressionUpDown"; + this.compressionUpDown.Value = new decimal(new int[] { 4, 0, 0, 0}); - // - // metroLabel1 - // - resources.ApplyResources(this.metroLabel1, "metroLabel1"); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // AudioEditor - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.metroLabel1); - this.Controls.Add(this.compressionUpDown); - this.Controls.Add(this.playOverworldInCreative); - this.Controls.Add(this.treeView1); - this.Controls.Add(this.treeView2); - this.Controls.Add(this.menuStrip); - this.Name = "AudioEditor"; - this.Style = MetroFramework.MetroColorStyle.Silver; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.AudioEditor_FormClosed); - this.Shown += new System.EventHandler(this.AudioEditor_Shown); - this.contextMenuStrip1.ResumeLayout(false); - this.menuStrip.ResumeLayout(false); - this.menuStrip.PerformLayout(); - this.contextMenuStrip2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.compressionUpDown)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + // + // metroLabel1 + // + resources.ApplyResources(this.metroLabel1, "metroLabel1"); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // convertToWAVToolStripMenuItem + // + this.convertToWAVToolStripMenuItem.Name = "convertToWAVToolStripMenuItem"; + resources.ApplyResources(this.convertToWAVToolStripMenuItem, "convertToWAVToolStripMenuItem"); + this.convertToWAVToolStripMenuItem.Click += new System.EventHandler(this.convertToWAVToolStripMenuItem_Click); + // + // AudioEditor + // + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.metroLabel1); + this.Controls.Add(this.compressionUpDown); + this.Controls.Add(this.playOverworldInCreative); + this.Controls.Add(this.treeView1); + this.Controls.Add(this.treeView2); + this.Controls.Add(this.menuStrip); + this.Name = "AudioEditor"; + this.Style = MetroFramework.MetroColorStyle.Silver; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.AudioEditor_FormClosed); + this.Shown += new System.EventHandler(this.AudioEditor_Shown); + this.contextMenuStrip1.ResumeLayout(false); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.contextMenuStrip2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.compressionUpDown)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -361,5 +369,6 @@ namespace PckStudio.Forms.Editor private System.Windows.Forms.ToolStripMenuItem bulkReplaceExistingTracksToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem changeCategoryToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem organizeTracksToolStripMenuItem; - } + private System.Windows.Forms.ToolStripMenuItem convertToWAVToolStripMenuItem; + } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/AudioEditor.resx b/PCK-Studio/Forms/Editor/AudioEditor.resx index ea023737..e032d6ce 100644 --- a/PCK-Studio/Forms/Editor/AudioEditor.resx +++ b/PCK-Studio/Forms/Editor/AudioEditor.resx @@ -125,32 +125,6 @@ 127, 8 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x - DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5 - jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC - - - - 168, 22 - - - Add Category - - - 168, 22 - - - Remove Category - - - 168, 22 - - - Set Category - 169, 70 @@ -172,7 +146,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADk - MAAAAk1TRnQBSQFMAgEBCQEAAaABAAGgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + MAAAAk1TRnQBSQFMAgEBCQEAAagBAAGoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABMAMAAQEBAAEgBgABMBIAAzgB/wM1Af8DNQH/AzMB/wMwAf8DLwH/Ay0B/wMtAf8DJAH/AzsB/wM4 Af8DNQH/Ay0B/wMnAf8DNgH/AzIB/8AAAzgB/wN/Af8DeQH/A3kB/wN5Af8DcQH/A3EB/wN5Af8DeQH/ A3EB/wNxAf8DcQH/A3kB/wN5Af8DfwH/AzIB/8AAAzIB/wN2Af8DsAH/A7AB/wOvAf8DrwH/A68B/wOo @@ -410,12 +384,68 @@ 5 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAABSSURBVDhP5c0x + DsAgDENRxt7/wmkNSpRGf0CCCZAegxNMM7MlGMp3dIU6dxhKf/QMNxRogeQC8ivw5Vn7C0heJlFA+kL5 + jWAohxRkde4wnGftBS90axNmphIGAAAAAElFTkSuQmCC + + + + 168, 22 + + + Add Category + + + 168, 22 + + + Remove Category + + + 168, 22 + + + Set Category + 19, 8 False + + 20, 60 + + + 410, 24 + + + 11 + + + menuStrip1 + + + menuStrip + + + System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + 37, 20 + + + File + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO @@ -432,11 +462,11 @@ Save - - 37, 20 + + 46, 20 - - File + + Tools 220, 22 @@ -468,11 +498,11 @@ Organize Tracks - - 46, 20 + + 44, 20 - - Tools + + Help 243, 22 @@ -504,36 +534,6 @@ BINKA Compression - - 44, 20 - - - Help - - - 20, 60 - - - 410, 24 - - - 11 - - - menuStrip1 - - - menuStrip - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - Top, Bottom, Left, Right @@ -549,25 +549,31 @@ - 173, 22 + 180, 22 Add Entry - 173, 22 + 180, 22 Remove Entry - 173, 22 + 180, 22 Verify File Location + + 180, 22 + + + Convert To WAV + - 174, 70 + 181, 114 contextMenuStrip2 @@ -821,6 +827,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + convertToWAVToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + AudioEditor diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 5d3cd260..cf4b9a7b 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -186,6 +186,7 @@ + @@ -764,6 +765,10 @@ {693AEBC1-293D-4DF0-BCAE-26A1099FE7BB} OMI Filetype Library + + {e8d0b671-3ab1-48b6-a767-58df67bd5d11} + SharpMss32 +