Commits

Amin67v  committed 099677c

First Commit.

  • Participants

Comments (0)

Files changed (89)

File 3rdParty/Newtonsoft.Json.dll

Binary file added.

File DarkMotion/AboutForm.Designer.cs

+namespace DarkMotion
+{
+	partial class AboutForm
+	{
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.IContainer components = null;
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+		protected override void Dispose(bool disposing)
+		{
+			if (disposing && (components != null)) {
+				components.Dispose();
+			}
+			base.Dispose(disposing);
+		}
+
+		
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+			this.lblHmrUrl = new System.Windows.Forms.LinkLabel();
+			this.lblSharpHmrUrl = new System.Windows.Forms.LinkLabel();
+			this.btnOK = new System.Windows.Forms.Button();
+			this.Label2 = new System.Windows.Forms.Label();
+			this.lblMITUrl = new System.Windows.Forms.LinkLabel();
+			this.headerBox1 = new HmrMControls.HeaderBox();
+			this.label1 = new System.Windows.Forms.Label();
+			this.SuspendLayout();
+			// 
+			// lblHmrUrl
+			// 
+			this.lblHmrUrl.AutoSize = true;
+			this.lblHmrUrl.LinkColor = System.Drawing.Color.Blue;
+			this.lblHmrUrl.Location = new System.Drawing.Point(12, 125);
+			this.lblHmrUrl.Name = "lblHmrUrl";
+			this.lblHmrUrl.Size = new System.Drawing.Size(167, 13);
+			this.lblHmrUrl.TabIndex = 0;
+			this.lblHmrUrl.TabStop = true;
+			this.lblHmrUrl.Text = "http://www.hmrengine.com/blog/";
+			// 
+			// lblSharpHmrUrl
+			// 
+			this.lblSharpHmrUrl.AutoSize = true;
+			this.lblSharpHmrUrl.LinkColor = System.Drawing.Color.Blue;
+			this.lblSharpHmrUrl.Location = new System.Drawing.Point(12, 140);
+			this.lblSharpHmrUrl.Name = "lblSharpHmrUrl";
+			this.lblSharpHmrUrl.Size = new System.Drawing.Size(180, 13);
+			this.lblSharpHmrUrl.TabIndex = 1;
+			this.lblSharpHmrUrl.TabStop = true;
+			this.lblSharpHmrUrl.Text = "https://sharphammer.codeplex.com/";
+			// 
+			// btnOK
+			// 
+			this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+			this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
+			this.btnOK.Location = new System.Drawing.Point(207, 170);
+			this.btnOK.Name = "btnOK";
+			this.btnOK.Size = new System.Drawing.Size(90, 25);
+			this.btnOK.TabIndex = 4;
+			this.btnOK.Text = "OK";
+			// 
+			// Label2
+			// 
+			this.Label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+			this.Label2.Location = new System.Drawing.Point(12, 169);
+			this.Label2.Name = "Label2";
+			this.Label2.Size = new System.Drawing.Size(154, 30);
+			this.Label2.TabIndex = 5;
+			this.Label2.Text = "This program is licensed under \r\n the terms of                       .\r\n";
+			// 
+			// lblMITUrl
+			// 
+			this.lblMITUrl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+			this.lblMITUrl.AutoSize = true;
+			this.lblMITUrl.LinkColor = System.Drawing.Color.Blue;
+			this.lblMITUrl.Location = new System.Drawing.Point(72, 181);
+			this.lblMITUrl.Name = "lblMITUrl";
+			this.lblMITUrl.Size = new System.Drawing.Size(66, 13);
+			this.lblMITUrl.TabIndex = 6;
+			this.lblMITUrl.TabStop = true;
+			this.lblMITUrl.Text = "MIT License";
+			// 
+			// headerBox1
+			// 
+			this.headerBox1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+			this.headerBox1.Color1 = System.Drawing.Color.LightGray;
+			this.headerBox1.Color2 = System.Drawing.Color.White;
+			this.headerBox1.Dock = System.Windows.Forms.DockStyle.Top;
+			this.headerBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+			this.headerBox1.ForeColor = System.Drawing.Color.Black;
+			this.headerBox1.HeaderText = "  DarkMotion                  Animation System";
+			this.headerBox1.Image = null;
+			this.headerBox1.Location = new System.Drawing.Point(0, 0);
+			this.headerBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+			this.headerBox1.Name = "headerBox1";
+			this.headerBox1.Size = new System.Drawing.Size(309, 30);
+			this.headerBox1.TabIndex = 7;
+			// 
+			// label1
+			// 
+			this.label1.AutoSize = true;
+			this.label1.ForeColor = System.Drawing.SystemColors.ControlText;
+			this.label1.Location = new System.Drawing.Point(12, 46);
+			this.label1.Name = "label1";
+			this.label1.Size = new System.Drawing.Size(138, 65);
+			this.label1.TabIndex = 8;
+			this.label1.Text = "Version : 0.1\r\n© 2013 DarkHammer Team\r\n\r\nsep.tagh@gmail.com\r\namin67v@hotmail.com";
+			// 
+			// AboutForm
+			// 
+			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+			this.BackColor = System.Drawing.SystemColors.Control;
+			this.ClientSize = new System.Drawing.Size(309, 207);
+			this.Controls.Add(this.label1);
+			this.Controls.Add(this.headerBox1);
+			this.Controls.Add(this.lblMITUrl);
+			this.Controls.Add(this.Label2);
+			this.Controls.Add(this.btnOK);
+			this.Controls.Add(this.lblSharpHmrUrl);
+			this.Controls.Add(this.lblHmrUrl);
+			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+			this.MaximizeBox = false;
+			this.MinimizeBox = false;
+			this.Name = "AboutForm";
+			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+			this.Text = "About";
+			this.ResumeLayout(false);
+			this.PerformLayout();
+
+		}
+
+
+		private System.Windows.Forms.LinkLabel lblHmrUrl;
+		private System.Windows.Forms.LinkLabel lblSharpHmrUrl;
+		private System.Windows.Forms.Button btnOK;
+		private System.Windows.Forms.Label Label2;
+		private System.Windows.Forms.LinkLabel lblMITUrl;
+		private HmrMControls.HeaderBox headerBox1;
+		private System.Windows.Forms.Label label1;
+	}
+}

File DarkMotion/AboutForm.cs

+using System;
+using System.Diagnostics;
+using System.Windows.Forms;
+
+namespace DarkMotion
+{
+	public partial class AboutForm : Form
+	{
+		public AboutForm()
+		{
+			InitializeComponent();
+
+			lblHmrUrl.LinkClicked += LinkClicked;
+			lblSharpHmrUrl.LinkClicked += LinkClicked;
+			lblMITUrl.LinkClicked += lblMITUrl_LinkClicked;
+		}
+
+		private void lblMITUrl_LinkClicked(object sender, EventArgs e)
+		{
+			Process.Start("http://opensource.org/licenses/MIT");
+		}
+
+		private void LinkClicked(object sender, EventArgs e)
+		{
+			Process.Start((sender as LinkLabel).Text);
+		}
+	}
+}

File DarkMotion/AboutForm.resx

+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

File DarkMotion/AnimationClip.cs

+using Newtonsoft.Json;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace DarkMotion
+{
+	[JsonObject(MemberSerialization.OptIn)]
+	public class AnimationClip : Sequence
+	{
+		private static Font font = new Font("Tahoma", 8);
+
+		private static StringFormat strFormat = new StringFormat();
+
+		[JsonProperty]
+		private string clipName = "";
+
+		public AnimationClip()
+		{
+		}
+
+		public AnimationClip(BlendTree parent)
+		{
+			strFormat.Alignment = StringAlignment.Center;
+			strFormat.LineAlignment = StringAlignment.Center;
+			Parent = parent;
+		}
+
+		public string ClipName
+		{
+			get
+			{
+				return clipName;
+			}
+			set
+			{
+				clipName = value;
+			}
+		}
+
+		public override void Draw(Graphics g)
+		{
+			RectangleF rect = Rect;
+			g.FillRectangle(Brushes.MediumTurquoise, rect);
+			var overlayBrush = new LinearGradientBrush(rect, Color.FromArgb(100, 0, 0, 0),
+									 Color.FromArgb(0, 255, 255, 255), 270f);
+			g.FillRectangle(overlayBrush, rect);
+			g.DrawString(ToString(), font, Brushes.Black, X, Y, strFormat);
+		}
+
+		public override void Layout(ref float x, float y)
+		{
+			x += seperation.X;
+			if (lastLeaf != null)
+				x = lastLeaf.X + seperation.X;
+			lastLeaf = this;
+			X = x;
+			Y = y;
+		}
+
+		public override string ToString()
+		{
+			if (clipName.Length < 10)
+				return clipName;
+			else
+				return clipName.Substring(0, 8) + " ...";
+		}
+	}
+}

File DarkMotion/Animator.cs

+using Newtonsoft.Json;
+using System.ComponentModel;
+using System.Linq;
+
+namespace DarkMotion
+{
+	[JsonObject(MemberSerialization.OptIn)]
+	public class Animator
+	{
+		[JsonProperty("Layers")]
+		private BindingList<StateMachine> layers = new BindingList<StateMachine>();
+
+		[JsonProperty("Params")]
+		private BindingList<Parameter> parameters = new BindingList<Parameter>();
+
+		public Animator()
+		{
+			layers.AllowRemove = true;
+		}
+
+		public BindingList<StateMachine> Layers
+		{
+			get
+			{
+				return layers;
+			}
+		}
+
+		public BindingList<Parameter> Parameters
+		{
+			get
+			{
+				return parameters;
+			}
+		}
+
+		public StateMachine AddLayer(string name)
+		{
+			if (!LayerExist(name)) {
+				var newLayer = new StateMachine(name, this);
+				layers.Add(newLayer);
+				return newLayer;
+			}
+			return null;
+		}
+
+		public StateMachine AddLayer()
+		{
+			return AddLayer(newLayerName());
+		}
+
+		public Parameter AddParameter(string name)
+		{
+			var param = new Parameter(name);
+			parameters.Add(param);
+			return param;
+		}
+
+		public Parameter AddParameter()
+		{
+			return AddParameter(newParamName());
+		}
+
+		public StateMachine GetLayer(string name)
+		{
+			return layers.First(sm => sm.Name == name);
+		}
+
+		public StateMachine GetLayer(int index)
+		{
+			return layers[index];
+		}
+
+		public Parameter GetParameter(string name)
+		{
+			return parameters.First(p => p.Name == name);
+		}
+
+		public bool LayerExist(string name)
+		{
+			return layers.Any(sm => sm.Name == name);
+		}
+
+		public bool ParameterExist(string name)
+		{
+			return parameters.Any(p => p.Name == name);
+		}
+
+		public void RemoveLayer(StateMachine item)
+		{
+			layers.Remove(item);
+		}
+
+		public void RemoveParameter(int index)
+		{
+			parameters.RemoveAt(index);
+		}
+
+		public void RemoveParameter(Parameter item)
+		{
+			parameters.Remove(item);
+		}
+
+		private string newLayerName()
+		{
+			int i = 0;
+			while (LayerExist("NewLayer" + i))
+				i++;
+			return "NewLayer" + i;
+		}
+
+		private string newParamName()
+		{
+			int i = 0;
+			while (ParameterExist("NewParam" + i))
+				i++;
+			return "NewParam" + i;
+		}
+	}
+}

File DarkMotion/App.config

+<?xml version="1.0"?>
+<configuration>
+  <startup>
+
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+  </startup>
+</configuration>

File DarkMotion/BlendTree.cs

+using Newtonsoft.Json;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace DarkMotion
+{
+	[JsonObject(MemberSerialization.OptIn)]
+	public class BlendTree : Sequence
+	{
+		private static Image addIcon = Properties.Resources.add2;
+
+		[JsonProperty]
+		private float blend = 0;
+
+		[JsonProperty]
+		private List<Sequence> childs = new List<Sequence>();
+
+		private PointF[] curvePnts = new PointF[4];
+
+		private Font font = new Font("Tahoma", 8);
+
+		[JsonProperty]
+		private string name = "BlendTree";
+
+		[JsonProperty]
+		private string parameter = "";
+
+		private StringFormat strFormat = new StringFormat();
+
+		private Pen transPen = new Pen(Brushes.LightGray, 1);
+
+		private Pen transPen2 = new Pen(Brushes.Red, 1);
+
+		public BlendTree()
+		{
+		}
+
+		public BlendTree(BlendTree parent)
+		{
+			transPen.CustomEndCap = new AdjustableArrowCap(3, 6);
+			transPen2.CustomEndCap = new AdjustableArrowCap(3, 6);
+			strFormat.LineAlignment = StringAlignment.Center;
+			Parent = parent;
+		}
+
+		public float Blend
+		{
+			get
+			{
+				return blend;
+			}
+			set
+			{
+				blend = value;
+			}
+		}
+
+		public int ChildCount
+		{
+			get
+			{
+				return childs.Count;
+			}
+		}
+
+		public List<Sequence> Childs
+		{
+			get
+			{
+				return childs;
+			}
+			set
+			{
+				childs = value;
+			}
+		}
+
+		public string Name
+		{
+			get
+			{
+				return name;
+			}
+			set
+			{
+				name = value;
+			}
+		}
+
+		public string Parameter
+		{
+			get
+			{
+				return parameter;
+			}
+			set
+			{
+				parameter = value;
+			}
+		}
+
+		public override void Draw(Graphics g)
+		{
+			RectangleF rect = Rect;
+			g.FillRectangle(Brushes.LightGray, rect);
+			var overlayBrush = new LinearGradientBrush(rect, Color.FromArgb(100, 0, 0, 0),
+									 Color.FromArgb(0, 255, 255, 255), 270f);
+			g.FillRectangle(overlayBrush, rect);
+			g.DrawString(ToString(), font, Brushes.Black, X - rect.Width / 2 + 3, Y, strFormat);
+			g.DrawImage(addIcon, rect.Right - rect.Height, rect.Bottom - rect.Height, rect.Height, rect.Height);
+
+			for (int i = 0; i < childs.Count; i++) {
+				var item = childs[i];
+				item.Draw(g);
+				float xMid = (X + item.X) / 2f;
+				float yMid = (Y + item.Y) / 2f;
+
+				curvePnts[0].X = X;
+				curvePnts[0].Y = Y + radius / 4;
+				curvePnts[3].X = item.X;
+				curvePnts[3].Y = item.Y - radius / 4;
+
+				curvePnts[1].X = (curvePnts[0].X + xMid) / 2f;
+				curvePnts[1].Y = yMid;
+				curvePnts[2].X = (curvePnts[3].X + xMid) / 2f;
+				curvePnts[2].Y = yMid;
+
+				g.DrawCurve(transPen, curvePnts);
+			}
+			lastLeaf = null;
+		}
+
+		public IEnumerable<Sequence> GetAllChilds()
+		{
+			foreach (var item in childs) {
+				if (item is BlendTree)
+					foreach (var item2 in (item as BlendTree).GetAllChilds())
+						yield return item2;
+				else
+					yield return item;
+			}
+			yield return this;
+		}
+
+		public override void Layout(ref float x, float y)
+		{
+			x += seperation.X;
+			float sumX = 0;
+			foreach (var item in childs) {
+				item.Layout(ref x, y + seperation.Y);
+				sumX += item.X;
+			}
+			if (childs.Count == 0) {
+				if (lastLeaf != null)
+					x = lastLeaf.X + seperation.X;
+				X = x;
+				lastLeaf = this;
+			} else
+				X = sumX / childs.Count;
+			Y = y;
+		}
+
+		public void RemoveChild(Sequence child)
+		{
+			childs.Remove(child);
+		}
+
+		public override string ToString()
+		{
+			if (name.Length < 10)
+				return name;
+			else
+				return name.Substring(0, 6) + "..";
+		}
+	}
+}

File DarkMotion/BlendTreeEdit.Designer.cs

+namespace DarkMotion
+{
+    partial class BlendTreeEdit
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+			System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BlendTreeEdit));
+			this.txtBlendTreeName = new System.Windows.Forms.TextBox();
+			this.lblTreeName = new System.Windows.Forms.Label();
+			this.pnlEditSqnc = new System.Windows.Forms.Panel();
+			this.panel2 = new System.Windows.Forms.Panel();
+			this.panel1 = new System.Windows.Forms.Panel();
+			this.cmbParam = new System.Windows.Forms.ComboBox();
+			this.txtClipName = new System.Windows.Forms.TextBox();
+			this.lblClipName = new System.Windows.Forms.Label();
+			this.lblParam = new System.Windows.Forms.Label();
+			this.pnlBlendView = new DarkMotion.BlendView();
+			this.pnlBlendTree = new DarkMotion.BlendTreeView();
+			this.pnlEditSqnc.SuspendLayout();
+			this.SuspendLayout();
+			// 
+			// txtBlendTreeName
+			// 
+			this.txtBlendTreeName.Location = new System.Drawing.Point(101, 7);
+			this.txtBlendTreeName.Name = "txtBlendTreeName";
+			this.txtBlendTreeName.Size = new System.Drawing.Size(97, 20);
+			this.txtBlendTreeName.TabIndex = 16;
+			// 
+			// lblTreeName
+			// 
+			this.lblTreeName.AutoSize = true;
+			this.lblTreeName.Location = new System.Drawing.Point(12, 10);
+			this.lblTreeName.Name = "lblTreeName";
+			this.lblTreeName.Size = new System.Drawing.Size(41, 13);
+			this.lblTreeName.TabIndex = 15;
+			this.lblTreeName.Text = "Name :";
+			// 
+			// pnlEditSqnc
+			// 
+			this.pnlEditSqnc.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+			this.pnlEditSqnc.Controls.Add(this.panel2);
+			this.pnlEditSqnc.Controls.Add(this.panel1);
+			this.pnlEditSqnc.Controls.Add(this.cmbParam);
+			this.pnlEditSqnc.Controls.Add(this.txtClipName);
+			this.pnlEditSqnc.Controls.Add(this.lblClipName);
+			this.pnlEditSqnc.Controls.Add(this.lblParam);
+			this.pnlEditSqnc.Controls.Add(this.txtBlendTreeName);
+			this.pnlEditSqnc.Controls.Add(this.pnlBlendView);
+			this.pnlEditSqnc.Controls.Add(this.lblTreeName);
+			this.pnlEditSqnc.Location = new System.Drawing.Point(504, 0);
+			this.pnlEditSqnc.Name = "pnlEditSqnc";
+			this.pnlEditSqnc.Size = new System.Drawing.Size(206, 114);
+			this.pnlEditSqnc.TabIndex = 19;
+			this.pnlEditSqnc.Visible = false;
+			// 
+			// panel2
+			// 
+			this.panel2.BackColor = System.Drawing.Color.OrangeRed;
+			this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;
+			this.panel2.Location = new System.Drawing.Point(1, 113);
+			this.panel2.Name = "panel2";
+			this.panel2.Size = new System.Drawing.Size(205, 1);
+			this.panel2.TabIndex = 25;
+			// 
+			// panel1
+			// 
+			this.panel1.BackColor = System.Drawing.Color.OrangeRed;
+			this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
+			this.panel1.Location = new System.Drawing.Point(0, 0);
+			this.panel1.Name = "panel1";
+			this.panel1.Size = new System.Drawing.Size(1, 114);
+			this.panel1.TabIndex = 24;
+			// 
+			// cmbParam
+			// 
+			this.cmbParam.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+			this.cmbParam.DropDownWidth = 97;
+			this.cmbParam.Location = new System.Drawing.Point(101, 30);
+			this.cmbParam.Name = "cmbParam";
+			this.cmbParam.Size = new System.Drawing.Size(98, 21);
+			this.cmbParam.TabIndex = 23;
+			// 
+			// txtClipName
+			// 
+			this.txtClipName.Location = new System.Drawing.Point(101, 7);
+			this.txtClipName.Name = "txtClipName";
+			this.txtClipName.Size = new System.Drawing.Size(97, 20);
+			this.txtClipName.TabIndex = 22;
+			// 
+			// lblClipName
+			// 
+			this.lblClipName.AutoSize = true;
+			this.lblClipName.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
+			this.lblClipName.Location = new System.Drawing.Point(12, 10);
+			this.lblClipName.Name = "lblClipName";
+			this.lblClipName.Size = new System.Drawing.Size(61, 13);
+			this.lblClipName.TabIndex = 21;
+			this.lblClipName.Text = "Clip Name :";
+			// 
+			// lblParam
+			// 
+			this.lblParam.AutoSize = true;
+			this.lblParam.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
+			this.lblParam.Location = new System.Drawing.Point(12, 33);
+			this.lblParam.Name = "lblParam";
+			this.lblParam.Size = new System.Drawing.Size(61, 13);
+			this.lblParam.TabIndex = 19;
+			this.lblParam.Text = "Parameter :";
+			// 
+			// pnlBlendView
+			// 
+			this.pnlBlendView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+			this.pnlBlendView.BarThickness = 10F;
+			this.pnlBlendView.Blend = -1F;
+			this.pnlBlendView.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+			this.pnlBlendView.ForeColor = System.Drawing.Color.Black;
+			this.pnlBlendView.Items = 0;
+			this.pnlBlendView.Location = new System.Drawing.Point(12, 54);
+			this.pnlBlendView.Name = "pnlBlendView";
+			this.pnlBlendView.Size = new System.Drawing.Size(186, 50);
+			this.pnlBlendView.TabIndex = 17;
+			this.pnlBlendView.Visible = false;
+			// 
+			// pnlBlendTree
+			// 
+			this.pnlBlendTree.BackColor = System.Drawing.SystemColors.ControlDarkDark;
+			this.pnlBlendTree.Dock = System.Windows.Forms.DockStyle.Fill;
+			this.pnlBlendTree.DrawGrid = true;
+			this.pnlBlendTree.DrawShadow = true;
+			this.pnlBlendTree.EditBlendTree = null;
+			this.pnlBlendTree.GridImage = global::DarkMotion.Properties.Resources.grid4x4;
+			this.pnlBlendTree.Location = new System.Drawing.Point(0, 0);
+			this.pnlBlendTree.Name = "pnlBlendTree";
+			this.pnlBlendTree.Pan = ((System.Drawing.PointF)(resources.GetObject("pnlBlendTree.Pan")));
+			this.pnlBlendTree.PanX = 0F;
+			this.pnlBlendTree.PanY = 0F;
+			this.pnlBlendTree.Selected = null;
+			this.pnlBlendTree.ShadowThickness = 16;
+			this.pnlBlendTree.Size = new System.Drawing.Size(710, 453);
+			this.pnlBlendTree.TabIndex = 0;
+			// 
+			// BlendTreeEdit
+			// 
+			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+			this.BackColor = System.Drawing.SystemColors.ControlDark;
+			this.ClientSize = new System.Drawing.Size(710, 453);
+			this.Controls.Add(this.pnlEditSqnc);
+			this.Controls.Add(this.pnlBlendTree);
+			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+			this.Name = "BlendTreeEdit";
+			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+			this.Text = "BlendTree";
+			this.pnlEditSqnc.ResumeLayout(false);
+			this.pnlEditSqnc.PerformLayout();
+			this.ResumeLayout(false);
+
+        }
+
+        private BlendTreeView pnlBlendTree;
+        private BlendView pnlBlendView;
+        private System.Windows.Forms.TextBox txtBlendTreeName;
+		private System.Windows.Forms.Label lblTreeName;
+		private System.Windows.Forms.Panel pnlEditSqnc;
+		private System.Windows.Forms.Label lblParam;
+		private System.Windows.Forms.TextBox txtClipName;
+		private System.Windows.Forms.Label lblClipName;
+		private System.Windows.Forms.ComboBox cmbParam;
+		private System.Windows.Forms.Panel panel2;
+		private System.Windows.Forms.Panel panel1;
+    }
+}

File DarkMotion/BlendTreeEdit.cs

+using System;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace DarkMotion
+{
+	public partial class BlendTreeEdit : Form
+	{
+		private BlendTree editBlendTree;
+
+		private State editState;
+
+		private StateMachine editStateMachine;
+
+		public BlendTreeEdit(BlendTree blendtree, StateMachine stateMachine, State state)
+		{
+			InitializeComponent();
+			editStateMachine = stateMachine;
+			editState = state;
+			editBlendTree = blendtree;
+
+			pnlBlendTree.EditBlendTree = editBlendTree;
+			pnlBlendTree.LookAt(new PointF(0, Height / 3));
+			pnlBlendTree.Invalidate();
+			pnlBlendTree.RebindTrigger += blendViewRebind;
+
+			txtBlendTreeName.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
+			cmbParam.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
+			txtClipName.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
+			pnlBlendView.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
+
+			cmbParam.DataSource = stateMachine.Animator.Parameters.Where(p => p.ParamType == ParamType.Float).ToList();
+			cmbParam.DisplayMember = cmbParam.ValueMember = "Name";
+
+			txtBlendTreeName.TextChanged += TextBox_TextChanged;
+			txtClipName.TextChanged += TextBox_TextChanged;
+		}
+
+		private void blendViewRebind()
+		{
+			pnlBlendView.DataBindings.Clear();
+			pnlBlendView.Items = 0;
+			pnlBlendView.Blend = 0;
+			txtBlendTreeName.DataBindings.Clear();
+			cmbParam.DataBindings.Clear();
+			cmbParam.SelectedValue = "";
+			txtClipName.DataBindings.Clear();
+			pnlBlendView.Visible = false;
+			txtBlendTreeName.Visible = false;
+			cmbParam.Visible = false;
+			txtClipName.Visible = false;
+			lblClipName.Visible = false;
+			lblTreeName.Visible = false;
+			lblParam.Visible = false;
+			pnlEditSqnc.Visible = false;
+
+			var selected = pnlBlendTree.Selected;
+			if (selected != null) {
+				pnlEditSqnc.Visible = true;
+				if (selected is BlendTree) {
+					pnlEditSqnc.Height = 118;
+					var bndTree = selected as BlendTree;
+					pnlBlendView.Visible = true;
+					pnlBlendView.DataBindings.Add("Items", selected, "ChildCount");
+					pnlBlendView.DataBindings.Add("Blend", selected, "Blend");
+					txtBlendTreeName.Visible = true;
+					txtBlendTreeName.DataBindings.Add("Text", selected, "Name");
+					cmbParam.Visible = true;
+					cmbParam.DataBindings.Add("SelectedValue", selected, "Parameter");
+					lblTreeName.Visible = true;
+					lblParam.Visible = true;
+				} else if (selected is AnimationClip) {
+					pnlEditSqnc.Height = 35;
+					txtClipName.Visible = true;
+					txtClipName.DataBindings.Add("Text", selected, "ClipName");
+					lblClipName.Visible = true;
+				}
+			}
+		}
+
+		private void TextBox_TextChanged(object sender, EventArgs e)
+		{
+			pnlBlendTree.Invalidate();
+		}
+	}
+}

File DarkMotion/BlendTreeEdit.resx

+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="pnlBlendTree.Pan" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
+        dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJh
+        d2luZy5Qb2ludEYCAAAAAXgBeQAACwsCAAAAAAAAAAAAAAAL
+</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAQAMDAAAAEAIACoJQAARgAAAEBAAAABACAAKEIAAO4lAAAQEAAAAQAgAGgEAAAWaAAAGBgAAAEA
+        IACICQAAfmwAACgAAAAwAAAAYAAAAAEAIAAAAAAAACQAABILAAASCwAAAAAAAAAAAABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/REREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/REREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERAAAD8AD8AAAAAAPwAPwAAAAAA/AA/AAAAAAD8AD8AAAAAAP
+        wAPwAAAAAA/AA/AAAAAAD8AD8AAAAAAPwAPwAAAAAA/AA/AAAAAAD8AD8AAAAAAPwAPwAAAAAA/AA/AA
+        AAAAD8AD8AAAAAAPwAPwAAAAAA/AA/AAAAAAD8AD8AAAAAAPwAPwAAAA////////AAD5//5//58AAPn/
+        /n//nwAA+AAAAAAfAAD8AAAAAD8AAP///n///wAA///+f///AAD///5///8AAP///////wAA//4AAH//
+        AAD//gAAf/8AAP/+AAB//wAA//4AAH//AAD//gAAf/8AAP/+AAB//wAA//4AAH//AAD//gAAf/8AAP/+
+        AAB//wAA//4AAH//AAD//gAAf/8AAP/+AAB//wAA//4AAH//AAD//gAAf/8AAP/+AAB//wAA//4AAH//
+        AAD//gAAf/8AAP/+AAB//wAA//4AAH//AAD//gAAf/8AAP/+AAB//wAA//4AAH//AAAoAAAAQAAAAIAA
+        AAABACAAAAAAAABAAAASCwAAEgsAAAAAAAAAAAAARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERAD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8AREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/REREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQA////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8AREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8AREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERAD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERAD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERE
+        RABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERAD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8AREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RABEREQAREREAERERAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8AREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8AREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wBEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERAD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERAD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERE
+        RABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERAD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8AREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wBEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RABEREQAREREAERERAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8AREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQA////AP///wD///8A////AP///wD///8A////AP//
+        /wD///8A////AP///wD///8A////AP///wD///8A////AAAA/wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA
+        /wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA/wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA/wAA/wAAAAD/AAD/
+        AAAAAP8AAP8AAAAA/wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA/wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA
+        /wAA/wAAAAD/AAD/AAAAAP8AAP8AAAAA/wAA/wAAAAD/AAD/AAD//////////////////////n///n//
+        /n/+f//+f//+f/4AAAAAAAB//wAAAAAAAP/////+f/////////5/////////////////////////////
+        8AAAD//////wAAAP//////AAAA//////8AAAD//////wAAAP//////AAAA//////8AAAD//////wAAAP
+        //////AAAA//////8AAAD//////wAAAP//////AAAA//////8AAAD//////wAAAP//////AAAA//////
+        8AAAD//////wAAAP//////AAAA//////8AAAD//////wAAAP//////AAAA//////8AAAD//////wAAAP
+        //////AAAA//////8AAAD//////wAAAP//////AAAA//////8AAAD//////wAAAP//////AAAA//////
+        8AAAD///KAAAABAAAAAgAAAAAQAgAAAAAAAABAAAEgsAABILAAAAAAAAAAAAAERERP9ERET/RERE/0RE
+        RP9EREQAREREAERERP9ERET/RERE/0RERP9EREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABERET/RERE/0RERP9ERET/REREAERERABERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQARERE/0RERP9ERET/RERE/0RERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERP9ERET/RERE/0RERP9EREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/REREAERERABERET/RERE/0RERP9ERET/REREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQARERE/0RERP9ERET/RERE/0RERABEREQARERE/0RE
+        RP9ERET/RERE/0RERABEREQARERE/0RERABEREQAREREAERERABERET/RERE/0RERABEREQAREREAERE
+        RABERET/REREAERERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/REREAERE
+        RABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERERABERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERE
+        RABEREQARERE/0RERP9ERET/RERE/0RERP9ERET/REREAERERABEREQAREREAERERAAMMAAADDAAAAww
+        AAAMMAAADDAAAAwwAADeewAAwAMAAP5/AAD4HwAA+B8AAPgfAAD4HwAA+B8AAPgfAAD4HwAAKAAAABgA
+        AAAwAAAAAQAgAAAAAAAACQAAEgsAABILAAAAAAAAAAAAAERERP9ERET/RERE/0RERP9ERET/RERE////
+        /wD///8AREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/////wD///8AREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/////wD///8AREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/////wD///8AREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/////wD///8AREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE////
+        /wD///8AREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/////wD///8AREREAERERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERABEREQAREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/////wD///8AREREAERERP9ERET/RERE/0RERP9ERET/RERE/0RERABEREQAREREAERE
+        RP9ERET/RERE/0RERP9ERET/RERE/////wD///8ARERE/0RERP////8A////AP///wD///8AREREAERE
+        RABEREQARERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQARERE/0RERP9EREQAREREAP//
+        /wD///8ARERE/0RERP////8A////AP///wD///8AREREAERERABEREQARERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQARERE/0RERP9EREQAREREAP///wD///8ARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8AREREAERERABEREQARERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAERERABEREQAREREAP///wD///8A////AP//
+        /wD///8A////AP///wD///8AREREAERERABEREQARERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8ARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAP//
+        /wD///8A////AP///wD///8A////AP///wD///8ARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP//
+        /wD///8ARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8ARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAP///wD///8A////AP//
+        /wD///8A////AP///wD///8ARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8ARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAP//
+        /wD///8A////AP///wD///8A////AP///wD///8ARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RE
+        RP9EREQAREREAERERABEREQAREREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP//
+        /wD///8ARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERE
+        RABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8ARERE/0RERP9ERET/RERE/0RE
+        RP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAP///wD///8A////AP//
+        /wD///8A////AP///wD///8ARERE/0RERP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERE
+        RABEREQAREREAERERABEREQAREREAP///wD///8A////AP///wD///8A////AP///wD///8ARERE/0RE
+        RP9ERET/RERE/0RERP9ERET/RERE/0RERP9EREQAREREAERERABEREQAREREAERERABEREQAREREAAOB
+        wAADgcAAA4HAAAOBwAADgcAAA4HAAAOBwAADgcAAz+fzAM/n8wDAAAMA/+f/AP/n/wD/AP8A/wD/AP8A
+        /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AA==
+</value>
+  </data>
+</root>

File DarkMotion/BlendTreeView.Designer.cs

+namespace DarkMotion
+{
+    partial class BlendTreeView
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+			this.components = new System.ComponentModel.Container();
+			this.cnxBlendTree = new System.Windows.Forms.ContextMenuStrip(this.components);
+			this.cnxAnimClip = new System.Windows.Forms.ToolStripMenuItem();
+			this.cnxSubTree = new System.Windows.Forms.ToolStripMenuItem();
+			this.cnxBlendTree.SuspendLayout();
+			this.SuspendLayout();
+			// 
+			// cnxBlendTree
+			// 
+			this.cnxBlendTree.Font = new System.Drawing.Font("Segoe UI", 8.25F);
+			this.cnxBlendTree.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.cnxAnimClip,
+            this.cnxSubTree});
+			this.cnxBlendTree.Name = "cnxBlendTreeView";
+			this.cnxBlendTree.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
+			this.cnxBlendTree.Size = new System.Drawing.Size(153, 70);
+			// 
+			// cnxAnimClip
+			// 
+			this.cnxAnimClip.Name = "cnxAnimClip";
+			this.cnxAnimClip.Size = new System.Drawing.Size(147, 22);
+			this.cnxAnimClip.Text = "AnimationClip";
+			this.cnxAnimClip.Click += new System.EventHandler(this.cnxAnimClip_Click);
+			// 
+			// cnxSubTree
+			// 
+			this.cnxSubTree.Name = "cnxSubTree";
+			this.cnxSubTree.Size = new System.Drawing.Size(147, 22);
+			this.cnxSubTree.Text = "SubTree";
+			this.cnxSubTree.Click += new System.EventHandler(this.cnxSubTree_Click);
+			// 
+			// BlendTreeView
+			// 
+			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+			this.BackColor = System.Drawing.SystemColors.Control;
+			this.Name = "BlendTreeView";
+			this.Size = new System.Drawing.Size(316, 318);
+			this.cnxBlendTree.ResumeLayout(false);
+			this.ResumeLayout(false);
+
+        }
+
+		private System.Windows.Forms.ContextMenuStrip cnxBlendTree;
+		private System.Windows.Forms.ToolStripMenuItem cnxAnimClip;
+		private System.Windows.Forms.ToolStripMenuItem cnxSubTree;
+    }
+}

File DarkMotion/BlendTreeView.cs

+using System;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+
+namespace DarkMotion
+{
+	public partial class BlendTreeView : Canvas
+	{
+		private BlendTree editBlendTree = null;
+
+		private Brush selectBrush = new SolidBrush(Color.FromArgb(64, 255, 100, 70));
+
+		private Sequence selected = null;
+
+		public BlendTreeView()
+		{
+			InitializeComponent();
+			ResizeRedraw = true;
+			DoubleBuffered = true;
+		}
+
+		public event Action RebindTrigger;
+
+		public BlendTree EditBlendTree
+		{
+			get
+			{
+				return editBlendTree;
+			}
+			set
+			{
+				editBlendTree = value;
+			}
+		}
+
+		public Sequence Selected
+		{
+			get
+			{
+				return selected;
+			}
+			set
+			{
+				if (selected == value)
+					return;
+				selected = value;
+				if (RebindTrigger != null)
+					RebindTrigger();
+			}
+		}
+
+		public Sequence GetSequenceAtPoint(PointF pnt)
+		{
+			var wPnt = ScreenToCanvas(pnt);
+			foreach (var item in editBlendTree.GetAllChilds())
+				if (item.Rect.Contains(wPnt))
+					return item;
+			return null;
+		}
+
+		protected override void OnDrawCanvas(Graphics g)
+		{
+			g.SmoothingMode = SmoothingMode.AntiAlias;
+			// Draw nodes recursivly
+			if (editBlendTree != null) {
+				float x = 0;
+				editBlendTree.Layout(ref x, 0);
+				var shiftX = editBlendTree.X;
+				foreach (var item in editBlendTree.GetAllChilds())
+					item.X -= shiftX;
+				editBlendTree.Draw(g);
+			}
+			if (selected != null) {
+				RectangleF rect = selected.Rect;
+				g.DrawRectangle(Pens.Tomato, rect.X - 2, rect.Y - 2, rect.Width + 5, rect.Height + 5);
+				g.FillRectangle(selectBrush, rect.X - 2, rect.Y - 2, rect.Width + 5, rect.Height + 5);
+			}
+		}
+
+		protected override void OnKeyDown(KeyEventArgs e)
+		{
+			base.OnKeyDown(e);
+			if (e.KeyCode == Keys.Delete && selected != null) {
+				if (selected.Parent == null)
+					return;
+				selected.Parent.RemoveChild(selected);
+				selected = null;
+				if (RebindTrigger != null)
+					RebindTrigger();
+				Invalidate();
+			}
+		}
+
+		protected override void OnMouseDown(MouseEventArgs e)
+		{
+			base.OnMouseDown(e);
+			lastMousePos = e.Location;
+
+			if (e.Button == MouseButtons.Left) {
+				Selected = null;
+				Selected = GetSequenceAtPoint(e.Location);
+				var sTree = selected as BlendTree;
+				if (sTree != null) {
+					RectangleF addBtnRect = sTree.Rect;
+					addBtnRect.X = addBtnRect.Right - addBtnRect.Height;
+					addBtnRect.Width = addBtnRect.Height;
+					if (addBtnRect.Contains(ScreenToCanvas(e.Location)))
+						cnxBlendTree.Show(this, e.Location);
+				}
+			}
+
+			Invalidate();
+		}
+
+		private void cnxAnimClip_Click(object sender, EventArgs e)
+		{
+			var blendtree = selected as BlendTree;
+			blendtree.Childs.Add(new AnimationClip(blendtree));
+			if (RebindTrigger != null)
+				RebindTrigger();
+			Invalidate();
+		}
+
+		private void cnxSubTree_Click(object sender, EventArgs e)
+		{
+			var blendtree = selected as BlendTree;
+			blendtree.Childs.Add(new BlendTree(blendtree));
+			if (RebindTrigger != null)
+				RebindTrigger();
+			Invalidate();
+		}
+	}
+}

File DarkMotion/BlendTreeView.resx

+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string