diff --git a/ChangeLog b/ChangeLog
index 90cae7d97a5bbfd040856506e9af1ed2ba1e43ab..cd48af2d6ed5086b943432dcba1d006a323e5d52 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+17-JAN-2018: 8.0.0
+
+- New Google repository structure
+- Uses Java 1.8
+
 16-JAN-2018: 7.9.8
 
 - Adds dark theme (beta)
diff --git a/README.md b/README.md
index f8a1aed137bc37219ef4a10a555e8fa5207a38da..ba9acda16d97232fd4da490640c9be90474c2cd5 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ The [mxGraph documentation](https://jgraph.github.io/mxgraph/) provides a lot of
 
 Running
 -------
-The simplest way to run draw.io initially is to fork this project, [publish the master branch to GitHub pages](https://help.github.com/categories/github-pages-basics/) and the [pages sites](https://jgraph.github.io/drawio/war/index.html) will have the full editor functionality (sans the integrations).
+The simplest way to run draw.io initially is to fork this project, [publish the master branch to GitHub pages](https://help.github.com/categories/github-pages-basics/) and the [pages sites](https://jgraph.github.io/drawio/src/main/webapp/index.html) will have the full editor functionality (sans the integrations).
 
 The full packaged .war of the client and servlets is built when the project is tagged and available on the [releases page](https://github.com/jgraph/draw.io/releases).
 
diff --git a/VERSION b/VERSION
index 3569348455e994f090c11a03c64721752723609b..fa5fce04b3c91c325ad80795603b00e57d6c1500 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-7.9.8
\ No newline at end of file
+8.0.0
\ No newline at end of file
diff --git a/etc/build/build.properties b/etc/build/build.properties
index f6d9de72b77093e3d393f43a8554d0e03630da25..8ede1e7d615c2c3cdec8c44f1857313f1e1b9e10 100644
--- a/etc/build/build.properties
+++ b/etc/build/build.properties
@@ -1,8 +1,7 @@
 jscompiler=${basedir}/compiler.jar
-grapheditor.dir=${basedir}/../../war/js/mxgraph
-src.dir=${basedir}/../../src
-war.dir=${basedir}/../../war
+grapheditor.dir=${basedir}/../../src/main/webapp/js/mxgraph
+src.dir=${basedir}/../../src/main/java
+war.dir=${basedir}/../../src/main/webapp
 javac.dir=${war.dir}/WEB-INF/classes
 build.dir=${basedir}/../../build
 war.name=draw.war
-imageexport.dir=${basedir}/../imageexport
\ No newline at end of file
diff --git a/etc/build/build.xml b/etc/build/build.xml
index 5bbfca5cbffcc84965cc6f996a5ecefddd52b9a0..4860e134eb8aa3f8ebe5a5cbc64c2dbe25c80a7b 100644
--- a/etc/build/build.xml
+++ b/etc/build/build.xml
@@ -12,8 +12,8 @@
 	    	</concat>
     	
 		<java fork="false" classname="Xml2Js" classpath=".">
-			<arg value="../../war/stencils"/>
-			<arg value="../../war/js/stencils.min.js"/>
+			<arg value="../../src/main/webapp/stencils"/>
+			<arg value="../../src/main/webapp/js/stencils.min.js"/>
 		</java>
 		
 		<jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${war.dir}/js/shapes.min.js">
@@ -285,8 +285,8 @@
 			</sources>
 		</jscomp>
 		<concat destfile="${war.dir}/js/vsdx.min.js" fixlastline="yes" append="yes">
-    		<fileset dir="${war.dir}/js/jszip" includes="**/*.min.js"/>
-    	</concat>
+	    		<fileset dir="${war.dir}/js/jszip" includes="**/*.min.js"/>
+	    	</concat>
 		
 		<delete file="${basedir}/.tmp1.js"/>
 		
@@ -367,18 +367,12 @@
 	<!-- ================== Stand-alone war creation ============================= -->
 
 	<path id="javac.class.path">
-		<fileset dir="${war.dir}/WEB-INF/lib" includes="mxgraph-core.jar" />
-		<fileset dir="${basedir}/jars" includes="servlet-api.jar" />
-		<fileset dir="${basedir}/jars" includes="commons-codec-1.10.jar" />
-		<fileset dir="${basedir}/jars" includes="commons-fileupload-1.3.2.jar" />
-		<fileset dir="${basedir}/jars" includes="gson-2.7.jar" />
-		<fileset dir="${basedir}/jars" includes="commons-lang3-3.5.jar" />
-		<fileset dir="${basedir}/jars" includes="gae-stub-1.0.1.jar" />
+		<fileset dir="${war.dir}/WEB-INF/lib" />
 	</path>
 
 	<target name="javac" depends="app" description="Java compilation">
 		<mkdir dir="${javac.dir}"/>
-		<javac srcdir="${src.dir}" excludes="**/EmbedServlet2.java" encoding="utf-8" destdir="${javac.dir}" source="1.7" target="1.7" debug="true" debuglevel="lines,vars,source">
+		<javac includeantruntime="false" srcdir="${src.dir}" excludes="**/EmbedServlet2.java" destdir="${javac.dir}">
 			<classpath refid="javac.class.path" />
 		</javac>
 		<copy todir="${javac.dir}" file="${src.dir}/log4j.properties" />
@@ -391,10 +385,12 @@
 			<fileset dir="${build.dir}">
 			</fileset>
 		</delete>
+		<delete file="${basedir}/base.min.js"/>
+		<delete file="${basedir}/base-viewer.min.js"/>
 	</target>
 	
 	<target name="war" depends="javac" description="Create the stand-alone war file">
-		<zip excludes="**/appengine*.jar,**/jsr*.jar,**/junit*.jar"  destfile="${build.dir}/${war.name}" basedir="${war.dir}" >
+		<zip destfile="${build.dir}/${war.name}" basedir="${war.dir}" >
 		</zip>
 	</target>
 
diff --git a/etc/propgen/README b/etc/propgen/README
index 923b22f57dc4742379c342f4e48e36d2a435fa5c..b5adc15e7c84446c3edc710089cfe1f0bc74fcf6 100644
--- a/etc/propgen/README
+++ b/etc/propgen/README
@@ -2,3 +2,5 @@ Converts from .tsv files (downloaded from  eg. Google Spreadsheet) to .txt resou
 
 The resources for draw.io are here:
 https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE#gid=0
+
+Run ant build.xml to run the converter.
\ No newline at end of file
diff --git a/etc/propgen/build.xml b/etc/propgen/build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f710d86a1bf89b075fc3842826c7381cfcbe784a
--- /dev/null
+++ b/etc/propgen/build.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<project basedir="." default="run">
+
+	<target name="compile">
+		<mkdir dir="classes"/>
+		<javac includeantruntime="false" srcdir="." destdir="classes"/>
+	</target>
+
+	<target name="run" depends="compile">
+		<java fork="true" classname="com.mxgraph.properties.PropGen">
+            <classpath>
+                <path location="classes"/>
+            </classpath>
+        </java>
+	</target>
+
+</project>
diff --git a/etc/unicode-tests/special'filename.xml b/etc/unicode-tests/special'filename.xml
deleted file mode 100644
index 39f19610817b6753b6eb4f88379c0ca42efd9e9d..0000000000000000000000000000000000000000
--- a/etc/unicode-tests/special'filename.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<mxGraphModel dx="695" dy="1211" grid="0" gridSize="10" guides="1" tooltips="1" connect="0" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" style="default-style2" math="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="äöü" style="ellipse;whiteSpace=wrap;html=1;blue" parent="1" vertex="1"><mxGeometry x="172" y="165" width="120" height="80" as="geometry"/></mxCell><mxCell id="3" value="öäü" style="ellipse;whiteSpace=wrap;html=1;yellow" parent="1" vertex="1"><mxGeometry x="421" y="165" width="120" height="80" as="geometry"/></mxCell><mxCell id="4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;" parent="1" source="2" target="3" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/etc/unicode-tests/utf16.xml b/etc/unicode-tests/utf16.xml
deleted file mode 100644
index 3b40a28cecaf6ff9c31a0cf23b60d76e8e4b7dbd..0000000000000000000000000000000000000000
Binary files a/etc/unicode-tests/utf16.xml and /dev/null differ
diff --git a/etc/unicode-tests/utf8-uncompressed.xml b/etc/unicode-tests/utf8-uncompressed.xml
deleted file mode 100644
index 39f19610817b6753b6eb4f88379c0ca42efd9e9d..0000000000000000000000000000000000000000
--- a/etc/unicode-tests/utf8-uncompressed.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<mxGraphModel dx="695" dy="1211" grid="0" gridSize="10" guides="1" tooltips="1" connect="0" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" style="default-style2" math="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="äöü" style="ellipse;whiteSpace=wrap;html=1;blue" parent="1" vertex="1"><mxGeometry x="172" y="165" width="120" height="80" as="geometry"/></mxCell><mxCell id="3" value="öäü" style="ellipse;whiteSpace=wrap;html=1;yellow" parent="1" vertex="1"><mxGeometry x="421" y="165" width="120" height="80" as="geometry"/></mxCell><mxCell id="4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;" parent="1" source="2" target="3" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/etc/unicode-tests/utf8.gliffy b/etc/unicode-tests/utf8.gliffy
deleted file mode 100644
index f09fcd1e439713c7dcd8fa3a395dc36bc2b13e91..0000000000000000000000000000000000000000
--- a/etc/unicode-tests/utf8.gliffy
+++ /dev/null
@@ -1 +0,0 @@
-{"contentType":"application/gliffy+json","version":"1.3","stage":{"background":"#FFFFFF","width":411,"height":205,"nodeIndex":2,"autoFit":true,"exportBorder":false,"gridOn":true,"snapToGrid":true,"drawingGuidesOn":true,"pageBreaksOn":false,"printGridOn":false,"printPaper":null,"printShrinkToFit":false,"printPortrait":false,"maxWidth":5000,"maxHeight":5000,"themeData":null,"viewportType":"default","fitBB":{"min":{"x":310,"y":110},"max":{"x":411,"y":205}},"printModel":{"pageSize":"a4","portrait":false,"fitToOnePage":false,"displayPageBreaks":false},"objects":[{"x":310.0,"y":110.0,"rotation":0.0,"id":0,"width":95.0,"height":95.0,"uid":"com.gliffy.shape.flowchart.flowchart_v1.default.manual_operation","order":0,"lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Shape","Shape":{"tid":"com.gliffy.stencil.trapezoid.basic_v1","strokeWidth":2.0,"strokeColor":"#333333","fillColor":"#FFFFFF","gradient":false,"dashStyle":null,"dropShadow":false,"state":0,"opacity":1.0,"shadowX":0.0,"shadowY":0.0}},"linkMap":[],"children":[{"x":2.0,"y":0.0,"rotation":0.0,"id":1,"width":91.0,"height":14.0,"uid":null,"order":"auto","lockAspectRatio":false,"lockShape":false,"graphic":{"type":"Text","Text":{"overflow":"none","paddingTop":8,"paddingRight":8,"paddingBottom":8,"paddingLeft":8,"outerPaddingTop":6,"outerPaddingRight":6,"outerPaddingBottom":2,"outerPaddingLeft":6,"type":"fixed","lineTValue":null,"linePerpValue":null,"cardinalityType":null,"html":"<p style=\"text-align:center;\"><span style=\"font-size:12px;text-decoration:none;font-family:Arial;\"><span style=\"text-decoration:none;\">ЂШЖЋ</span></span></p>","tid":null,"valign":"middle","vposition":"none","hposition":"none"}},"hidden":false,"layerId":"Vks6sl4vucyr"}],"hidden":false,"layerId":"Vks6sl4vucyr"}],"layers":[{"guid":"Vks6sl4vucyr","order":0,"name":"Layer 0","active":true,"locked":false,"visible":true,"nodeIndex":1}],"shapeStyles":{},"lineStyles":{},"textStyles":{}},"metadata":{"title":"untitled","revision":0,"exportBorder":false,"loadPosition":"default","libraries":["com.gliffy.libraries.flowchart.flowchart_v1.default","com.gliffy.libraries.basic.basic_v1.default","com.gliffy.libraries.swimlanes.swimlanes_v1.default","com.gliffy.libraries.images"],"lastSerialized":1436453227228},"embeddedResources":{"index":0,"resources":[]}}
\ No newline at end of file
diff --git a/etc/unicode-tests/utf8.png b/etc/unicode-tests/utf8.png
deleted file mode 100644
index 9d6da854248ee5e8e6bfd2345dadecbf0e74da23..0000000000000000000000000000000000000000
Binary files a/etc/unicode-tests/utf8.png and /dev/null differ
diff --git a/etc/unicode-tests/utf8.svg b/etc/unicode-tests/utf8.svg
deleted file mode 100644
index bf6b7c2ef8d86137332c8547177149bb1d6f8a50..0000000000000000000000000000000000000000
--- a/etc/unicode-tests/utf8.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="374px" height="86px" version="1.1" content="&lt;mxfile userAgent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36&quot; type=&quot;device&quot;&gt;&lt;diagram&gt;xZTBbqMwEIafhmOlGFI2OTY0m730lEPPLp6AJYORY0LYp88YxnEQSaWqlXqx7G+G3+N/bKIkq847w5vyTQtQUbwQ5yh5jeI4XT/j6EA/AhYzNpLCSDGyRQB7+R8o0dNWCjgSG5HVWlnZTGGu6xpyO1E8aEVbUFLDCy8fwD7nak7fpbDlSFdxGvg/kEVJ2zCWrsfI0fZeQ8CBt8o+DQhjLlxxrzVUlmzRMaM1yrhZdc5AOdemhvx9EL0WaaCenPfRB1TEiauWaoyyJHpZunGTDmM2OwZKoMW42HSltLBveO4iHXYZWWkrhSuG0w+nOquIijyBsUB3YUBU4Q50Bdb0mOKjf6hMf1FSujldaATzjS1vmrAixuk+FFfpYAlOyJX7DiV3HRq9IZ++4VCPmbr7AY+W/pPf8Gg5N0Dg46GlNrbUha652ga6MbqtBTiBxdSSh2YcdWsGG8O9tdwUQFnUKLfzp4YZUNzK0/RZf+H0uAzvc4jd/N6S7QU=&lt;/diagram&gt;&lt;/mxfile&gt;"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-dae8fc-1-7ea6e0-1-s-0"><stop offset="0%" style="stop-color:#DAE8FC"/><stop offset="100%" style="stop-color:#7EA6E0"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="mx-gradient-fff2cc-1-ffd966-1-s-0"><stop offset="0%" style="stop-color:#FFF2CC"/><stop offset="100%" style="stop-color:#FFD966"/></linearGradient></defs><g transform="translate(0.5,0.5)"><ellipse cx="61" cy="41" rx="60" ry="40" fill="#d0d0d0" stroke="#d0d0d0" transform="translate(2,3)" opacity="1"/><ellipse cx="61" cy="41" rx="60" ry="40" fill="url(#mx-gradient-dae8fc-1-7ea6e0-1-s-0)" stroke="#6c8ebf" pointer-events="none"/><g transform="translate(44,35)"><switch><foreignObject pointer-events="all" width="33" height="16" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 33px; white-space: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">äöü</div></div></foreignObject><text x="17" y="14" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><ellipse cx="310" cy="41" rx="60" ry="40" fill="#d0d0d0" stroke="#d0d0d0" transform="translate(2,3)" opacity="1"/><ellipse cx="310" cy="41" rx="60" ry="40" fill="url(#mx-gradient-fff2cc-1-ffd966-1-s-0)" stroke="#d6b656" pointer-events="none"/><g transform="translate(293,35)"><switch><foreignObject pointer-events="all" width="33" height="16" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 33px; white-space: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">öäü</div></div></foreignObject><text x="17" y="14" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 121 41 L 243.63 41" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 248.88 41 L 241.88 44.5 L 243.63 41 L 241.88 37.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/></g></svg>
\ No newline at end of file
diff --git a/etc/unicode-tests/utf8.vdx b/etc/unicode-tests/utf8.vdx
deleted file mode 100644
index 8868a556a998138289ab33ab1d26fcbef6513820..0000000000000000000000000000000000000000
--- a/etc/unicode-tests/utf8.vdx
+++ /dev/null
@@ -1,436 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<VisioDocument key='42BF9FAC719A34C4467A64C4EA82C459B1060A0BE86E691FDB4F8FB2611492BA3B23DA301AE4D52586D541616E3FFDE35F889633C2956C39593B242C8818D25B' start='190' metric='0' DocLangID='2057' buildnum='7147' version='14.0' xml:space='preserve' xmlns='http://schemas.microsoft.com/visio/2003/core' xmlns:vx='http://schemas.microsoft.com/visio/2006/extension' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><DocumentProperties><Creator>david</Creator><BuildNumberCreated>939531243</BuildNumberCreated><BuildNumberEdited>939531243</BuildNumberEdited><PreviewPicture Size='20124'>
-AQAAAIwAAAAAAAAAAAAAAE0AAABTAAAAAAAAAAAAAACcCgAAcAsAACBFTUYAAAEAnE4AAAMAAAABA
-AAADwAAAGwAAAAAAAAAAAoAAKAFAACHAwAA/AEAAAAAAAAAAAAAAAAAAMfHDQBgwAcAVgBJAFMASQ
-BPAAAARAByAGEAdwBpAG4AZwAAAAAAAABMAAAA/E0AAAAAAAAAAAAATQAAAFMAAAAAAAAAAAAAAE4
-AAABUAAAAIADMAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA////AAAAAABkAAAAKAAA
-AIwAAABwTQAAKAAAAE4AAABUAAAAAQAYAAAAAABwTQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////A
-AD///////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////8AAP////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////wAA//////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////AAD///////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////8AAP////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//9/f329vb+/v7///////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////wAA//////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////VFRUAAAAW1tb////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////AAD///////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////Pz88gICDf39//////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////8AAP////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////wAAAP//////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////wAA//////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////9/f3h4eHf39/AAAAf39/h4eH9/f3////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////AAD///////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////9gYGBgYGB/f39nZ2d/f39gYGBgYGD/////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////
-//////////////////////////////////////////////////8AAP///////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////0BAQJmZmebm5szMzL+/v5mZmUBAQP/////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////wAA/////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////mJiYJCQkNjY2MDAwNjY2JiYmt7e3///////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////AAD//////////
-//////////////////////////////////////////////////n5+f///////////////////////
-/////////////////////////////////////Pz8+/v78AAAC/v7/X19f////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////8AAP///
-////////////////////////////////////////////////////8nJyQcHB1RUVP////////////
-///////////////7+/v9nZ2fPz8////////////////8/Pz7+/vwAAAL+/v8/Pz//////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-wAA////////////////////////////////////////////////////////ycnJBwcHVFRU//////
-//////////////////////sbGxzMzM////////////////n5+fMDAwQEBAHBwcQEBAMDAwn5+f///
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////AAD///////////////////////////////////////////////////////////8ZGRnf39
-////////////////////////////////////////////////////9AQEC/v7/z8/P///////+/v79
-AQED/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////8AAP///////////////////////////////////////////////////////////y
-AgIN/f3////////////////////////////////////////////////////2BgYE1NTTMzM0xMTFR
-UVFdXV2BgYP//////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////wAA////////////////////////////////////////////////9/f3UF
-BQQEBADAwMOjo6QEBAz8/P////////////////////////////////////////////9/f3c3Nzc3N
-zGxsbeXl5h4eH9/f3////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////AAD///////////////////////////////////////////////
-+Hh4dgYGC/v7+5ubm/v7+np6coKCj////////////////////////////////////////////////
-///////8AAAD/////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////8AAP////////////////////////////////////////
-///////39/f19fX8zMzLGxsbGxsY+PjyAgIP/////////////////////////////////////////
-//////////////wAAAP//////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////wAA//////////////////////////////////
-//////////////7+/vFhYWAAAAAAAAAAAABwcHt7e3///////////////////////////////////
-/////////////////////AAAA////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////AAD///////////////////////////
-////////////////////////////////8gICDf39/////////////////////////////////////
-///////////////////////+Pj48eHh5ubm6np6f/////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////8AAP////////////////////
-///////////////////////////////8/Pz7+/vxgYGKenp7+/v/f39//////////////////////
-//////////////////////////////9/f3ykpKUhISGBgYP//////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////
-/////////////////////////////////////////////wAA/////////////////////////////
-///////////////////r6+vICAgQEBAKioqPj4+ODg4UFBQ//////////////////////////////
-//////////UFBQAAAAAAAAAAAAAAAAAAAAf39////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////AAD//////////////////////
-/////////////////////////9/f39/f3/MzMz////z8/PV1dUgICD///////////////////////
-////////////////9AQEC/v7////////8AAAD////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////8AAP///////////////
-////////////////////////////////6+vrxgYGCEhITIyMiwsLDAwMFBQUP////////////////
-///////////////////////0BAQL+/v8fHx7+/vwAAAL+/v8fHx//////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////wAA/////////
-///////////////////////////////////////////z8/Pv7+/Gxsbra2tv7+/9/f3//////////
-//////////////////////////////QEBAWlpaMDAwQEBAJCQkQEBAMDAwh4eH///////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////AAD//
-/////////////////////////////////////////////////////////8gICDf39////////////
-////////////////////////////////////9AQEAwMDC/v7/MzMypqan///+/v79AQED////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/8AAP///////////////////////////////////////////////9/f3yAgIAAAAAAAAAAAAAAAAJ
-+fn////////////////////////////////////////0BAQFBQUENDQz09PTQ0NEpKSi4uLoeHh//
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////wAA////////////////////////////////////////////////f39/eXl55ubm5ubm8/
-Pz1dXVICAg////////////////////////////////////////QEBAv7+/j4+Pf39/CQkJf39/mJi
-Y////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////AAD///////////////////////////////////////////////+Hh4dDQ0N3d3
-dmZmZiYmJ0dHQoKCj///////////////////////////////////////9AQEC/v7/Hx8e/v78AAAC
-/v7/Hx8f/////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////8AAP////////////////////////////////////////////////f392
-BgYCwsLBkZGSoqKkBAQM/Pz////////////////////////////////////////0BAQGVlZTAwMEB
-AQCAgIEBAQDAwMIeHh///////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////wAA//////////////////////////////////////////////
-//////////////ICAg39/f////////////////////////////////////////////////QEBAMDA
-wv7+/5ubmzMzM////v7+/QEBA////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////AAD///////////////////////////////////////
-////////////////////8gICDf39////////////////////////////////////////////////9
-AQEBHR0dDQ0NFRUVBQUFRUVFDQ0NwcHD/////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////8AAP////////////////////////////////
-///////////////////////////yAgIKenp7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v4mJiYuLi7+
-/v7+/vzQ0NI+Pj2ZmZlZWVgwMDHNzc3p6ev//////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////wAA//////////////////////////
-//////////////////////////////////eHh4QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAPDw8DQ0
-NU1NTTExMQEBADAwMMDAwQEBAQEBAYGBg////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////
-////////////////////////////////////////AAD//////////////////////////////////
-/////////////////////////////////////////////////////////////////9lZWVra2v///
-////9AQEC/v7/////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////8AAP///////////////////////////
-////////////////////////////////////////////////////////////////////////2BgYJ
-+fn////////0BAQL+/v//////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////wAA/////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//YGBgn5+f////////SEhIMDAwx8fH///////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////AAD//////////////
-/////////////////////////////////////////////////////////////////////9QUFAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTFgYGD////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////8AAP///////
-////////////////////////////////////////////////////////////////////////////w
-AAAP////////Pz89nZ2fPz8////////9/f3xQUFGBgYP/////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////wAA/
-/////////////////////////////////////////////////////////////////////////////
-//////FxcXX19fWFhYODg4Nzc3R0dHRUVFUVFRSEhIHh4eYGBg///////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///AAD///////////////////////////////////////////////////////////////////////
-/////////////FxcV5eXl/f39zc3M2NjZTU1N5eXlzc3Nzc3OLi4tgYGD////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////8AAP////////////////////////////////////////////////////////////////
-///////////////////////////////////2BgYJ+fn////////////5+fn2BgYP/////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////wAA//////////////////////////////////////////////////////////
-//////////////////////////////////////////YGBgn5+f////////////n5+fYGBg///////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////AAD///////////////////////////////////////////////////
-/////////////////////////////////////39/c4ODgAAAAAAAAAAAAAAABgYGD///+fn59gYGD
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////8AAP////////////////////////////////////////////
-///////////////////////////////////////////7+/v0BAQObm5ubm5r+/v////xwcHDc3Nyg
-oKGhoaP//////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////wAA//////////////////////////////////////
-//////////////////////////////////////////////////z8/PLi4uYmJiYmJiTU1NZGRkICA
-gra2tv7+/7+/v////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////AAD///////////////////////////////
-////////////////////////////////////////////////////////////+Hh4c9PT0jIyMvLy8
-9PT23t7f/////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////
-//////////////////////////////////8AAP///////////////////////////////////////
-////////////////////////////////////////////////////////////2BgYJ+fn/////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////wAA/////////////////////////////////
-///////////////////////////////////////////////////////////////////YGBgn5+f//
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////AAD//////////////////////////
-/////////////////////////////////////////////////////////////////////////9aWl
-qampr////////////////////Pz88QEBAAAAAAAAAAAAAICAi3t7f///////+3t7cICAgAAAAAAAA
-AAAAQEBDPz8/////////v7+/Pz8//////////////////////////////////////////////////
-//////////////////////////////////////////////////////8AAP///////////////////
-////////////////////////////////////////////////////////////////////////9nZ2e
-Li4pSUlKqqqoyMjH9/f39/f39/f39/fyoqKr+/v////////////7OzsyAgIH9/f39/fxgYGN/f3//
-//////////4uLizAwMH9/f39/fxwcHAUFBbm5uf//////////////////////////////////////
-/////////////////////////////////////////////////////////////wAA/////////////
-///////////ubm5goKC//////////////////////////////////////////////////////////
-//zMzM2dnZOjo6XV1dbW1tf39/f39/f39/f39/QEBAa2trenp6j4+PmZmZcnJyKCgof39/f39/KCg
-odHR0j4+PhYWFenp6UFBQNzc3f39/f39/UVFRCAgI19fX////////////////////////////////
-////////////////////////////////////////////////////////////////////AAD//////
-/////////////////8KCgoDAwO3t7f///////////////////////////////////////////////
-////////////////9ISEiPj4/z8/P////////////////v7+9AQEA9PT0wMDA6OjpFRUXf39/////
-////V1dU6Ojo9PT09PT09PT1MTEzv7+//////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////8AA
-P///////////////////////4mJiTMzM/f39/////////////////////////////////////////
-///////////////////////2BgYJ+fn//////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////wAA////////////////z8/Pf39/T09PMDAwf39/r6+v//////////////////////////////
-//////////z8/Pf39/f39/f39/f39/MDAwT09Pf39/f39/f39/f39/39/f///////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////AAD////////////v7+8gICB/f397e3tra2t/f38wMDC/v7////////////////////
-////////////////8QEBB/f39/f39/f39/f39vb293d3d/f39/f39/f39wcHAwMDD////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////8AAP///////////9/f3x0dHczMzNnZ2b+/v8zMzFdXV5+fn/////////////
-///////////////////////wAAAMzMzNnZ2ZmZmXZ2dm9vb5eXl5OTk8/Pz9nZ2bKysiAgIP/////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////wAA////////////////SEhIMzMzNjY2Nzc3NjY2MzMz39/f//////
-//////////////////////////////SUlJDw8PIyMjIyMjISEhJiYmKioqKSkpKSkpKSkpCgoKf39
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////AAD///////////////////+/v79zc3NBQUG/v7/n5+f///
-/////////////////////////////////////z8/PJycmsrKysrKysrKw+Pj5ra2u2tra2trasrKz
-Y2Nj/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////8AAP///////////////////////5+fn2BgYP////
-///////////////////////////////////////////////////////////////2BgYJ+fn//////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////
-/////////////////////////////wAA////////////////////////n5+fMDAwf39/f39/f39/f
-39/f39/f39/XV1dXl5ef39/f39/f39/f39/f39/f39/f39/f39/f39/MDAwn5+f//////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////AAD////////////////////////v7+9/f39/f39/f
-39/f39/f39/f39YWFhDQ0MzMzN5eXl/f39/f39/f39/f39/f39/f39/f39/f39/f3/v7+////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////8AAP///////////////////////////////
-////////////////////8zMzHFxcV9fX/////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////wAA/////////////////////////
-///////////////////////////////f39/f39///////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////AAD//////////////////
-//////////////////////Pz89/f39/f39/f38/Pz8/Pz9/f39/f39/f3+/v7////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////8AAP///////////
-////////////////////////9fX1yAgIH9/f39/f39/f29vb2dnZ39/f39/f39/fyAgIM/Pz/////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////wAA/////
-///////////////////////////////x8fHICAgeXl5YWFhVlZWRkZGRkZGTU1NTU1NeXl5ICAgx8
-fH///////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////A
-AD///////////////////////////////////////+fn59fX19fX19RUVE3NzcvLy9UVFRUVFRYWF
-ifn5/////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////8AAP///////////////////////////////////////////////////////39/f39/f/////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////wAA////////////////////////////////////////////39/fWFhYQEBAIiIiIC
-AgQEBAUFBQ39/f///////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////////AAD///////////////////////////////////////////9oaGhmZma2tr
-awsLChoaG2trZ4eHhgYGD////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////8AAP///////////////////////////////////////////4eHhx
-4eHigoKCMjIx4eHiMjIx4eHn9/f//////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////wAA//////////////////////////////////////////
-//////v7+/o6OjTk5OQkJCj4+Po6Oj///////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///////////////
-////////////////////////AAD//////////////////////////////////////////////////
-/////9vb29vb2////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////8AAP///////////////////////////////////////////
-/////////f39wsLCwoKCu/v7/////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////wAA/////////////////////////////////////
-///////////////////JCQkIiIi9/f3//////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////AAD//////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////8AAP///////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////wAA/////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////AAD//////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////8AAA4AA
-AAUAAAAAAAAABAAAAAUAAAA</PreviewPicture><CustomProps><CustomProp Name='_VPID_EXTENDED_VDX' PropType='Number'>1</CustomProp></CustomProps><TimeCreated>2015-04-29T17:56:02</TimeCreated><TimeSaved>2015-04-30T13:11:55</TimeSaved><TimeEdited>2015-04-29T17:56:03</TimeEdited><TimePrinted>2015-04-29T17:56:02</TimePrinted></DocumentProperties><DocumentSettings TopPage='457' DefaultTextStyle='3' DefaultLineStyle='3' DefaultFillStyle='3' DefaultGuideStyle='4'><GlueSettings>9</GlueSettings><SnapSettings>295</SnapSettings><SnapExtensions>34</SnapExtensions><DynamicGridEnabled>0</DynamicGridEnabled><ProtectStyles>0</ProtectStyles><ProtectShapes>0</ProtectShapes><ProtectMasters>0</ProtectMasters><ProtectBkgnds>0</ProtectBkgnds></DocumentSettings><Colors><ColorEntry IX='0' RGB='#000000'/><ColorEntry IX='1' RGB='#FFFFFF'/><ColorEntry IX='2' RGB='#FF0000'/><ColorEntry IX='3' RGB='#00FF00'/><ColorEntry IX='4' RGB='#0000FF'/><ColorEntry IX='5' RGB='#FFFF00'/><ColorEntry IX='6' RGB='#FF00FF'/><ColorEntry IX='7' RGB='#00FFFF'/><ColorEntry IX='8' RGB='#800000'/><ColorEntry IX='9' RGB='#008000'/><ColorEntry IX='10' RGB='#000080'/><ColorEntry IX='11' RGB='#808000'/><ColorEntry IX='12' RGB='#800080'/><ColorEntry IX='13' RGB='#008080'/><ColorEntry IX='14' RGB='#C0C0C0'/><ColorEntry IX='15' RGB='#E6E6E6'/><ColorEntry IX='16' RGB='#CDCDCD'/><ColorEntry IX='17' RGB='#B3B3B3'/><ColorEntry IX='18' RGB='#9A9A9A'/><ColorEntry IX='19' RGB='#808080'/><ColorEntry IX='20' RGB='#666666'/><ColorEntry IX='21' RGB='#4D4D4D'/><ColorEntry IX='22' RGB='#333333'/><ColorEntry IX='23' RGB='#1A1A1A'/><ColorEntry IX='24' RGB='#000000'/><ColorEntry IX='25' RGB='#FFFFFF'/></Colors><FaceNames><FaceName ID='1' Name='Arial Unicode MS' UnicodeRanges='-1 -369098753 63 0' CharSets='1614742015 -65536' Panos='2 11 6 4 2 2 2 2 2 4' Flags='357'/><FaceName ID='2' Name='Symbol' UnicodeRanges='0 0 0 0' CharSets='-2147483648 0' Panos='5 5 1 2 1 7 6 2 5 7' Flags='261'/><FaceName ID='3' Name='Wingdings' UnicodeRanges='0 0 0 0' CharSets='-2147483648 0' Panos='5 0 0 0 0 0 0 0 0 0' Flags='261'/><FaceName ID='4' Name='Calibri' UnicodeRanges='-536870145 1073786111 1 0' CharSets='536871327 0' Panos='2 15 5 2 2 2 4 3 2 4' Flags='261'/><FaceName ID='5' Name='SimSun' UnicodeRanges='3 680460288 6 0' CharSets='262145 0' Panos='2 1 6 0 3 1 1 1 1 1' Flags='421'/><FaceName ID='6' Name='PMingLiU' UnicodeRanges='-1610611969 684719354 22 0' CharSets='1048577 0' Panos='2 2 5 0 0 0 0 0 0 0' Flags='421'/><FaceName ID='7' Name='MS PGothic' UnicodeRanges='-536870145 1791491579 18 0' CharSets='1073873055 -539557888' Panos='2 11 6 0 7 2 5 8 2 4' Flags='421'/><FaceName ID='8' Name='Dotum' UnicodeRanges='-1342176593 1775729915 48 0' CharSets='1074266271 -539557888' Panos='2 11 6 0 0 1 1 1 1 1' Flags='421'/><FaceName ID='9' Name='Sylfaen' UnicodeRanges='67110535 0 0 0' CharSets='536871071 0' Panos='1 10 5 2 5 3 6 3 3 3' Flags='325'/><FaceName ID='10' Name='Estrangelo Edessa' UnicodeRanges='-2147475389 0 128 0' CharSets='1 0' Panos='3 8 6 0 0 0 0 0 0 0' Flags='325'/><FaceName ID='11' Name='Vrinda' UnicodeRanges='65539 0 0 0' CharSets='1 0' Panos='2 11 5 2 4 2 4 2 2 3' Flags='325'/><FaceName ID='12' Name='Shruti' UnicodeRanges='262147 0 0 0' CharSets='1 0' Panos='2 11 5 2 4 2 4 2 2 3' Flags='325'/><FaceName ID='13' Name='Mangal' UnicodeRanges='32771 0 0 0' CharSets='1 0' Panos='2 4 5 3 5 2 3 3 2 2' Flags='325'/><FaceName ID='14' Name='Tunga' UnicodeRanges='4194307 0 0 0' CharSets='1 0' Panos='2 11 5 2 4 2 4 2 2 3' Flags='325'/><FaceName ID='15' Name='Sendnya' UnicodeRanges='-520082689 -1073741822 8 0' CharSets='536936959 539492352' Panos='2 11 6 4 2 2 2 2 2 4' Flags='327'/><FaceName ID='16' Name='Raavi' UnicodeRanges='131075 0 0 0' CharSets='1 0' Panos='2 11 5 2 4 2 4 2 2 3' Flags='325'/><FaceName ID='17' Name='Dhenu' UnicodeRanges='-520082689 -1073741822 8 0' CharSets='536936959 539492352' Panos='2 11 6 4 2 2 2 2 2 4' Flags='327'/><FaceName ID='18' Name='Latha' UnicodeRanges='1048579 0 0 0' CharSets='1 0' Panos='2 11 6 4 2 2 2 2 2 4' Flags='325'/><FaceName ID='19' Name='Gautami' UnicodeRanges='2097155 0 0 0' CharSets='1 0' Panos='2 11 5 2 4 2 4 2 2 3' Flags='325'/><FaceName ID='20' Name='Cordia New' UnicodeRanges='-2130706429 0 0 0' CharSets='65537 0' Panos='2 11 3 4 2 2 2 2 2 4' Flags='325'/><FaceName ID='21' Name='Arial' UnicodeRanges='-536859905 -1073711037 9 0' CharSets='1073742335 -65536' Panos='2 11 6 4 2 2 2 2 2 4' Flags='325'/><FaceName ID='22' Name='Malgun Gothic' UnicodeRanges='-1879047505 30899451 18 0' CharSets='524289 0' Panos='2 11 5 3 2 0 0 2 0 4' Flags='421'/><FaceName ID='23' Name='Times New Roman' UnicodeRanges='-536859905 -1073711039 9 0' CharSets='1073742335 -65536' Panos='2 2 6 3 5 4 5 2 3 4' Flags='325'/></FaceNames><StyleSheets><StyleSheet ID='0' NameU='No Style' Name='No Style'><StyleProp><EnableLineProps>1</EnableLineProps><EnableFillProps>1</EnableFillProps><EnableTextProps>1</EnableTextProps><HideForApply>0</HideForApply></StyleProp><Line><LineWeight>0.01041666666666667</LineWeight><LineColor>0</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize>2</EndArrowSize><BeginArrow>0</BeginArrow><EndArrow>0</EndArrow><LineCap>0</LineCap><BeginArrowSize>2</BeginArrowSize><LineColorTrans>0</LineColorTrans></Line><Fill><FillForegnd>1</FillForegnd><FillBkgnd>0</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd>0</ShdwForegnd><ShdwBkgnd>1</ShdwBkgnd><ShdwPattern>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans>0</ShdwForegndTrans><ShdwBkgndTrans>0</ShdwBkgndTrans><ShapeShdwType>0</ShapeShdwType><ShapeShdwOffsetX>0</ShapeShdwOffsetX><ShapeShdwOffsetY>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><Protection><LockWidth>0</LockWidth><LockHeight>0</LockHeight><LockMoveX>0</LockMoveX><LockMoveY>0</LockMoveY><LockAspect>0</LockAspect><LockDelete>0</LockDelete><LockBegin>0</LockBegin><LockEnd>0</LockEnd><LockRotate>0</LockRotate><LockCrop>0</LockCrop><LockVtxEdit>0</LockVtxEdit><LockTextEdit>0</LockTextEdit><LockFormat>0</LockFormat><LockGroup>0</LockGroup><LockCalcWH>0</LockCalcWH><LockSelect>0</LockSelect><LockCustProp>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat>0</vx:LockFromGroupFormat><vx:LockThemeColors>0</vx:LockThemeColors><vx:LockThemeEffects>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles>0</NoObjHandles><NonPrinting>0</NonPrinting><NoCtlHandles>0</NoCtlHandles><NoAlignBox>0</NoAlignBox><UpdateAlignBox>0</UpdateAlignBox><HideText>0</HideText><DynFeedback>0</DynFeedback><GlueType>0</GlueType><WalkPreference>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>0</ObjType><Comment V='null'/><IsDropSource>0</IsDropSource><NoLiveDynamics>0</NoLiveDynamics><LocalizeMerge>0</LocalizeMerge><Calendar>0</Calendar><LangID>2057</LangID><ShapeKeywords V='null'/><DropOnPageScale>1</DropOnPageScale></Misc><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Help><HelpTopic V='null'/><Copyright V='null'/></Help><LayerMem><LayerMember V='null'/></LayerMem><RulerGrid><XRulerDensity>32</XRulerDensity><YRulerDensity>32</YRulerDensity><XRulerOrigin>0</XRulerOrigin><YRulerOrigin>0</YRulerOrigin><XGridDensity>8</XGridDensity><YGridDensity>8</YGridDensity><XGridSpacing>0</XGridSpacing><YGridSpacing>0</YGridSpacing><XGridOrigin>0</XGridOrigin><YGridOrigin>0</YGridOrigin></RulerGrid><Image><Gamma>1</Gamma><Contrast>0.5</Contrast><Brightness>0.5</Brightness><Sharpen>0</Sharpen><Blur>0</Blur><Denoise>0</Denoise><Transparency>0</Transparency></Image><Group><SelectMode>1</SelectMode><DisplayMode>2</DisplayMode><IsDropTarget>0</IsDropTarget><IsSnapTarget>1</IsSnapTarget><IsTextEditTarget>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Layout><ShapePermeableX>0</ShapePermeableX><ShapePermeableY>0</ShapePermeableY><ShapePermeablePlace>0</ShapePermeablePlace><ShapeFixedCode>0</ShapeFixedCode><ShapePlowCode>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode>0</ConLineJumpCode><ConLineJumpStyle>0</ConLineJumpStyle><ConLineJumpDirX>0</ConLineJumpDirX><ConLineJumpDirY>0</ConLineJumpDirY><ShapePlaceFlip>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit>0</ShapeSplit><ShapeSplittable>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships>0</v14:Relationships><v14:DisplayLevel>0</v14:DisplayLevel></v14:Layout><PageLayout><ResizePage>0</ResizePage><EnableGrid>0</EnableGrid><DynamicsOff>0</DynamicsOff><CtrlAsInput>0</CtrlAsInput><PlaceStyle>0</PlaceStyle><RouteStyle>0</RouteStyle><PlaceDepth>0</PlaceDepth><PlowCode>0</PlowCode><LineJumpCode>1</LineJumpCode><LineJumpStyle>0</LineJumpStyle><PageLineJumpDirX>0</PageLineJumpDirX><PageLineJumpDirY>0</PageLineJumpDirY><LineToNodeX>0.125</LineToNodeX><LineToNodeY>0.125</LineToNodeY><BlockSizeX>0.25</BlockSizeX><BlockSizeY>0.25</BlockSizeY><AvenueSizeX>0.375</AvenueSizeX><AvenueSizeY>0.375</AvenueSizeY><LineToLineX>0.125</LineToLineX><LineToLineY>0.125</LineToLineY><LineJumpFactorX>0.66666666666667</LineJumpFactorX><LineJumpFactorY>0.66666666666667</LineJumpFactorY><LineAdjustFrom>0</LineAdjustFrom><LineAdjustTo>0</LineAdjustTo><PlaceFlip>0</PlaceFlip><LineRouteExt>0</LineRouteExt><PageShapeSplit>0</PageShapeSplit></PageLayout><v14:PageLayout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:AvoidPageBreaks>0</v14:AvoidPageBreaks></v14:PageLayout><PrintProps><PageLeftMargin>0.25</PageLeftMargin><PageRightMargin>0.25</PageRightMargin><PageTopMargin>0.25</PageTopMargin><PageBottomMargin>0.25</PageBottomMargin><ScaleX>1</ScaleX><ScaleY>1</ScaleY><PagesX>1</PagesX><PagesY>1</PagesY><CenterX>0</CenterX><CenterY>0</CenterY><OnPage>0</OnPage><PrintGrid>0</PrintGrid><PrintPageOrientation>1</PrintPageOrientation><PaperKind>1</PaperKind><PaperSource>7</PaperSource></PrintProps><Char IX='0'><Font>4</Font><Color>0</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1666666666666667</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1.2</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Tabs IX='0'/></StyleSheet><StyleSheet ID='1' NameU='Text Only' Name='Text Only' LineStyle='3' FillStyle='3' TextStyle='3'><StyleProp><EnableLineProps>1</EnableLineProps><EnableFillProps>1</EnableFillProps><EnableTextProps>1</EnableTextProps><HideForApply>0</HideForApply></StyleProp><Line><LineWeight F='Inh'>0.01041666666666667</LineWeight><LineColor F='Inh'>0</LineColor><LinePattern>0</LinePattern><Rounding F='Inh'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Inh'>1</FillForegnd><FillBkgnd F='Inh'>0</FillBkgnd><FillPattern>0</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Inh'>0</FillForegndTrans><FillBkgndTrans F='Inh'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>0</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><Para IX='0'><IndFirst F='Inh'>0</IndFirst><IndLeft F='Inh'>0</IndLeft><IndRight F='Inh'>0</IndRight><SpLine F='Inh'>-1.2</SpLine><SpBefore F='Inh'>0</SpBefore><SpAfter F='Inh'>0</SpAfter><HorzAlign>0</HorzAlign><Bullet F='Inh'>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para></StyleSheet><StyleSheet ID='2' NameU='None' Name='None' LineStyle='3' FillStyle='3' TextStyle='3'><StyleProp><EnableLineProps>1</EnableLineProps><EnableFillProps>1</EnableFillProps><EnableTextProps>1</EnableTextProps><HideForApply>0</HideForApply></StyleProp><Line><LineWeight F='Inh'>0.01041666666666667</LineWeight><LineColor F='Inh'>0</LineColor><LinePattern>0</LinePattern><Rounding F='Inh'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Inh'>1</FillForegnd><FillBkgnd F='Inh'>0</FillBkgnd><FillPattern>0</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Inh'>0</FillForegndTrans><FillBkgndTrans F='Inh'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill></StyleSheet><StyleSheet ID='3' NameU='Normal' Name='Normal' LineStyle='0' FillStyle='0' TextStyle='0'><StyleProp><EnableLineProps>1</EnableLineProps><EnableFillProps>1</EnableFillProps><EnableTextProps>1</EnableTextProps><HideForApply>0</HideForApply></StyleProp><TextBlock><LeftMargin Unit='PT'>0.05555555555555555</LeftMargin><RightMargin Unit='PT'>0.05555555555555555</RightMargin><TopMargin Unit='PT'>0.05555555555555555</TopMargin><BottomMargin Unit='PT'>0.05555555555555555</BottomMargin><VerticalAlign F='Inh'>1</VerticalAlign><TextBkgnd F='Inh'>0</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock></StyleSheet><StyleSheet ID='4' NameU='Guide' Name='Guide' LineStyle='3' FillStyle='3' TextStyle='3'><StyleProp><EnableLineProps>1</EnableLineProps><EnableFillProps>1</EnableFillProps><EnableTextProps>1</EnableTextProps><HideForApply>0</HideForApply></StyleProp><Line><LineWeight Unit='PT'>0</LineWeight><LineColor>4</LineColor><LinePattern>23</LinePattern><Rounding F='Inh'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Inh'>1</FillForegnd><FillBkgnd F='Inh'>0</FillBkgnd><FillPattern>0</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Inh'>0</FillForegndTrans><FillBkgndTrans F='Inh'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin Unit='PT' F='Inh'>0.05555555555555555</LeftMargin><RightMargin Unit='PT' F='Inh'>0.05555555555555555</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>2</VerticalAlign><TextBkgnd F='Inh'>0</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting>1</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType F='Inh'>0</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX>1</ShapePermeableX><ShapePermeableY>1</ShapePermeableY><ShapePermeablePlace>1</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle F='Inh'>0</ShapeRouteStyle><ConFixedCode F='Inh'>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt F='Inh'>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Char IX='0'><Font F='Inh'>4</Font><Color>4</Color><Style F='Inh'>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.125</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru F='Inh'>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char></StyleSheet></StyleSheets><DocumentSheet NameU='TheDoc' Name='TheDoc' LineStyle='0' FillStyle='0' TextStyle='0'><DocProps><OutputFormat>0</OutputFormat><LockPreview>0</LockPreview><AddMarkup>0</AddMarkup><ViewMarkup>0</ViewMarkup><PreviewQuality>0</PreviewQuality><PreviewScope>0</PreviewScope><DocLangID>2057</DocLangID></DocProps></DocumentSheet><Masters><Master ID='3107' NameU='com.lucidchart.UMLStateBlock21' Name='UMLStateBlock' Prompt='' IconSize='1' AlignName='2' MatchByName='0' IconUpdate='0' UniqueID='{49CB2889-0C23-0000-8E40-00608CF305B2}' BaseID='{E49F87FB-9796-4DE2-848A-A948993FC5A6}' PatternFlags='0' Hidden='0'><PageSheet LineStyle='0' FillStyle='0' TextStyle='0'><PageProps><PageWidth>8.5</PageWidth><PageHeight>11</PageHeight><ShdwOffsetX>0.125</ShdwOffsetX><ShdwOffsetY>-0.125</ShdwOffsetY><PageScale Unit='IN_F'>1</PageScale><DrawingScale Unit='IN_F'>1</DrawingScale><DrawingSizeType>0</DrawingSizeType><DrawingScaleType>0</DrawingScaleType><InhibitSnap>0</InhibitSnap><UIVisibility>0</UIVisibility><ShdwType>0</ShdwType><ShdwObliqueAngle>0</ShdwObliqueAngle><ShdwScaleFactor>1</ShdwScaleFactor></PageProps><v14:PageProps xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:DrawingResizeType>1</v14:DrawingResizeType></v14:PageProps></PageSheet><Shapes><Shape ID='5' Type='Group' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX>2.75</PinX><PinY>5.6313</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#000000</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>1</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Pega <cp IX='1'/>10 <cp IX='2'/>estabelecimentos
-</Text><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><Shapes><Shape ID='6' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='Sheet.5!Width*0.5'>0.5</PinX><PinY F='Sheet.5!Height*0.5'>0.25</PinY><Width F='Sheet.5!Width*1'>1</Width><Height F='Sheet.5!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight F='Sheet.5!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.5!LineColor'>#000000</LineColor><LinePattern F='Sheet.5!LinePattern'>1</LinePattern><Rounding F='Sheet.5!Rounding'>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.5!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.5!EndArrow'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd F='Sheet.5!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.5!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.5!FillForegndTrans'>1</FillForegndTrans><FillBkgndTrans F='Sheet.5!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><vx:Fill xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:FillForegnd F='GUARD(TINT(Sheet.5!FillForegnd,306))'>#ffffff</vx:FillForegnd></vx:Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill>0</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X F='Width*0.1'>0.1</X><Y F='Height*1'>0.5</Y></MoveTo><NURBSTo IX='2'><X F='Width*0'>0</X><Y F='Height*0.8'>0.4</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.045,1,0,1, 0,0.91,0,1)'>NURBS(1, 3, 0, 0, 0.045,1,0,1, 0,0.91,0,1)</E></NURBSTo><LineTo IX='3'><X F='Width*0'>0</X><Y F='Height*0.2'>0.1</Y></LineTo><NURBSTo IX='4'><X F='Width*0.1'>0.1</X><Y F='Height*0'>0</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0,0.09,0,1, 0.045,0,0,1)'>NURBS(1, 3, 0, 0, 0,0.09,0,1, 0.045,0,0,1)</E></NURBSTo><LineTo IX='5'><X F='Width*0.9'>0.9</X><Y F='Height*0'>0</Y></LineTo><NURBSTo IX='6'><X F='Width*1'>1</X><Y F='Height*0.2'>0.1</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.955,0,0,1, 1,0.09,0,1)'>NURBS(1, 3, 0, 0, 0.955,0,0,1, 1,0.09,0,1)</E></NURBSTo><LineTo IX='7'><X F='Width*1'>1</X><Y F='Height*0.8'>0.4</Y></LineTo><NURBSTo IX='8'><X F='Width*0.9'>0.9</X><Y F='Height*1'>0.5</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 1,0.91,0,1, 0.955,1,0,1)'>NURBS(1, 3, 0, 0, 1,0.91,0,1, 0.955,1,0,1)</E></NURBSTo><LineTo IX='9'><X F='Width*0.1'>0.1</X><Y F='Height*1'>0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape></Shapes><Icon>
-AAABAAEAICAQ/gAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/w
-D/AP//AAD///8A///////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAA==</Icon></Master><Master ID='3108' NameU='com.lucidchart.UMLDecisionBlock20' Name='UMLDecisionBlock' Prompt='' IconSize='1' AlignName='2' MatchByName='0' IconUpdate='0' UniqueID='{49CB2899-0C24-0000-8E40-00608CF305B2}' BaseID='{64CCBF75-1F4B-458F-878C-AEDC494B2430}' PatternFlags='0' Hidden='0'><PageSheet LineStyle='0' FillStyle='0' TextStyle='0'><PageProps><PageWidth>8.5</PageWidth><PageHeight>11</PageHeight><ShdwOffsetX>0.125</ShdwOffsetX><ShdwOffsetY>-0.125</ShdwOffsetY><PageScale Unit='IN_F'>1</PageScale><DrawingScale Unit='IN_F'>1</DrawingScale><DrawingSizeType>0</DrawingSizeType><DrawingScaleType>0</DrawingScaleType><InhibitSnap>0</InhibitSnap><UIVisibility>0</UIVisibility><ShdwType>0</ShdwType><ShdwObliqueAngle>0</ShdwObliqueAngle><ShdwScaleFactor>1</ShdwScaleFactor></PageProps><v14:PageProps xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:DrawingResizeType>1</v14:DrawingResizeType></v14:PageProps></PageSheet><Shapes><Shape ID='5' Type='Group' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX>4.625</PinX><PinY>9.8813</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#000000</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>1</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Shapes><Shape ID='6' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='Sheet.5!Width*0.5'>0.125</PinX><PinY F='Sheet.5!Height*0.5'>0.125</PinY><Width F='Sheet.5!Width*1'>0.25</Width><Height F='Sheet.5!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight F='Sheet.5!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.5!LineColor'>#000000</LineColor><LinePattern F='Sheet.5!LinePattern'>1</LinePattern><Rounding F='Sheet.5!Rounding'>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.5!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.5!EndArrow'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd F='Sheet.5!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.5!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.5!FillForegndTrans'>1</FillForegndTrans><FillBkgndTrans F='Sheet.5!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><vx:Fill xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:FillForegnd F='GUARD(TINT(Sheet.5!FillForegnd,306))'>#ffffff</vx:FillForegnd></vx:Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill>0</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X F='Width*0.4124'>0.1031</X><Y F='Height*0.9124'>0.2281</Y></MoveTo><NURBSTo IX='2'><X F='Width*0.5876'>0.1469</X><Y F='Height*0.9124'>0.2281</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.46,0.96,0,1, 0.54,0.96,0,1)'>NURBS(1, 3, 0, 0, 0.46,0.96,0,1, 0.54,0.96,0,1)</E></NURBSTo><LineTo IX='3'><X F='Width*0.9124'>0.2281</X><Y F='Height*0.5876'>0.1469</Y></LineTo><NURBSTo IX='4'><X F='Width*0.9124'>0.2281</X><Y F='Height*0.4124'>0.1031</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.96,0.54,0,1, 0.96,0.46,0,1)'>NURBS(1, 3, 0, 0, 0.96,0.54,0,1, 0.96,0.46,0,1)</E></NURBSTo><LineTo IX='5'><X F='Width*0.5876'>0.1469</X><Y F='Height*0.0876'>0.0219</Y></LineTo><NURBSTo IX='6'><X F='Width*0.4124'>0.1031</X><Y F='Height*0.0876'>0.0219</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.54,0.04,0,1, 0.46,0.04,0,1)'>NURBS(1, 3, 0, 0, 0.54,0.04,0,1, 0.46,0.04,0,1)</E></NURBSTo><LineTo IX='7'><X F='Width*0.0876'>0.0219</X><Y F='Height*0.4124'>0.1031</Y></LineTo><NURBSTo IX='8'><X F='Width*0.0876'>0.0219</X><Y F='Height*0.5876'>0.1469</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.04,0.46,0,1, 0.04,0.54,0,1)'>NURBS(1, 3, 0, 0, 0.04,0.46,0,1, 0.04,0.54,0,1)</E></NURBSTo><LineTo IX='9'><X F='Width*0.4124'>0.1031</X><Y F='Height*0.9124'>0.2281</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape></Shapes><Icon>
-AAABAAEAICAQ/gAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/w
-D/AP//AAD///8A///////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAA==</Icon></Master><Master ID='3109' NameU='com.lucidchart.UMLEndBlock30' Name='UMLEndBlock' Prompt='' IconSize='1' AlignName='2' MatchByName='0' IconUpdate='0' UniqueID='{49CB2899-0C25-0000-8E40-00608CF305B2}' BaseID='{80CD9955-48D9-46BA-A93E-CF45345835D3}' PatternFlags='0' Hidden='0'><PageSheet LineStyle='0' FillStyle='0' TextStyle='0'><PageProps><PageWidth>8.5</PageWidth><PageHeight>11</PageHeight><ShdwOffsetX>0.125</ShdwOffsetX><ShdwOffsetY>-0.125</ShdwOffsetY><PageScale Unit='IN_F'>1</PageScale><DrawingScale Unit='IN_F'>1</DrawingScale><DrawingSizeType>0</DrawingSizeType><DrawingScaleType>0</DrawingScaleType><InhibitSnap>0</InhibitSnap><UIVisibility>0</UIVisibility><ShdwType>0</ShdwType><ShdwObliqueAngle>0</ShdwObliqueAngle><ShdwScaleFactor>1</ShdwScaleFactor></PageProps><v14:PageProps xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:DrawingResizeType>1</v14:DrawingResizeType></v14:PageProps></PageSheet><Shapes><Shape ID='5' Type='Group' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX>2.75</PinX><PinY>2.6938</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#000000</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>1</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Shapes><Shape ID='6' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='Sheet.5!Width*0.5'>0.125</PinX><PinY F='Sheet.5!Height*0.5'>0.125</PinY><Width F='Sheet.5!Width*1'>0.25</Width><Height F='Sheet.5!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight F='Sheet.5!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.5!LineColor'>#000000</LineColor><LinePattern F='Sheet.5!LinePattern'>1</LinePattern><Rounding F='Sheet.5!Rounding'>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.5!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.5!EndArrow'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd F='Sheet.5!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.5!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.5!FillForegndTrans'>1</FillForegndTrans><FillBkgndTrans F='Sheet.5!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><vx:Fill xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:FillForegnd F='GUARD(TINT(Sheet.5!FillForegnd,306))'>#ffffff</vx:FillForegnd></vx:Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill>0</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y></MoveTo><NURBSTo IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 1,0.2252,0,1, 0.7752,0,0,1)'>NURBS(1, 3, 0, 0, 1,0.2252,0,1, 0.7752,0,0,1)</E></NURBSTo><NURBSTo IX='3'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.2252,0,0,1, 0,0.2252,0,1)'>NURBS(1, 3, 0, 0, 0.2252,0,0,1, 0,0.2252,0,1)</E></NURBSTo><NURBSTo IX='4'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0,0.7752,0,1, 0.2252,1,0,1)'>NURBS(1, 3, 0, 0, 0,0.7752,0,1, 0.2252,1,0,1)</E></NURBSTo><NURBSTo IX='5'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.7752,1,0,1, 1,0.7752,0,1)'>NURBS(1, 3, 0, 0, 0.7752,1,0,1, 1,0.7752,0,1)</E></NURBSTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='7' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='Sheet.5!Width*0.5'>0.125</PinX><PinY F='Sheet.5!Height*0.5'>0.125</PinY><Width F='Sheet.5!Width*1'>0.25</Width><Height F='Sheet.5!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight F='Sheet.5!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.5!LineColor'>#000000</LineColor><LinePattern F='Sheet.5!LinePattern'>1</LinePattern><Rounding F='Sheet.5!Rounding'>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.5!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.5!EndArrow'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.5!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.5!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.5!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.5!FillForegndTrans'>1</FillForegndTrans><FillBkgndTrans F='Sheet.5!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill>0</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X F='Width*0.8'>0.2</X><Y F='Height*0.5'>0.125</Y></MoveTo><NURBSTo IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0.2'>0.05</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.8,0.3352,0,1, 0.6652,0.2,0,1)'>NURBS(1, 3, 0, 0, 0.8,0.3352,0,1, 0.6652,0.2,0,1)</E></NURBSTo><NURBSTo IX='3'><X F='Width*0.2'>0.05</X><Y F='Height*0.5'>0.125</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.3348,0.2,0,1, 0.2,0.3352,0,1)'>NURBS(1, 3, 0, 0, 0.3348,0.2,0,1, 0.2,0.3352,0,1)</E></NURBSTo><NURBSTo IX='4'><X F='Width*0.5'>0.125</X><Y F='Height*0.8'>0.2</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.2,0.6648,0,1, 0.3348,0.8,0,1)'>NURBS(1, 3, 0, 0, 0.2,0.6648,0,1, 0.3348,0.8,0,1)</E></NURBSTo><NURBSTo IX='5'><X F='Width*0.8'>0.2</X><Y F='Height*0.5'>0.125</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.6652,0.8,0,1, 0.8,0.6648,0,1)'>NURBS(1, 3, 0, 0, 0.6652,0.8,0,1, 0.8,0.6648,0,1)</E></NURBSTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape></Shapes><Icon>
-AAABAAEAICAQ/gAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/w
-D/AP//AAD///8A///////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAA==</Icon></Master><Master ID='3110' NameU='com.lucidchart.UMLStartBlock20' Name='UMLStartBlock' Prompt='' IconSize='1' AlignName='2' MatchByName='0' IconUpdate='0' UniqueID='{49CB2899-0C26-0000-8E40-00608CF305B2}' BaseID='{B94ABBD1-5CC3-48DE-8199-EA9A0ABF60AB}' PatternFlags='0' Hidden='0'><PageSheet LineStyle='0' FillStyle='0' TextStyle='0'><PageProps><PageWidth>8.5</PageWidth><PageHeight>11</PageHeight><ShdwOffsetX>0.125</ShdwOffsetX><ShdwOffsetY>-0.125</ShdwOffsetY><PageScale Unit='IN_F'>1</PageScale><DrawingScale Unit='IN_F'>1</DrawingScale><DrawingSizeType>0</DrawingSizeType><DrawingScaleType>0</DrawingScaleType><InhibitSnap>0</InhibitSnap><UIVisibility>0</UIVisibility><ShdwType>0</ShdwType><ShdwObliqueAngle>0</ShdwObliqueAngle><ShdwScaleFactor>1</ShdwScaleFactor></PageProps><v14:PageProps xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:DrawingResizeType>1</v14:DrawingResizeType></v14:PageProps></PageSheet><Shapes><Shape ID='5' Type='Group' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX>2.625</PinX><PinY>14.3188</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#000000</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>1</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX>0</DirX><DirY>0</DirY><Type>0</Type><AutoGen>0</AutoGen><Prompt V='null'/></Connection><Shapes><Shape ID='6' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='Sheet.5!Width*0.5'>0.125</PinX><PinY F='Sheet.5!Height*0.5'>0.125</PinY><Width F='Sheet.5!Width*1'>0.25</Width><Height F='Sheet.5!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight F='Sheet.5!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.5!LineColor'>#000000</LineColor><LinePattern F='Sheet.5!LinePattern'>1</LinePattern><Rounding F='Sheet.5!Rounding'>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.5!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.5!EndArrow'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.5!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.5!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.5!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.5!FillForegndTrans'>1</FillForegndTrans><FillBkgndTrans F='Sheet.5!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill>0</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y></MoveTo><NURBSTo IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 1,0.2252,0,1, 0.7752,0,0,1)'>NURBS(1, 3, 0, 0, 1,0.2252,0,1, 0.7752,0,0,1)</E></NURBSTo><NURBSTo IX='3'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.2252,0,0,1, 0,0.2252,0,1)'>NURBS(1, 3, 0, 0, 0.2252,0,0,1, 0,0.2252,0,1)</E></NURBSTo><NURBSTo IX='4'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0,0.7752,0,1, 0.2252,1,0,1)'>NURBS(1, 3, 0, 0, 0,0.7752,0,1, 0.2252,1,0,1)</E></NURBSTo><NURBSTo IX='5'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><A>0</A><B>1</B><C>0</C><D>1</D><E Unit='NURBS' F='NURBS(1, 3, 0, 0, 0.7752,1,0,1, 1,0.7752,0,1)'>NURBS(1, 3, 0, 0, 0.7752,1,0,1, 1,0.7752,0,1)</E></NURBSTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape></Shapes><Icon>
-AAABAAEAICAQ/gAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/w
-D/AP//AAD///8A///////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAA==</Icon></Master></Masters><Pages><Page ID='457' NameU='State Diagram' Name='State Diagram' ViewScale='-1' ViewCenterX='7.01875' ViewCenterY='7.58125'><PageSheet LineStyle='0' FillStyle='0' TextStyle='0'><PageProps><PageWidth>14.05</PageWidth><PageHeight>15.13125</PageHeight><ShdwOffsetX>0.125</ShdwOffsetX><ShdwOffsetY>-0.125</ShdwOffsetY><PageScale Unit='IN_F'>1</PageScale><DrawingScale Unit='IN_F'>1</DrawingScale><DrawingSizeType>0</DrawingSizeType><DrawingScaleType>0</DrawingScaleType><InhibitSnap>0</InhibitSnap><UIVisibility>0</UIVisibility><ShdwType>0</ShdwType><ShdwObliqueAngle>0</ShdwObliqueAngle><ShdwScaleFactor>1</ShdwScaleFactor></PageProps><v14:PageProps xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:DrawingResizeType>1</v14:DrawingResizeType></v14:PageProps><PrintProps><PageLeftMargin>0.5</PageLeftMargin><PageRightMargin>0.5</PageRightMargin><PageTopMargin>0.5</PageTopMargin><PageBottomMargin>0.5</PageBottomMargin><ScaleX>1</ScaleX><ScaleY>1</ScaleY><PagesX F='Inh'>1</PagesX><PagesY F='Inh'>1</PagesY><CenterX F='Inh'>0</CenterX><CenterY F='Inh'>0</CenterY><OnPage F='Inh'>0</OnPage><PrintGrid F='Inh'>0</PrintGrid><PrintPageOrientation>1</PrintPageOrientation><PaperKind>1</PaperKind><PaperSource F='Inh'>7</PaperSource></PrintProps><XForm><PinX>0</PinX><PinY>0</PinY><Width>1</Width><Height>1</Height><LocPinX F='Width*0'>0</LocPinX><LocPinY F='Height*0'>0</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm></PageSheet><Shapes><Shape ID='1' NameU='com.lucidchart.UMLStartBlock.1' Name='com.lucidchart.UMLStartBlock' Type='Group' Master='3110'><XForm><PinX>2.625</PinX><PinY>14.3188</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.03125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='2' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.1!Width*0.5'>0.125</PinX><PinY F='Sheet.1!Height*0.5'>0.125</PinY><Width F='Sheet.1!Width*1'>0.25</Width><Height F='Sheet.1!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.1!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.1!LineColor'>#000000</LineColor><LinePattern F='Sheet.1!LinePattern'>1</LinePattern><Rounding F='Sheet.1!Rounding'>0.03125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.1!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.1!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.1!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.1!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.1!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.1!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.1!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='3' NameU='com.lucidchart.Line.3' Name='com.lucidchart.Line' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX>2.625</PinX><PinY>13.975</PinY><Width>0</Width><Height>0.4375</Height><LocPinX F='Width*0'>0</LocPinX><LocPinY F='Height*0.50011428571429'>0.2188</LocPinY><Angle>0</Angle><FlipX>0</FlipX><FlipY>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStartBlock.1!Connections.X3,com.lucidchart.UMLStartBlock.1!Connections.Y3))'>2.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStartBlock.1!Connections.X3,com.lucidchart.UMLStartBlock.1!Connections.Y3))'>14.1938</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.4!Connections.X4,com.lucidchart.UMLStateBlock.4!Connections.Y4))'>2.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.4!Connections.X4,com.lucidchart.UMLStateBlock.4!Connections.Y4))'>13.7563</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStartBlock.1!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.4!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>1</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0.4375</Y></MoveTo><LineTo IX='2'><X>0</X><Y>0</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='4' NameU='com.lucidchart.UMLStateBlock.4' Name='com.lucidchart.UMLStateBlock' Type='Group' Master='3107'><XForm><PinX>2.625</PinX><PinY>13.5688</PinY><Width>1.125</Width><Height>0.375</Height><LocPinX F='Width*0.5'>0.5625</LocPinX><LocPinY F='Height*0.5'>0.1875</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX F='Width*0.5'>0.5625</TxtPinX><TxtPinY F='Height*0.5'>0.1875</TxtPinY><TxtWidth F='Width*0.91111111111111'>1.025</TxtWidth><TxtHeight F='Height*0.73333333333333'>0.275</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.5125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.1375</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.03125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.1875</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1.125</X><Y F='Height*0.5'>0.1875</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5625</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5625</X><Y F='Height*1'>0.375</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='5'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Inicía <cp IX='1'/>a <cp IX='2'/>pesquisa <cp IX='3'/>de <cp IX='4'/>um <cp IX='5'/>estabelecimento
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6},{"s":0,"n":"a","v":"center"}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='5' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.4!Width*0.5'>0.5625</PinX><PinY F='Sheet.4!Height*0.5'>0.1875</PinY><Width F='Sheet.4!Width*1'>1.125</Width><Height F='Sheet.4!Height*1'>0.375</Height><LocPinX F='Width*0.5'>0.5625</LocPinX><LocPinY F='Height*0.5'>0.1875</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.4!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.4!LineColor'>#000000</LineColor><LinePattern F='Sheet.4!LinePattern'>1</LinePattern><Rounding F='Sheet.4!Rounding'>0.03125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.4!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.4!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.4!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.4!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.4!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.4!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.4!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill F='Inh'>0</NoFill><NoLine F='Inh'>0</NoLine><NoShow F='Inh'>0</NoShow><NoSnap F='Inh'>0</NoSnap><MoveTo IX='1'><X F='Inh'>0.1125</X><Y F='Inh'>0.375</Y></MoveTo><NURBSTo IX='2'><X F='Inh'>0</X><Y F='Inh'>0.3</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.045,1,0,1, 0,0.91,0,1)</E></NURBSTo><LineTo IX='3'><X F='Inh'>0</X><Y F='Inh'>0.075</Y></LineTo><NURBSTo IX='4'><X F='Inh'>0.1125</X><Y F='Inh'>0</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0,0.09,0,1, 0.045,0,0,1)</E></NURBSTo><LineTo IX='5'><X F='Inh'>1.0125</X><Y F='Inh'>0</Y></LineTo><NURBSTo IX='6'><X F='Inh'>1.125</X><Y F='Inh'>0.075</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.955,0,0,1, 1,0.09,0,1)</E></NURBSTo><LineTo IX='7'><X F='Inh'>1.125</X><Y F='Inh'>0.3</Y></LineTo><NURBSTo IX='8'><X F='Inh'>1.0125</X><Y F='Inh'>0.375</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 1,0.91,0,1, 0.955,1,0,1)</E></NURBSTo><LineTo IX='9'><X F='Inh'>0.1125</X><Y F='Inh'>0.375</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag F='Inh'>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape><Shape ID='6' NameU='com.lucidchart.Line.6' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>2.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>13.1313</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.5</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.25</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.4!Connections.X3,com.lucidchart.UMLStateBlock.4!Connections.Y3))'>2.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.4!Connections.X3,com.lucidchart.UMLStateBlock.4!Connections.Y3))'>13.3813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.7!Connections.X4,com.lucidchart.UMLStateBlock.7!Connections.Y4))'>2.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.7!Connections.X4,com.lucidchart.UMLStateBlock.7!Connections.Y4))'>12.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.4!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.7!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.5</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.25</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='7' NameU='com.lucidchart.UMLStateBlock.7' Type='Group' Master='3107'><XForm><PinX>2.625</PinX><PinY>12.6938</PinY><Width>1.75</Width><Height>0.375</Height><LocPinX F='Width*0.5'>0.875</LocPinX><LocPinY F='Height*0.5'>0.1875</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX F='Width*0.5'>0.875</TxtPinX><TxtPinY F='Height*0.5'>0.1875</TxtPinY><TxtWidth F='Width*0.94285714285714'>1.65</TxtWidth><TxtHeight F='Height*0.73333333333333'>0.275</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.825</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.1375</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.1875</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1.75</X><Y F='Height*0.5'>0.1875</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.875</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.875</X><Y F='Height*1'>0.375</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='5'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='6'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='7'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='8'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Existe <cp IX='1'/>um <cp IX='2'/>registro <cp IX='3'/>conforme <cp IX='4'/>os <cp IX='5'/>filtros <cp IX='6'/>próximo <cp IX='7'/>no <cp IX='8'/>BD?
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6},{"s":0,"n":"a","v":"center"}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='8' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.7!Width*0.5'>0.875</PinX><PinY F='Sheet.7!Height*0.5'>0.1875</PinY><Width F='Sheet.7!Width*1'>1.75</Width><Height F='Sheet.7!Height*1'>0.375</Height><LocPinX F='Width*0.5'>0.875</LocPinX><LocPinY F='Height*0.5'>0.1875</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.7!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.7!LineColor'>#000000</LineColor><LinePattern F='Sheet.7!LinePattern'>1</LinePattern><Rounding F='Sheet.7!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.7!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.7!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.7!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.7!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.7!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.7!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.7!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill F='Inh'>0</NoFill><NoLine F='Inh'>0</NoLine><NoShow F='Inh'>0</NoShow><NoSnap F='Inh'>0</NoSnap><MoveTo IX='1'><X F='Inh'>0.175</X><Y F='Inh'>0.375</Y></MoveTo><NURBSTo IX='2'><X F='Inh'>0</X><Y F='Inh'>0.3</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.045,1,0,1, 0,0.91,0,1)</E></NURBSTo><LineTo IX='3'><X F='Inh'>0</X><Y F='Inh'>0.075</Y></LineTo><NURBSTo IX='4'><X F='Inh'>0.175</X><Y F='Inh'>0</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0,0.09,0,1, 0.045,0,0,1)</E></NURBSTo><LineTo IX='5'><X F='Inh'>1.575</X><Y F='Inh'>0</Y></LineTo><NURBSTo IX='6'><X F='Inh'>1.75</X><Y F='Inh'>0.075</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.955,0,0,1, 1,0.09,0,1)</E></NURBSTo><LineTo IX='7'><X F='Inh'>1.75</X><Y F='Inh'>0.3</Y></LineTo><NURBSTo IX='8'><X F='Inh'>1.575</X><Y F='Inh'>0.375</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 1,0.91,0,1, 0.955,1,0,1)</E></NURBSTo><LineTo IX='9'><X F='Inh'>0.175</X><Y F='Inh'>0.375</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag F='Inh'>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape><Shape ID='9' NameU='com.lucidchart.Line.9' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>2.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>12.1938</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.625</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.7!Connections.X3,com.lucidchart.UMLStateBlock.7!Connections.Y3))'>2.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.7!Connections.X3,com.lucidchart.UMLStateBlock.7!Connections.Y3))'>12.5063</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.10!Connections.X4,com.lucidchart.UMLDecisionBlock.10!Connections.Y4))'>2.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.10!Connections.X4,com.lucidchart.UMLDecisionBlock.10!Connections.Y4))'>11.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.7!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.10!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.625</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.3125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='10' NameU='com.lucidchart.UMLDecisionBlock.10' Name='com.lucidchart.UMLDecisionBlock' Type='Group' Master='3108'><XForm><PinX>2.625</PinX><PinY>11.7563</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='11' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.10!Width*0.5'>0.125</PinX><PinY F='Sheet.10!Height*0.5'>0.125</PinY><Width F='Sheet.10!Width*1'>0.25</Width><Height F='Sheet.10!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.10!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.10!LineColor'>#000000</LineColor><LinePattern F='Sheet.10!LinePattern'>1</LinePattern><Rounding F='Sheet.10!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.10!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.10!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.10!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.10!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.10!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.10!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.10!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='12' NameU='com.lucidchart.Line.12' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>1.84375</PinX><PinY F='GUARD((BeginY+EndY)/2)'>11.4438</PinY><Width F='GUARD(EndX-BeginX)'>-1.3125</Width><Height F='GUARD(EndY-BeginY)'>-0.625</Height><LocPinX F='GUARD(Width*0.5)'>-0.65625</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.10!Connections.X1,com.lucidchart.UMLDecisionBlock.10!Connections.Y1))'>2.5</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.10!Connections.X1,com.lucidchart.UMLDecisionBlock.10!Connections.Y1))'>11.7563</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.13!Connections.X4,com.lucidchart.UMLStateBlock.13!Connections.Y4))'>1.1875</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.13!Connections.X4,com.lucidchart.UMLStateBlock.13!Connections.Y4))'>11.1313</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50025893319524'>0.2779216295529087</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.10!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.13!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0</X><Y>0</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0</Y></MoveTo><LineTo IX='2'><X>-1.3125</X><Y>0</Y></LineTo><LineTo IX='3'><X>-1.3125</X><Y>-0.625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Sim
-</Text></Shape><Shape ID='13' NameU='com.lucidchart.UMLStateBlock.13' Type='Group' Master='3107'><XForm><PinX>1.1875</PinX><PinY>10.8813</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Retorna <cp IX='1'/>ao <cp IX='2'/>usuário
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='14' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.13!Width*0.5'>0.5</PinX><PinY F='Sheet.13!Height*0.5'>0.25</PinY><Width F='Sheet.13!Width*1'>1</Width><Height F='Sheet.13!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.13!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.13!LineColor'>#000000</LineColor><LinePattern F='Sheet.13!LinePattern'>1</LinePattern><Rounding F='Sheet.13!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.13!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.13!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.13!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.13!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.13!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.13!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.13!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='15' NameU='com.lucidchart.Line.15' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>3.6875</PinX><PinY F='GUARD((BeginY+EndY)/2)'>11.4438</PinY><Width F='GUARD(EndX-BeginX)'>1.875</Width><Height F='GUARD(EndY-BeginY)'>-0.625</Height><LocPinX F='GUARD(Width*0.5)'>0.9375</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.10!Connections.X2,com.lucidchart.UMLDecisionBlock.10!Connections.Y2))'>2.75</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.10!Connections.X2,com.lucidchart.UMLDecisionBlock.10!Connections.Y2))'>11.7563</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.16!Connections.X4,com.lucidchart.UMLStateBlock.16!Connections.Y4))'>4.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.16!Connections.X4,com.lucidchart.UMLStateBlock.16!Connections.Y4))'>11.1313</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50024283632831'>0.2779126868490637</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.10!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.16!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0</X><Y>0</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0</Y></MoveTo><LineTo IX='2'><X>1.875</X><Y>0</Y></LineTo><LineTo IX='3'><X>1.875</X><Y>-0.625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Não
-</Text></Shape><Shape ID='16' NameU='com.lucidchart.UMLStateBlock.16' Type='Group' Master='3107'><XForm><PinX>4.625</PinX><PinY>10.8813</PinY><Width>2</Width><Height>0.5</Height><LocPinX F='Width*0.5'>1</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX F='Width*0.5'>1</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.95'>1.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.95</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>2</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>1</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>1</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='5'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='6'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='7'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='8'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='9'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='10'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='11'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='12'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='13'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='14'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Pergunta <cp IX='1'/>ao <cp IX='2'/>usuário <cp IX='3'/>se <cp IX='4'/>prefere <cp IX='5'/>receitas <cp IX='6'/>conforme <cp IX='7'/>o <cp IX='8'/>filtro <cp IX='9'/>ou <cp IX='10'/>um <cp IX='11'/>estabelecimento <cp IX='12'/>próximo <cp IX='13'/>sem <cp IX='14'/>filtro
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='17' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.16!Width*0.5'>1</PinX><PinY F='Sheet.16!Height*0.5'>0.25</PinY><Width F='Sheet.16!Width*1'>2</Width><Height F='Sheet.16!Height*1'>0.5</Height><LocPinX F='Width*0.5'>1</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.16!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.16!LineColor'>#000000</LineColor><LinePattern F='Sheet.16!LinePattern'>1</LinePattern><Rounding F='Sheet.16!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.16!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.16!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.16!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.16!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.16!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.16!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.16!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill F='Inh'>0</NoFill><NoLine F='Inh'>0</NoLine><NoShow F='Inh'>0</NoShow><NoSnap F='Inh'>0</NoSnap><MoveTo IX='1'><X F='Inh'>0.2</X><Y F='Inh'>0.5</Y></MoveTo><NURBSTo IX='2'><X F='Inh'>0</X><Y F='Inh'>0.4</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.045,1,0,1, 0,0.91,0,1)</E></NURBSTo><LineTo IX='3'><X F='Inh'>0</X><Y F='Inh'>0.1</Y></LineTo><NURBSTo IX='4'><X F='Inh'>0.2</X><Y F='Inh'>0</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0,0.09,0,1, 0.045,0,0,1)</E></NURBSTo><LineTo IX='5'><X F='Inh'>1.8</X><Y F='Inh'>0</Y></LineTo><NURBSTo IX='6'><X F='Inh'>2</X><Y F='Inh'>0.1</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.955,0,0,1, 1,0.09,0,1)</E></NURBSTo><LineTo IX='7'><X F='Inh'>2</X><Y F='Inh'>0.4</Y></LineTo><NURBSTo IX='8'><X F='Inh'>1.8</X><Y F='Inh'>0.5</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 1,0.91,0,1, 0.955,1,0,1)</E></NURBSTo><LineTo IX='9'><X F='Inh'>0.2</X><Y F='Inh'>0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag F='Inh'>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape><Shape ID='18' NameU='com.lucidchart.Line.18' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>1.1875</PinX><PinY F='GUARD((BeginY+EndY)/2)'>10.47505</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.3125</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.15625</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.13!Connections.X3,com.lucidchart.UMLStateBlock.13!Connections.Y3))'>1.1875</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.13!Connections.X3,com.lucidchart.UMLStateBlock.13!Connections.Y3))'>10.6313</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLEndBlock.19!Connections.X4,com.lucidchart.UMLEndBlock.19!Connections.Y4))'>1.1875</EndX><EndY F='PAR(PNT(com.lucidchart.UMLEndBlock.19!Connections.X4,com.lucidchart.UMLEndBlock.19!Connections.Y4))'>10.3188</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.13!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLEndBlock.19!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.3125</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.15625</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.3125</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='19' NameU='com.lucidchart.UMLEndBlock.19' Name='com.lucidchart.UMLEndBlock' Type='Group' Master='3109'><XForm><PinX>1.1875</PinX><PinY>10.1938</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='20' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.19!Width*0.5'>0.125</PinX><PinY F='Sheet.19!Height*0.5'>0.125</PinY><Width F='Sheet.19!Width*1'>0.25</Width><Height F='Sheet.19!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.19!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.19!LineColor'>#000000</LineColor><LinePattern F='Sheet.19!LinePattern'>1</LinePattern><Rounding F='Sheet.19!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.19!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.19!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.19!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.19!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.19!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.19!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.19!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape><Shape ID='21' Type='Shape' MasterShape='7'><XForm><PinX F='Sheet.19!Width*0.5'>0.125</PinX><PinY F='Sheet.19!Height*0.5'>0.125</PinY><Width F='Sheet.19!Width*1'>0.25</Width><Height F='Sheet.19!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.19!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.19!LineColor'>#000000</LineColor><LinePattern F='Sheet.19!LinePattern'>1</LinePattern><Rounding F='Sheet.19!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.19!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.19!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.19!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.19!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.19!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.19!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.19!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='22' NameU='com.lucidchart.Line.22' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>4.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>10.3188</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.625</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.16!Connections.X3,com.lucidchart.UMLStateBlock.16!Connections.Y3))'>4.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.16!Connections.X3,com.lucidchart.UMLStateBlock.16!Connections.Y3))'>10.6313</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.23!Connections.X4,com.lucidchart.UMLDecisionBlock.23!Connections.Y4))'>4.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.23!Connections.X4,com.lucidchart.UMLDecisionBlock.23!Connections.Y4))'>10.0063</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.16!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.23!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.625</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.3125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='23' NameU='com.lucidchart.UMLDecisionBlock.23' Type='Group' Master='3108'><XForm><PinX>4.625</PinX><PinY>9.8813</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='24' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.23!Width*0.5'>0.125</PinX><PinY F='Sheet.23!Height*0.5'>0.125</PinY><Width F='Sheet.23!Width*1'>0.25</Width><Height F='Sheet.23!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.23!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.23!LineColor'>#000000</LineColor><LinePattern F='Sheet.23!LinePattern'>1</LinePattern><Rounding F='Sheet.23!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.23!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.23!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.23!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.23!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.23!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.23!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.23!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='25' NameU='com.lucidchart.Line.25' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>4.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>9.3813</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.75</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.375</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.23!Connections.X3,com.lucidchart.UMLDecisionBlock.23!Connections.Y3))'>4.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.23!Connections.X3,com.lucidchart.UMLDecisionBlock.23!Connections.Y3))'>9.7563</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.26!Connections.X4,com.lucidchart.UMLStateBlock.26!Connections.Y4))'>4.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.26!Connections.X4,com.lucidchart.UMLStateBlock.26!Connections.Y4))'>9.0063</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0.125</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.7784618662343749</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50006021919788'>0.3892778114663524</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.23!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.26!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0.125</X><Y>0</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.75</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Estabelecimento
-</Text></Shape><Shape ID='26' NameU='com.lucidchart.UMLStateBlock.26' Type='Group' Master='3107'><XForm><PinX>4.625</PinX><PinY>8.7563</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Faz <cp IX='1'/>uma <cp IX='2'/>consulta <cp IX='3'/>no <cp IX='4'/>foursquare
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='27' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.26!Width*0.5'>0.5</PinX><PinY F='Sheet.26!Height*0.5'>0.25</PinY><Width F='Sheet.26!Width*1'>1</Width><Height F='Sheet.26!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.26!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.26!LineColor'>#000000</LineColor><LinePattern F='Sheet.26!LinePattern'>1</LinePattern><Rounding F='Sheet.26!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.26!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.26!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.26!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.26!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.26!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.26!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.26!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='28' NameU='com.lucidchart.Line.28' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>5.3125</PinX><PinY F='GUARD((BeginY+EndY)/2)'>9.8813</PinY><Width F='GUARD(EndX-BeginX)'>1.125</Width><Height F='GUARD(0.25DL)'>0.25</Height><LocPinX F='GUARD(Width*0.5)'>0.5625</LocPinX><LocPinY F='GUARD(Height*0.5)'>0.125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.23!Connections.X2,com.lucidchart.UMLDecisionBlock.23!Connections.Y2))'>4.75</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.23!Connections.X2,com.lucidchart.UMLDecisionBlock.23!Connections.Y2))'>9.8813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.29!Connections.X1,com.lucidchart.UMLStateBlock.29!Connections.Y1))'>5.875</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.29!Connections.X1,com.lucidchart.UMLStateBlock.29!Connections.Y1))'>9.8813</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0.125</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.2777777777777778</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.23!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.29!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0</X><Y>0.125</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0.125</Y></MoveTo><LineTo IX='2'><X>1.125</X><Y>0.125</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Receita
-</Text></Shape><Shape ID='29' NameU='com.lucidchart.UMLStateBlock.29' Type='Group' Master='3107'><XForm><PinX>6.375</PinX><PinY>9.8813</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2' Del='1'/><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Pesquisa <cp IX='1'/>Receitas
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='30' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.29!Width*0.5'>0.5</PinX><PinY F='Sheet.29!Height*0.5'>0.25</PinY><Width F='Sheet.29!Width*1'>1</Width><Height F='Sheet.29!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.29!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.29!LineColor'>#000000</LineColor><LinePattern F='Sheet.29!LinePattern'>1</LinePattern><Rounding F='Sheet.29!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.29!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.29!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.29!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.29!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.29!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.29!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.29!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='31' NameU='com.lucidchart.Line.31' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>4.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>8.1938</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.6249999999999991</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.26!Connections.X3,com.lucidchart.UMLStateBlock.26!Connections.Y3))'>4.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.26!Connections.X3,com.lucidchart.UMLStateBlock.26!Connections.Y3))'>8.5063</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.32!Connections.X4,com.lucidchart.UMLStateBlock.32!Connections.Y4))'>4.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.32!Connections.X4,com.lucidchart.UMLStateBlock.32!Connections.Y4))'>7.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.26!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.32!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.6249999999999991</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.3125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.6249999999999991</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='32' NameU='com.lucidchart.UMLStateBlock.32' Type='Group' Master='3107'><XForm><PinX>4.625</PinX><PinY>7.6313</PinY><Width>1.625</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.8125</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX F='Width*0.5'>0.8125</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.93846153846154'>1.525</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.7625</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1.625</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.8125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.8125</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='5'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='6'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Existe <cp IX='1'/>um <cp IX='2'/>estabeleciomento <cp IX='3'/>no <cp IX='4'/>raio <cp IX='5'/>de <cp IX='6'/>ação?
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='33' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.32!Width*0.5'>0.8125</PinX><PinY F='Sheet.32!Height*0.5'>0.25</PinY><Width F='Sheet.32!Width*1'>1.625</Width><Height F='Sheet.32!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.8125</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.32!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.32!LineColor'>#000000</LineColor><LinePattern F='Sheet.32!LinePattern'>1</LinePattern><Rounding F='Sheet.32!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.32!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.32!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.32!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.32!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.32!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.32!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.32!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Geom IX='0'><NoFill F='Inh'>0</NoFill><NoLine F='Inh'>0</NoLine><NoShow F='Inh'>0</NoShow><NoSnap F='Inh'>0</NoSnap><MoveTo IX='1'><X F='Inh'>0.1625</X><Y F='Inh'>0.5</Y></MoveTo><NURBSTo IX='2'><X F='Inh'>0</X><Y F='Inh'>0.4</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.045,1,0,1, 0,0.91,0,1)</E></NURBSTo><LineTo IX='3'><X F='Inh'>0</X><Y F='Inh'>0.1</Y></LineTo><NURBSTo IX='4'><X F='Inh'>0.1625</X><Y F='Inh'>0</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0,0.09,0,1, 0.045,0,0,1)</E></NURBSTo><LineTo IX='5'><X F='Inh'>1.4625</X><Y F='Inh'>0</Y></LineTo><NURBSTo IX='6'><X F='Inh'>1.625</X><Y F='Inh'>0.1</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 0.955,0,0,1, 1,0.09,0,1)</E></NURBSTo><LineTo IX='7'><X F='Inh'>1.625</X><Y F='Inh'>0.4</Y></LineTo><NURBSTo IX='8'><X F='Inh'>1.4625</X><Y F='Inh'>0.5</Y><A F='Inh'>0</A><B F='Inh'>1</B><C F='Inh'>0</C><D F='Inh'>1</D><E Unit='NURBS' F='Inh'>NURBS(1, 3, 0, 0, 1,0.91,0,1, 0.955,1,0,1)</E></NURBSTo><LineTo IX='9'><X F='Inh'>0.1625</X><Y F='Inh'>0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag F='Inh'>0</v14:NoQuickDrag></v14:Geom></Shape></Shapes></Shape><Shape ID='34' NameU='com.lucidchart.Line.34' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>4.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>7.0688</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.625</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.32!Connections.X3,com.lucidchart.UMLStateBlock.32!Connections.Y3))'>4.625</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.32!Connections.X3,com.lucidchart.UMLStateBlock.32!Connections.Y3))'>7.3813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.35!Connections.X4,com.lucidchart.UMLDecisionBlock.35!Connections.Y4))'>4.625</EndX><EndY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.35!Connections.X4,com.lucidchart.UMLDecisionBlock.35!Connections.Y4))'>6.7563</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.32!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.35!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.625</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.3125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='35' NameU='com.lucidchart.UMLDecisionBlock.35' Type='Group' Master='3108'><XForm><PinX>4.625</PinX><PinY>6.6313</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='36' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.35!Width*0.5'>0.125</PinX><PinY F='Sheet.35!Height*0.5'>0.125</PinY><Width F='Sheet.35!Width*1'>0.25</Width><Height F='Sheet.35!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.35!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.35!LineColor'>#000000</LineColor><LinePattern F='Sheet.35!LinePattern'>1</LinePattern><Rounding F='Sheet.35!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.35!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.35!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.35!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.35!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.35!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.35!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.35!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='37' NameU='com.lucidchart.Line.37' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>5.375</PinX><PinY F='GUARD((BeginY+EndY)/2)'>6.5063</PinY><Width F='GUARD(EndX-BeginX)'>1.25</Width><Height F='GUARD(EndY-BeginY)'>-0.25</Height><LocPinX F='GUARD(Width*0.5)'>0.625</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.35!Connections.X2,com.lucidchart.UMLDecisionBlock.35!Connections.Y2))'>4.75</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.35!Connections.X2,com.lucidchart.UMLDecisionBlock.35!Connections.Y2))'>6.6313</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.38!Connections.X4,com.lucidchart.UMLStateBlock.38!Connections.Y4))'>6</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.38!Connections.X4,com.lucidchart.UMLStateBlock.38!Connections.Y4))'>6.3813</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50024283632831'>0.2779126868490637</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.35!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.38!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0</X><Y>0</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.520833333333333</X><Y>0</Y></LineTo><ArcTo IX='3'><X>0.604166666666667</X><Y>0</Y><A Unit='DL'>-0.04166666666666696</A></ArcTo><LineTo IX='4'><X>1.25</X><Y>0</Y></LineTo><LineTo IX='5'><X>1.25</X><Y>-0.25</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Não
-</Text></Shape><Shape ID='38' NameU='com.lucidchart.UMLStateBlock.38' Type='Group' Master='3107'><XForm><PinX>6</PinX><PinY>6.1313</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Aumenta <cp IX='1'/>o <cp IX='2'/>raio <cp IX='3'/>de <cp IX='4'/>ação
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='39' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.38!Width*0.5'>0.5</PinX><PinY F='Sheet.38!Height*0.5'>0.25</PinY><Width F='Sheet.38!Width*1'>1</Width><Height F='Sheet.38!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.38!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.38!LineColor'>#000000</LineColor><LinePattern F='Sheet.38!LinePattern'>1</LinePattern><Rounding F='Sheet.38!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.38!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.38!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.38!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.38!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.38!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.38!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.38!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='40' NameU='com.lucidchart.Line.40' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>6</PinX><PinY F='GUARD((BeginY+EndY)/2)'>5.66255</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.4375</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.21875</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.38!Connections.X3,com.lucidchart.UMLStateBlock.38!Connections.Y3))'>6</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.38!Connections.X3,com.lucidchart.UMLStateBlock.38!Connections.Y3))'>5.8813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.41!Connections.X4,com.lucidchart.UMLStateBlock.41!Connections.Y4))'>6</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.41!Connections.X4,com.lucidchart.UMLStateBlock.41!Connections.Y4))'>5.4438</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.38!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.41!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.4375</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.21875</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.4375</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='41' NameU='com.lucidchart.UMLStateBlock.41' Type='Group' Master='3107'><XForm><PinX>6</PinX><PinY>5.1938</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='3'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='4'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Passou <cp IX='1'/>do <cp IX='2'/>limite <cp IX='3'/>da <cp IX='4'/>cidade?
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='42' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.41!Width*0.5'>0.5</PinX><PinY F='Sheet.41!Height*0.5'>0.25</PinY><Width F='Sheet.41!Width*1'>1</Width><Height F='Sheet.41!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.41!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.41!LineColor'>#000000</LineColor><LinePattern F='Sheet.41!LinePattern'>1</LinePattern><Rounding F='Sheet.41!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.41!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.41!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.41!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.41!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.41!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.41!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.41!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='43' NameU='com.lucidchart.Line.43' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>6</PinX><PinY F='GUARD((BeginY+EndY)/2)'>4.60005</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.6875</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.34375</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.41!Connections.X3,com.lucidchart.UMLStateBlock.41!Connections.Y3))'>6</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.41!Connections.X3,com.lucidchart.UMLStateBlock.41!Connections.Y3))'>4.9438</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.44!Connections.X4,com.lucidchart.UMLDecisionBlock.44!Connections.Y4))'>6</EndX><EndY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.44!Connections.X4,com.lucidchart.UMLDecisionBlock.44!Connections.Y4))'>4.2563</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.41!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.44!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.6875</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.34375</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.6875</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='44' NameU='com.lucidchart.UMLDecisionBlock.44' Type='Group' Master='3108'><XForm><PinX>6</PinX><PinY>4.1313</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='45' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.44!Width*0.5'>0.125</PinX><PinY F='Sheet.44!Height*0.5'>0.125</PinY><Width F='Sheet.44!Width*1'>0.25</Width><Height F='Sheet.44!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.44!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.44!LineColor'>#000000</LineColor><LinePattern F='Sheet.44!LinePattern'>1</LinePattern><Rounding F='Sheet.44!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.44!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.44!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.44!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.44!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.44!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.44!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.44!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='46' NameU='com.lucidchart.Line.46' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>5.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>6.4438</PinY><Width F='GUARD(EndX-BeginX)'>-1</Width><Height F='GUARD(EndY-BeginY)'>4.625</Height><LocPinX F='GUARD(Width*0.5)'>-0.5</LocPinX><LocPinY F='GUARD(Height*0.5)'>2.3125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.44!Connections.X2,com.lucidchart.UMLDecisionBlock.44!Connections.Y2))'>6.125</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.44!Connections.X2,com.lucidchart.UMLDecisionBlock.44!Connections.Y2))'>4.1313</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.26!Connections.X2,com.lucidchart.UMLStateBlock.26!Connections.Y2))'>5.125</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.26!Connections.X2,com.lucidchart.UMLStateBlock.26!Connections.Y2))'>8.7563</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50024283632831'>0.2779126868490637</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.44!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.26!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0</X><Y>0</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.1875</X><Y>0</Y></LineTo><LineTo IX='3'><X>0.1875</X><Y>0.3125</Y></LineTo><LineTo IX='4'><X>-0.08333333333333304</X><Y>0.3125</Y></LineTo><ArcTo IX='5'><X>-0.166666666666667</X><Y>0.3125</Y><A Unit='DL'>0.04166666666666696</A></ArcTo><LineTo IX='6'><X>-0.8125</X><Y>0.3125</Y></LineTo><LineTo IX='7'><X>-0.8125</X><Y>3.125</Y></LineTo><LineTo IX='8'><X>-0.5625</X><Y>3.125</Y></LineTo><LineTo IX='9'><X>-0.5625</X><Y>4.625</Y></LineTo><LineTo IX='10'><X>-1</X><Y>4.625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Não
-</Text></Shape><Shape ID='47' NameU='com.lucidchart.Line.47' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>6</PinX><PinY F='GUARD((BeginY+EndY)/2)'>3.6313</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.75</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.375</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.44!Connections.X3,com.lucidchart.UMLDecisionBlock.44!Connections.Y3))'>6</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.44!Connections.X3,com.lucidchart.UMLDecisionBlock.44!Connections.Y3))'>4.0063</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.48!Connections.X4,com.lucidchart.UMLStateBlock.48!Connections.Y4))'>6</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.48!Connections.X4,com.lucidchart.UMLStateBlock.48!Connections.Y4))'>3.2563</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>-1.651384506429589E199</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>0</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50025893319524'>0.2779216295529087</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.44!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.48!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>-1.651384506429589E199</X><Y>0</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.75</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Sim
-</Text></Shape><Shape ID='48' NameU='com.lucidchart.UMLStateBlock.48' Type='Group' Master='3107'><XForm><PinX>6</PinX><PinY>3.0063</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Pesquisa <cp IX='1'/>uma <cp IX='2'/>receita
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='49' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.48!Width*0.5'>0.5</PinX><PinY F='Sheet.48!Height*0.5'>0.25</PinY><Width F='Sheet.48!Width*1'>1</Width><Height F='Sheet.48!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.48!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.48!LineColor'>#000000</LineColor><LinePattern F='Sheet.48!LinePattern'>1</LinePattern><Rounding F='Sheet.48!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.48!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.48!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.48!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.48!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.48!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.48!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.48!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='50' NameU='com.lucidchart.Line.50' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>3.625</PinX><PinY F='GUARD((BeginY+EndY)/2)'>6.2563</PinY><Width F='GUARD(EndX-BeginX)'>-1.75</Width><Height F='GUARD(EndY-BeginY)'>-0.75</Height><LocPinX F='GUARD(Width*0.5)'>-0.875</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.375</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLDecisionBlock.35!Connections.X1,com.lucidchart.UMLDecisionBlock.35!Connections.Y1))'>4.5</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLDecisionBlock.35!Connections.X1,com.lucidchart.UMLDecisionBlock.35!Connections.Y1))'>6.6313</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.51!Connections.X4,com.lucidchart.UMLStateBlock.51!Connections.Y4))'>2.75</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.51!Connections.X4,com.lucidchart.UMLStateBlock.51!Connections.Y4))'>5.8813</EndY></XForm1D><TextBlock><LeftMargin F='Inh'>0</LeftMargin><RightMargin F='Inh'>0</RightMargin><TopMargin F='Inh'>0</TopMargin><BottomMargin F='Inh'>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>2</TextBkgnd><DefaultTabStop F='Inh'>0.5</DefaultTabStop><TextDirection F='Inh'>0</TextDirection><TextBkgndTrans F='Inh'>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='SETATREF(Controls.TextPosition)'>0</TxtPinX><TxtPinY F='SETATREF(Controls.TextPosition.Y)'>-4.069534301757812</TxtPinY><TxtWidth F='MAX(TEXTWIDTH(TheText),5*Char.Size)'>0.5555555555555556</TxtWidth><TxtHeight F='TEXTHEIGHT(TheText,TxtWidth)'>0.1111606872558594</TxtHeight><TxtLocPinX F='TxtWidth*0.50025893319524'>0.2779216295529087</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.05558034362792969</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLDecisionBlock.35!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.51!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case F='Inh'>0</Case><Pos F='Inh'>0</Pos><FontScale F='Inh'>1</FontScale><Size>0.1111111111111111</Size><DblUnderline F='Inh'>0</DblUnderline><Overline F='Inh'>0</Overline><Strikethru>0</Strikethru><Highlight F='Inh'>0</Highlight><DoubleStrikethrough F='Inh'>0</DoubleStrikethrough><RTLText F='Inh'>0</RTLText><UseVertical F='Inh'>0</UseVertical><Letterspace F='Inh'>0</Letterspace><ColorTrans F='Inh'>0</ColorTrans><AsianFont F='Inh'>0</AsianFont><ComplexScriptFont F='Inh'>0</ComplexScriptFont><LocalizeFont F='Inh'>0</LocalizeFont><ComplexScriptSize F='Inh'>-1</ComplexScriptSize><LangID F='Inh'>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr F='Inh'/><BulletFont F='Inh'>0</BulletFont><LocalizeBulletFont F='Inh'>0</LocalizeBulletFont><BulletFontSize F='Inh'>-1</BulletFontSize><TextPosAfterBullet F='Inh'>0</TextPosAfterBullet><Flags F='Inh'>0</Flags></Para><Control NameU='TextPosition' ID='0'><X>0</X><Y>-4.069534301757812</Y><XDyn>0</XDyn><YDyn>0</YDyn><XCon>0</XCon><YCon>0</YCon><CanGlue>1</CanGlue><Prompt>Reposition Text</Prompt></Control><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0</Y></MoveTo><LineTo IX='2'><X>-1.75</X><Y>0</Y></LineTo><LineTo IX='3'><X>-1.75</X><Y>-0.75</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom><Text><cp IX='0'/><pp IX='0'/>Sim
-</Text></Shape><Shape ID='51' NameU='com.lucidchart.UMLStateBlock.51' Type='Group' Master='3107'><XForm><PinX>2.75</PinX><PinY>5.6313</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Pega <cp IX='1'/>10 <cp IX='2'/>estabelecimentos
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='52' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.51!Width*0.5'>0.5</PinX><PinY F='Sheet.51!Height*0.5'>0.25</PinY><Width F='Sheet.51!Width*1'>1</Width><Height F='Sheet.51!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.51!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.51!LineColor'>#000000</LineColor><LinePattern F='Sheet.51!LinePattern'>1</LinePattern><Rounding F='Sheet.51!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.51!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.51!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.51!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.51!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.51!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.51!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.51!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='53' NameU='com.lucidchart.Line.53' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>2.75</PinX><PinY F='GUARD((BeginY+EndY)/2)'>5.1313</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.5</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.25</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.51!Connections.X3,com.lucidchart.UMLStateBlock.51!Connections.Y3))'>2.75</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.51!Connections.X3,com.lucidchart.UMLStateBlock.51!Connections.Y3))'>5.3813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.54!Connections.X4,com.lucidchart.UMLStateBlock.54!Connections.Y4))'>2.75</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.54!Connections.X4,com.lucidchart.UMLStateBlock.54!Connections.Y4))'>4.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.51!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.54!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.5</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.25</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='54' NameU='com.lucidchart.UMLStateBlock.54' Type='Group' Master='3107'><XForm><PinX>2.75</PinX><PinY>4.6313</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Registra <cp IX='1'/>no <cp IX='2'/>BD
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='55' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.54!Width*0.5'>0.5</PinX><PinY F='Sheet.54!Height*0.5'>0.25</PinY><Width F='Sheet.54!Width*1'>1</Width><Height F='Sheet.54!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.54!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.54!LineColor'>#000000</LineColor><LinePattern F='Sheet.54!LinePattern'>1</LinePattern><Rounding F='Sheet.54!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.54!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.54!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.54!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.54!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.54!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.54!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.54!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='56' NameU='com.lucidchart.Line.56' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>2.75</PinX><PinY F='GUARD((BeginY+EndY)/2)'>4.1313</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.5</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.25</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.54!Connections.X3,com.lucidchart.UMLStateBlock.54!Connections.Y3))'>2.75</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.54!Connections.X3,com.lucidchart.UMLStateBlock.54!Connections.Y3))'>4.3813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.57!Connections.X4,com.lucidchart.UMLStateBlock.57!Connections.Y4))'>2.75</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.57!Connections.X4,com.lucidchart.UMLStateBlock.57!Connections.Y4))'>3.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.54!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.57!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.5</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.25</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='57' NameU='com.lucidchart.UMLStateBlock.57' Type='Group' Master='3107'><XForm><PinX>2.75</PinX><PinY>3.6313</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Retorna <cp IX='1'/>ao <cp IX='2'/>usuário
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='58' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.57!Width*0.5'>0.5</PinX><PinY F='Sheet.57!Height*0.5'>0.25</PinY><Width F='Sheet.57!Width*1'>1</Width><Height F='Sheet.57!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.57!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.57!LineColor'>#000000</LineColor><LinePattern F='Sheet.57!LinePattern'>1</LinePattern><Rounding F='Sheet.57!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.57!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.57!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.57!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.57!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.57!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.57!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.57!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='59' NameU='com.lucidchart.Line.59' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>2.75</PinX><PinY F='GUARD((BeginY+EndY)/2)'>3.10005</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.5625</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.28125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.57!Connections.X3,com.lucidchart.UMLStateBlock.57!Connections.Y3))'>2.75</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.57!Connections.X3,com.lucidchart.UMLStateBlock.57!Connections.Y3))'>3.3813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLEndBlock.60!Connections.X4,com.lucidchart.UMLEndBlock.60!Connections.Y4))'>2.75</EndX><EndY F='PAR(PNT(com.lucidchart.UMLEndBlock.60!Connections.X4,com.lucidchart.UMLEndBlock.60!Connections.Y4))'>2.8188</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.57!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLEndBlock.60!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.5625</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.28125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.5625</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='60' NameU='com.lucidchart.UMLEndBlock.60' Type='Group' Master='3109'><XForm><PinX>2.75</PinX><PinY>2.6938</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='61' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.60!Width*0.5'>0.125</PinX><PinY F='Sheet.60!Height*0.5'>0.125</PinY><Width F='Sheet.60!Width*1'>0.25</Width><Height F='Sheet.60!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.60!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.60!LineColor'>#000000</LineColor><LinePattern F='Sheet.60!LinePattern'>1</LinePattern><Rounding F='Sheet.60!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.60!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.60!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.60!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.60!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.60!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.60!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.60!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape><Shape ID='62' Type='Shape' MasterShape='7'><XForm><PinX F='Sheet.60!Width*0.5'>0.125</PinX><PinY F='Sheet.60!Height*0.5'>0.125</PinY><Width F='Sheet.60!Width*1'>0.25</Width><Height F='Sheet.60!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.60!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.60!LineColor'>#000000</LineColor><LinePattern F='Sheet.60!LinePattern'>1</LinePattern><Rounding F='Sheet.60!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.60!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.60!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.60!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.60!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.60!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.60!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.60!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='63' NameU='com.lucidchart.Line.63' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>6</PinX><PinY F='GUARD((BeginY+EndY)/2)'>2.5063</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.5</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.25</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.48!Connections.X3,com.lucidchart.UMLStateBlock.48!Connections.Y3))'>6</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.48!Connections.X3,com.lucidchart.UMLStateBlock.48!Connections.Y3))'>2.7563</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.64!Connections.X4,com.lucidchart.UMLStateBlock.64!Connections.Y4))'>6</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.64!Connections.X4,com.lucidchart.UMLStateBlock.64!Connections.Y4))'>2.2563</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.48!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.64!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.5</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.25</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='64' NameU='com.lucidchart.UMLStateBlock.64' Type='Group' Master='3107'><XForm><PinX>6</PinX><PinY>2.0063</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Retorna <cp IX='1'/>ao <cp IX='2'/>usuário
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='65' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.64!Width*0.5'>0.5</PinX><PinY F='Sheet.64!Height*0.5'>0.25</PinY><Width F='Sheet.64!Width*1'>1</Width><Height F='Sheet.64!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.64!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.64!LineColor'>#000000</LineColor><LinePattern F='Sheet.64!LinePattern'>1</LinePattern><Rounding F='Sheet.64!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.64!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.64!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.64!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.64!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.64!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.64!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.64!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='66' NameU='com.lucidchart.Line.66' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>6</PinX><PinY F='GUARD((BeginY+EndY)/2)'>1.5063</PinY><Width F='GUARD(0.25DL)'>0.25</Width><Height F='GUARD(EndY-BeginY)'>-0.5</Height><LocPinX F='GUARD(Width*0.5)'>0.125</LocPinX><LocPinY F='GUARD(Height*0.5)'>-0.25</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.64!Connections.X3,com.lucidchart.UMLStateBlock.64!Connections.Y3))'>6</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.64!Connections.X3,com.lucidchart.UMLStateBlock.64!Connections.Y3))'>1.7563</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLEndBlock.67!Connections.X4,com.lucidchart.UMLEndBlock.67!Connections.Y4))'>6</EndX><EndY F='PAR(PNT(com.lucidchart.UMLEndBlock.67!Connections.X4,com.lucidchart.UMLEndBlock.67!Connections.Y4))'>1.2563</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.64!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLEndBlock.67!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0.125</TxtPinX><TxtPinY>0</TxtPinY><TxtWidth F='Width*1'>0.25</TxtWidth><TxtHeight F='Height*1'>-0.5</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>-0.25</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0.125</X><Y>0</Y></MoveTo><LineTo IX='2'><X>0.125</X><Y>-0.5</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='67' NameU='com.lucidchart.UMLEndBlock.67' Type='Group' Master='3109'><XForm><PinX>6</PinX><PinY>1.1313</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='68' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.67!Width*0.5'>0.125</PinX><PinY F='Sheet.67!Height*0.5'>0.125</PinY><Width F='Sheet.67!Width*1'>0.25</Width><Height F='Sheet.67!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.67!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.67!LineColor'>#000000</LineColor><LinePattern F='Sheet.67!LinePattern'>1</LinePattern><Rounding F='Sheet.67!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.67!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.67!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.67!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.67!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.67!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.67!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.67!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape><Shape ID='69' Type='Shape' MasterShape='7'><XForm><PinX F='Sheet.67!Width*0.5'>0.125</PinX><PinY F='Sheet.67!Height*0.5'>0.125</PinY><Width F='Sheet.67!Width*1'>0.25</Width><Height F='Sheet.67!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.67!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.67!LineColor'>#000000</LineColor><LinePattern F='Sheet.67!LinePattern'>1</LinePattern><Rounding F='Sheet.67!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.67!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.67!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.67!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.67!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.67!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.67!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.67!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='70' NameU='com.lucidchart.Line.70' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>7.1875</PinX><PinY F='GUARD((BeginY+EndY)/2)'>9.8813</PinY><Width F='GUARD(EndX-BeginX)'>0.625</Width><Height F='GUARD(0.25DL)'>0.25</Height><LocPinX F='GUARD(Width*0.5)'>0.3125</LocPinX><LocPinY F='GUARD(Height*0.5)'>0.125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.29!Connections.X2,com.lucidchart.UMLStateBlock.29!Connections.Y2))'>6.875</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.29!Connections.X2,com.lucidchart.UMLStateBlock.29!Connections.Y2))'>9.8813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLStateBlock.71!Connections.X1,com.lucidchart.UMLStateBlock.71!Connections.Y1))'>7.5</EndX><EndY F='PAR(PNT(com.lucidchart.UMLStateBlock.71!Connections.X1,com.lucidchart.UMLStateBlock.71!Connections.Y1))'>9.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.29!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.71!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0</TxtPinX><TxtPinY>0.125</TxtPinY><TxtWidth F='Width*1'>0.625</TxtWidth><TxtHeight F='Height*1'>0.25</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.3125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0.125</Y></MoveTo><LineTo IX='2'><X>0.625</X><Y>0.125</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='71' NameU='com.lucidchart.UMLStateBlock.71' Type='Group' Master='3107'><XForm><PinX>8</PinX><PinY>9.8813</PinY><Width>1</Width><Height>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><TextBlock><LeftMargin>0</LeftMargin><RightMargin>0</RightMargin><TopMargin>0</TopMargin><BottomMargin>0</BottomMargin><VerticalAlign>1</VerticalAlign><TextBkgnd>0</TextBkgnd><DefaultTabStop>0.5</DefaultTabStop><TextDirection>0</TextDirection><TextBkgndTrans>0</TextBkgndTrans></TextBlock><TextXForm><TxtPinX F='Width*0.5'>0.5</TxtPinX><TxtPinY F='Height*0.5'>0.25</TxtPinY><TxtWidth F='Width*0.9'>0.9</TxtWidth><TxtHeight F='Height*0.8'>0.4</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.45</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.2</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit F='Inh'>0</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Char IX='0'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='1'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Char IX='2'><Font>65535</Font><Color>#000000</Color><Style>0</Style><Case>0</Case><Pos>0</Pos><FontScale>1</FontScale><Size>0.1111111111111111</Size><DblUnderline>0</DblUnderline><Overline>0</Overline><Strikethru>0</Strikethru><Highlight>0</Highlight><DoubleStrikethrough>0</DoubleStrikethrough><RTLText>0</RTLText><UseVertical>0</UseVertical><Letterspace>0</Letterspace><ColorTrans>0</ColorTrans><AsianFont>0</AsianFont><ComplexScriptFont>0</ComplexScriptFont><LocalizeFont>0</LocalizeFont><ComplexScriptSize>-1</ComplexScriptSize><LangID>2057</LangID></Char><Para IX='0'><IndFirst>0</IndFirst><IndLeft>0</IndLeft><IndRight>0</IndRight><SpLine>-1</SpLine><SpBefore>0</SpBefore><SpAfter>0</SpAfter><HorzAlign>1</HorzAlign><Bullet>0</Bullet><BulletStr V='null'/><BulletFont>0</BulletFont><LocalizeBulletFont>0</LocalizeBulletFont><BulletFontSize>-1</BulletFontSize><TextPosAfterBullet>0</TextPosAfterBullet><Flags>0</Flags></Para><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>1</X><Y F='Height*0.5'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.5</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.5</X><Y F='Height*1'>0.5</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Tabs IX='0'/><Text><cp IX='0'/><pp IX='0'/><tp IX='0'/>Retorna <cp IX='1'/>ao <cp IX='2'/>usuário
-</Text><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Rake' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='TitleHeight' xmlns:lc='http://www.lucidchart.com'>44</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Text' xmlns:lc='http://www.lucidchart.com'>State</lc:Property><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='Action' xmlns:lc='http://www.lucidchart.com'>{"t":"Action","m":[{"s":0,"n":"c","v":"000000ff","e":6}]}</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Composite' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><Shapes><Shape ID='72' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.71!Width*0.5'>0.5</PinX><PinY F='Sheet.71!Height*0.5'>0.25</PinY><Width F='Sheet.71!Width*1'>1</Width><Height F='Sheet.71!Height*1'>0.5</Height><LocPinX F='Width*0.5'>0.5</LocPinX><LocPinY F='Height*0.5'>0.25</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.71!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.71!LineColor'>#000000</LineColor><LinePattern F='Sheet.71!LinePattern'>1</LinePattern><Rounding F='Sheet.71!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.71!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.71!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.71!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.71!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.71!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.71!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.71!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape><Shape ID='73' NameU='com.lucidchart.Line.73' Type='Shape' LineStyle='0' FillStyle='0' TextStyle='0'><XForm><PinX F='GUARD((BeginX+EndX)/2)'>8.8125</PinX><PinY F='GUARD((BeginY+EndY)/2)'>9.8813</PinY><Width F='GUARD(EndX-BeginX)'>0.625</Width><Height F='GUARD(0.25DL)'>0.25</Height><LocPinX F='GUARD(Width*0.5)'>0.3125</LocPinX><LocPinY F='GUARD(Height*0.5)'>0.125</LocPinY><Angle F='GUARD(0DA)'>0</Angle><FlipX F='GUARD(FALSE)'>0</FlipX><FlipY F='GUARD(FALSE)'>0</FlipY><ResizeMode>0</ResizeMode></XForm><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0.003125</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>4</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><XForm1D><BeginX F='PAR(PNT(com.lucidchart.UMLStateBlock.71!Connections.X2,com.lucidchart.UMLStateBlock.71!Connections.Y2))'>8.5</BeginX><BeginY F='PAR(PNT(com.lucidchart.UMLStateBlock.71!Connections.X2,com.lucidchart.UMLStateBlock.71!Connections.Y2))'>9.8813</BeginY><EndX F='PAR(PNT(com.lucidchart.UMLEndBlock.74!Connections.X1,com.lucidchart.UMLEndBlock.74!Connections.Y1))'>9.125</EndX><EndY F='PAR(PNT(com.lucidchart.UMLEndBlock.74!Connections.X1,com.lucidchart.UMLEndBlock.74!Connections.Y1))'>9.8813</EndY></XForm1D><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox>1</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback>2</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='_XFTRIGGER(com.lucidchart.UMLStateBlock.71!EventXFMod)'>2</BegTrigger><EndTrigger F='_XFTRIGGER(com.lucidchart.UMLEndBlock.74!EventXFMod)'>2</EndTrigger><ObjType>2</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics>1</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Layout><ShapePermeableX F='Inh'>0</ShapePermeableX><ShapePermeableY F='Inh'>0</ShapePermeableY><ShapePermeablePlace F='Inh'>0</ShapePermeablePlace><ShapeFixedCode F='Inh'>0</ShapeFixedCode><ShapePlowCode F='Inh'>0</ShapePlowCode><ShapeRouteStyle>0</ShapeRouteStyle><ConFixedCode>0</ConFixedCode><ConLineJumpCode F='Inh'>0</ConLineJumpCode><ConLineJumpStyle F='Inh'>0</ConLineJumpStyle><ConLineJumpDirX F='Inh'>0</ConLineJumpDirX><ConLineJumpDirY F='Inh'>0</ConLineJumpDirY><ShapePlaceFlip F='Inh'>0</ShapePlaceFlip><ConLineRouteExt>0</ConLineRouteExt><ShapeSplit F='Inh'>0</ShapeSplit><ShapeSplittable F='Inh'>0</ShapeSplittable></Layout><vx:Layout xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:ShapePlaceStyle F='Inh'>0</vx:ShapePlaceStyle></vx:Layout><v14:Layout xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:Relationships F='Inh'>0</v14:Relationships><v14:DisplayLevel F='Inh'>0</v14:DisplayLevel></v14:Layout><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='No Formula'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><TextXForm><TxtPinX>0</TxtPinX><TxtPinY>0.125</TxtPinY><TxtWidth F='Width*1'>0.625</TxtWidth><TxtHeight F='Height*1'>0.25</TxtHeight><TxtLocPinX F='TxtWidth*0.5'>0.3125</TxtLocPinX><TxtLocPinY F='TxtHeight*0.5'>0.125</TxtLocPinY><TxtAngle>0</TxtAngle></TextXForm><Geom IX='0'><NoFill>1</NoFill><NoLine>0</NoLine><NoShow>0</NoShow><NoSnap>0</NoSnap><MoveTo IX='1'><X>0</X><Y>0.125</Y></MoveTo><LineTo IX='2'><X>0.625</X><Y>0.125</Y></LineTo></Geom><v14:Geom IX='0' xmlns:v14='http://schemas.microsoft.com/office/visio/2010/extension'><v14:NoQuickDrag>0</v14:NoQuickDrag></v14:Geom></Shape><Shape ID='74' NameU='com.lucidchart.UMLEndBlock.74' Type='Group' Master='3109'><XForm><PinX>9.25</PinX><PinY>9.8813</PinY><Width>0.25</Width><Height>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Event><TheData F='No Formula'>0</TheData><TheText F='No Formula'>0</TheText><EventDblClick F='OPENTEXTWIN()'>0</EventDblClick><EventXFMod F='No Formula'>0</EventXFMod><EventDrop F='No Formula'>0</EventDrop></Event><vx:Event xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:EventMultiDrop F='No Formula'>0</vx:EventMultiDrop></vx:Event><Line><LineWeight>0.0125</LineWeight><LineColor>#000000</LineColor><LinePattern>1</LinePattern><Rounding>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Inh'>0</BeginArrow><EndArrow F='Inh'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd>#ffffff</FillForegnd><FillBkgnd>#000000</FillBkgnd><FillPattern>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans>0</FillForegndTrans><FillBkgndTrans>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth F='Inh'>0</LockWidth><LockHeight F='Inh'>0</LockHeight><LockMoveX F='Inh'>0</LockMoveX><LockMoveY F='Inh'>0</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate F='Inh'>0</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup>1</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection><Group><SelectMode F='Inh'>1</SelectMode><DisplayMode F='Inh'>2</DisplayMode><IsDropTarget F='Inh'>0</IsDropTarget><IsSnapTarget F='Inh'>1</IsSnapTarget><IsTextEditTarget F='Inh'>1</IsTextEditTarget><DontMoveChildren>0</DontMoveChildren></Group><Misc><NoObjHandles F='Inh'>0</NoObjHandles><NonPrinting F='Inh'>0</NonPrinting><NoCtlHandles F='Inh'>0</NoCtlHandles><NoAlignBox F='Inh'>0</NoAlignBox><UpdateAlignBox F='Inh'>0</UpdateAlignBox><HideText F='Inh'>0</HideText><DynFeedback F='Inh'>0</DynFeedback><GlueType F='Inh'>0</GlueType><WalkPreference F='Inh'>0</WalkPreference><BegTrigger F='No Formula'>0</BegTrigger><EndTrigger F='No Formula'>0</EndTrigger><ObjType>1</ObjType><Comment F='Inh'/><IsDropSource F='Inh'>0</IsDropSource><NoLiveDynamics F='Inh'>0</NoLiveDynamics><LocalizeMerge F='Inh'>0</LocalizeMerge><Calendar F='Inh'>0</Calendar><LangID F='Inh'>2057</LangID><ShapeKeywords F='Inh'/><DropOnPageScale F='Inh'>1</DropOnPageScale></Misc><Connection IX='0'><X F='Width*0'>0</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='1'><X F='Width*1'>0.25</X><Y F='Height*0.5'>0.125</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='2'><X F='Width*0.5'>0.125</X><Y F='Height*0'>0</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><Connection IX='3'><X F='Width*0.5'>0.125</X><Y F='Height*1'>0.25</Y><DirX F='Inh'>0</DirX><DirY F='Inh'>0</DirY><Type F='Inh'>0</Type><AutoGen F='Inh'>0</AutoGen><Prompt F='Inh'/></Connection><lc:Property Name='BG' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='IgnoreTheme' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><lc:Property Name='Hidden' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='FlipY' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='Opacity' xmlns:lc='http://www.lucidchart.com'>100</lc:Property><lc:Property Name='Lock' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='InsetMargin' xmlns:lc='http://www.lucidchart.com'>0</lc:Property><lc:Property Name='StrokeStyle' xmlns:lc='http://www.lucidchart.com'>solid</lc:Property><lc:Property Name='FlipX' xmlns:lc='http://www.lucidchart.com'>false</lc:Property><lc:Property Name='TextLinks' xmlns:lc='http://www.lucidchart.com'>[]</lc:Property><Shapes><Shape ID='75' Type='Shape' MasterShape='6'><XForm><PinX F='Sheet.74!Width*0.5'>0.125</PinX><PinY F='Sheet.74!Height*0.5'>0.125</PinY><Width F='Sheet.74!Width*1'>0.25</Width><Height F='Sheet.74!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.74!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.74!LineColor'>#000000</LineColor><LinePattern F='Sheet.74!LinePattern'>1</LinePattern><Rounding F='Sheet.74!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.74!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.74!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='Sheet.74!FillForegnd'>#ffffff</FillForegnd><FillBkgnd F='Sheet.74!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.74!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.74!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.74!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape><Shape ID='76' Type='Shape' MasterShape='7'><XForm><PinX F='Sheet.74!Width*0.5'>0.125</PinX><PinY F='Sheet.74!Height*0.5'>0.125</PinY><Width F='Sheet.74!Width*1'>0.25</Width><Height F='Sheet.74!Height*1'>0.25</Height><LocPinX F='Width*0.5'>0.125</LocPinX><LocPinY F='Height*0.5'>0.125</LocPinY><Angle>0</Angle><FlipX F='Inh'>0</FlipX><FlipY F='Inh'>0</FlipY><ResizeMode F='Inh'>0</ResizeMode></XForm><Line><LineWeight F='Sheet.74!LineWeight'>0.0125</LineWeight><LineColor F='Sheet.74!LineColor'>#000000</LineColor><LinePattern F='Sheet.74!LinePattern'>1</LinePattern><Rounding F='Sheet.74!Rounding'>0</Rounding><EndArrowSize F='Inh'>2</EndArrowSize><BeginArrow F='Sheet.74!BeginArrow'>0</BeginArrow><EndArrow F='Sheet.74!EndArrow'>0</EndArrow><LineCap F='Inh'>0</LineCap><BeginArrowSize F='Inh'>2</BeginArrowSize><LineColorTrans F='Inh'>0</LineColorTrans></Line><Fill><FillForegnd F='GUARD(Sheet.74!LineColor)'>#000000</FillForegnd><FillBkgnd F='Sheet.74!FillBkgnd'>#000000</FillBkgnd><FillPattern F='Sheet.74!FillPattern'>1</FillPattern><ShdwForegnd F='Inh'>0</ShdwForegnd><ShdwBkgnd F='Inh'>1</ShdwBkgnd><ShdwPattern F='Inh'>0</ShdwPattern><FillForegndTrans F='Sheet.74!FillForegndTrans'>0</FillForegndTrans><FillBkgndTrans F='Sheet.74!FillBkgndTrans'>0</FillBkgndTrans><ShdwForegndTrans F='Inh'>0</ShdwForegndTrans><ShdwBkgndTrans F='Inh'>0</ShdwBkgndTrans><ShapeShdwType F='Inh'>0</ShapeShdwType><ShapeShdwOffsetX F='Inh'>0</ShapeShdwOffsetX><ShapeShdwOffsetY F='Inh'>0</ShapeShdwOffsetY><ShapeShdwObliqueAngle F='Inh'>0</ShapeShdwObliqueAngle><ShapeShdwScaleFactor F='Inh'>1</ShapeShdwScaleFactor></Fill><Protection><LockWidth>1</LockWidth><LockHeight>1</LockHeight><LockMoveX>1</LockMoveX><LockMoveY>1</LockMoveY><LockAspect F='Inh'>0</LockAspect><LockDelete F='Inh'>0</LockDelete><LockBegin F='Inh'>0</LockBegin><LockEnd F='Inh'>0</LockEnd><LockRotate>1</LockRotate><LockCrop F='Inh'>0</LockCrop><LockVtxEdit F='Inh'>0</LockVtxEdit><LockTextEdit>1</LockTextEdit><LockFormat F='Inh'>0</LockFormat><LockGroup F='Inh'>0</LockGroup><LockCalcWH F='Inh'>0</LockCalcWH><LockSelect F='Inh'>0</LockSelect><LockCustProp F='Inh'>0</LockCustProp></Protection><vx:Protection xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><vx:LockFromGroupFormat F='Inh'>0</vx:LockFromGroupFormat><vx:LockThemeColors F='Inh'>0</vx:LockThemeColors><vx:LockThemeEffects F='Inh'>0</vx:LockThemeEffects></vx:Protection></Shape></Shapes></Shape></Shapes><Connects><Connect FromSheet='3' FromCell='BeginX' FromPart='9' ToSheet='1' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='3' FromCell='EndX' FromPart='12' ToSheet='4' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='6' FromCell='BeginX' FromPart='9' ToSheet='4' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='6' FromCell='EndX' FromPart='12' ToSheet='7' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='9' FromCell='BeginX' FromPart='9' ToSheet='7' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='9' FromCell='EndX' FromPart='12' ToSheet='10' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='12' FromCell='BeginX' FromPart='9' ToSheet='10' ToCell='Connections.X1' ToPart='100'/><Connect FromSheet='12' FromCell='EndX' FromPart='12' ToSheet='13' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='15' FromCell='BeginX' FromPart='9' ToSheet='10' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='15' FromCell='EndX' FromPart='12' ToSheet='16' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='18' FromCell='BeginX' FromPart='9' ToSheet='13' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='18' FromCell='EndX' FromPart='12' ToSheet='19' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='22' FromCell='BeginX' FromPart='9' ToSheet='16' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='22' FromCell='EndX' FromPart='12' ToSheet='23' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='25' FromCell='BeginX' FromPart='9' ToSheet='23' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='25' FromCell='EndX' FromPart='12' ToSheet='26' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='28' FromCell='BeginX' FromPart='9' ToSheet='23' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='28' FromCell='EndX' FromPart='12' ToSheet='29' ToCell='Connections.X1' ToPart='100'/><Connect FromSheet='31' FromCell='BeginX' FromPart='9' ToSheet='26' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='31' FromCell='EndX' FromPart='12' ToSheet='32' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='34' FromCell='BeginX' FromPart='9' ToSheet='32' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='34' FromCell='EndX' FromPart='12' ToSheet='35' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='37' FromCell='BeginX' FromPart='9' ToSheet='35' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='37' FromCell='EndX' FromPart='12' ToSheet='38' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='40' FromCell='BeginX' FromPart='9' ToSheet='38' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='40' FromCell='EndX' FromPart='12' ToSheet='41' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='43' FromCell='BeginX' FromPart='9' ToSheet='41' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='43' FromCell='EndX' FromPart='12' ToSheet='44' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='46' FromCell='BeginX' FromPart='9' ToSheet='44' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='46' FromCell='EndX' FromPart='12' ToSheet='26' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='47' FromCell='BeginX' FromPart='9' ToSheet='44' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='47' FromCell='EndX' FromPart='12' ToSheet='48' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='50' FromCell='BeginX' FromPart='9' ToSheet='35' ToCell='Connections.X1' ToPart='100'/><Connect FromSheet='50' FromCell='EndX' FromPart='12' ToSheet='51' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='53' FromCell='BeginX' FromPart='9' ToSheet='51' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='53' FromCell='EndX' FromPart='12' ToSheet='54' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='56' FromCell='BeginX' FromPart='9' ToSheet='54' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='56' FromCell='EndX' FromPart='12' ToSheet='57' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='59' FromCell='BeginX' FromPart='9' ToSheet='57' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='59' FromCell='EndX' FromPart='12' ToSheet='60' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='63' FromCell='BeginX' FromPart='9' ToSheet='48' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='63' FromCell='EndX' FromPart='12' ToSheet='64' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='66' FromCell='BeginX' FromPart='9' ToSheet='64' ToCell='Connections.X3' ToPart='102'/><Connect FromSheet='66' FromCell='EndX' FromPart='12' ToSheet='67' ToCell='Connections.X4' ToPart='103'/><Connect FromSheet='70' FromCell='BeginX' FromPart='9' ToSheet='29' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='70' FromCell='EndX' FromPart='12' ToSheet='71' ToCell='Connections.X1' ToPart='100'/><Connect FromSheet='73' FromCell='BeginX' FromPart='9' ToSheet='71' ToCell='Connections.X2' ToPart='101'/><Connect FromSheet='73' FromCell='EndX' FromPart='12' ToSheet='74' ToCell='Connections.X1' ToPart='100'/></Connects></Page></Pages><Windows ClientWidth='1' ClientHeight='1'/></VisioDocument>
\ No newline at end of file
diff --git a/etc/unicode-tests/utf8.vsdx b/etc/unicode-tests/utf8.vsdx
deleted file mode 100644
index d19ce8d99fc2a4866a2263b9ed87a7c72ff10455..0000000000000000000000000000000000000000
Binary files a/etc/unicode-tests/utf8.vsdx and /dev/null differ
diff --git a/etc/unicode-tests/utf8.xml b/etc/unicode-tests/utf8.xml
deleted file mode 100644
index fda8aca97f59e8ecced5ee8be5502fc7c7dc641f..0000000000000000000000000000000000000000
--- a/etc/unicode-tests/utf8.xml
+++ /dev/null
@@ -1 +0,0 @@
-<mxfile type="device" userAgent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"><diagram>5R3ZkptI8ms6YvbBDnEISY92d9vrCE/Yu+3Z2X2kBa0mjEADyN2er58sqCyoQ1AgztkHXSWKI8+jMrNurNvj68fEPT3/Gnt+eGOu0uxn6N9Ydzem6flP7jnM3uRDJgzA30c3ey7+XRUDJ/fg/9MPDs9ZMWwYzq785/fAw+O3plOOP+xdvIpRjnIDT3HocQP7OIr8PV6mGMviOMyCU8oNHs6B5wtDSeA9BH/iFei9k1HuMO8nvVeHHuG90v9tyy5GHt3990MSnyM6M4ojn/xj3QMskziG+yPfjq+3fkjgiVegJ7wxP1w4gMEh8SP6kBfn/HDDM32WG9MJ4fD3J/hyIF8AkWeArbmCE67ewOv2nGbx0U/g652fuUGY4hw4MZumOM/Zy89DLuEeTzAUPabkg5z0SxQG5MFXXxLPT4Lo0O6cFr23b4kbpe4+C+IofdvuFIAPcgr+1mDsIYsT8v+niDywm7mPbgq/25x6Te/uLkhPofuTnCzzjwC2VUxO+gC02/JmgfTzM/528tyMDPzuP6YB+aY6C0F6hQ8z/5WMP2fHEAYM+Jr4afCn+5gfsILf7jmLYYT8JH+7YXCI4HvoP5GJP/wkC4Dh3tHhLCagSk/uHvD2jfy4e2OzCyM97jYyQVIaJSf0kTM45qT3hLRLqfajD/SXJQSQLuXLAxsis5+rAmRDyf6llB3Gjo5R/lzjMfQmTIPKFsYq8IVySw3nCHAmbE0g4wUJPAqQJAy/+GmJEwYaJuHGBY2tAM1mzYPGANaqQMYWZYgWYAqiTLMkzhmbI27/KI48xQCEKiSdP85EDuZ/vCno8h0RJPbptfxTPMsZB+4+wClWn+//c/8ZPuHOCykG5yJ8QLjSPSQuuQtkHTa1MlbclDQs3z0Mig/ayH9kwnf/Ng7jBEZyFQBPG4ShMISMuAcyAQEss+Ix8IiAsN6/PIM0eACWJNd8AYUMYzEc/RTGLzDyDMf5MEEgRGsrEyISp0SJXShOQXA2ak8895oKih54j3s4g+Be++l65TO8cg2fIWT6fuqdAqUMEtM9dZvHLA2OD7+l5EN4ahWtV5iLhwcFGkcDFES9UDhaelVtg4YXilSzA4U/ZO7Tk/ToueHok0cjT9oAiEY9ZChsxsmAQ6/lWB0o5lc3cg9H8gxX0YqtMFnGhgfewzXg+OgeiY348Ay2WcVUFEAD08DzuaQ8LgJpPTTRGKgg6qhmxYPJwjltwPTejb5fRzDrGUgXC000eq012rqNoKjSggc+Nf0ZJ9lzfIgjN7wvR9+Xkoc4DBWI+K9B9l8y/Hazpj//R48SgEUtSxWw0vic5BAvJXbmJgefHoY0R26zA0QTP3Sz4Ic09V2S5N4ZzjrFQZSBm8bO/JUMVKjO4KlOgnTjDFNiZ3mKIAHkKfCluPMSuwwEIyIcv+fYpsiP4B4KYlhtLRwoDtgaWxz4Ch4/3C6xaFV0wuI8i6WTDb03RKFkBclT0F2+OGUmWF+9rXK5QiTW6NCFYG8roKIReZZgw3SYYUDMqGGKKBfaT7FUTkc3oqqo0a8JRAwhrroct3etcnv7VNtIABW1LUSgBHZnSr2bn4SBWYgqLgcJiiDY0EiQzEg04K5Bw7/9feCflkT/aFVOSP/mpsGUGkmbcTYM0WwCpDRtVhS0M1RnqJAvOpRNM+xtazNXntKHonnneSQkhEsgdE1lOVxHVwBHFXhoJGB0gfcV7Z1oQ0zAdvV+g57P4NRo9CqfIk9W+ZSqgKmtTpNfeJEDxNIUQYS2n6EKmvRnDparxcth0SlsEgybq6WvSpKOzKH5eMmhzNFXO4AbTZU5X1YUjXPLpLd/mbHEKWhhzTlmw6OVD9aYsim0qVFfTXhFM3tqxJKclqr6a47LWEiTF6fMJS5TG40rfxf/71Y7PcW60VWs843nWIKTx9Yp+zVOT6ckht8kyafwyPc0wymGZbzVrZuA8boYRbgZWhFaVF5WPUR6TYY2wVZF5m3jmxMfAUa+JgE8/3LAj0p/QgfdIglynODTBX/f8eZcF13wFnbgeHKCbQOBVS3BBm7G3ARbKblwXnFROlqNWwkhalty6lsLScEzdKTEL1mbCt5Ehym2xgqa+KiqSNHV0rsMpfL5oIXYXqAns6WO/XACvDnEJ6w+KDE3+jqlwrLdai44YrrMdGwvQvRqthe5SyM6KE5Zt1/Slqf0wcOQuL2X8zlmzKJDZxvVKHlExEr0bOeg1HlfRYabpksy45i8EC53pHBB0wwNz1VMkerRc60wHYvGq6pElsOKQ7s7aBrVxP3Etci1NbLBfSEUxLK6OIu71KcQ7yt+19vbu5q0wabwEXLy4Iq3uBGF4kV3tT/FK5xxLcXipSk7gT4Gid4vTYkiUCb0lDfUfES8YMSwTZziX2fIzyZFbHDsffTHOUh+LimXY1fjTA+2bmLxS5sW8iRG7fsosJiodK6N89ZvCYcEZrE8zBbqw1B1dikQYyWLt4nvBUTUFf62RmXkL/dP2SlO/6FVANkx093AiKNOnV4XcGOYrwLuLT0/c7ZIqWt1kRed1W6JYtckuxukkndIcOhUi1iOuITTHhxfXqLrYaGQeKPDAq/I3IihKukwi2T0Wl5UtVUwYOSW2c2ofVABY5CxdzCgRc6BAWEzLCDQ6a0BhLRK3eWx8zWrWsJX1RciYPqp/1GEFhntszjVGM9qqATeeM+KCSEU4n0+upK6FYtOl5+2T+pWCTt8TAqEgRBeLZEE549cXSJ4VbE+wmowWd/Fei2bVSzGcTCw3cBw0FW4DpiihIKTd6y1lykqoP8cx+A1Q3uO/ustWW7thFaohUsfrJBkmrzRxqUcJjsVwOKWctCWnW4tx0LRijDFJbsrYkrCKQ1HgabrQ755Tf4Co7yGqkdSn5ykcJ+FpBbDMYS0ii7+3IMfkkZWNAVeDhR1lTSqZgkjSxrWJwv9XacDfPKuUE85lX6KfsSq3J/OIBrY79MAkSOAyNp1AJHcSKovACnSRMfWVrjWwFZSdAE0dHFRNXNJTMl0iiXR5swlAw7U03GUVqtLKQw/EyYxCFrKwUDuFYoPV43wlAiiupwEu2nOHDN7q0TEVu0uVa+x3ipNlIJEwVEK2p1Tr5XbQgjUluRdM0HIc3pd/L7oeXWWoqooy7hSdC1YKs5kuSJiw4GavHZdEYoip5Ex6DNzjIGAmJoxHFHq2eJaTPOczSK6i9SkJ2hjXJHkp8S4SmliDGhyjAs6y5YcvOY5TnN3CsPZCryvqou/WnxKi3pFQyaNBb12whRTLaZcq9kK5Z1ryeiZXJo2mxOqdpEqHkLLgTc8e4+4dO6W8W6/BzjJHRu6amurRT/XobT1Rgj9oA80V/qSoYjRk0YJrajIYCgYlbqmqc1UMCaK+CbQIZR4xqSSaXLlhneHcY21hnLDqtSLcxZWeJsbtCJ2df19ReokU35TY3cnLiFoYFecs16Ei05z22tCPTYoUj2r1da0WhHLvNU6l35qQtm1jMbmOVZ/SxlDKrzLnorCbFC1m9Xm6/6ldjtzqlrvvMACZ8MeOMKCWRtcxj8dY0Ru8U6BpZ1MOeSyqkoDXTZwlc7zdMHljaAyHFvMxm5fqyOc0lbll81NCwlxslIlXZBFqk7G+uGRiV076MDnB4vqwGeomiH3KX4UWS8OxVIZ5OGlD+Py2fg9TZWAhqpVsLbLOBe/R3TdLSk01DzHRgOw1wAd7Z6xwEwPVRfigdkLK5EYioRIu4WVE62W6Reba6PqsTsyBhwhsY91CZy2M37L2I6qT25dRtv0YTGZfj8tyjVQtccdOE0MQzxMeGB8F6+lvVxQ7cTopulLvCy3DMt7RoQ9RhaY2EBOYk2haYyxdQpasTHhMuW3qvPxwIgw0NEqo7t8RNjGKphWLcAwA3CRWGhReNUTFjCiXu5lIYTYMWhxVcXnp69kHc7zoJyW1DxDFmL192w3tTQwHXX0rRsV7CLt3CjETPXXAAWbf1ksMr6pj8i4lHfvaG/4NpvFV1UDbf2c0t4Tojp1eWTyfeXC7spky0/Y825JlDxwGgHGLWso2UZDFCkZ7dAh93+Vtl/FDWFxw23c8hXuTdz9tdjslWzwahBkrz77P/JtyO9fTyFI/ziqbrR8YU9X1fav/ezzOopKwrbvY6skhWC0pM0dUTRcU84xDT2ZuQz5f6SnFlVAI9NTuYMVo6cO8qmP/g9YADlhTiG0ZhGyNHER5yrLXG+LeWGS8RYuOmAnFlUb8j7BregzgR39GbSFfauVm6n97axrVZvkca1rSBfhdch62weZAyBpESUp3tAkcnjMAYkck66nSyMFcSo0CO0ScZEA9yU5uBFRU62Azc4zDLAHFuAawN6KwMYFjKuADR38khLSUADL1SdpQR54fkjItwihDAT5nSjLtffBqoN8pez423MFBd9iNtJOp4I8GBIPk9eYmVuhrQ9bt70KD3dBegrdnySOyDVzL1BQ2Dd5V/cCPV8Ih3RBD3EfBkTP5EUF5VbirJ/EPDJEBEipuk+qYldoRHKxK1S6U29NxDQta83dvJuCI2yRIs/pIwukYI24cJrA38vtJhJlg2MAB+YK+InwUQ6KnLEyIvCyfNpLwVFLamZqqNpv9hqHUy198X1CzI2goZyxu0HrVN82pWdh0XUTYyIP8oxJsTBVULkge0ruOVlTOodbJNQf50Ztmv9TxJs9ksd/hB5j5O+C/J/i5OgSls1zpIuxyH8pT/ZLBmxgwv2s9ucEoLSH2ye/Ch+cfIOrQ5fTBXHPwGYF65teZR/MrWKGBWo3VnKgu4Y/bEquCCvN3B7kBZ5BKHdNrbm2qFcZrJs1107UXP0VGI/Yw6UhqdpESm1EL8Ukj96JF9UK+UfFVEBEGtTPQp9m8ivKNTz5g/xfeJZE1pH3c3bO/c/EB1cIBBr5XshHd7+H1f3gMQiDbFHtzdm+kVNaBCLLQAl5V6SemQtURa9XuE35eJ61xFlwuTJaEMYGjlsqMLbjE2dMB9cI8FrGDNpQKSClWV2K8ogXUn+vsuu6RiOKyly2I1gnzxPJYyoBr+hZ2lsrQQgVjL9gI24/JwSXVPsfzbp9F9v0qZE1FWX9DANjkBf8TGKyjl7aakAgz7/GHiyeW/d/AQ==</diagram></mxfile>
\ No newline at end of file
diff --git a/etc/vsdx-convert/build.xml b/etc/vsdx-convert/build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7f186f3198102926815feb61fc7ffbedafc2102
--- /dev/null
+++ b/etc/vsdx-convert/build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<project basedir="." default="run">
+
+	<target name="compile">
+		<mkdir dir="classes"/>
+		<javac includeantruntime="false" srcdir="." destdir="classes">
+			<classpath>
+				<path location="classes"/>
+				<path location="../../classes"/>
+			</classpath>
+		</javac>
+	</target>
+
+	<target name="run" depends="compile">
+		<java fork="true" classname="com.mxgraph.vsdxutils.VsdxBatchConvert">
+            <classpath>
+                <path location="classes"/>
+            		<path location="../../classes"/>
+          	  	<fileset dir="lib"/>
+            		<fileset dir="../../src/main/webapp/WEB-INF/lib"/>
+            </classpath>
+        </java>
+	</target>
+
+</project>
diff --git a/src/com/mxgraph/vsdxutils/vsdxBatchConvert.java b/etc/vsdx-convert/com/mxgraph/vsdxutils/VsdxBatchConvert.java
similarity index 98%
rename from src/com/mxgraph/vsdxutils/vsdxBatchConvert.java
rename to etc/vsdx-convert/com/mxgraph/vsdxutils/VsdxBatchConvert.java
index 34711cd2d3bf0cb3c437228c962a57965f1c08bf..2bd36842bba20f6c9174f2c63f4fdaf190798d99 100644
--- a/src/com/mxgraph/vsdxutils/vsdxBatchConvert.java
+++ b/etc/vsdx-convert/com/mxgraph/vsdxutils/VsdxBatchConvert.java
@@ -1,4 +1,5 @@
 package com.mxgraph.vsdxutils;
+
 import java.io.File;
 import java.io.FilenameFilter;
 import java.io.IOException;
@@ -16,7 +17,7 @@ import org.xml.sax.SAXException;
 import com.mxgraph.io.mxVsdxCodec;
 import com.mxgraph.online.Utils;
 
-public class vsdxBatchConvert
+public class VsdxBatchConvert
 {
 	/**
 	 * @param args
diff --git a/war/WEB-INF/lib/appengine-api-1.0-sdk-1.9.34.jar.REMOVED.git-id b/etc/vsdx-convert/lib/appengine-api-1.0-sdk-1.9.34.jar.REMOVED.git-id
similarity index 100%
rename from war/WEB-INF/lib/appengine-api-1.0-sdk-1.9.34.jar.REMOVED.git-id
rename to etc/vsdx-convert/lib/appengine-api-1.0-sdk-1.9.34.jar.REMOVED.git-id
diff --git a/etc/vsdxJava2JS/.classpath b/etc/vsdxJava2JS/.classpath
deleted file mode 100644
index 40f3afa37a87ddafcf9532efed996fedc59f47cf..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/.classpath
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_101"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/etc/vsdxJava2JS/.jsweet/candies/CandyStore.json b/etc/vsdxJava2JS/.jsweet/candies/CandyStore.json
deleted file mode 100644
index 6ef37137cbaa09bf1be49fc1ae97364f194efb89..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/.jsweet/candies/CandyStore.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "candies": [
-    {
-      "name": "jquery",
-      "version": "1.10.0-20170726",
-      "lastUpdateTimestamp": 1501691304000,
-      "modelVersion": "unknown",
-      "transpilerVersion": "2.0.0",
-      "jsOutputDirPath": "C:\\Users\\ashra\\Documents\\jsweet\\jsweet-quickstart\\webapp",
-      "jsDirPath": "META-INF/resources/webjars/jquery/1.10.0-20170726",
-      "jsFilesPaths": []
-    }
-  ]
-}
\ No newline at end of file
diff --git a/etc/vsdxJava2JS/.jsweet/candies/typings/META-INF/resources/typings/jquery/1.10.0-20170726/bundle.d.ts b/etc/vsdxJava2JS/.jsweet/candies/typings/META-INF/resources/typings/jquery/1.10.0-20170726/bundle.d.ts
deleted file mode 100644
index cd8bf2e8010e99a71893cca260d528c68e85ac72..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/.jsweet/candies/typings/META-INF/resources/typings/jquery/1.10.0-20170726/bundle.d.ts
+++ /dev/null
@@ -1,7566 +0,0 @@
-/* Generated from Java with JSweet 2.0.0-rc1 - http://www.jsweet.org */
-interface JQueryMouseEventObject extends JQueryInputEventObject {
-    button : number;
-
-    clientX : number;
-
-    clientY : number;
-
-    offsetX : number;
-
-    offsetY : number;
-
-    pageX : number;
-
-    pageY : number;
-
-    screenX : number;
-
-    screenY : number;
-}
-
-/**
- * The interface used to construct jQuery events (with $.Event). It is
- * defined separately instead of inline in JQueryStatic to allow
- * overriding the construction function with specific strings
- * returning specific event objects.
- * @class
- * @extends Object
- */
-interface JQueryEventConstructor {
-    (name : string, eventProperties : any) : JQueryEventObject;
-
-    (name : string) : JQueryEventObject;
-}
-
-/**
- * Interface for the JQuery deferred, part of callbacks
- * @class
- * @extends *
- */
-interface JQueryDeferred<T> extends JQueryGenericPromise<T> {
-    /**
-     * Determine the current state of a Deferred object.
-     * @return {string}
-     */
-    state() : string;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Call the progressCallbacks on a Deferred object with the given args.
-     * 
-     * @param {Array} args Optional arguments that are passed to the progressCallbacks.
-     * @param {*} value
-     * @return {*}
-     */
-    notify(value : any, ...args : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Call the progressCallbacks on a Deferred object with the given context and args.
-     * 
-     * @param {*} context Context passed to the progressCallbacks as the this object.
-     * @param args Optional arguments that are passed to the progressCallbacks.
-     * @param {Array} value
-     * @return {*}
-     */
-    notifyWith(context : any, value : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Reject a Deferred object and call any failCallbacks with the given args.
-     * 
-     * @param {Array} args Optional arguments that are passed to the failCallbacks.
-     * @param {*} value
-     * @return {*}
-     */
-    reject(value : any, ...args : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Reject a Deferred object and call any failCallbacks with the given context and args.
-     * 
-     * @param {*} context Context passed to the failCallbacks as the this object.
-     * @param args An optional array of arguments that are passed to the failCallbacks.
-     * @param {Array} value
-     * @return {*}
-     */
-    rejectWith(context : any, value : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Resolve a Deferred object and call any doneCallbacks with the given args.
-     * 
-     * @param {*} value First argument passed to doneCallbacks.
-     * @param {Array} args Optional subsequent arguments that are passed to the doneCallbacks.
-     * @return {*}
-     */
-    resolve(value : T, ...args : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Resolve a Deferred object and call any doneCallbacks with the given context and args.
-     * 
-     * @param {*} context Context passed to the doneCallbacks as the this object.
-     * @param args An optional array of arguments that are passed to the doneCallbacks.
-     * @param {Array} value
-     * @return {*}
-     */
-    resolveWith(context : any, value : T[]) : JQueryDeferred<T>;
-
-    /**
-     * Return a Deferred's Promise object.
-     * 
-     * @param {*} target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise(target : any) : JQueryPromise<T>;
-
-    pipe(doneFilter : (p1: any) => any, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @return {*}
-     */
-    always() : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @return {*}
-     */
-    done() : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @return {*}
-     */
-    fail() : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @return {*}
-     */
-    progress() : JQueryDeferred<T>;
-
-    /**
-     * Call the progressCallbacks on a Deferred object with the given args.
-     * 
-     * @param args Optional arguments that are passed to the progressCallbacks.
-     * @return {*}
-     */
-    notify() : JQueryDeferred<T>;
-
-    /**
-     * Call the progressCallbacks on a Deferred object with the given context and args.
-     * 
-     * @param {*} context Context passed to the progressCallbacks as the this object.
-     * @param args Optional arguments that are passed to the progressCallbacks.
-     * @return {*}
-     */
-    notifyWith(context : any) : JQueryDeferred<T>;
-
-    /**
-     * Reject a Deferred object and call any failCallbacks with the given args.
-     * 
-     * @param args Optional arguments that are passed to the failCallbacks.
-     * @return {*}
-     */
-    reject() : JQueryDeferred<T>;
-
-    /**
-     * Reject a Deferred object and call any failCallbacks with the given context and args.
-     * 
-     * @param {*} context Context passed to the failCallbacks as the this object.
-     * @param args An optional array of arguments that are passed to the failCallbacks.
-     * @return {*}
-     */
-    rejectWith(context : any) : JQueryDeferred<T>;
-
-    /**
-     * Resolve a Deferred object and call any doneCallbacks with the given args.
-     * 
-     * @param value First argument passed to doneCallbacks.
-     * @param args Optional subsequent arguments that are passed to the doneCallbacks.
-     * @return {*}
-     */
-    resolve() : JQueryDeferred<T>;
-
-    /**
-     * Resolve a Deferred object and call any doneCallbacks with the given context and args.
-     * 
-     * @param {*} context Context passed to the doneCallbacks as the this object.
-     * @param args An optional array of arguments that are passed to the doneCallbacks.
-     * @return {*}
-     */
-    resolveWith(context : any) : JQueryDeferred<T>;
-
-    /**
-     * Return a Deferred's Promise object.
-     * 
-     * @param target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise() : JQueryPromise<T>;
-
-    pipe(doneFilter : (p1: any) => any, failFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    pipe(doneFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    pipe() : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : any[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : JQueryPromiseCallback<any>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : JQueryPromiseCallback<T>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : JQueryPromiseCallback<any>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : JQueryPromiseCallback<any>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : JQueryPromiseCallback<any>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : JQueryPromiseCallback<T>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : JQueryPromiseCallback<T>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : JQueryPromiseCallback<T>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : JQueryPromiseCallback<any>[]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : JQueryPromiseCallback<any>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : JQueryPromiseCallback<any>[][]) : JQueryDeferred<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : JQueryPromiseCallback<any>[]) : JQueryDeferred<T>;
-}
-
-interface JQueryPromiseOperator<T, U> {
-    (callback1 : JQueryPromiseCallback<T>, ...callbacksN : any[]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>[], ...callbacksN : any[]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>[], ...callbacksN : any[]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>, ...callbacksN : any[]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>, ...callbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>[], ...callbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>[], ...callbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<U>;
-
-    (callback1 : JQueryPromiseCallback<T>, ...callbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<U>;
-}
-
-/**
- * The jQuery instance members
- * @class
- * @extends Object
- */
-interface JQuery {
-    /**
-     * Register a handler to be called when Ajax requests complete. This is an AjaxEvent.
-     * 
-     * @param {*} handler The function to be invoked.
-     * @return {*}
-     */
-    ajaxComplete(handler : (p1: JQueryEventObject, p2: XMLHttpRequest, p3: any) => any) : JQuery;
-
-    /**
-     * Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.
-     * 
-     * @param {*} handler The function to be invoked.
-     * @return {*}
-     */
-    ajaxError(handler : (p1: JQueryEventObject, p2: JQueryXHR, p3: JQueryAjaxSettings, p4: any) => any) : JQuery;
-
-    /**
-     * Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.
-     * 
-     * @param {*} handler The function to be invoked.
-     * @return {*}
-     */
-    ajaxSend(handler : (p1: JQueryEventObject, p2: JQueryXHR, p3: JQueryAjaxSettings) => any) : JQuery;
-
-    /**
-     * Register a handler to be called when the first Ajax request begins. This is an Ajax Event.
-     * 
-     * @param {*} handler The function to be invoked.
-     * @return {*}
-     */
-    ajaxStart(handler : () => any) : JQuery;
-
-    /**
-     * Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.
-     * 
-     * @param {*} handler The function to be invoked.
-     * @return {*}
-     */
-    ajaxStop(handler : () => any) : JQuery;
-
-    /**
-     * Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.
-     * 
-     * @param {*} handler The function to be invoked.
-     * @return {*}
-     */
-    ajaxSuccess(handler : (p1: JQueryEventObject, p2: XMLHttpRequest, p3: JQueryAjaxSettings) => any) : JQuery;
-
-    /**
-     * Load data from the server and place the returned HTML into the matched element.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param {*} complete A callback function that is executed when the request completes.
-     * @return {*}
-     */
-    load(url : string, data : string, complete : (p1: string, p2: string, p3: XMLHttpRequest) => any) : JQuery;
-
-    /**
-     * Encode a set of form elements as a string for submission.
-     * @return {string}
-     */
-    serialize() : string;
-
-    /**
-     * Encode a set of form elements as an array of names and values.
-     * @return {Array}
-     */
-    serializeArray() : JQuerySerializeArrayElement[];
-
-    /**
-     * Adds the specified class(es) to each of the set of matched elements.
-     * 
-     * @param {string} className One or more space-separated classes to be added to the class attribute of each matched element.
-     * @return {*}
-     */
-    addClass(className : string) : JQuery;
-
-    /**
-     * Adds the specified class(es) to each of the set of matched elements.
-     * 
-     * @param function A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    addClass(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Add the previous set of elements on the stack to the current set, optionally filtered by a selector.
-     * @param {string} selector
-     * @return {*}
-     */
-    addBack(selector : string) : JQuery;
-
-    /**
-     * Get the value of an attribute for the first element in the set of matched elements.
-     * 
-     * @param {string} attributeName The name of the attribute to get.
-     * @return {string}
-     */
-    attr(attributeName : string) : string;
-
-    /**
-     * Set one or more attributes for the set of matched elements.
-     * 
-     * @param {string} attributeName The name of the attribute to set.
-     * @param {string} value A value to set for the attribute.
-     * @return {*}
-     */
-    attr(attributeName : string, value : string) : JQuery;
-
-    /**
-     * Set one or more attributes for the set of matched elements.
-     * 
-     * @param {string} attributeName The name of the attribute to set.
-     * @param {*} func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.
-     * @return {*}
-     */
-    attr(attributeName : string, func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Set one or more attributes for the set of matched elements.
-     * 
-     * @param {*} attributes An object of attribute-value pairs to set.
-     * @return {*}
-     */
-    attr(attributes : any) : JQuery;
-
-    /**
-     * Determine whether any of the matched elements are assigned the given class.
-     * 
-     * @param {string} className The class name to search for.
-     * @return {boolean}
-     */
-    hasClass(className : string) : boolean;
-
-    /**
-     * Get the HTML contents of the first element in the set of matched elements.
-     * @return {string}
-     */
-    html() : string;
-
-    /**
-     * Set the HTML contents of each element in the set of matched elements.
-     * 
-     * @param {string} htmlString A string of HTML to set as the content of each matched element.
-     * @return {*}
-     */
-    html(htmlString : string) : JQuery;
-
-    /**
-     * Set the HTML contents of each element in the set of matched elements.
-     * 
-     * @param {*} func A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    html(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Get the value of a property for the first element in the set of matched elements.
-     * 
-     * @param {string} propertyName The name of the property to get.
-     * @return {*}
-     */
-    prop(propertyName : string) : any;
-
-    /**
-     * Set one or more properties for the set of matched elements.
-     * 
-     * @param {string} propertyName The name of the property to set.
-     * @param {string} value A value to set for the property.
-     * @return {*}
-     */
-    prop(propertyName : string, value : string) : JQuery;
-
-    /**
-     * Set one or more properties for the set of matched elements.
-     * 
-     * @param {*} properties An object of property-value pairs to set.
-     * @return {*}
-     */
-    prop(properties : any) : JQuery;
-
-    /**
-     * Set one or more properties for the set of matched elements.
-     * 
-     * @param {string} propertyName The name of the property to set.
-     * @param {*} func A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.
-     * @return {*}
-     */
-    prop(propertyName : string, func : (p1: number, p2: any) => any) : JQuery;
-
-    /**
-     * Remove an attribute from each element in the set of matched elements.
-     * 
-     * @param {string} attributeName An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.
-     * @return {*}
-     */
-    removeAttr(attributeName : string) : JQuery;
-
-    /**
-     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
-     * 
-     * @param {string} className One or more space-separated classes to be removed from the class attribute of each matched element.
-     * @return {*}
-     */
-    removeClass(className : string) : JQuery;
-
-    /**
-     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
-     * 
-     * @param function A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.
-     * @param {*} func
-     * @return {*}
-     */
-    removeClass(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Remove a property for the set of matched elements.
-     * 
-     * @param {string} propertyName The name of the property to remove.
-     * @return {*}
-     */
-    removeProp(propertyName : string) : JQuery;
-
-    /**
-     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
-     * 
-     * @param {string} className One or more class names (separated by spaces) to be toggled for each element in the matched set.
-     * @param {boolean} swtch A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.
-     * @return {*}
-     */
-    toggleClass(className : string, swtch : boolean) : JQuery;
-
-    /**
-     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
-     * 
-     * @param {boolean} swtch A boolean value to determine whether the class should be added or removed.
-     * @return {*}
-     */
-    toggleClass(swtch : boolean) : JQuery;
-
-    /**
-     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
-     * 
-     * @param {*} func A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.
-     * @param {boolean} swtch A boolean value to determine whether the class should be added or removed.
-     * @return {*}
-     */
-    toggleClass(func : (p1: number, p2: string, p3: boolean) => string, swtch : boolean) : JQuery;
-
-    /**
-     * Get the current value of the first element in the set of matched elements.
-     * @return {*}
-     */
-    val() : any;
-
-    /**
-     * Set the value of each element in the set of matched elements.
-     * 
-     * @param {string} value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.
-     * @return {*}
-     */
-    val(value : string) : JQuery;
-
-    /**
-     * Set the value of each element in the set of matched elements.
-     * 
-     * @param {*} func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
-     * @return {*}
-     */
-    val(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Get the value of style properties for the first element in the set of matched elements.
-     * 
-     * @param {string} propertyName A CSS property.
-     * @return {string}
-     */
-    css(propertyName : string) : string;
-
-    /**
-     * Set one or more CSS properties for the set of matched elements.
-     * 
-     * @param {string} propertyName A CSS property name.
-     * @param {string} value A value to set for the property.
-     * @return {*}
-     */
-    css(propertyName : string, value : string) : JQuery;
-
-    /**
-     * Set one or more CSS properties for the set of matched elements.
-     * 
-     * @param {string} propertyName A CSS property name.
-     * @param {*} value A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
-     * @return {*}
-     */
-    css(propertyName : string, value : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Set one or more CSS properties for the set of matched elements.
-     * 
-     * @param {*} properties An object of property-value pairs to set.
-     * @return {*}
-     */
-    css(properties : any) : JQuery;
-
-    /**
-     * Get the current computed height for the first element in the set of matched elements.
-     * @return {number}
-     */
-    height() : number;
-
-    /**
-     * Set the CSS height of every matched element.
-     * 
-     * @param {number} value An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).
-     * @return {*}
-     */
-    height(value : number) : JQuery;
-
-    /**
-     * Set the CSS height of every matched element.
-     * 
-     * @param {*} func A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    height(func : (p1: number, p2: number) => number) : JQuery;
-
-    /**
-     * Get the current computed height for the first element in the set of matched elements, including padding but not border.
-     * @return {number}
-     */
-    innerHeight() : number;
-
-    /**
-     * Sets the inner height on elements in the set of matched elements, including padding but not border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {number} height
-     * @return {*}
-     */
-    innerHeight(height : number) : JQuery;
-
-    /**
-     * Get the current computed width for the first element in the set of matched elements, including padding but not border.
-     * @return {number}
-     */
-    innerWidth() : number;
-
-    /**
-     * Sets the inner width on elements in the set of matched elements, including padding but not border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {number} width
-     * @return {*}
-     */
-    innerWidth(width : number) : JQuery;
-
-    /**
-     * Get the current coordinates of the first element in the set of matched elements, relative to the document.
-     * @return {*}
-     */
-    offset() : JQueryCoordinates;
-
-    /**
-     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
-     * 
-     * @param {*} coordinates An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
-     * @return {*}
-     */
-    offset(coordinates : JQueryCoordinates) : JQuery;
-
-    /**
-     * An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.
-     * 
-     * @param {*} func A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.
-     * @return {*}
-     */
-    offset(func : (p1: number, p2: JQueryCoordinates) => JQueryCoordinates) : JQuery;
-
-    /**
-     * Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements.
-     * 
-     * @param {boolean} includeMargin A Boolean indicating whether to include the element's margin in the calculation.
-     * @return {number}
-     */
-    outerHeight(includeMargin : boolean) : number;
-
-    /**
-     * Sets the outer height on elements in the set of matched elements, including padding and border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {number} height
-     * @return {*}
-     */
-    outerHeight(height : number) : JQuery;
-
-    /**
-     * Get the current computed width for the first element in the set of matched elements, including padding and border.
-     * 
-     * @param {boolean} includeMargin A Boolean indicating whether to include the element's margin in the calculation.
-     * @return {number}
-     */
-    outerWidth(includeMargin : boolean) : number;
-
-    /**
-     * Sets the outer width on elements in the set of matched elements, including padding and border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {number} width
-     * @return {*}
-     */
-    outerWidth(width : number) : JQuery;
-
-    /**
-     * Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.
-     * @return {*}
-     */
-    position() : JQueryCoordinates;
-
-    /**
-     * Get the current horizontal position of the scroll bar for the first element in the set of matched elements or set the horizontal position of the scroll bar for every matched element.
-     * @return {number}
-     */
-    scrollLeft() : number;
-
-    /**
-     * Set the current horizontal position of the scroll bar for each of the set of matched elements.
-     * 
-     * @param {number} value An integer indicating the new position to set the scroll bar to.
-     * @return {*}
-     */
-    scrollLeft(value : number) : JQuery;
-
-    /**
-     * Get the current vertical position of the scroll bar for the first element in the set of matched elements or set the vertical position of the scroll bar for every matched element.
-     * @return {number}
-     */
-    scrollTop() : number;
-
-    /**
-     * Set the current vertical position of the scroll bar for each of the set of matched elements.
-     * 
-     * @param {number} value An integer indicating the new position to set the scroll bar to.
-     * @return {*}
-     */
-    scrollTop(value : number) : JQuery;
-
-    /**
-     * Get the current computed width for the first element in the set of matched elements.
-     * @return {number}
-     */
-    width() : number;
-
-    /**
-     * Set the CSS width of each element in the set of matched elements.
-     * 
-     * @param {number} value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @return {*}
-     */
-    width(value : number) : JQuery;
-
-    /**
-     * Set the CSS width of each element in the set of matched elements.
-     * 
-     * @param {*} func A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    width(func : (p1: number, p2: number) => number) : JQuery;
-
-    /**
-     * Remove from the queue all items that have not yet been run.
-     * 
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {*}
-     */
-    clearQueue(queueName : string) : JQuery;
-
-    /**
-     * Store arbitrary data associated with the matched elements.
-     * 
-     * @param {string} key A string naming the piece of data to set.
-     * @param {*} value The new data value; it can be any Javascript type including Array or Object.
-     * @return {*}
-     */
-    data(key : string, value : any) : JQuery;
-
-    /**
-     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
-     * 
-     * @param {string} key Name of the data stored.
-     * @return {*}
-     */
-    data(key : string) : any;
-
-    /**
-     * Store arbitrary data associated with the matched elements.
-     * 
-     * @param {JQuery.Obj} obj An object of key-value pairs of data to update.
-     * @return {*}
-     */
-    data(obj : any) : JQuery;
-
-    /**
-     * Return the value at the named data store for the first element in the jQuery collection, as set by data(name, value) or by an HTML5 data-* attribute.
-     * @return {*}
-     */
-    data() : any;
-
-    /**
-     * Execute the next function on the queue for the matched elements.
-     * 
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {*}
-     */
-    dequeue(queueName : string) : JQuery;
-
-    /**
-     * Remove a previously-stored piece of data.
-     * 
-     * @param {string} name A string naming the piece of data to delete or space-separated string naming the pieces of data to delete.
-     * @return {*}
-     */
-    removeData(name : string) : JQuery;
-
-    /**
-     * Remove a previously-stored piece of data.
-     * 
-     * @param {Array} list An array of strings naming the pieces of data to delete.
-     * @return {*}
-     */
-    removeData(list : string[]) : JQuery;
-
-    /**
-     * Remove all previously-stored piece of data.
-     * @return {*}
-     */
-    removeData() : JQuery;
-
-    /**
-     * Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.
-     * 
-     * @param {string} type The type of queue that needs to be observed. (default: fx)
-     * @param {*} target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise(type : string, target : any) : JQueryPromise<any>;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : string, complete : Function) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition. (default: swing)
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    animate(properties : any, options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Set a timer to delay execution of subsequent items in the queue.
-     * 
-     * @param {number} duration An integer indicating the number of milliseconds to delay execution of the next item in the queue.
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {*}
-     */
-    delay(duration : number, queueName : string) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    fadeIn(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    fadeOut(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : string, opacity : number, complete : Function) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : string, opacity : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    fadeToggle(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.
-     * 
-     * @param {string} queue The name of the queue in which to stop animations.
-     * @return {*}
-     */
-    finish(queue : string) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    hide(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    show(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    slideDown(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    slideToggle(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    slideUp(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Stop the currently-running animation on the matched elements.
-     * 
-     * @param {boolean} clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
-     * @param {boolean} jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
-     * @return {*}
-     */
-    stop(clearQueue : boolean, jumpToEnd : boolean) : JQuery;
-
-    /**
-     * Stop the currently-running animation on the matched elements.
-     * 
-     * @param {string} queue The name of the queue in which to stop animations.
-     * @param {boolean} clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
-     * @param {boolean} jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
-     * @return {*}
-     */
-    stop(queue : string, clearQueue : boolean, jumpToEnd : boolean) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : number, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {*} options A map of additional options to pass to the method.
-     * @return {*}
-     */
-    toggle(options : JQueryAnimationOptions) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {boolean} showOrHide A Boolean indicating whether to show or hide the elements.
-     * @return {*}
-     */
-    toggle(showOrHide : boolean) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements.
-     * 
-     * @param {string} eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    bind(eventType : string, eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements.
-     * 
-     * @param {string} eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    bind(eventType : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements.
-     * 
-     * @param {string} eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {boolean} preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
-     * @return {*}
-     */
-    bind(eventType : string, eventData : any, preventBubble : boolean) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements.
-     * 
-     * @param {string} eventType A string containing one or more DOM event types, such as "click" or "submit," or custom event names.
-     * @param {boolean} preventBubble Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.
-     * @return {*}
-     */
-    bind(eventType : string, preventBubble : boolean) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements.
-     * 
-     * @param {*} events An object containing one or more DOM event types and functions to execute for them.
-     * @return {*}
-     */
-    bind(events : any) : JQuery;
-
-    /**
-     * Trigger the "blur" event on an element
-     * @return {*}
-     */
-    blur() : JQuery;
-
-    /**
-     * Bind an event handler to the "blur" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    blur(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "blur" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    blur(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "change" event on an element.
-     * @return {*}
-     */
-    change() : JQuery;
-
-    /**
-     * Bind an event handler to the "change" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    change(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "change" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    change(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "click" event on an element.
-     * @return {*}
-     */
-    click() : JQuery;
-
-    /**
-     * Bind an event handler to the "click" JavaScript event
-     * 
-     * @param eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler
-     * @return {*}
-     */
-    click(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "click" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    click(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "contextmenu" event on an element.
-     * @return {*}
-     */
-    contextmenu() : JQuery;
-
-    /**
-     * Bind an event handler to the "contextmenu" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    contextmenu(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "contextmenu" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    contextmenu(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "dblclick" event on an element.
-     * @return {*}
-     */
-    dblclick() : JQuery;
-
-    /**
-     * Bind an event handler to the "dblclick" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    dblclick(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "dblclick" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    dblclick(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    delegate(selector : any, eventType : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    delegate(selector : any, eventType : string, eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "focus" event on an element.
-     * @return {*}
-     */
-    focus() : JQuery;
-
-    /**
-     * Bind an event handler to the "focus" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focus(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "focus" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focus(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "focusin" event on an element.
-     * @return {*}
-     */
-    focusin() : JQuery;
-
-    /**
-     * Bind an event handler to the "focusin" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focusin(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "focusin" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focusin(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "focusout" event on an element.
-     * @return {*}
-     */
-    focusout() : JQuery;
-
-    /**
-     * Bind an event handler to the "focusout" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focusout(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "focusout" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focusout(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.
-     * 
-     * @param {*} handlerIn A function to execute when the mouse pointer enters the element.
-     * @param {*} handlerOut A function to execute when the mouse pointer leaves the element.
-     * @return {*}
-     */
-    hover(handlerIn : (p1: JQueryEventObject) => any, handlerOut : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements.
-     * 
-     * @param {*} handlerInOut A function to execute when the mouse pointer enters or leaves the element.
-     * @return {*}
-     */
-    hover(handlerInOut : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "keydown" event on an element.
-     * @return {*}
-     */
-    keydown() : JQuery;
-
-    /**
-     * Bind an event handler to the "keydown" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keydown(handler : (p1: JQueryKeyEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "keydown" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keydown(eventData : any, handler : (p1: JQueryKeyEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "keypress" event on an element.
-     * @return {*}
-     */
-    keypress() : JQuery;
-
-    /**
-     * Bind an event handler to the "keypress" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keypress(handler : (p1: JQueryKeyEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "keypress" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keypress(eventData : any, handler : (p1: JQueryKeyEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "keyup" event on an element.
-     * @return {*}
-     */
-    keyup() : JQuery;
-
-    /**
-     * Bind an event handler to the "keyup" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keyup(handler : (p1: JQueryKeyEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "keyup" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keyup(eventData : any, handler : (p1: JQueryKeyEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "load" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    load(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "load" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    load(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mousedown" event on an element.
-     * @return {*}
-     */
-    mousedown() : JQuery;
-
-    /**
-     * Bind an event handler to the "mousedown" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mousedown(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "mousedown" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mousedown(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mouseenter" event on an element.
-     * @return {*}
-     */
-    mouseenter() : JQuery;
-
-    /**
-     * Bind an event handler to be fired when the mouse enters an element.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseenter(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to be fired when the mouse enters an element.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseenter(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mouseleave" event on an element.
-     * @return {*}
-     */
-    mouseleave() : JQuery;
-
-    /**
-     * Bind an event handler to be fired when the mouse leaves an element.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseleave(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to be fired when the mouse leaves an element.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseleave(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mousemove" event on an element.
-     * @return {*}
-     */
-    mousemove() : JQuery;
-
-    /**
-     * Bind an event handler to the "mousemove" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mousemove(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "mousemove" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mousemove(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mouseout" event on an element.
-     * @return {*}
-     */
-    mouseout() : JQuery;
-
-    /**
-     * Bind an event handler to the "mouseout" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseout(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "mouseout" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseout(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mouseover" event on an element.
-     * @return {*}
-     */
-    mouseover() : JQuery;
-
-    /**
-     * Bind an event handler to the "mouseover" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseover(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "mouseover" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseover(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "mouseup" event on an element.
-     * @return {*}
-     */
-    mouseup() : JQuery;
-
-    /**
-     * Bind an event handler to the "mouseup" JavaScript event.
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseup(handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "mouseup" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    mouseup(eventData : any, handler : (p1: JQueryMouseEventObject) => any) : JQuery;
-
-    /**
-     * Remove an event handler.
-     * @return {*}
-     */
-    off() : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
-     * @param {string} selector A selector which should match the one originally passed to .on() when attaching event handlers.
-     * @param {*} handler A handler function previously attached for the event(s), or the special value false.
-     * @return {*}
-     */
-    off(events : string, selector : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
-     * @param {*} handler A handler function previously attached for the event(s), or the special value false. Takes handler with extra args that can be attached with on().
-     * @return {*}
-     */
-    off(events : string, handler : (p1: JQueryEventObject, p2: any) => any) : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
-     * @param {*} handler A handler function previously attached for the event(s), or the special value false.
-     * @return {*}
-     */
-    off(events : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {JQuery.Events} events An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).
-     * @param {string} selector A selector which should match the one originally passed to .on() when attaching event handlers.
-     * @return {*}
-     */
-    off(events : any, selector : string) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
-     * @param {*} handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. Rest parameter args is for optional parameters passed to jQuery.trigger(). Note that the actual parameters on the event handler function must be marked as optional (? syntax).
-     * @return {*}
-     */
-    on(events : string, handler : (p1: JQueryEventObject, p2: any) => any) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
-     * @param {*} data Data to be passed to the handler in event.data when an event is triggered.
-     * @param {*} handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
-     * @return {*}
-     */
-    on(events : string, data : any, handler : (p1: JQueryEventObject, p2: any) => any) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
-     * @param {string} selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
-     * @param {*} handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
-     * @return {*}
-     */
-    on(events : string, selector : string, handler : (p1: JQueryEventObject, p2: any) => any) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
-     * @param {string} selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
-     * @param {*} data Data to be passed to the handler in event.data when an event is triggered.
-     * @param {*} handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
-     * @return {*}
-     */
-    on(events : string, selector : string, data : any, handler : (p1: JQueryEventObject, p2: any) => any) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param {string} selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
-     * @param {*} data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    on(events : any, selector : string, data : any) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param {*} data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    on(events : any, data : any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {string} events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
-     * @param {*} handler A function to execute at the time the event is triggered.
-     * @return {*}
-     */
-    one(events : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {string} events A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.
-     * @param {*} data An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute at the time the event is triggered.
-     * @return {*}
-     */
-    one(events : string, data : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
-     * @param {string} selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
-     * @param {*} handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
-     * @return {*}
-     */
-    one(events : string, selector : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".
-     * @param {string} selector A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.
-     * @param {*} data Data to be passed to the handler in event.data when an event is triggered.
-     * @param {*} handler A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.
-     * @return {*}
-     */
-    one(events : string, selector : string, data : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param {string} selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
-     * @param {*} data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    one(events : any, selector : string, data : any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param {*} data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    one(events : any, data : any) : JQuery;
-
-    /**
-     * Specify a function to execute when the DOM is fully loaded.
-     * 
-     * @param {*} handler A function to execute after the DOM is ready.
-     * @return {*}
-     */
-    ready(handler : (p1: JQueryStatic) => any) : JQuery;
-
-    /**
-     * Trigger the "resize" event on an element.
-     * @return {*}
-     */
-    resize() : JQuery;
-
-    /**
-     * Bind an event handler to the "resize" JavaScript event.
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    resize(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "resize" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    resize(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "scroll" event on an element.
-     * @return {*}
-     */
-    scroll() : JQuery;
-
-    /**
-     * Bind an event handler to the "scroll" JavaScript event.
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    scroll(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "scroll" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    scroll(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "select" event on an element.
-     * @return {*}
-     */
-    select() : JQuery;
-
-    /**
-     * Bind an event handler to the "select" JavaScript event.
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    select(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "select" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    select(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Trigger the "submit" event on an element.
-     * @return {*}
-     */
-    submit() : JQuery;
-
-    /**
-     * Bind an event handler to the "submit" JavaScript event
-     * 
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    submit(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "submit" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param {*} handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    submit(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Execute all handlers and behaviors attached to the matched elements for the given event type.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param {Array} extraParameters Additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    trigger(eventType : string, extraParameters : any[]) : JQuery;
-
-    /**
-     * Execute all handlers and behaviors attached to the matched elements for the given event type.
-     * 
-     * @param {*} event A jQuery.Event object.
-     * @param {Array} extraParameters Additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    trigger(event : JQueryEventObject, extraParameters : any[]) : JQuery;
-
-    /**
-     * Execute all handlers attached to an element for an event.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param {Array} extraParameters An array of additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    triggerHandler(eventType : string, ...extraParameters : any[]) : any;
-
-    /**
-     * Execute all handlers attached to an element for an event.
-     * 
-     * @param {*} event A jQuery.Event object.
-     * @param {Array} extraParameters An array of additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    triggerHandler(event : JQueryEventObject, ...extraParameters : any[]) : any;
-
-    /**
-     * Remove a previously-attached event handler from the elements.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param {*} handler The function that is to be no longer executed.
-     * @return {*}
-     */
-    unbind(eventType : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Remove a previously-attached event handler from the elements.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param {boolean} fls Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).
-     * @return {*}
-     */
-    unbind(eventType : string, fls : boolean) : JQuery;
-
-    /**
-     * Remove a previously-attached event handler from the elements.
-     * 
-     * @param {*} evt A JavaScript event object as passed to an event handler.
-     * @return {*}
-     */
-    unbind(evt : any) : JQuery;
-
-    /**
-     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
-     * @return {*}
-     */
-    undelegate() : JQuery;
-
-    /**
-     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
-     * 
-     * @param {string} selector A selector which will be used to filter the event results.
-     * @param {string} eventType A string containing a JavaScript event type, such as "click" or "keydown"
-     * @param {*} handler A function to execute at the time the event is triggered.
-     * @return {*}
-     */
-    undelegate(selector : string, eventType : string, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
-     * 
-     * @param {string} selector A selector which will be used to filter the event results.
-     * @param {*} events An object of one or more event types and previously bound functions to unbind from them.
-     * @return {*}
-     */
-    undelegate(selector : string, events : any) : JQuery;
-
-    /**
-     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
-     * 
-     * @param {string} namespace A string containing a namespace to unbind all events from.
-     * @return {*}
-     */
-    undelegate(namespace : string) : JQuery;
-
-    /**
-     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    unload(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
-     * 
-     * @param {*} eventData A plain object of data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    unload(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document. (DEPRECATED from v1.10)
-     */
-    context : Element;
-
-    jquery : string;
-
-    /**
-     * Bind an event handler to the "error" JavaScript event. (DEPRECATED from v1.8)
-     * 
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    error(handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Bind an event handler to the "error" JavaScript event. (DEPRECATED from v1.8)
-     * 
-     * @param {*} eventData A plain object of data that will be passed to the event handler.
-     * @param {*} handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    error(eventData : any, handler : (p1: JQueryEventObject) => any) : JQuery;
-
-    /**
-     * Add a collection of DOM elements onto the jQuery stack.
-     * 
-     * @param {Array} elements An array of elements to push onto the stack and make into a new jQuery object.
-     * @return {*}
-     */
-    pushStack(elements : any[]) : JQuery;
-
-    /**
-     * Add a collection of DOM elements onto the jQuery stack.
-     * 
-     * @param {Array} elements An array of elements to push onto the stack and make into a new jQuery object.
-     * @param {string} name The name of a jQuery method that generated the array of elements.
-     * @param {Array} arguments The arguments that were passed in to the jQuery method (for serialization).
-     * @return {*}
-     */
-    pushStack(elements : any[], name : string, __arguments : any[]) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, after each element in the set of matched elements.
-     * 
-     * param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert after each element in the set of matched elements.
-     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.
-     * @param {*} content1
-     * @param {Array} content2
-     * @return {*}
-     */
-    after(content1 : any, ...content2 : any[]) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, after each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    after(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
-     * 
-     * param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.
-     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.
-     * @param {*} content1
-     * @param {Array} content2
-     * @return {*}
-     */
-    append(content1 : any, ...content2 : any[]) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    append(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Insert every element in the set of matched elements to the end of the target.
-     * 
-     * @param {*} target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.
-     * @return {*}
-     */
-    appendTo(target : any) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, before each element in the set of matched elements.
-     * 
-     * param content1 HTML string, DOM element, DocumentFragment, array of elements, or jQuery object to insert before each element in the set of matched elements.
-     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.
-     * @param {*} content1
-     * @param {Array} content2
-     * @return {*}
-     */
-    before(content1 : any, ...content2 : any[]) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, before each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    before(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Create a deep copy of the set of matched elements.
-     * 
-     * param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.
-     * param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).
-     * @param {boolean} withDataAndEvents
-     * @param {boolean} deepWithDataAndEvents
-     * @return {*}
-     */
-    clone(withDataAndEvents : boolean, deepWithDataAndEvents : boolean) : JQuery;
-
-    /**
-     * Remove the set of matched elements from the DOM.
-     * 
-     * param selector A selector expression that filters the set of matched elements to be removed.
-     * @param {string} selector
-     * @return {*}
-     */
-    detach(selector : string) : JQuery;
-
-    /**
-     * Remove all child nodes of the set of matched elements from the DOM.
-     * @return {*}
-     */
-    empty() : JQuery;
-
-    /**
-     * Insert every element in the set of matched elements after the target.
-     * 
-     * param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.
-     * @param {*} target
-     * @return {*}
-     */
-    insertAfter(target : any) : JQuery;
-
-    /**
-     * Insert every element in the set of matched elements before the target.
-     * 
-     * param target A selector, element, array of elements, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.
-     * @param {*} target
-     * @return {*}
-     */
-    insertBefore(target : any) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
-     * 
-     * param content1 DOM element, DocumentFragment, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.
-     * param content2 One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.
-     * @param {*} content1
-     * @param {Array} content2
-     * @return {*}
-     */
-    prepend(content1 : any, ...content2 : any[]) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    prepend(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Insert every element in the set of matched elements to the beginning of the target.
-     * 
-     * @param {*} target A selector, element, HTML string, array of elements, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.
-     * @return {*}
-     */
-    prependTo(target : any) : JQuery;
-
-    /**
-     * Remove the set of matched elements from the DOM.
-     * 
-     * @param {string} selector A selector expression that filters the set of matched elements to be removed.
-     * @return {*}
-     */
-    remove(selector : string) : JQuery;
-
-    /**
-     * Replace each target element with the set of matched elements.
-     * 
-     * @param {*} target A selector string, jQuery object, DOM element, or array of elements indicating which element(s) to replace.
-     * @return {*}
-     */
-    replaceAll(target : any) : JQuery;
-
-    /**
-     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
-     * 
-     * param newContent The content to insert. May be an HTML string, DOM element, array of DOM elements, or jQuery object.
-     * @param {*} newContent
-     * @return {*}
-     */
-    replaceWith(newContent : any) : JQuery;
-
-    /**
-     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
-     * 
-     * param func A function that returns content with which to replace the set of matched elements.
-     * @param {*} func
-     * @return {*}
-     */
-    replaceWith(func : () => Element) : JQuery;
-
-    /**
-     * Get the combined text contents of each element in the set of matched elements, including their descendants.
-     * @return {string}
-     */
-    text() : string;
-
-    /**
-     * Set the content of each element in the set of matched elements to the specified text.
-     * 
-     * @param {string} text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.
-     * @return {*}
-     */
-    text(text : string) : JQuery;
-
-    /**
-     * Set the content of each element in the set of matched elements to the specified text.
-     * 
-     * @param {*} func A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.
-     * @return {*}
-     */
-    text(func : (p1: number, p2: string) => string) : JQuery;
-
-    /**
-     * Retrieve all the elements contained in the jQuery set, as an array.
-     * @name toArray
-     * @return {Array}
-     */
-    toArray() : HTMLElement[];
-
-    /**
-     * Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.
-     * @return {*}
-     */
-    unwrap() : JQuery;
-
-    /**
-     * Wrap an HTML structure around each element in the set of matched elements.
-     * 
-     * @param {*} wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
-     * @return {*}
-     */
-    wrap(wrappingElement : JQuery) : JQuery;
-
-    /**
-     * Wrap an HTML structure around each element in the set of matched elements.
-     * 
-     * @param {*} func A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    wrap(func : (p1: number) => string) : JQuery;
-
-    /**
-     * Wrap an HTML structure around all elements in the set of matched elements.
-     * 
-     * @param {*} wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
-     * @return {*}
-     */
-    wrapAll(wrappingElement : JQuery) : JQuery;
-
-    wrapAll(func : (p1: number) => string) : JQuery;
-
-    /**
-     * Wrap an HTML structure around the content of each element in the set of matched elements.
-     * 
-     * @param {*} wrappingElement An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.
-     * @return {*}
-     */
-    wrapInner(wrappingElement : JQuery) : JQuery;
-
-    /**
-     * Wrap an HTML structure around the content of each element in the set of matched elements.
-     * 
-     * @param {*} func A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    wrapInner(func : (p1: number) => string) : JQuery;
-
-    /**
-     * Iterate over a jQuery object, executing a function for each matched element.
-     * 
-     * @param {*} func A function to execute for each matched element.
-     * @return {*}
-     */
-    each(func : (p1: number, p2: Element) => any) : JQuery;
-
-    /**
-     * Retrieve one of the elements matched by the jQuery object.
-     * 
-     * @param {number} index A zero-based integer indicating which element to retrieve.
-     * @return {HTMLElement}
-     */
-    get(index : number) : HTMLElement;
-
-    /**
-     * Retrieve the elements matched by the jQuery object.
-     * @alias toArray
-     * @return {Array}
-     */
-    get() : HTMLElement[];
-
-    /**
-     * Search for a given element from among the matched elements.
-     * @return {number}
-     */
-    index() : number;
-
-    /**
-     * Search for a given element from among the matched elements.
-     * 
-     * @param {string} selector A selector representing a jQuery collection in which to look for an element.
-     * @return {number}
-     */
-    index(selector : string) : number;
-
-    /**
-     * The number of elements in the jQuery object.
-     */
-    length : number;
-
-    /**
-     * A selector representing selector passed to jQuery(), if any, when creating the original set.
-     * version deprecated: 1.7, removed: 1.9
-     */
-    selector : string;
-
-    [index : string]: any;
-
-    [index : number]: HTMLElement;
-
-    /**
-     * Add elements to the set of matched elements.
-     * 
-     * @param {string} selector A string representing a selector expression to find additional elements to add to the set of matched elements.
-     * @param {Element} context The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.
-     * @return {*}
-     */
-    add(selector : string, context : Element) : JQuery;
-
-    /**
-     * Add elements to the set of matched elements.
-     * 
-     * @param {Array} elements One or more elements to add to the set of matched elements.
-     * @return {*}
-     */
-    add(...elements : Element[]) : JQuery;
-
-    /**
-     * Add elements to the set of matched elements.
-     * 
-     * @param {string} html An HTML fragment to add to the set of matched elements.
-     * @return {*}
-     */
-    add(html : string) : JQuery;
-
-    /**
-     * Add elements to the set of matched elements.
-     * 
-     * @param {*} obj An existing jQuery object to add to the set of matched elements.
-     * @return {*}
-     */
-    add(obj : JQuery) : JQuery;
-
-    /**
-     * Get the children of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    children(selector : string) : JQuery;
-
-    /**
-     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    closest(selector : string) : JQuery;
-
-    /**
-     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @param {Element} context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
-     * @return {*}
-     */
-    closest(selector : string, context : Element) : JQuery;
-
-    /**
-     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
-     * 
-     * @param {*} obj A jQuery object to match elements against.
-     * @return {*}
-     */
-    closest(obj : JQuery) : JQuery;
-
-    /**
-     * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
-     * 
-     * @param {Element} element An element to match elements against.
-     * @return {*}
-     */
-    closest(element : Element) : JQuery;
-
-    /**
-     * Get an array of all the elements and selectors matched against the current element up through the DOM tree.
-     * 
-     * @param {*} selectors An array or string containing a selector expression to match elements against (can also be a jQuery object).
-     * @param {Element} context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
-     * @return {Array}
-     */
-    closest(selectors : any, context : Element) : any[];
-
-    /**
-     * Get the children of each element in the set of matched elements, including text and comment nodes.
-     * @return {*}
-     */
-    contents() : JQuery;
-
-    /**
-     * End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.
-     * @return {*}
-     */
-    end() : JQuery;
-
-    /**
-     * Reduce the set of matched elements to the one at the specified index.
-     * 
-     * @param {number} index An integer indicating the 0-based position of the element. OR An integer indicating the position of the element, counting backwards from the last element in the set.
-     * 
-     * @return {*}
-     */
-    eq(index : number) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to those that match the selector or pass the function's test.
-     * 
-     * @param {string} selector A string containing a selector expression to match the current set of elements against.
-     * @return {*}
-     */
-    filter(selector : string) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to those that match the selector or pass the function's test.
-     * 
-     * @param {*} func A function used as a test for each element in the set. this is the current DOM element.
-     * @return {*}
-     */
-    filter(func : (p1: number, p2: Element) => any) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to those that match the selector or pass the function's test.
-     * 
-     * @param {Element} element An element to match the current set of elements against.
-     * @return {*}
-     */
-    filter(element : Element) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to those that match the selector or pass the function's test.
-     * 
-     * @param {*} obj An existing jQuery object to match the current set of elements against.
-     * @return {*}
-     */
-    filter(obj : JQuery) : JQuery;
-
-    /**
-     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    find(selector : string) : JQuery;
-
-    /**
-     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
-     * 
-     * @param {Element} element An element to match elements against.
-     * @return {*}
-     */
-    find(element : Element) : JQuery;
-
-    /**
-     * Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
-     * 
-     * @param {*} obj A jQuery object to match elements against.
-     * @return {*}
-     */
-    find(obj : JQuery) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to the first in the set.
-     * @return {*}
-     */
-    first() : JQuery;
-
-    /**
-     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    has(selector : string) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
-     * 
-     * @param {Element} contained A DOM element to match elements against.
-     * @return {*}
-     */
-    has(contained : Element) : JQuery;
-
-    /**
-     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {boolean}
-     */
-    is(selector : string) : boolean;
-
-    /**
-     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
-     * 
-     * @param {*} func A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.
-     * @return {boolean}
-     */
-    is(func : (p1: number, p2: Element) => boolean) : boolean;
-
-    /**
-     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
-     * 
-     * @param {*} obj An existing jQuery object to match the current set of elements against.
-     * @return {boolean}
-     */
-    is(obj : JQuery) : boolean;
-
-    /**
-     * Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.
-     * 
-     * @param {*} elements One or more elements to match the current set of elements against.
-     * @return {boolean}
-     */
-    is(elements : any) : boolean;
-
-    /**
-     * Reduce the set of matched elements to the final one in the set.
-     * @return {*}
-     */
-    last() : JQuery;
-
-    /**
-     * Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.
-     * 
-     * @param {*} callback A function object that will be invoked for each element in the current set.
-     * @return {*}
-     */
-    map(callback : (p1: number, p2: Element) => any) : JQuery;
-
-    /**
-     * Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    next(selector : string) : JQuery;
-
-    /**
-     * Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextAll(selector : string) : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param {string} selector A string containing a selector expression to indicate where to stop matching following sibling elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil(selector : string, filter : string) : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param {Element} element A DOM node or jQuery object indicating where to stop matching following sibling elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil(element : Element, filter : string) : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param {*} obj A DOM node or jQuery object indicating where to stop matching following sibling elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil(obj : JQuery, filter : string) : JQuery;
-
-    /**
-     * Remove elements from the set of matched elements.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    not(selector : string) : JQuery;
-
-    /**
-     * Remove elements from the set of matched elements.
-     * 
-     * @param {*} func A function used as a test for each element in the set. this is the current DOM element.
-     * @return {*}
-     */
-    not(func : (p1: number, p2: Element) => boolean) : JQuery;
-
-    /**
-     * Remove elements from the set of matched elements.
-     * 
-     * @param {Element} elements One or more DOM elements to remove from the matched set.
-     * @return {*}
-     */
-    not(elements : Element) : JQuery;
-
-    /**
-     * Remove elements from the set of matched elements.
-     * 
-     * @param {*} obj An existing jQuery object to match the current set of elements against.
-     * @return {*}
-     */
-    not(obj : JQuery) : JQuery;
-
-    /**
-     * Get the closest ancestor element that is positioned.
-     * @return {*}
-     */
-    offsetParent() : JQuery;
-
-    /**
-     * Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parent(selector : string) : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parents(selector : string) : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {string} selector A string containing a selector expression to indicate where to stop matching ancestor elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil(selector : string, filter : string) : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {Element} element A DOM node or jQuery object indicating where to stop matching ancestor elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil(element : Element, filter : string) : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {*} obj A DOM node or jQuery object indicating where to stop matching ancestor elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil(obj : JQuery, filter : string) : JQuery;
-
-    /**
-     * Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prev(selector : string) : JQuery;
-
-    /**
-     * Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevAll(selector : string) : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {string} selector A string containing a selector expression to indicate where to stop matching preceding sibling elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil(selector : string, filter : string) : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {Element} element A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil(element : Element, filter : string) : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {*} obj A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
-     * @param {string} filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil(obj : JQuery, filter : string) : JQuery;
-
-    /**
-     * Get the siblings of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param {string} selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    siblings(selector : string) : JQuery;
-
-    /**
-     * Reduce the set of matched elements to a subset specified by a range of indices.
-     * 
-     * @param {number} start An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.
-     * @param {number} end An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.
-     * @return {*}
-     */
-    slice(start : number, end : number) : JQuery;
-
-    /**
-     * Show the queue of functions to be executed on the matched elements.
-     * 
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {Array}
-     */
-    queue(queueName : string) : any[];
-
-    /**
-     * Manipulate the queue of functions to be executed, once for each matched element.
-     * 
-     * @param {Array} newQueue An array of functions to replace the current queue contents.
-     * @return {*}
-     */
-    queue(newQueue : Function[]) : JQuery;
-
-    /**
-     * Manipulate the queue of functions to be executed, once for each matched element.
-     * 
-     * @param {Function} callback The new function to add to the queue, with a function to call that will dequeue the next item.
-     * @return {*}
-     */
-    queue(callback : Function) : JQuery;
-
-    /**
-     * Manipulate the queue of functions to be executed, once for each matched element.
-     * 
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @param {Array} newQueue An array of functions to replace the current queue contents.
-     * @return {*}
-     */
-    queue(queueName : string, newQueue : Function[]) : JQuery;
-
-    /**
-     * Manipulate the queue of functions to be executed, once for each matched element.
-     * 
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @param {Function} callback The new function to add to the queue, with a function to call that will dequeue the next item.
-     * @return {*}
-     */
-    queue(queueName : string, callback : Function) : JQuery;
-
-    /**
-     * Load data from the server and place the returned HTML into the matched element.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param complete A callback function that is executed when the request completes.
-     * @return {*}
-     */
-    load(url : string, data : string) : JQuery;
-
-    /**
-     * Load data from the server and place the returned HTML into the matched element.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param data A plain object or string that is sent to the server with the request.
-     * @param complete A callback function that is executed when the request completes.
-     * @return {*}
-     */
-    load(url : string) : JQuery;
-
-    /**
-     * Add the previous set of elements on the stack to the current set, optionally filtered by a selector.
-     * @return {*}
-     */
-    addBack() : JQuery;
-
-    /**
-     * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
-     * 
-     * @param className One or more space-separated classes to be removed from the class attribute of each matched element.
-     * @return {*}
-     */
-    removeClass() : JQuery;
-
-    /**
-     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
-     * 
-     * @param {string} className One or more class names (separated by spaces) to be toggled for each element in the matched set.
-     * @param swtch A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.
-     * @return {*}
-     */
-    toggleClass(className : string) : JQuery;
-
-    /**
-     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
-     * 
-     * @param swtch A boolean value to determine whether the class should be added or removed.
-     * @return {*}
-     */
-    toggleClass() : JQuery;
-
-    /**
-     * Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.
-     * 
-     * @param {*} func A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.
-     * @param swtch A boolean value to determine whether the class should be added or removed.
-     * @return {*}
-     */
-    toggleClass(func : (p1: number, p2: string, p3: boolean) => string) : JQuery;
-
-    /**
-     * Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements.
-     * 
-     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.
-     * @return {number}
-     */
-    outerHeight() : number;
-
-    /**
-     * Get the current computed width for the first element in the set of matched elements, including padding and border.
-     * 
-     * @param includeMargin A Boolean indicating whether to include the element's margin in the calculation.
-     * @return {number}
-     */
-    outerWidth() : number;
-
-    /**
-     * Remove from the queue all items that have not yet been run.
-     * 
-     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {*}
-     */
-    clearQueue() : JQuery;
-
-    /**
-     * Execute the next function on the queue for the matched elements.
-     * 
-     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {*}
-     */
-    dequeue() : JQuery;
-
-    /**
-     * Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.
-     * 
-     * @param {string} type The type of queue that needs to be observed. (default: fx)
-     * @param target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise(type : string) : JQueryPromise<any>;
-
-    /**
-     * Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.
-     * 
-     * @param type The type of queue that needs to be observed. (default: fx)
-     * @param target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise() : JQueryPromise<any>;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : string) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition. (default: swing)
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : string, easing : string) : JQuery;
-
-    /**
-     * Set a timer to delay execution of subsequent items in the queue.
-     * 
-     * @param {number} duration An integer indicating the number of milliseconds to delay execution of the next item in the queue.
-     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {*}
-     */
-    delay(duration : number) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : number) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn() : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : number, easing : string) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : number) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut() : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : number, easing : string) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : string, opacity : number) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : string, opacity : number, easing : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : number) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle() : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : number, easing : string) : JQuery;
-
-    /**
-     * Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.
-     * 
-     * @param queue The name of the queue in which to stop animations.
-     * @return {*}
-     */
-    finish() : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : number) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide() : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : number, easing : string) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : number) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show() : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : number, easing : string) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : number) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown() : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : number, easing : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : number) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle() : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : number, easing : string) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : number) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp() : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : number, easing : string) : JQuery;
-
-    /**
-     * Stop the currently-running animation on the matched elements.
-     * 
-     * @param {boolean} clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
-     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
-     * @return {*}
-     */
-    stop(clearQueue : boolean) : JQuery;
-
-    /**
-     * Stop the currently-running animation on the matched elements.
-     * 
-     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
-     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
-     * @return {*}
-     */
-    stop() : JQuery;
-
-    /**
-     * Stop the currently-running animation on the matched elements.
-     * 
-     * @param {string} queue The name of the queue in which to stop animations.
-     * @param {boolean} clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
-     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
-     * @return {*}
-     */
-    stop(queue : string, clearQueue : boolean) : JQuery;
-
-    /**
-     * Stop the currently-running animation on the matched elements.
-     * 
-     * @param {string} queue The name of the queue in which to stop animations.
-     * @param clearQueue A Boolean indicating whether to remove queued animation as well. Defaults to false.
-     * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. Defaults to false.
-     * @return {*}
-     */
-    stop(queue : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : number) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle() : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : number, easing : string) : JQuery;
-
-    /**
-     * Bind an event handler to the "blur" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    blur(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "change" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    change(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "click" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    click(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "dblclick" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    dblclick(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "focus" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    focus(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "keydown" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keydown(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "keypress" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keypress(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "keyup" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    keyup(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "load" JavaScript event.
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    load(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "load" JavaScript event.
-     * 
-     * @param eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    load() : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
-     * @param {string} selector A selector which should match the one originally passed to .on() when attaching event handlers.
-     * @param handler A handler function previously attached for the event(s), or the special value false.
-     * @return {*}
-     */
-    off(events : string, selector : string) : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {string} events One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".
-     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
-     * @param handler A handler function previously attached for the event(s), or the special value false.
-     * @return {*}
-     */
-    off(events : string) : JQuery;
-
-    /**
-     * Remove an event handler.
-     * 
-     * @param {JQuery.Events} events An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).
-     * @param selector A selector which should match the one originally passed to .on() when attaching event handlers.
-     * @return {*}
-     */
-    off(events : any) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param {string} selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
-     * @param data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    on(events : any, selector : string) : JQuery;
-
-    /**
-     * Attach an event handler function for one or more events to the selected elements.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
-     * @param data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    on(events : any) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param {string} selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
-     * @param data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    one(events : any, selector : string) : JQuery;
-
-    /**
-     * Attach a handler to an event for the elements. The handler is executed at most once per element per event type.
-     * 
-     * @param {JQuery.Events} events An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).
-     * @param selector A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.
-     * @param data Data to be passed to the handler in event.data when an event occurs.
-     * @return {*}
-     */
-    one(events : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "submit" JavaScript event
-     * 
-     * @param {*} eventData An object containing data that will be passed to the event handler.
-     * @param handler A function to execute each time the event is triggered.
-     * @return {*}
-     */
-    submit(eventData : any) : JQuery;
-
-    /**
-     * Execute all handlers and behaviors attached to the matched elements for the given event type.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param extraParameters Additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    trigger(eventType : string) : JQuery;
-
-    /**
-     * Execute all handlers and behaviors attached to the matched elements for the given event type.
-     * 
-     * @param {*} event A jQuery.Event object.
-     * @param extraParameters Additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    trigger(event : JQueryEventObject) : JQuery;
-
-    /**
-     * Remove a previously-attached event handler from the elements.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param handler The function that is to be no longer executed.
-     * @return {*}
-     */
-    unbind(eventType : string) : JQuery;
-
-    /**
-     * Remove a previously-attached event handler from the elements.
-     * 
-     * @param eventType A string containing a JavaScript event type, such as click or submit.
-     * @param handler The function that is to be no longer executed.
-     * @return {*}
-     */
-    unbind() : JQuery;
-
-    /**
-     * Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
-     * 
-     * @param {string} selector A selector which will be used to filter the event results.
-     * @param {string} eventType A string containing a JavaScript event type, such as "click" or "keydown"
-     * @param handler A function to execute at the time the event is triggered.
-     * @return {*}
-     */
-    undelegate(selector : string, eventType : string) : JQuery;
-
-    /**
-     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
-     * 
-     * @param {*} eventData A plain object of data that will be passed to the event handler.
-     * @param handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    unload(eventData : any) : JQuery;
-
-    /**
-     * Bind an event handler to the "unload" JavaScript event. (DEPRECATED from v1.8)
-     * 
-     * @param eventData A plain object of data that will be passed to the event handler.
-     * @param handler A function to execute when the event is triggered.
-     * @return {*}
-     */
-    unload() : JQuery;
-
-    /**
-     * Create a deep copy of the set of matched elements.
-     * 
-     * param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.
-     * param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).
-     * @param {boolean} withDataAndEvents
-     * @return {*}
-     */
-    clone(withDataAndEvents : boolean) : JQuery;
-
-    /**
-     * Create a deep copy of the set of matched elements.
-     * 
-     * param withDataAndEvents A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false.
-     * param deepWithDataAndEvents A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).
-     * @return {*}
-     */
-    clone() : JQuery;
-
-    /**
-     * Remove the set of matched elements from the DOM.
-     * 
-     * param selector A selector expression that filters the set of matched elements to be removed.
-     * @return {*}
-     */
-    detach() : JQuery;
-
-    /**
-     * Remove the set of matched elements from the DOM.
-     * 
-     * @param selector A selector expression that filters the set of matched elements to be removed.
-     * @return {*}
-     */
-    remove() : JQuery;
-
-    /**
-     * Get the children of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    children() : JQuery;
-
-    /**
-     * Get an array of all the elements and selectors matched against the current element up through the DOM tree.
-     * 
-     * @param {*} selectors An array or string containing a selector expression to match elements against (can also be a jQuery object).
-     * @param context A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.
-     * @return {Array}
-     */
-    closest(selectors : any) : any[];
-
-    /**
-     * Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    next() : JQuery;
-
-    /**
-     * Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextAll() : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param {string} selector A string containing a selector expression to indicate where to stop matching following sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil(selector : string) : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param selector A string containing a selector expression to indicate where to stop matching following sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil() : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param {Element} element A DOM node or jQuery object indicating where to stop matching following sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil(element : Element) : JQuery;
-
-    /**
-     * Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.
-     * 
-     * @param {*} obj A DOM node or jQuery object indicating where to stop matching following sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    nextUntil(obj : JQuery) : JQuery;
-
-    /**
-     * Get the parent of each element in the current set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parent() : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parents() : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {string} selector A string containing a selector expression to indicate where to stop matching ancestor elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil(selector : string) : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param selector A string containing a selector expression to indicate where to stop matching ancestor elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil() : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {Element} element A DOM node or jQuery object indicating where to stop matching ancestor elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil(element : Element) : JQuery;
-
-    /**
-     * Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {*} obj A DOM node or jQuery object indicating where to stop matching ancestor elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    parentsUntil(obj : JQuery) : JQuery;
-
-    /**
-     * Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prev() : JQuery;
-
-    /**
-     * Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevAll() : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {string} selector A string containing a selector expression to indicate where to stop matching preceding sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil(selector : string) : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param selector A string containing a selector expression to indicate where to stop matching preceding sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil() : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {Element} element A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil(element : Element) : JQuery;
-
-    /**
-     * Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.
-     * 
-     * @param {*} obj A DOM node or jQuery object indicating where to stop matching preceding sibling elements.
-     * @param filter A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    prevUntil(obj : JQuery) : JQuery;
-
-    /**
-     * Get the siblings of each element in the set of matched elements, optionally filtered by a selector.
-     * 
-     * @param selector A string containing a selector expression to match elements against.
-     * @return {*}
-     */
-    siblings() : JQuery;
-
-    /**
-     * Reduce the set of matched elements to a subset specified by a range of indices.
-     * 
-     * @param {number} start An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.
-     * @param end An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.
-     * @return {*}
-     */
-    slice(start : number) : JQuery;
-
-    /**
-     * Show the queue of functions to be executed on the matched elements.
-     * 
-     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {Array}
-     */
-    queue() : any[];
-
-    /**
-     * Specify a function to execute when the DOM is fully loaded.
-     * 
-     * @param {*} handler A function to execute after the DOM is ready.
-     * @return {*}
-     */
-    ready(handler : () => any) : JQuery;
-
-    /**
-     * Load data from the server and place the returned HTML into the matched element.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param {*} complete A callback function that is executed when the request completes.
-     * @return {*}
-     */
-    load(url : string, data : any, complete : (p1: string, p2: string, p3: XMLHttpRequest) => any) : JQuery;
-
-    /**
-     * Set one or more attributes for the set of matched elements.
-     * 
-     * @param {string} attributeName The name of the attribute to set.
-     * @param {number} value A value to set for the attribute.
-     * @return {*}
-     */
-    attr(attributeName : string, value : number) : JQuery;
-
-    /**
-     * Set one or more attributes for the set of matched elements.
-     * 
-     * @param {string} attributeName The name of the attribute to set.
-     * @param {*} func A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.
-     * @return {*}
-     */
-    attr(attributeName : string, func : (p1: number, p2: string) => number) : JQuery;
-
-    /**
-     * Set one or more properties for the set of matched elements.
-     * 
-     * @param {string} propertyName The name of the property to set.
-     * @param {number} value A value to set for the property.
-     * @return {*}
-     */
-    prop(propertyName : string, value : number) : JQuery;
-
-    /**
-     * Set one or more properties for the set of matched elements.
-     * 
-     * @param {string} propertyName The name of the property to set.
-     * @param {boolean} value A value to set for the property.
-     * @return {*}
-     */
-    prop(propertyName : string, value : boolean) : JQuery;
-
-    /**
-     * Set the value of each element in the set of matched elements.
-     * 
-     * @param {Array} value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.
-     * @return {*}
-     */
-    val(value : string[]) : JQuery;
-
-    /**
-     * Set the value of each element in the set of matched elements.
-     * 
-     * @param {number} value A string of text, an array of strings or number corresponding to the value of each matched element to set as selected/checked.
-     * @return {*}
-     */
-    val(value : number) : JQuery;
-
-    /**
-     * Set one or more CSS properties for the set of matched elements.
-     * 
-     * @param {string} propertyName A CSS property name.
-     * @param {number} value A value to set for the property.
-     * @return {*}
-     */
-    css(propertyName : string, value : number) : JQuery;
-
-    /**
-     * Set one or more CSS properties for the set of matched elements.
-     * 
-     * @param {string} propertyName A CSS property name.
-     * @param {*} value A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.
-     * @return {*}
-     */
-    css(propertyName : string, value : (p1: number, p2: string) => number) : JQuery;
-
-    /**
-     * Set the CSS height of every matched element.
-     * 
-     * @param {string} value An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).
-     * @return {*}
-     */
-    height(value : string) : JQuery;
-
-    /**
-     * Set the CSS height of every matched element.
-     * 
-     * @param {*} func A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    height(func : (p1: number, p2: number) => string) : JQuery;
-
-    /**
-     * Sets the inner height on elements in the set of matched elements, including padding but not border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {string} height
-     * @return {*}
-     */
-    innerHeight(height : string) : JQuery;
-
-    /**
-     * Sets the inner width on elements in the set of matched elements, including padding but not border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {string} width
-     * @return {*}
-     */
-    innerWidth(width : string) : JQuery;
-
-    /**
-     * Sets the outer height on elements in the set of matched elements, including padding and border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {string} height
-     * @return {*}
-     */
-    outerHeight(height : string) : JQuery;
-
-    /**
-     * Sets the outer width on elements in the set of matched elements, including padding and border.
-     * 
-     * @param value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @param {string} width
-     * @return {*}
-     */
-    outerWidth(width : string) : JQuery;
-
-    /**
-     * Set the CSS width of each element in the set of matched elements.
-     * 
-     * @param {string} value An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).
-     * @return {*}
-     */
-    width(value : string) : JQuery;
-
-    /**
-     * Set the CSS width of each element in the set of matched elements.
-     * 
-     * @param {*} func A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    width(func : (p1: number, p2: number) => string) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : number, complete : Function) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition. (default: swing)
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : number, opacity : number, complete : Function) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : number, opacity : number, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : string, complete : Function) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param {Function} complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : string, easing : string, complete : Function) : JQuery;
-
-    /**
-     * Execute all handlers and behaviors attached to the matched elements for the given event type.
-     * 
-     * @param {string} eventType A string containing a JavaScript event type, such as click or submit.
-     * @param {*} extraParameters Additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    trigger(eventType : string, extraParameters : any) : JQuery;
-
-    /**
-     * Execute all handlers and behaviors attached to the matched elements for the given event type.
-     * 
-     * @param {*} event A jQuery.Event object.
-     * @param {*} extraParameters Additional parameters to pass along to the event handler.
-     * @return {*}
-     */
-    trigger(event : JQueryEventObject, extraParameters : any) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, after each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    after(func : (p1: number, p2: string) => JQuery) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, after each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    after(func : (p1: number, p2: string) => Element) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    append(func : (p1: number, p2: string) => JQuery) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    append(func : (p1: number, p2: string) => Element) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, before each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    before(func : (p1: number, p2: string) => JQuery) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, before each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    before(func : (p1: number, p2: string) => Element) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    prepend(func : (p1: number, p2: string) => JQuery) : JQuery;
-
-    /**
-     * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
-     * 
-     * param func A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.
-     * @param {*} func
-     * @return {*}
-     */
-    prepend(func : (p1: number, p2: string) => Element) : JQuery;
-
-    /**
-     * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
-     * 
-     * param func A function that returns content with which to replace the set of matched elements.
-     * @param {*} func
-     * @return {*}
-     */
-    replaceWith(func : () => JQuery) : JQuery;
-
-    /**
-     * Set the content of each element in the set of matched elements to the specified text.
-     * 
-     * @param {number} text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.
-     * @return {*}
-     */
-    text(text : number) : JQuery;
-
-    /**
-     * Set the content of each element in the set of matched elements to the specified text.
-     * 
-     * @param {boolean} text The text to set as the content of each matched element. When Number or Boolean is supplied, it will be converted to a String representation.
-     * @return {*}
-     */
-    text(text : boolean) : JQuery;
-
-    /**
-     * Wrap an HTML structure around each element in the set of matched elements.
-     * 
-     * @param {string} wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
-     * @return {*}
-     */
-    wrap(wrappingElement : string) : JQuery;
-
-    /**
-     * Wrap an HTML structure around each element in the set of matched elements.
-     * 
-     * @param {Element} wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
-     * @return {*}
-     */
-    wrap(wrappingElement : Element) : JQuery;
-
-    /**
-     * Wrap an HTML structure around each element in the set of matched elements.
-     * 
-     * @param {*} func A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.
-     * @return {*}
-     */
-    wrap(func : (p1: number) => JQuery) : JQuery;
-
-    /**
-     * Wrap an HTML structure around all elements in the set of matched elements.
-     * 
-     * @param {Element} wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
-     * @return {*}
-     */
-    wrapAll(wrappingElement : Element) : JQuery;
-
-    /**
-     * Wrap an HTML structure around all elements in the set of matched elements.
-     * 
-     * @param {string} wrappingElement A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.
-     * @return {*}
-     */
-    wrapAll(wrappingElement : string) : JQuery;
-
-    /**
-     * Wrap an HTML structure around the content of each element in the set of matched elements.
-     * 
-     * @param {string} wrappingElement An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.
-     * @return {*}
-     */
-    wrapInner(wrappingElement : string) : JQuery;
-
-    /**
-     * Wrap an HTML structure around the content of each element in the set of matched elements.
-     * 
-     * @param {Element} wrappingElement An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.
-     * @return {*}
-     */
-    wrapInner(wrappingElement : Element) : JQuery;
-
-    /**
-     * Search for a given element from among the matched elements.
-     * 
-     * @param {*} selector A selector representing a jQuery collection in which to look for an element.
-     * @return {number}
-     */
-    index(selector : JQuery) : number;
-
-    /**
-     * Search for a given element from among the matched elements.
-     * 
-     * @param {Element} selector A selector representing a jQuery collection in which to look for an element.
-     * @return {number}
-     */
-    index(selector : Element) : number;
-
-    /**
-     * Remove elements from the set of matched elements.
-     * 
-     * @param {Array} elements One or more DOM elements to remove from the matched set.
-     * @return {*}
-     */
-    not(elements : Element[]) : JQuery;
-
-    /**
-     * Load data from the server and place the returned HTML into the matched element.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param complete A callback function that is executed when the request completes.
-     * @return {*}
-     */
-    load(url : string, data : any) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : number) : JQuery;
-
-    /**
-     * Perform a custom animation of a set of CSS properties.
-     * 
-     * @param {*} properties An object of CSS properties and values that the animation will move toward.
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition. (default: swing)
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    animate(properties : any, duration : number, easing : string) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : string) : JQuery;
-
-    /**
-     * Display the matched elements by fading them to opaque.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeIn(duration : string, easing : string) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : string) : JQuery;
-
-    /**
-     * Hide the matched elements by fading them to transparent.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeOut(duration : string, easing : string) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : number, opacity : number) : JQuery;
-
-    /**
-     * Adjust the opacity of the matched elements.
-     * 
-     * @param {number} duration A string or number determining how long the animation will run.
-     * @param {number} opacity A number between 0 and 1 denoting the target opacity.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeTo(duration : number, opacity : number, easing : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements by animating their opacity.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    fadeToggle(duration : string, easing : string) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : string) : JQuery;
-
-    /**
-     * Hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    hide(duration : string, easing : string) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : string) : JQuery;
-
-    /**
-     * Display the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    show(duration : string, easing : string) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : string) : JQuery;
-
-    /**
-     * Display the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideDown(duration : string, easing : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideToggle(duration : string, easing : string) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : string) : JQuery;
-
-    /**
-     * Hide the matched elements with a sliding motion.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    slideUp(duration : string, easing : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : string) : JQuery;
-
-    /**
-     * Display or hide the matched elements.
-     * 
-     * @param {string} duration A string or number determining how long the animation will run.
-     * @param {string} easing A string indicating which easing function to use for the transition.
-     * @param complete A function to call once the animation is complete.
-     * @return {*}
-     */
-    toggle(duration : string, easing : string) : JQuery;
-}
-
-interface JQuerySupport {
-    ajax? : boolean;
-
-    boxModel? : boolean;
-
-    changeBubbles? : boolean;
-
-    checkClone? : boolean;
-
-    checkOn? : boolean;
-
-    cors? : boolean;
-
-    cssFloat? : boolean;
-
-    hrefNormalized? : boolean;
-
-    htmlSerialize? : boolean;
-
-    leadingWhitespace? : boolean;
-
-    noCloneChecked? : boolean;
-
-    noCloneEvent? : boolean;
-
-    opacity? : boolean;
-
-    optDisabled? : boolean;
-
-    optSelected? : boolean;
-
-    scriptEval() : boolean;
-
-    style? : boolean;
-
-    submitBubbles? : boolean;
-
-    tbody? : boolean;
-}
-
-/**
- * Elements in the array returned by serializeArray()
- * @class
- * @extends Object
- */
-interface JQuerySerializeArrayElement {
-    name : string;
-
-    value : string;
-}
-
-/**
- * Interface for the JQuery callback
- * @class
- * @extends Object
- */
-interface JQueryCallback {
-    /**
-     * Add a callback or a collection of callbacks to a callback list.
-     * 
-     * @param {Function} callbacks A function, or array of functions, that are to be added to the callback list.
-     * @return {*}
-     */
-    add(callbacks : Function) : JQueryCallback;
-
-    /**
-     * Add a callback or a collection of callbacks to a callback list.
-     * 
-     * @param {Array} callbacks A function, or array of functions, that are to be added to the callback list.
-     * @return {*}
-     */
-    add(callbacks : Function[]) : JQueryCallback;
-
-    /**
-     * Disable a callback list from doing anything more.
-     * @return {*}
-     */
-    disable() : JQueryCallback;
-
-    /**
-     * Determine if the callbacks list has been disabled.
-     * @return {boolean}
-     */
-    disabled() : boolean;
-
-    /**
-     * Remove all of the callbacks from a list.
-     * @return {*}
-     */
-    empty() : JQueryCallback;
-
-    /**
-     * Call all of the callbacks with the given arguments
-     * 
-     * @param {Array} arguments The argument or list of arguments to pass back to the callback list.
-     * @return {*}
-     */
-    fire(...__arguments : any[]) : JQueryCallback;
-
-    /**
-     * Determine if the callbacks have already been called at least once.
-     * @return {boolean}
-     */
-    fired() : boolean;
-
-    /**
-     * Call all callbacks in a list with the given context and arguments.
-     * 
-     * @param {*} context A reference to the context in which the callbacks in the list should be fired.
-     * @param arguments An argument, or array of arguments, to pass to the callbacks in the list.
-     * @param {Array} args
-     * @return {*}
-     */
-    fireWith(context : any, args : any[]) : JQueryCallback;
-
-    /**
-     * Determine whether a supplied callback is in a list
-     * 
-     * @param {Function} callback The callback to search for.
-     * @return {boolean}
-     */
-    has(callback : Function) : boolean;
-
-    /**
-     * Lock a callback list in its current state.
-     * @return {*}
-     */
-    lock() : JQueryCallback;
-
-    /**
-     * Determine if the callbacks list has been locked.
-     * @return {boolean}
-     */
-    locked() : boolean;
-
-    /**
-     * Remove a callback or a collection of callbacks from a callback list.
-     * 
-     * @param {Function} callbacks A function, or array of functions, that are to be removed from the callback list.
-     * @return {*}
-     */
-    remove(callbacks : Function) : JQueryCallback;
-
-    /**
-     * Remove a callback or a collection of callbacks from a callback list.
-     * 
-     * @param {Array} callbacks A function, or array of functions, that are to be removed from the callback list.
-     * @return {*}
-     */
-    remove(callbacks : Function[]) : JQueryCallback;
-
-    /**
-     * Call all callbacks in a list with the given context and arguments.
-     * 
-     * @param {*} context A reference to the context in which the callbacks in the list should be fired.
-     * @param arguments An argument, or array of arguments, to pass to the callbacks in the list.
-     * @return {*}
-     */
-    fireWith(context : any) : JQueryCallback;
-
-    /**
-     * Call all callbacks in a list with the given context and arguments.
-     * 
-     * @param context A reference to the context in which the callbacks in the list should be fired.
-     * @param arguments An argument, or array of arguments, to pass to the callbacks in the list.
-     * @return {*}
-     */
-    fireWith() : JQueryCallback;
-}
-
-declare var jQuery : any;
-
-declare var $ : any;
-
-declare var jquery : any;
-
-
-/**
- * Allows jQuery Promises to interop with non-jQuery promises
- * @class
- * @extends Object
- */
-interface JQueryGenericPromise<T> {
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @param {*} progressFilter
-     * @return {*}
-     */
-    then<U>(doneFilter : (p1: T, p2: any) => U, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @param {*} progressFilter
-     * @return {*}
-     */
-    then(doneFilter : (p1: T, p2: any) => void, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<void>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then<U>(doneFilter : (p1: T, p2: any) => U, failFilter : (p1: any) => any) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then<U>(doneFilter : (p1: T, p2: any) => U) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then(doneFilter : (p1: T, p2: any) => void, failFilter : (p1: any) => any) : JQueryPromise<void>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then(doneFilter : (p1: T, p2: any) => void) : JQueryPromise<void>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @param {*} progressFilter
-     * @return {*}
-     */
-    then<U>(doneFilter : () => U, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {() => void} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @param {*} progressFilter
-     * @return {*}
-     */
-    then(doneFilter : () => void, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<void>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then<U>(doneFilter : () => U, failFilter : (p1: any) => any) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then<U>(doneFilter : () => U) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {() => void} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then(doneFilter : () => void, failFilter : (p1: any) => any) : JQueryPromise<void>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {() => void} doneFilter A function that is called when the Deferred is resolved.
-     * @param failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then(doneFilter : () => void) : JQueryPromise<void>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @param {*} progressFilter
-     * @return {*}
-     */
-    then<U>(doneFilter : (p1: T, p2: any) => JQueryPromise<U>, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param {*} failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then<U>(doneFilter : (p1: T, p2: any) => JQueryPromise<U>, failFilter : (p1: any) => any) : JQueryPromise<U>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.
-     * 
-     * @param {*} doneFilter A function that is called when the Deferred is resolved.
-     * @param failFilter An optional function that is called when the Deferred is rejected.
-     * @return {*}
-     */
-    then<U>(doneFilter : (p1: T, p2: any) => JQueryPromise<U>) : JQueryPromise<U>;
-}
-
-/**
- * Interface of the JQuery extension of the W3C event object
- * @class
- * @extends Event
- */
-interface BaseJQueryEventObject extends Event {
-    currentTarget : Element;
-
-    data : any;
-
-    delegateTarget : Element;
-
-    isDefaultPrevented() : boolean;
-
-    isImmediatePropagationStopped() : boolean;
-
-    isPropagationStopped() : boolean;
-
-    namespace : string;
-
-    originalEvent : Event;
-
-    preventDefault();
-
-    relatedTarget : Element;
-
-    result : any;
-
-    stopImmediatePropagation();
-
-    stopPropagation();
-
-    target : Element;
-
-    pageX : number;
-
-    pageY : number;
-
-    which : number;
-
-    metaKey : boolean;
-}
-
-/**
- * Interface for the jqXHR object
- * @class
- * @extends XMLHttpRequest
- */
-interface JQueryXHR extends XMLHttpRequest {
-    /**
-     * The .overrideMimeType() method may be used in the beforeSend() callback function, for example, to modify the response content-type header. As of jQuery 1.5.1, the jqXHR object also contains the overrideMimeType() method (it was available in jQuery 1.4.x, as well, but was temporarily removed in jQuery 1.5).
-     * @param {string} mimeType
-     */
-    overrideMimeType(mimeType : string);
-
-    /**
-     * Cancel the request.
-     * 
-     * @param {string} statusText A string passed as the textStatus parameter for the done callback. Default value: "canceled"
-     */
-    abort(statusText : string);
-
-    /**
-     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.
-     * @param {*} doneCallback
-     * @param {*} failCallback
-     * @return {*}
-     */
-    then<R>(doneCallback : (p1: any, p2: string, p3: JQueryXHR) => R, failCallback : (p1: JQueryXHR, p2: string, p3: any) => void) : JQueryPromise<R>;
-
-    /**
-     * Property containing the parsed response if the response Content-Type is json
-     */
-    responseJSON? : any;
-
-    /**
-     * A function to be called if the request fails.
-     * @param {*} xhr
-     * @param {string} textStatus
-     * @param {string} errorThrown
-     */
-    error(xhr : JQueryXHR, textStatus : string, errorThrown : string);
-
-    /**
-     * Determine the current state of a Deferred object.
-     * @return {string}
-     */
-    state() : string;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>, ...doneCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : any[]) : JQueryPromise<any>;
-
-    pipe(doneFilter : (p1: any) => any, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    /**
-     * Return a Deferred's Promise object.
-     * 
-     * @param {*} target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise(target : any) : JQueryPromise<any>;
-
-    /**
-     * Cancel the request.
-     * 
-     * @param statusText A string passed as the textStatus parameter for the done callback. Default value: "canceled"
-     */
-    abort();
-
-    /**
-     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.
-     * @param {*} doneCallback
-     * @return {*}
-     */
-    then<R>(doneCallback : (p1: any, p2: string, p3: JQueryXHR) => R) : JQueryPromise<R>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @return {*}
-     */
-    always() : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @return {*}
-     */
-    done() : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @return {*}
-     */
-    fail() : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @return {*}
-     */
-    progress() : JQueryPromise<any>;
-
-    pipe(doneFilter : (p1: any) => any, failFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    pipe(doneFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    pipe() : JQueryPromise<any>;
-
-    /**
-     * Return a Deferred's Promise object.
-     * 
-     * @param target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise() : JQueryPromise<any>;
-
-    /**
-     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.
-     * @param {*} doneCallback
-     * @param {*} failCallback
-     * @return {*}
-     */
-    then<R>(doneCallback : (p1: any, p2: string, p3: JQueryXHR) => JQueryPromise<R>, failCallback : (p1: JQueryXHR, p2: string, p3: any) => void) : JQueryPromise<R>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>, ...doneCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>[], ...doneCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>[], ...doneCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : any[]) : JQueryPromise<any>;
-
-    /**
-     * Incorporates the functionality of the .done() and .fail() methods, allowing (as of jQuery 1.8) the underlying Promise to be manipulated. Refer to deferred.then() for implementation details.
-     * @param {*} doneCallback
-     * @return {*}
-     */
-    then<R>(doneCallback : (p1: any, p2: string, p3: JQueryXHR) => JQueryPromise<R>) : JQueryPromise<R>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>, ...doneCallbackN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>, ...doneCallbackN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>[], ...doneCallbackN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<any>[], ...doneCallbackN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : JQueryPromiseCallback<any>[]) : JQueryPromise<any>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : JQueryPromiseCallback<any>[][]) : JQueryPromise<any>;
-}
-
-interface JQueryParam {
-    /**
-     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
-     * 
-     * @param {*} obj An array or object to serialize.
-     * @return {string}
-     */
-    (obj : any) : string;
-
-    /**
-     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
-     * 
-     * @param {*} obj An array or object to serialize.
-     * @param {boolean} traditional A Boolean indicating whether to perform a traditional "shallow" serialization.
-     * @return {string}
-     */
-    (obj : any, traditional : boolean) : string;
-}
-
-interface JQueryEventObject extends BaseJQueryEventObject {
-    altKey : boolean;
-
-    ctrlKey : boolean;
-
-    metaKey : boolean;
-
-    shiftKey : boolean;
-
-    button : number;
-
-    clientX : number;
-
-    clientY : number;
-
-    offsetX : number;
-
-    offsetY : number;
-
-    pageX : number;
-
-    pageY : number;
-
-    screenX : number;
-
-    screenY : number;
-
-    char : any;
-
-    charCode : number;
-
-    key : any;
-
-    keyCode : number;
-}
-
-interface JQueryKeyEventObject extends JQueryInputEventObject {
-    char : any;
-
-    charCode : number;
-
-    key : any;
-
-    keyCode : number;
-}
-
-/**
- * Interface for the AJAX setting that will configure the AJAX request
- * @class
- * @extends Object
- */
-interface JQueryAjaxSettings {
-    /**
-     * The content type sent in the request header that tells the server what kind of response it will accept in return. If the accepts setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.
-     */
-    accepts? : any;
-
-    /**
-     * By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().
-     */
-    async? : boolean;
-
-    /**
-     * A pre-request callback function that can be used to modify the jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object before it is sent. Use this to set custom headers, etc. The jqXHR and settings objects are passed as arguments. This is an Ajax Event. Returning false in the beforeSend function will cancel the request. As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.
-     * @param {*} jqXHR
-     * @param {*} settings
-     * @return {*}
-     */
-    beforeSend(jqXHR : JQueryXHR, settings : JQueryAjaxSettings) : any;
-
-    /**
-     * If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.
-     */
-    cache? : boolean;
-
-    /**
-     * A function to be called when the request finishes (after success and error callbacks are executed). The function gets passed two arguments: The jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object and a string categorizing the status of the request ("success", "notmodified", "error", "timeout", "abort", or "parsererror"). As of jQuery 1.5, the complete setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.
-     * @param {*} jqXHR
-     * @param {string} textStatus
-     * @return {*}
-     */
-    complete(jqXHR : JQueryXHR, textStatus : string) : any;
-
-    /**
-     * An object of string/regular-expression pairs that determine how jQuery will parse the response, given its content type. (version added: 1.5)
-     */
-    contents? : any;
-
-    /**
-     * When sending data to the server, use this content type. Default is "application/x-www-form-urlencoded; charset=UTF-8", which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it is always sent to the server (even if no data is sent). The W3C XMLHttpRequest specification dictates that the charset is always UTF-8; specifying another charset will not force the browser to change the encoding.
-     */
-    contentType? : any;
-
-    /**
-     * This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax).
-     */
-    context? : any;
-
-    /**
-     * An object containing dataType-to-dataType converters. Each converter's value is a function that returns the transformed value of the response. (version added: 1.5)
-     */
-    converters? : any;
-
-    /**
-     * If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)
-     */
-    crossDomain? : boolean;
-
-    /**
-     * Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).
-     */
-    data? : any;
-
-    /**
-     * A function to be used to handle the raw response data of XMLHttpRequest.This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the 'dataType' parameter.
-     * @param {*} data
-     * @param {*} ty
-     * @return {*}
-     */
-    dataFilter(data : any, ty : any) : any;
-
-    /**
-     * The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).
-     */
-    dataType? : string;
-
-    /**
-     * A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.
-     * @param {*} jqXHR
-     * @param {string} textStatus
-     * @param {string} errorThrown
-     * @return {*}
-     */
-    error(jqXHR : JQueryXHR, textStatus : string, errorThrown : string) : any;
-
-    /**
-     * Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.
-     */
-    global? : boolean;
-
-    /**
-     * An object of additional header key/value pairs to send along with requests using the XMLHttpRequest transport. The header X-Requested-With: XMLHttpRequest is always added, but its default XMLHttpRequest value can be changed here. Values in the headers setting can also be overwritten from within the beforeSend function. (version added: 1.5)
-     */
-    headers? : any;
-
-    /**
-     * Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. In jQuery 1.4 this technique also checks the 'etag' specified by the server to catch unmodified data.
-     */
-    ifModified? : boolean;
-
-    /**
-     * Allow the current environment to be recognized as "local," (e.g. the filesystem), even if jQuery does not recognize it as such by default. The following protocols are currently recognized as local: file, *-extension, and widget. If the isLocal setting needs modification, it is recommended to do so once in the $.ajaxSetup() method. (version added: 1.5.1)
-     */
-    isLocal? : boolean;
-
-    /**
-     * Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url. So {jsonp:'onJSONPLoad'} would result in 'onJSONPLoad=?' passed to the server. As of jQuery 1.5, setting the jsonp option to false prevents jQuery from adding the "?callback" string to the URL or attempting to use "=?" for transformation. In this case, you should also explicitly set the jsonpCallback setting. For example, { jsonp: false, jsonpCallback: "callbackName" }
-     */
-    jsonp? : any;
-
-    /**
-     * Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.
-     */
-    jsonpCallback? : any;
-
-    /**
-     * The HTTP method to use for the request (e.g. "POST", "GET", "PUT"). (version added: 1.9.0)
-     */
-    method? : string;
-
-    /**
-     * A mime type to override the XHR mime type. (version added: 1.5.1)
-     */
-    mimeType? : string;
-
-    /**
-     * A password to be used with XMLHttpRequest in response to an HTTP access authentication request.
-     */
-    password? : string;
-
-    /**
-     * By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.
-     */
-    processData? : boolean;
-
-    /**
-     * Only applies when the "script" transport is used (e.g., cross-domain requests with "jsonp" or "script" dataType and "GET" type). Sets the charset attribute on the script tag used in the request. Used when the character set on the local page is not the same as the one on the remote script.
-     */
-    scriptCharset? : string;
-
-    /**
-     * An object of numeric HTTP codes and functions to be called when the response has the corresponding code. f the request is successful, the status code functions take the same parameters as the success callback; if it results in an error (including 3xx redirect), they take the same parameters as the error callback. (version added: 1.5)
-     */
-    statusCode? : any;
-
-    /**
-     * A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.
-     * @param {*} data
-     * @param {string} textStatus
-     * @param {*} jqXHR
-     * @return {*}
-     */
-    success(data : any, textStatus : string, jqXHR : JQueryXHR) : any;
-
-    /**
-     * Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.
-     */
-    timeout? : number;
-
-    /**
-     * Set this to true if you wish to use the traditional style of param serialization.
-     */
-    traditional? : boolean;
-
-    /**
-     * The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.
-     */
-    type? : string;
-
-    /**
-     * A string containing the URL to which the request is sent.
-     */
-    url? : string;
-
-    /**
-     * A username to be used with XMLHttpRequest in response to an HTTP access authentication request.
-     */
-    username? : string;
-
-    /**
-     * Callback for creating the XMLHttpRequest object. Defaults to the ActiveXObject when available (IE), the XMLHttpRequest otherwise. Override to provide your own implementation for XMLHttpRequest or enhancements to the factory.
-     */
-    xhr? : any;
-
-    /**
-     * An object of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to set withCredentials to true for cross-domain requests if needed. In jQuery 1.5, the withCredentials property was not propagated to the native XHR and thus CORS requests requiring it would ignore this flag. For this reason, we recommend using jQuery 1.5.1+ should you require the use of it. (version added: 1.5.1)
-     */
-    xhrFields? : any;
-}
-
-/**
- * Interface for the JQuery promise/deferred callbacks
- * @class
- */
-interface JQueryPromiseCallback<T> {
-    (value : T, ...args : any[]);
-
-    ();
-}
-
-interface JQueryEasingFunction {
-    (percent : number) : number;
-}
-
-interface JQueryEasingFunctions {
-    [name : string]: JQueryEasingFunction;
-
-    linear : any;
-
-    swing : any;
-}
-
-interface JQueryAnimationOptions {
-    /**
-     * A string or number determining how long the animation will run.
-     */
-    duration? : any;
-
-    /**
-     * A string indicating which easing function to use for the transition.
-     */
-    easing? : string;
-
-    /**
-     * A function to call once the animation is complete.
-     */
-    complete? : any;
-
-    /**
-     * A function to be called for each animated property of each animated element. This function provides an opportunity to modify the Tween object to change the value of the property before it is set.
-     */
-    step? : (p1: number, p2: any) => any;
-
-    /**
-     * A function to be called after each step of the animation, only once per animated element regardless of the number of animated properties. (version added: 1.8)
-     */
-    progress? : (p1: JQueryPromise<any>, p2: number, p3: number) => any;
-
-    /**
-     * A function to call when the animation begins. (version added: 1.8)
-     */
-    start? : (p1: JQueryPromise<any>) => any;
-
-    /**
-     * A function to be called when the animation completes (its Promise object is resolved). (version added: 1.8)
-     */
-    done? : (p1: JQueryPromise<any>, p2: boolean) => any;
-
-    /**
-     * A function to be called when the animation fails to complete (its Promise object is rejected). (version added: 1.8)
-     */
-    fail? : (p1: JQueryPromise<any>, p2: boolean) => any;
-
-    /**
-     * A function to be called when the animation completes or stops without completing (its Promise object is either resolved or rejected). (version added: 1.8)
-     */
-    always? : (p1: JQueryPromise<any>, p2: boolean) => any;
-
-    /**
-     * A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string. When a custom queue name is used the animation does not automatically start; you must call .dequeue("queuename") to start it.
-     */
-    queue? : any;
-
-    /**
-     * A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions. (version added: 1.4)
-     */
-    specialEasing? : any;
-}
-
-interface JQueryInputEventObject extends BaseJQueryEventObject {
-    altKey : boolean;
-
-    ctrlKey : boolean;
-
-    metaKey : boolean;
-
-    shiftKey : boolean;
-}
-
-/**
- * Interface for the JQuery promise, part of callbacks
- * @class
- * @extends *
- */
-interface JQueryPromise<T> extends JQueryGenericPromise<T> {
-    /**
-     * Determine the current state of a Deferred object.
-     * @return {string}
-     */
-    state() : string;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : any[]) : JQueryPromise<T>;
-
-    pipe(doneFilter : (p1: any) => any, failFilter : (p1: any) => any, progressFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    /**
-     * Return a Deferred's Promise object.
-     * 
-     * @param {*} target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise(target : any) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @return {*}
-     */
-    always() : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @return {*}
-     */
-    done() : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @return {*}
-     */
-    fail() : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @return {*}
-     */
-    progress() : JQueryPromise<T>;
-
-    pipe(doneFilter : (p1: any) => any, failFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    pipe(doneFilter : (p1: any) => any) : JQueryPromise<any>;
-
-    pipe() : JQueryPromise<any>;
-
-    /**
-     * Return a Deferred's Promise object.
-     * 
-     * @param target Object onto which the promise methods have to be attached
-     * @return {*}
-     */
-    promise() : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : any[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : JQueryPromiseCallback<T>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : JQueryPromiseCallback<any>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {*} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>, ...alwaysCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is either resolved or rejected.
-     * 
-     * @param alwaysCallbacks1 A function, or array of functions, that is called when the Deferred is resolved or rejected.
-     * @param alwaysCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.
-     * @param {Array} alwaysCallback1
-     * @param {Array} alwaysCallbacksN
-     * @return {*}
-     */
-    always(alwaysCallback1 : JQueryPromiseCallback<any>[], ...alwaysCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : JQueryPromiseCallback<T>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {*} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>, ...doneCallbackN : JQueryPromiseCallback<T>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is resolved.
-     * 
-     * @param doneCallbacks1 A function, or array of functions, that are called when the Deferred is resolved.
-     * @param doneCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.
-     * @param {Array} doneCallback1
-     * @param {Array} doneCallbackN
-     * @return {*}
-     */
-    done(doneCallback1 : JQueryPromiseCallback<T>[], ...doneCallbackN : JQueryPromiseCallback<T>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {*} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>, ...failCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : JQueryPromiseCallback<any>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object is rejected.
-     * 
-     * @param failCallbacks1 A function, or array of functions, that are called when the Deferred is rejected.
-     * @param failCallbacks2 Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.
-     * @param {Array} failCallback1
-     * @param {Array} failCallbacksN
-     * @return {*}
-     */
-    fail(failCallback1 : JQueryPromiseCallback<any>[], ...failCallbacksN : JQueryPromiseCallback<any>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : JQueryPromiseCallback<any>[]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {*} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>, ...progressCallbackN : JQueryPromiseCallback<any>[][]) : JQueryPromise<T>;
-
-    /**
-     * Add handlers to be called when the Deferred object generates progress notifications.
-     * 
-     * @param progressCallbacks A function, or array of functions, to be called when the Deferred generates progress notifications.
-     * @param {Array} progressCallback1
-     * @param {Array} progressCallbackN
-     * @return {*}
-     */
-    progress(progressCallback1 : JQueryPromiseCallback<any>[], ...progressCallbackN : JQueryPromiseCallback<any>[][]) : JQueryPromise<T>;
-}
-
-/**
- * The interface used to specify coordinates.
- * @class
- * @extends Object
- */
-interface JQueryCoordinates {
-    left : number;
-
-    top : number;
-}
-
-/**
- * Static members of jQuery (those on $ and jQuery themselves)
- * @class
- * @extends Object
- */
-interface JQueryStatic {
-    /**
-     * Perform an asynchronous HTTP (Ajax) request.
-     * 
-     * @param {*} settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
-     * @return {*}
-     */
-    ajax(settings : JQueryAjaxSettings) : JQueryXHR;
-
-    /**
-     * Perform an asynchronous HTTP (Ajax) request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
-     * @return {*}
-     */
-    ajax(url : string, settings : JQueryAjaxSettings) : JQueryXHR;
-
-    /**
-     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
-     * 
-     * @param {string} dataTypes An optional string containing one or more space-separated dataTypes
-     * @param {*} handler A handler to set default values for future Ajax requests.
-     */
-    ajaxPrefilter(dataTypes : string, handler : (p1: any, p2: JQueryAjaxSettings, p3: JQueryXHR) => any);
-
-    /**
-     * Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().
-     * 
-     * @param {*} handler A handler to set default values for future Ajax requests.
-     */
-    ajaxPrefilter(handler : (p1: any, p2: JQueryAjaxSettings, p3: JQueryXHR) => any);
-
-    ajaxSettings : JQueryAjaxSettings;
-
-    /**
-     * Set default values for future Ajax requests. Its use is not recommended.
-     * 
-     * @param {*} options A set of key/value pairs that configure the default Ajax request. All options are optional.
-     */
-    ajaxSetup(options : JQueryAjaxSettings);
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @param {string} dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, success : (p1: any, p2: string, p3: JQueryXHR) => any, dataType : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @param {string} dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, data : any, success : (p1: any, p2: string, p3: JQueryXHR) => any, dataType : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {*} settings The JQueryAjaxSettings to be used for the request
-     * @return {*}
-     */
-    get(settings : JQueryAjaxSettings) : JQueryXHR;
-
-    /**
-     * Load JSON-encoded data from the server using a GET HTTP request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getJSON(url : string, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load JSON-encoded data from the server using a GET HTTP request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getJSON(url : string, data : any, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load a JavaScript file from the server using a GET HTTP request, then execute it.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getScript(url : string, success : (p1: string, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.
-     */
-    param : any;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param {string} dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, success : (p1: any, p2: string, p3: JQueryXHR) => any, dataType : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param {string} dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, data : any, success : (p1: any, p2: string, p3: JQueryXHR) => any, dataType : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {*} settings The JQueryAjaxSettings to be used for the request
-     * @return {*}
-     */
-    post(settings : JQueryAjaxSettings) : JQueryXHR;
-
-    /**
-     * A multi-purpose callbacks list object that provides a powerful way to manage callback lists.
-     * 
-     * @param {string} flags An optional list of space-separated flags that change how the callback list behaves.
-     * @return {*}
-     */
-    Callbacks(flags : string) : JQueryCallback;
-
-    /**
-     * Holds or releases the execution of jQuery's ready event.
-     * 
-     * @param {boolean} hold Indicates whether the ready hold is being requested or released
-     */
-    holdReady(hold : boolean);
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {string} selector A string containing a selector expression
-     * @param {Element} context A DOM Element, Document, or jQuery to use as context
-     * @return {*}
-     */
-    (selector : string, context : Element) : JQuery;
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {Element} element A DOM element to wrap in a jQuery object.
-     * @return {*}
-     */
-    (element : Element) : JQuery;
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {Array} elementArray An array containing a set of DOM elements to wrap in a jQuery object.
-     * @return {*}
-     */
-    (elementArray : Element[]) : JQuery;
-
-    /**
-     * Binds a function to be executed when the DOM has finished loading.
-     * 
-     * @param {*} callback A function to execute after the DOM is ready.
-     * @return {*}
-     */
-    (callback : (p1: JQueryStatic) => any) : JQuery;
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {*} object A plain object to wrap in a jQuery object.
-     * @return {*}
-     */
-    (object : any) : JQuery;
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {*} object An existing jQuery object to clone.
-     * @return {*}
-     */
-    (object : JQuery) : JQuery;
-
-    /**
-     * Specify a function to execute when the DOM is fully loaded.
-     * @return {*}
-     */
-    () : JQuery;
-
-    /**
-     * Creates DOM elements on the fly from the provided string of raw HTML.
-     * 
-     * @param {string} html A string of HTML to create on the fly. Note that this parses HTML, not XML.
-     * @param {Document} ownerDocument A document in which the new elements will be created.
-     * @return {*}
-     */
-    (html : string, ownerDocument : Document) : JQuery;
-
-    /**
-     * Creates DOM elements on the fly from the provided string of raw HTML.
-     * 
-     * @param {string} html A string defining a single, standalone, HTML element (e.g. <div/> or <div></div>).
-     * @param {*} attributes An object of attributes, events, and methods to call on the newly-created element.
-     * @return {*}
-     */
-    (html : string, attributes : any) : JQuery;
-
-    /**
-     * Relinquish jQuery's control of the $ variable.
-     * 
-     * @param {boolean} removeAll A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).
-     * @return {*}
-     */
-    noConflict(removeAll : boolean) : JQueryStatic;
-
-    /**
-     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
-     * 
-     * @param {Array} deferreds One or more Deferred objects, or plain JavaScript objects.
-     * @return {*}
-     */
-    when<T>(...deferreds : any[]) : JQueryPromise<T>;
-
-    /**
-     * Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.
-     */
-    cssHooks : any;
-
-    cssNumber : any;
-
-    /**
-     * Store arbitrary data associated with the specified element. Returns the value that was set.
-     * 
-     * @param {Element} element The DOM element to associate with the data.
-     * @param {string} key A string naming the piece of data to set.
-     * @param {*} value The new data value.
-     * @return {*}
-     */
-    data<T>(element : Element, key : string, value : T) : T;
-
-    /**
-     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.
-     * 
-     * @param {Element} element The DOM element to associate with the data.
-     * @param {string} key A string naming the piece of data to set.
-     * @return {*}
-     */
-    data(element : Element, key : string) : any;
-
-    /**
-     * Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.
-     * 
-     * @param {Element} element The DOM element to associate with the data.
-     * @return {*}
-     */
-    data(element : Element) : any;
-
-    /**
-     * Execute the next function on the queue for the matched element.
-     * 
-     * @param {Element} element A DOM element from which to remove and execute a queued function.
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     */
-    dequeue(element : Element, queueName : string);
-
-    /**
-     * Determine whether an element has any jQuery data associated with it.
-     * 
-     * @param {Element} element A DOM element to be checked for data.
-     * @return {boolean}
-     */
-    hasData(element : Element) : boolean;
-
-    /**
-     * Show the queue of functions to be executed on the matched element.
-     * 
-     * @param {Element} element A DOM element to inspect for an attached queue.
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {Array}
-     */
-    queue(element : Element, queueName : string) : any[];
-
-    /**
-     * Manipulate the queue of functions to be executed on the matched element.
-     * 
-     * @param {Element} element A DOM element where the array of queued functions is attached.
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @param {Array} newQueue An array of functions to replace the current queue contents.
-     * @return {*}
-     */
-    queue(element : Element, queueName : string, newQueue : Function[]) : JQuery;
-
-    /**
-     * Manipulate the queue of functions to be executed on the matched element.
-     * 
-     * @param {Element} element A DOM element on which to add a queued function.
-     * @param {string} queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @param {Function} callback The new function to add to the queue.
-     * @return {*}
-     */
-    queue(element : Element, queueName : string, callback : Function) : JQuery;
-
-    /**
-     * Remove a previously-stored piece of data.
-     * 
-     * @param {Element} element A DOM element from which to remove data.
-     * @param {string} name A string naming the piece of data to remove.
-     * @return {*}
-     */
-    removeData(element : Element, name : string) : JQuery;
-
-    /**
-     * A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.
-     * 
-     * @param {*} beforeStart A function that is called just before the constructor returns.
-     * @return {*}
-     */
-    Deferred<T>(beforeStart : (p1: JQueryDeferred<T>) => any) : JQueryDeferred<T>;
-
-    /**
-     * Effects
-     */
-    easing : JQueryEasingFunctions;
-
-    fx : any;
-
-    /**
-     * Takes a function and returns a new one that will always have a particular context.
-     * 
-     * @param {*} fnction The function whose context will be changed.
-     * @param {*} context The object to which the context (this) of the function should be set.
-     * @param {Array} additionalArguments Any number of arguments to be passed to the function referenced in the function argument.
-     * @return {*}
-     */
-    proxy(fnction : (p1: any) => any, context : any, ...additionalArguments : any[]) : any;
-
-    /**
-     * Takes a function and returns a new one that will always have a particular context.
-     * 
-     * @param {*} context The object to which the context (this) of the function should be set.
-     * @param {string} name The name of the function whose context will be changed (should be a property of the context object).
-     * @param {Array} additionalArguments Any number of arguments to be passed to the function named in the name argument.
-     * @return {*}
-     */
-    proxy(context : any, name : string, ...additionalArguments : any[]) : any;
-
-    Event : any;
-
-    /**
-     * Takes a string and throws an exception containing it.
-     * 
-     * @param {*} message The message to send out.
-     * @return {*}
-     */
-    error(message : any) : JQuery;
-
-    expr : any;
-
-    fn : any;
-
-    isReady : boolean;
-
-    support : JQuerySupport;
-
-    /**
-     * Check to see if a DOM element is a descendant of another DOM element.
-     * 
-     * @param {Element} container The DOM element that may contain the other element.
-     * @param {Element} contained The DOM element that may be contained by (a descendant of) the other element.
-     * @return {boolean}
-     */
-    contains(container : Element, contained : Element) : boolean;
-
-    /**
-     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
-     * 
-     * @param {Array} collection The object or array to iterate over.
-     * @param {*} callback The function that will be executed on every object.
-     * @return {*}
-     */
-    each<T>(collection : T[], callback : (p1: number, p2: T) => any) : any;
-
-    /**
-     * A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.
-     * 
-     * @param {*} collection The object or array to iterate over.
-     * @param {*} callback The function that will be executed on every object.
-     * @return {*}
-     */
-    each(collection : any, callback : (p1: any, p2: any) => any) : any;
-
-    /**
-     * Merge the contents of two or more objects together into the first object.
-     * 
-     * @param {*} target An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.
-     * @param {*} object1 An object containing additional properties to merge in.
-     * @param {Array} objectN Additional objects containing properties to merge in.
-     * @return {*}
-     */
-    extend(target : any, object1 : any, ...objectN : any[]) : any;
-
-    /**
-     * Merge the contents of two or more objects together into the first object.
-     * 
-     * @param {boolean} deep If true, the merge becomes recursive (aka. deep copy).
-     * @param {*} target The object to extend. It will receive the new properties.
-     * @param {*} object1 An object containing additional properties to merge in.
-     * @param {Array} objectN Additional objects containing properties to merge in.
-     * @return {*}
-     */
-    extend(deep : boolean, target : any, object1 : any, ...objectN : any[]) : any;
-
-    /**
-     * Execute some JavaScript code globally.
-     * 
-     * @param {string} code The JavaScript code to execute.
-     * @return {*}
-     */
-    globalEval(code : string) : any;
-
-    /**
-     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
-     * 
-     * @param {Array} array The array to search through.
-     * @param {*} func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
-     * @param {boolean} invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
-     * @return {Array}
-     */
-    grep<T>(array : T[], func : (p1: T, p2: number) => boolean, invert : boolean) : T[];
-
-    /**
-     * Search for a specified value within an array and return its index (or -1 if not found).
-     * 
-     * @param {*} value The value to search for.
-     * @param {Array} array An array through which to search.
-     * @param {number} fromIndex he index of the array at which to begin the search. The default is 0, which will search the whole array.
-     * @return {number}
-     */
-    inArray<T>(value : T, array : T[], fromIndex : number) : number;
-
-    /**
-     * Determine whether the argument is an array.
-     * 
-     * @param {*} obj Object to test whether or not it is an array.
-     * @return {boolean}
-     */
-    isArray(obj : any) : boolean;
-
-    /**
-     * Check to see if an object is empty (contains no enumerable properties).
-     * 
-     * @param {*} obj The object that will be checked to see if it's empty.
-     * @return {boolean}
-     */
-    isEmptyObject(obj : any) : boolean;
-
-    /**
-     * Determine if the argument passed is a Javascript function object.
-     * 
-     * @param {*} obj Object to test whether or not it is a function.
-     * @return {boolean}
-     */
-    isFunction(obj : any) : boolean;
-
-    /**
-     * Determines whether its argument is a number.
-     * 
-     * @param obj The value to be tested.
-     * @param {*} value
-     * @return {boolean}
-     */
-    isNumeric(value : any) : boolean;
-
-    /**
-     * Check to see if an object is a plain object (created using "{}" or "new Object").
-     * 
-     * @param {*} obj The object that will be checked to see if it's a plain object.
-     * @return {boolean}
-     */
-    isPlainObject(obj : any) : boolean;
-
-    /**
-     * Determine whether the argument is a window.
-     * 
-     * @param {*} obj Object to test whether or not it is a window.
-     * @return {boolean}
-     */
-    isWindow(obj : any) : boolean;
-
-    /**
-     * Check to see if a DOM node is within an XML document (or is an XML document).
-     * 
-     * @param {Node} node he DOM node that will be checked to see if it's in an XML document.
-     * @return {boolean}
-     */
-    isXMLDoc(node : Node) : boolean;
-
-    /**
-     * Convert an array-like object into a true JavaScript array.
-     * 
-     * @param {*} obj Any object to turn into a native Array.
-     * @return {Array}
-     */
-    makeArray(obj : any) : any[];
-
-    /**
-     * Translate all items in an array or object to new array of items.
-     * 
-     * @param {Array} array The Array to translate.
-     * @param {*} callback The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.
-     * @return {Array}
-     */
-    map<T, U>(array : T[], callback : (p1: T, p2: number) => U) : U[];
-
-    /**
-     * Translate all items in an array or object to new array of items.
-     * 
-     * @param {*} arrayOrObject The Array or Object to translate.
-     * @param {*} callback The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.
-     * @return {*}
-     */
-    map(arrayOrObject : any, callback : (p1: any, p2: any) => any) : any;
-
-    /**
-     * Merge the contents of two arrays together into the first array.
-     * 
-     * @param {Array} first The first array to merge, the elements of second added.
-     * @param {Array} second The second array to merge into the first, unaltered.
-     * @return {Array}
-     */
-    merge<T>(first : T[], second : T[]) : T[];
-
-    /**
-     * An empty function.
-     * @return {*}
-     */
-    noop() : any;
-
-    /**
-     * Return a number representing the current time.
-     * @return {number}
-     */
-    now() : number;
-
-    /**
-     * Takes a well-formed JSON string and returns the resulting JavaScript object.
-     * 
-     * @param {string} json The JSON string to parse.
-     * @return {*}
-     */
-    parseJSON(json : string) : any;
-
-    /**
-     * Parses a string into an XML document.
-     * 
-     * @param {string} data a well-formed XML string to be parsed
-     * @return {XMLDocument}
-     */
-    parseXML(data : string) : XMLDocument;
-
-    /**
-     * Remove the whitespace from the beginning and end of a string.
-     * 
-     * @param {string} str Remove the whitespace from the beginning and end of a string.
-     * @return {string}
-     */
-    trim(str : string) : string;
-
-    /**
-     * Determine the internal JavaScript [[Class]] of an object.
-     * 
-     * @param {*} obj Object to get the internal JavaScript [[Class]] of.
-     * @return {string}
-     */
-    type(obj : any) : string;
-
-    /**
-     * Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.
-     * 
-     * @param {Array} array The Array of DOM elements.
-     * @return {Array}
-     */
-    unique(array : Element[]) : Element[];
-
-    /**
-     * Parses a string into an array of DOM nodes.
-     * 
-     * @param {string} data HTML string to be parsed
-     * @param {HTMLElement} context DOM element to serve as the context in which the HTML fragment will be created
-     * @param {boolean} keepScripts A Boolean indicating whether to include scripts passed in the HTML string
-     * @return {Array}
-     */
-    parseHTML(data : string, context : HTMLElement, keepScripts : boolean) : any[];
-
-    /**
-     * Parses a string into an array of DOM nodes.
-     * 
-     * @param {string} data HTML string to be parsed
-     * @param {Document} context DOM element to serve as the context in which the HTML fragment will be created
-     * @param {boolean} keepScripts A Boolean indicating whether to include scripts passed in the HTML string
-     * @return {Array}
-     */
-    parseHTML(data : string, context : Document, keepScripts : boolean) : any[];
-
-    /**
-     * Perform an asynchronous HTTP (Ajax) request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param settings A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().
-     * @return {*}
-     */
-    ajax(url : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param success A callback function that is executed if the request succeeds.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, data : any, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param success A callback function that is executed if the request succeeds.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, data : any) : JQueryXHR;
-
-    /**
-     * Load JSON-encoded data from the server using a GET HTTP request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getJSON(url : string) : JQueryXHR;
-
-    /**
-     * Load JSON-encoded data from the server using a GET HTTP request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getJSON(url : string, data : any) : JQueryXHR;
-
-    /**
-     * Load a JavaScript file from the server using a GET HTTP request, then execute it.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getScript(url : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, data : any, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {*} data A plain object or string that is sent to the server with the request.
-     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, data : any) : JQueryXHR;
-
-    /**
-     * A multi-purpose callbacks list object that provides a powerful way to manage callback lists.
-     * 
-     * @param flags An optional list of space-separated flags that change how the callback list behaves.
-     * @return {*}
-     */
-    Callbacks() : JQueryCallback;
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {string} selector A string containing a selector expression
-     * @param context A DOM Element, Document, or jQuery to use as context
-     * @return {*}
-     */
-    (selector : string) : JQuery;
-
-    /**
-     * Relinquish jQuery's control of the $ variable.
-     * 
-     * @param removeAll A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).
-     * @return {*}
-     */
-    noConflict() : JQueryStatic;
-
-    /**
-     * Execute the next function on the queue for the matched element.
-     * 
-     * @param {Element} element A DOM element from which to remove and execute a queued function.
-     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     */
-    dequeue(element : Element);
-
-    /**
-     * Show the queue of functions to be executed on the matched element.
-     * 
-     * @param {Element} element A DOM element to inspect for an attached queue.
-     * @param queueName A string containing the name of the queue. Defaults to fx, the standard effects queue.
-     * @return {Array}
-     */
-    queue(element : Element) : any[];
-
-    /**
-     * Remove a previously-stored piece of data.
-     * 
-     * @param {Element} element A DOM element from which to remove data.
-     * @param name A string naming the piece of data to remove.
-     * @return {*}
-     */
-    removeData(element : Element) : JQuery;
-
-    /**
-     * A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.
-     * 
-     * @param beforeStart A function that is called just before the constructor returns.
-     * @return {*}
-     */
-    Deferred<T>() : JQueryDeferred<T>;
-
-    /**
-     * Merge the contents of two or more objects together into the first object.
-     * 
-     * @param {*} target An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.
-     * @param object1 An object containing additional properties to merge in.
-     * @param objectN Additional objects containing properties to merge in.
-     * @return {*}
-     */
-    extend(target : any) : any;
-
-    /**
-     * Merge the contents of two or more objects together into the first object.
-     * 
-     * @param {boolean} deep If true, the merge becomes recursive (aka. deep copy).
-     * @param {*} target The object to extend. It will receive the new properties.
-     * @param object1 An object containing additional properties to merge in.
-     * @param objectN Additional objects containing properties to merge in.
-     * @return {*}
-     */
-    extend(deep : boolean, target : any) : any;
-
-    /**
-     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
-     * 
-     * @param {Array} array The array to search through.
-     * @param {*} func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
-     * @param invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
-     * @return {Array}
-     */
-    grep<T>(array : T[], func : (p1: T, p2: number) => boolean) : T[];
-
-    /**
-     * Search for a specified value within an array and return its index (or -1 if not found).
-     * 
-     * @param {*} value The value to search for.
-     * @param {Array} array An array through which to search.
-     * @param fromIndex he index of the array at which to begin the search. The default is 0, which will search the whole array.
-     * @return {number}
-     */
-    inArray<T>(value : T, array : T[]) : number;
-
-    /**
-     * Parses a string into an array of DOM nodes.
-     * 
-     * @param {string} data HTML string to be parsed
-     * @param {HTMLElement} context DOM element to serve as the context in which the HTML fragment will be created
-     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
-     * @return {Array}
-     */
-    parseHTML(data : string, context : HTMLElement) : any[];
-
-    /**
-     * Parses a string into an array of DOM nodes.
-     * 
-     * @param {string} data HTML string to be parsed
-     * @param context DOM element to serve as the context in which the HTML fragment will be created
-     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
-     * @return {Array}
-     */
-    parseHTML(data : string) : any[];
-
-    /**
-     * Parses a string into an array of DOM nodes.
-     * 
-     * @param {string} data HTML string to be parsed
-     * @param {Document} context DOM element to serve as the context in which the HTML fragment will be created
-     * @param keepScripts A Boolean indicating whether to include scripts passed in the HTML string
-     * @return {Array}
-     */
-    parseHTML(data : string, context : Document) : any[];
-
-    /**
-     * Binds a function to be executed when the DOM has finished loading.
-     * 
-     * @param {*} callback A function to execute after the DOM is ready.
-     * @return {*}
-     */
-    (callback : () => any) : JQuery;
-
-    /**
-     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
-     * 
-     * @param {Array} array The array to search through.
-     * @param {*} func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
-     * @param {boolean} invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
-     * @return {Array}
-     */
-    grep<T>(array : T[], func : (p1: T) => boolean, invert : boolean) : T[];
-
-    /**
-     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
-     * 
-     * @param {Array} array The array to search through.
-     * @param {*} func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
-     * @param {boolean} invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
-     * @return {Array}
-     */
-    grep<T>(array : T[], func : () => boolean, invert : boolean) : T[];
-
-    /**
-     * Translate all items in an array or object to new array of items.
-     * 
-     * @param {Array} array The Array to translate.
-     * @param {*} callback The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.
-     * @return {Array}
-     */
-    map<T, U>(array : T[], callback : (p1: T) => U) : U[];
-
-    /**
-     * Translate all items in an array or object to new array of items.
-     * 
-     * @param {Array} array The Array to translate.
-     * @param {*} callback The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.
-     * @return {Array}
-     */
-    map<T, U>(array : T[], callback : () => U) : U[];
-
-    /**
-     * Translate all items in an array or object to new array of items.
-     * 
-     * @param {*} arrayOrObject The Array or Object to translate.
-     * @param {*} callback The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.
-     * @return {*}
-     */
-    map(arrayOrObject : any, callback : (p1: any) => any) : any;
-
-    /**
-     * Translate all items in an array or object to new array of items.
-     * 
-     * @param {*} arrayOrObject The Array or Object to translate.
-     * @param {*} callback The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.
-     * @return {*}
-     */
-    map(arrayOrObject : any, callback : () => any) : any;
-
-    /**
-     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
-     * 
-     * @param {Array} array The array to search through.
-     * @param {*} func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
-     * @param invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
-     * @return {Array}
-     */
-    grep<T>(array : T[], func : (p1: T) => boolean) : T[];
-
-    /**
-     * Finds the elements of an array which satisfy a filter function. The original array is not affected.
-     * 
-     * @param {Array} array The array to search through.
-     * @param {*} func The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value.  this will be the global window object.
-     * @param invert If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.
-     * @return {Array}
-     */
-    grep<T>(array : T[], func : () => boolean) : T[];
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @param {string} dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, data : string, success : (p1: any, p2: string, p3: JQueryXHR) => any, dataType : string) : JQueryXHR;
-
-    /**
-     * Load JSON-encoded data from the server using a GET HTTP request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getJSON(url : string, data : string, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param {string} dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, data : string, success : (p1: any, p2: string, p3: JQueryXHR) => any, dataType : string) : JQueryXHR;
-
-    /**
-     * Accepts a string containing a CSS selector which is then used to match a set of elements.
-     * 
-     * @param {string} selector A string containing a selector expression
-     * @param {*} context A DOM Element, Document, or jQuery to use as context
-     * @return {*}
-     */
-    (selector : string, context : JQuery) : JQuery;
-
-    /**
-     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
-     * 
-     * @param {Array} deferreds One or more Deferred objects, or plain JavaScript objects.
-     * @return {*}
-     */
-    when<T>(...deferreds : any[]) : JQueryPromise<T>;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, data : string, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP GET request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param success A callback function that is executed if the request succeeds.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).
-     * @return {*}
-     */
-    get(url : string, data : string) : JQueryXHR;
-
-    /**
-     * Load JSON-encoded data from the server using a GET HTTP request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param success A callback function that is executed if the request succeeds.
-     * @return {*}
-     */
-    getJSON(url : string, data : string) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param {*} success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, data : string, success : (p1: any, p2: string, p3: JQueryXHR) => any) : JQueryXHR;
-
-    /**
-     * Load data from the server using a HTTP POST request.
-     * 
-     * @param {string} url A string containing the URL to which the request is sent.
-     * @param {string} data A plain object or string that is sent to the server with the request.
-     * @param success A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.
-     * @param dataType The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).
-     * @return {*}
-     */
-    post(url : string, data : string) : JQueryXHR;
-
-    /**
-     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
-     * 
-     * @param {Array} deferreds One or more Deferred objects, or plain JavaScript objects.
-     * @return {*}
-     */
-    when<T>(...deferreds : T[]) : JQueryPromise<T>;
-
-    /**
-     * Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.
-     * 
-     * @param {Array} deferreds One or more Deferred objects, or plain JavaScript objects.
-     * @return {*}
-     */
-    when<T>(...deferreds : JQueryPromise<T>[]) : JQueryPromise<T>;
-}
-
-
-
-declare module "jquery";
diff --git a/etc/vsdxJava2JS/.project b/etc/vsdxJava2JS/.project
deleted file mode 100644
index c2bf06eed1fabcd7a7c2e6a4acc2c3b16c5cc61b..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>jsweet-quickstart</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/etc/vsdxJava2JS/.settings/org.jsweet.plugin.prefs b/etc/vsdxJava2JS/.settings/org.jsweet.plugin.prefs
deleted file mode 100644
index d6dbb153169984eabca22e940dc84acd385595b2..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/.settings/org.jsweet.plugin.prefs
+++ /dev/null
@@ -1,8 +0,0 @@
-compiler.candyJsFolder=webapp
-compiler.debugMode=ts
-compiler.javascriptFolder=target/js
-compiler.moduleKind=none
-compiler.profiles=default
-compiler.sourceFolders=
-compiler.typescriptFolder=target/ts
-eclipse.preferences.version=1
diff --git a/etc/vsdxJava2JS/HowToRun.txt b/etc/vsdxJava2JS/HowToRun.txt
deleted file mode 100644
index 5b9249e14051f11f3d37e89507a970e7ddfbbad3..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/HowToRun.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-1- Make sure that the Java code has no errors. Include all external libraries and create mock classes for mxGraph ones.
-2- Run JSweet: mvn generate-sources
-3- Ignore the errors. The JS file are generated although there are errors. [Errors are coming from external libraries that JSweet cannot find]
-4- Start replacing mxGraph mock classes with JS equivalents (e.g., com.mxgraph.io.vsdx.mxPoint => mxPoint). Make sure that the JS classes has the methods needed
-	4.a. mxPoint has no getX/Y setX/Y, so replace them with direct fields (e.g., .getX() => .x)
-	4.b. mxGeometry has no getX/Y setX/Y (get/set)Width (get/set)Height. The same for: alternateBounds sourcePoint targetPoint points offset relative
-	4.c. Make sure that your mock classes do not have overloaded methods such that they are translated with the same name
-5- Do the same with all external libraries. Most of them requires equivalent JS libraries and some are supported natively by JS (e.g., DOM)
-	5.a. DOM methods need to be changed to fields: (e.g., getChildNode() => childNode)
-	5.b. getAttribute and hasAttribute methods exists in JS
-	5.c. DOM getAttribute returns null if attribute is not found, in Java, it returns empty string!
-6- Fix JSweet errors in handling fields initialization. Default initialization must be moved before _super call. Also, !string.contains bug and model.getCells() conversion bug 
-7- Try to do a test that covers all the code!
\ No newline at end of file
diff --git a/etc/vsdxJava2JS/LICENSE b/etc/vsdxJava2JS/LICENSE
deleted file mode 100644
index 8f71f43fee3f78649d238238cbde51e6d7055c82..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
diff --git a/etc/vsdxJava2JS/README.md b/etc/vsdxJava2JS/README.md
deleted file mode 100644
index f6ba1b5fa88f7965f4951ad1979d07d175809ccf..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# JSweet quick start
-
-A simple project to get started with JSweet. This project just contains a main method that shows 'Hello world' messages in two different ways. The program uses the [J4TS](https://github.com/cincheo/j4ts) candy to access `java.util` API, and the jQuery candy. Programmers can use it to set up a new JSweet project and try out some basic features.
-
-## Usage
-
-```
-> git clone https://github.com/cincheo/jsweet-quickstart.git
-> cd jsweet-quickstart
-> mvn generate-sources
-> firefox webapp/index.html
-```
-
-## Modify
-
-At any time, you can modify the Java files (or add new files) and run ``mvn generate-sources`` to generate the corresponding JavaScript files. You can then use them in the ``index.html`` file (``<script>`` tags).
-
-You can modify the generation options by modifying the plugin section for ``jsweet-maven-plugin``. When having a  project with multiple source files, a good generation option to turn on is the ``bundle`` option, in order to generate all the JavaScript classes in a single file. Check the [Maven plugin](https://github.com/lgrignon/jsweet-maven-plugin) for the full option list.  
-
-If you want to use a JavaScript library (besides jQuery which is already enabled), you must add the Maven dependency in the ``<dependencies>`` section of the ``pom.xml``. You can copy-paste the Maven dependency description from our [Candy browser](http://www.jsweet.org/candies-snapshots/), or from our online [Maven repository](http://repository.jsweet.org/artifactory/webapp/#/artifacts/browse/tree/General/libs-snapshot-local). When running ``mvn generate-sources`` with a new library, if available in the candy, the JavaScript library will be extracted to the location given by the ``candiesJsOut`` option (here in the ``webapp`` directory). JavaScript libraries are packaged in the Jar following the [WebJars](http://www.webjars.org/) conventions. When not available, you will need to find and download the JavaScript library manually (or using a third-party tool such as [Bower](https://bower.io/)). 
-
-## Prerequisites
-
-- Java 8 JDK is required. Type in ``java -version`` in a console to make sure that you have a >1.8 JDK.
-- The `node` and `npm` executables must be in the path (https://nodejs.org).
-- Install Maven (https://maven.apache.org/install.html).
-
diff --git a/etc/vsdxJava2JS/pom.xml b/etc/vsdxJava2JS/pom.xml
deleted file mode 100644
index 3a6b21c9ed74a57821b07765ea6b2e9beb988867..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/pom.xml
+++ /dev/null
@@ -1,165 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>org.jsweet</groupId>
-	<artifactId>jsweet-quickstart</artifactId>
-	<version>2.0.0-SNAPSHOT</version>
-	<name>JSweet v2 quick start</name>
-	<description>A simple project structure to get started with JSweet v2</description>
-	<developers>
-		<developer>
-			<id>rpawlak</id>
-			<name>Renaud Pawlak</name>
-			<email>renaud.pawlak@gmail.com</email>
-		</developer>
-	</developers>
-	<licenses>
-		<license>
-			<name>The Apache Software License, Version 2.0</name>
-			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-			<distribution>repo</distribution>
-		</license>
-	</licenses>
-	<pluginRepositories>
-		<pluginRepository>
-			<id>jsweet-plugins-release</id>
-			<name>plugins-release</name>
-			<url>http://repository.jsweet.org/artifactory/plugins-release-local</url>
-		</pluginRepository>
-		<pluginRepository>
-			<snapshots />
-			<id>jsweet-plugins-snapshots</id>
-			<name>plugins-snapshot</name>
-			<url>http://repository.jsweet.org/artifactory/plugins-snapshot-local</url>
-		</pluginRepository>
-	</pluginRepositories>
-	<repositories>
-		<repository>
-			<id>jsweet-central</id>
-			<name>libs-release</name>
-			<url>http://repository.jsweet.org/artifactory/libs-release-local</url>
-		</repository>
-		<repository>
-			<snapshots />
-			<id>jsweet-snapshots</id>
-			<name>libs-snapshot</name>
-			<url>http://repository.jsweet.org/artifactory/libs-snapshot-local</url>
-		</repository>
-	</repositories>
-	<build>
-		<plugins>
-			<plugin>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>3.1</version>
-				<configuration>
-					<source>1.8</source>
-					<target>1.8</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.jsweet</groupId>
-				<artifactId>jsweet-maven-plugin</artifactId>
-				<version>2.0.0-rc1</version>
-				<configuration>
-					<verbose>true</verbose>
-					<tsOut>target/ts</tsOut>
-					<outDir>target/js</outDir>
-					<candiesJsOut>webapp</candiesJsOut>
-					<targetVersion>ES3</targetVersion>
-					<bundle>true</bundle>
-				</configuration>
-				<executions>
-					<execution>
-						<id>generate-js</id>
-						<phase>generate-sources</phase>
-						<goals>
-							<goal>jsweet</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-		<pluginManagement>
-			<plugins>
-				<!--This plugin's configuration is used to store Eclipse m2e settings 
-					only. It has no influence on the Maven build itself. -->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.jsweet
-										</groupId>
-										<artifactId>
-											jsweet-maven-plugin
-										</artifactId>
-										<versionRange>
-											[1.0.0,)
-										</versionRange>
-										<goals>
-											<goal>jsweet</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore></ignore>
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-	<dependencies>
-	<!--	<dependency>
-			<groupId>org.jsweet</groupId>
-			<artifactId>jsweet-core</artifactId>
-			<version>5-20170726</version>
-		</dependency>
-		<dependency>
-			<groupId>org.jsweet.candies</groupId>
-			<artifactId>node</artifactId>
-			<version>7.5.0-20170726</version>
-		</dependency>-->
-		<dependency>
-			<groupId>org.jsweet.candies</groupId>
-			<artifactId>jquery</artifactId>
-			<version>1.10.0-20170726</version>
-		</dependency>
-		<!-- <dependency>
-			<groupId>org.jsweet.candies</groupId>
-			<artifactId>j4ts</artifactId>
-			<version>0.3.0-SNAPSHOT</version>
-		</dependency>
-			
-<dependency>
-  <groupId>org.jsweet.candies</groupId>
-  <artifactId>dom4</artifactId>
-  <version>1.5.0-1.1.0-20160525</version>
-</dependency>-->
-		<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
-		<dependency>
-		    <groupId>commons-codec</groupId>
-		    <artifactId>commons-codec</artifactId>
-		    <version>1.10</version>
-		</dependency> 
-		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
-		<dependency>
-		    <groupId>org.apache.commons</groupId>
-		    <artifactId>commons-lang3</artifactId>
-		    <version>3.5</version>
-		</dependency> 
-		<!-- dependency>
-		  <groupId>com.mxgraph</groupId>
-		  <artifactId>mxgraph-core</artifactId>
-		  <version>3.7.4</version>
-		</dependency-->
-	</dependencies>
-</project>
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxCodec.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxCodec.java
deleted file mode 100644
index 5e663447a48472d8179c239eff1de6670b206146..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxCodec.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.mxgraph.io;
-
-import org.w3c.dom.Node;
-
-import com.mxgraph.io.mxGraph.Model;
-
-public class mxCodec {
-
-	public Node encode(Model model) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxGraph.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxGraph.java
deleted file mode 100644
index 0565571992792e462f7567f5f982c7e1c70036d4..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxGraph.java
+++ /dev/null
@@ -1,3263 +0,0 @@
-/**
- * Copyright (c) 2007, Gaudenz Alder
- */
-package com.mxgraph.io;
-
-import java.awt.Graphics;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.ShapePageId;
-import com.mxgraph.io.vsdx.mxCell;
-import com.mxgraph.io.vsdx.mxGeometry;
-import com.mxgraph.io.vsdx.mxPoint;
-import com.mxgraph.io.vsdx.mxRectangle;
-
-/**
- * Implements a graph object that allows to create diagrams from a graph model
- * and stylesheet.
- * 
- * <h3>Images</h3>
- * To create an image from a graph, use the following code for a given
- * XML document (doc) and File (file):
- * 
- * <code>
- * Image img = mxCellRenderer.createBufferedImage(
- * 		graph, null, 1, Color.WHITE, false, null);
- * ImageIO.write(img, "png", file);
- * </code>
- * 
- * If the XML is given as a string rather than a document, the document can
- * be obtained using mxUtils.parse.
- * 
- * This class fires the following events:
- * 
- * mxEvent.ROOT fires if the root in the model has changed. This event has no
- * properties.
- * 
- * mxEvent.ALIGN_CELLS fires between begin- and endUpdate in alignCells. The
- * <code>cells</code> and <code>align</code> properties contain the respective
- * arguments that were passed to alignCells.
- * 
- * mxEvent.FLIP_EDGE fires between begin- and endUpdate in flipEdge. The
- * <code>edge</code> property contains the edge passed to flipEdge.
- * 
- * mxEvent.ORDER_CELLS fires between begin- and endUpdate in orderCells. The
- * <code>cells</code> and <code>back</code> properties contain the respective
- * arguments that were passed to orderCells.
- *
- * mxEvent.CELLS_ORDERED fires between begin- and endUpdate in cellsOrdered.
- * The <code>cells</code> and <code>back</code> arguments contain the
- * respective arguments that were passed to cellsOrdered.
- * 
- * mxEvent.GROUP_CELLS fires between begin- and endUpdate in groupCells. The
- * <code>group</code>, <code>cells</code> and <code>border</code> arguments
- * contain the respective arguments that were passed to groupCells.
- * 
- * mxEvent.UNGROUP_CELLS fires between begin- and endUpdate in ungroupCells.
- * The <code>cells</code> property contains the array of cells that was passed
- * to ungroupCells.
- * 
- * mxEvent.REMOVE_CELLS_FROM_PARENT fires between begin- and endUpdate in
- * removeCellsFromParent. The <code>cells</code> property contains the array of
- * cells that was passed to removeCellsFromParent.
- * 
- * mxEvent.ADD_CELLS fires between begin- and endUpdate in addCells. The
- * <code>cells</code>, <code>parent</code>, <code>index</code>,
- * <code>source</code> and <code>target</code> properties contain the
- * respective arguments that were passed to addCells.
- * 
- * mxEvent.CELLS_ADDED fires between begin- and endUpdate in cellsAdded. The
- * <code>cells</code>, <code>parent</code>, <code>index</code>,
- * <code>source</code>, <code>target</code> and <code>absolute</code>
- * properties contain the respective arguments that were passed to cellsAdded.
- * 
- * mxEvent.REMOVE_CELLS fires between begin- and endUpdate in removeCells. The
- * <code>cells</code> and <code>includeEdges</code> arguments contain the
- * respective arguments that were passed to removeCells.
- * 
- * mxEvent.CELLS_REMOVED fires between begin- and endUpdate in cellsRemoved.
- * The <code>cells</code> argument contains the array of cells that was
- * removed.
- * 
- * mxEvent.SPLIT_EDGE fires between begin- and endUpdate in splitEdge. The
- * <code>edge</code> property contains the edge to be splitted, the
- * <code>cells</code>, <code>newEdge</code>, <code>dx</code> and
- * <code>dy</code> properties contain the respective arguments that were passed
- * to splitEdge.
- * 
- * mxEvent.TOGGLE_CELLS fires between begin- and endUpdate in toggleCells. The
- * <code>show</code>, <code>cells</code> and <code>includeEdges</code>
- * properties contain the respective arguments that were passed to toggleCells.
- * 
- * mxEvent.FOLD_CELLS fires between begin- and endUpdate in foldCells. The
- * <code>collapse</code>, <code>cells</code> and <code>recurse</code>
- * properties contain the respective arguments that were passed to foldCells.
- * 
- * mxEvent.CELLS_FOLDED fires between begin- and endUpdate in cellsFolded. The
- * <code>collapse</code>, <code>cells</code> and <code>recurse</code>
- * properties contain the respective arguments that were passed to cellsFolded.
- * 
- * mxEvent.UPDATE_CELL_SIZE fires between begin- and endUpdate in
- * updateCellSize. The <code>cell</code> and <code>ignoreChildren</code>
- * properties contain the respective arguments that were passed to
- * updateCellSize.
- * 
- * mxEvent.RESIZE_CELLS fires between begin- and endUpdate in resizeCells. The
- * <code>cells</code> and <code>bounds</code> properties contain the respective
- * arguments that were passed to resizeCells.
- * 
- * mxEvent.CELLS_RESIZED fires between begin- and endUpdate in cellsResized.
- * The <code>cells</code> and <code>bounds</code> properties contain the
- * respective arguments that were passed to cellsResized.
- * 
- * mxEvent.MOVE_CELLS fires between begin- and endUpdate in moveCells. The
- * <code>cells</code>, <code>dx</code>, <code>dy</code>, <code>clone</code>,
- * <code>target</code> and <code>location</code> properties contain the
- * respective arguments that were passed to moveCells.
- * 
- * mxEvent.CELLS_MOVED fires between begin- and endUpdate in cellsMoved. The
- * <code>cells</code>, <code>dx</code>, <code>dy</code> and
- * <code>disconnect</code> properties contain the respective arguments that
- * were passed to cellsMoved.
- * 
- * mxEvent.CONNECT_CELL fires between begin- and endUpdate in connectCell. The
- * <code>edge</code>, <code>terminal</code> and <code>source</code> properties
- * contain the respective arguments that were passed to connectCell.
- * 
- * mxEvent.CELL_CONNECTED fires between begin- and endUpdate in cellConnected.
- * The <code>edge</code>, <code>terminal</code> and <code>source</code>
- * properties contain the respective arguments that were passed to
- * cellConnected.
- * 
- * mxEvent.REPAINT fires if a repaint was requested by calling repaint. The
- * <code>region</code> property contains the optional mxRectangle that was
- * passed to repaint to define the dirty region.
- */
-public class mxGraph 
-{
-
-
-	/**
-	 * Holds the version number of this release. Current version
-	 * is @MXGRAPH-VERSION@.
-	 */
-	public static final String VERSION = "@MXGRAPH-VERSION@";
-class Model {
-	public mxGeometry getGeometry(Object cellParent) {
-		return new mxGeometry(); 
-	}
-
-	public void beginUpdate() {
-		// TODO Auto-generated method stub
-		
-	}
-
-	public void setValue(Object defaultParent, String pageName) {
-		// TODO Auto-generated method stub
-		
-	}
-
-	public Object getRoot() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public HashMap<ShapePageId, mxCell> getCells() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public boolean isEdge(Object c) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	public void endUpdate() {
-		// TODO Auto-generated method stub
-		
-	}
-
-	public void setMaintainEdgeParent(boolean b) {
-		// TODO Auto-generated method stub
-		
-	}
-
-	public int getChildCount(Object parent) {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	public String getStyle(Object parent) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public Object getChildAt(Object cell, int i) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public void remove(Object removeChild) {
-		// TODO Auto-generated method stub
-		
-	}
-
-	public char[] getValue(Object cell) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public boolean isVertex(Object cell) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	public Object getParent(Object c) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-}
-	public Model getModel() {
-		// TODO Auto-generated method stub
-		return new Model();
-	}
-	public Object getDefaultParent() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	public void addCell(Object backCell, Object root, int i, Object object, Object object2) {
-		// TODO Auto-generated method stub
-		
-	}
-	public void setExtendParents(boolean b) {
-		// TODO Auto-generated method stub
-		
-	}
-	public void setExtendParentsOnAdd(boolean b) {
-		// TODO Auto-generated method stub
-		
-	}
-	public void setConstrainChildren(boolean b) {
-		// TODO Auto-generated method stub
-		
-	}
-	public void setHtmlLabels(boolean b) {
-		// TODO Auto-generated method stub
-		
-	}
-	public mxCell insertVertex(Object parent, Object object, Object object2, long l, long m, long n, long o,
-			String style) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	public mxCell insertVertex(Object parent, Object object, Object object2, long l, long m, int i, int j) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	public Object insertEdge(Object parent, Object object, Object object2, mxCell source, mxCell target,
-			String styleString) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	public Object getView() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	public Object createEdge(Object parent, Object object, Object object2, Object object3, Object object4,
-			String styleString) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-	public Object addEdge(Object edge, Object parent, Object object, Object object2, int shapeIndex) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-//	/**
-//	 * 
-//	 */
-//	public interface mxICellVisitor
-//	{
-//
-//		/**
-//		 * 
-//		 * @param vertex
-//		 * @param edge
-//		 */
-//		boolean visit(Object vertex, Object edge);
-//
-//	}
-//
-//	/**
-//	 * Property change event handling.
-//	 */
-//	protected PropertyChangeSupport changeSupport = new PropertyChangeSupport(
-//			this);
-//
-//	/**
-//	 * Holds the model that contains the cells to be displayed.
-//	 */
-//	protected Object model;
-//
-//	/**
-//	 * Holds the view that caches the cell states.
-//	 */
-//
-//	/**
-//	 * Specifies the grid size. Default is 10.
-//	 */
-//	protected int gridSize = 10;
-//
-//	/**
-//	 * Specifies if the grid is enabled. Default is true.
-//	 */
-//	protected boolean gridEnabled = true;
-//
-//	/**
-//	 * Specifies if ports are enabled. This is used in <cellConnected> to update
-//	 * the respective style. Default is true.
-//	 */
-//	protected boolean portsEnabled = true;
-//
-//	/**
-//	 * Value returned by getOverlap if isAllowOverlapParent returns
-//	 * true for the given cell. getOverlap is used in keepInside if
-//	 * isKeepInsideParentOnMove returns true. The value specifies the
-//	 * portion of the child which is allowed to overlap the parent.
-//	 */
-//	protected double defaultOverlap = 0.5;
-//
-//	/**
-//	 * Specifies the default parent to be used to insert new cells.
-//	 * This is used in getDefaultParent. Default is null.
-//	 */
-//	protected Object defaultParent;
-//
-//	/**
-//	 * Specifies the alternate edge style to be used if the main control point
-//	 * on an edge is being doubleclicked. Default is null.
-//	 */
-//	protected String alternateEdgeStyle;
-//
-//	/**
-//	 * Specifies the return value for isEnabled. Default is true.
-//	 */
-//	protected boolean enabled = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Locked. Default is false.
-//	 */
-//	protected boolean cellsLocked = false;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Editable. Default is true.
-//	 */
-//	protected boolean cellsEditable = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Sizable. Default is true.
-//	 */
-//	protected boolean cellsResizable = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Movable. Default is true.
-//	 */
-//	protected boolean cellsMovable = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Bendable. Default is true.
-//	 */
-//	protected boolean cellsBendable = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Selectable. Default is true.
-//	 */
-//	protected boolean cellsSelectable = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Deletable. Default is true.
-//	 */
-//	protected boolean cellsDeletable = true;
-//
-//	/**
-//	 * Specifies the return value for isCell(s)Cloneable. Default is true.
-//	 */
-//	protected boolean cellsCloneable = true;
-//
-//	/**
-//	 * Specifies the return value for isCellDisconntableFromTerminal. Default
-//	 * is true.
-//	 */
-//	protected boolean cellsDisconnectable = true;
-//
-//	/**
-//	 * Specifies the return value for isLabel(s)Clipped. Default is false.
-//	 */
-//	protected boolean labelsClipped = false;
-//
-//	/**
-//	 * Specifies the return value for edges in isLabelMovable. Default is true.
-//	 */
-//	protected boolean edgeLabelsMovable = true;
-//
-//	/**
-//	 * Specifies the return value for vertices in isLabelMovable. Default is false.
-//	 */
-//	protected boolean vertexLabelsMovable = false;
-//
-//	/**
-//	 * Specifies the return value for isDropEnabled. Default is true.
-//	 */
-//	protected boolean dropEnabled = true;
-//
-//	/**
-//	 * Specifies if dropping onto edges should be enabled. Default is true.
-//	 */
-//	protected boolean splitEnabled = true;
-//
-//	/**
-//	 * Specifies if the graph should automatically update the cell size
-//	 * after an edit. This is used in isAutoSizeCell. Default is false.
-//	 */
-//	protected boolean autoSizeCells = false;
-//
-//	/**
-//	 * <mxRectangle> that specifies the area in which all cells in the
-//	 * diagram should be placed. Uses in getMaximumGraphBounds. Use a width
-//	 * or height of 0 if you only want to give a upper, left corner.
-//	 */
-//	protected mxRectangle maximumGraphBounds = null;
-//
-//	/**
-//	 * mxRectangle that specifies the minimum size of the graph canvas inside
-//	 * the scrollpane.
-//	 */
-//	protected mxRectangle minimumGraphSize = null;
-//
-//	/**
-//	 * Border to be added to the bottom and right side when the container is
-//	 * being resized after the graph has been changed. Default is 0.
-//	 */
-//	protected int border = 0;
-//
-//	/**
-//	 * Specifies if edges should appear in the foreground regardless of their
-//	 * order in the model. This has precendence over keepEdgeInBackground
-//	 * Default is false.
-//	 */
-//	protected boolean keepEdgesInForeground = false;
-//
-//	/**
-//	 * Specifies if edges should appear in the background regardless of their
-//	 * order in the model. Default is false.
-//	 */
-//	protected boolean keepEdgesInBackground = false;
-//
-//	/**
-//	 * Specifies if the cell size should be changed to the preferred size when
-//	 * a cell is first collapsed. Default is true.
-//	 */
-//	protected boolean collapseToPreferredSize = true;
-//
-//	/**
-//	 * Specifies if negative coordinates for vertices are allowed. Default is true.
-//	 */
-//	protected boolean allowNegativeCoordinates = true;
-//
-//	/**
-//	 * Specifies the return value for isConstrainChildren. Default is true.
-//	 */
-//	protected boolean constrainChildren = true;
-//
-//	/**
-//	 * Specifies if a parent should contain the child bounds after a resize of
-//	 * the child. Default is true.
-//	 */
-//	protected boolean extendParents = true;
-//
-//	/**
-//	 * Specifies if parents should be extended according to the <extendParents>
-//	 * switch if cells are added. Default is true.
-//	 */
-//	protected boolean extendParentsOnAdd = true;
-//
-//	/**
-//	 * Specifies if the scale and translate should be reset if
-//	 * the root changes in the model. Default is true.
-//	 */
-//	protected boolean resetViewOnRootChange = true;
-//
-//	/**
-//	 * Specifies if loops (aka self-references) are allowed.
-//	 * Default is false.
-//	 */
-//	protected boolean resetEdgesOnResize = false;
-//
-//	/**
-//	 * Specifies if edge control points should be reset after
-//	 * the move of a connected cell. Default is false.
-//	 */
-//	protected boolean resetEdgesOnMove = false;
-//
-//	/**
-//	 * Specifies if edge control points should be reset after
-//	 * the the edge has been reconnected. Default is true.
-//	 */
-//	protected boolean resetEdgesOnConnect = true;
-//
-//	/**
-//	 * Specifies if loops (aka self-references) are allowed.
-//	 * Default is false.
-//	 */
-//	protected boolean allowLoops = false;
-//
-//	/**
-//	 * Specifies the multiplicities to be used for validation of the graph.
-//	 */
-//
-//	/**
-//	 * Specifies if multiple edges in the same direction between
-//	 * the same pair of vertices are allowed. Default is true.
-//	 */
-//	protected boolean multigraph = true;
-//
-//	/**
-//	 * Specifies if edges are connectable. Default is false.
-//	 * This overrides the connectable field in edges.
-//	 */
-//	protected boolean connectableEdges = false;
-//
-//	/**
-//	 * Specifies if edges with disconnected terminals are
-//	 * allowed in the graph. Default is false.
-//	 */
-//	protected boolean allowDanglingEdges = true;
-//
-//	/**
-//	 * Specifies if edges that are cloned should be validated and only inserted
-//	 * if they are valid. Default is true.
-//	 */
-//	protected boolean cloneInvalidEdges = false;
-//
-//	/**
-//	 * Specifies if edges should be disconnected from their terminals when they
-//	 * are moved. Default is true.
-//	 */
-//	protected boolean disconnectOnMove = true;
-//
-//	/**
-//	 * Specifies if labels should be visible. This is used in
-//	 * getLabel. Default is true.
-//	 */
-//	protected boolean labelsVisible = true;
-//
-//	/**
-//	 * Specifies the return value for isHtmlLabel. Default is false.
-//	 */
-//	protected boolean htmlLabels = false;
-//
-//	/**
-//	 * Specifies if nesting of swimlanes is allowed. Default is true.
-//	 */
-//	protected boolean swimlaneNesting = true;
-//
-//	/**
-//	 * Specifies the maximum number of changes that should be processed to find
-//	 * the dirty region. If the number of changes is larger, then the complete
-//	 * grah is repainted. A value of zero will always compute the dirty region
-//	 * for any number of changes. Default is 1000.
-//	 */
-//	protected int changesRepaintThreshold = 1000;
-//
-//	/**
-//	 * Specifies if the origin should be automatically updated. 
-//	 */
-//	protected boolean autoOrigin = false;
-//
-//	/**
-//	 * Holds the current automatic origin.
-//	 */
-//	protected mxPoint origin = new mxPoint();
-//
-//	/**
-//	 * Holds the list of bundles.
-//	 */
-//
-//	/**
-//	 * Constructs a new graph with an empty
-//	 * {@link com.mxgraph.model.mxGraphModel}.
-//	 */
-//	public mxGraph()
-//	{
-//	}
-//
-//	/**
-//	 * Constructs a new graph for the specified model. If no model is
-//	 * specified, then a new, empty {@link com.mxgraph.model.mxGraphModel} is
-//	 * used.
-//	 * 
-//	 * @param model Model that contains the graph data
-//	 */
-//
-//	/**
-//	 * Constructs a new graph for the specified model. If no model is
-//	 * specified, then a new, empty {@link com.mxgraph.model.mxGraphModel} is
-//	 * used.
-//	 * 
-//	 * @param stylesheet The stylesheet to use for the graph.
-//	 */
-//
-//	/**
-//	 * Constructs a new graph for the specified model. If no model is
-//	 * specified, then a new, empty {@link com.mxgraph.model.mxGraphModel} is
-//	 * used.
-//	 * 
-//	 * @param model Model that contains the graph data
-//	 */
-//	/**
-//	 * Returns cellsLocked, the default return value for isCellLocked.
-//	 */
-//	public boolean isCellsLocked()
-//	{
-//		return cellsLocked;
-//	}
-//
-//	/**
-//	 * Sets cellsLocked, the default return value for isCellLocked and fires a
-//	 * property change event for cellsLocked.
-//	 */
-//	public void setCellsLocked(boolean value)
-//	{
-//		boolean oldValue = cellsLocked;
-//		cellsLocked = value;
-//
-//		changeSupport.firePropertyChange("cellsLocked", oldValue, cellsLocked);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is movable. This implementation returns editable.
-//	 * 
-//	 * @param cell Cell whose editable state should be returned.
-//	 * @return Returns true if the cell is editable.
-//	 */
-//	public boolean isCellEditable(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isCellsEditable() && !isCellLocked(cell)
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_EDITABLE, true);
-//	}
-//
-//	/**
-//	 * Returns true if editing is allowed in this graph.
-//	 * 
-//	 * @return Returns true if the graph is editable.
-//	 */
-//	public boolean isCellsEditable()
-//	{
-//		return cellsEditable;
-//	}
-//
-//	/**
-//	 * Sets if the graph is editable.
-//	 */
-//	public void setCellsEditable(boolean value)
-//	{
-//		boolean oldValue = cellsEditable;
-//		cellsEditable = value;
-//
-//		changeSupport.firePropertyChange("cellsEditable", oldValue,
-//				cellsEditable);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is resizable. This implementation returns
-//	 * cellsSizable for all cells.
-//	 * 
-//	 * @param cell Cell whose resizable state should be returned.
-//	 * @return Returns true if the cell is sizable.
-//	 */
-//	public boolean isCellResizable(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isCellsResizable() && !isCellLocked(cell)
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_RESIZABLE, true);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is resizable. This implementation return sizable.
-//	 */
-//	public boolean isCellsResizable()
-//	{
-//		return cellsResizable;
-//	}
-//
-//	/**
-//	 * Sets if the graph is resizable.
-//	 */
-//	public void setCellsResizable(boolean value)
-//	{
-//		boolean oldValue = cellsResizable;
-//		cellsResizable = value;
-//
-//		changeSupport.firePropertyChange("cellsResizable", oldValue,
-//				cellsResizable);
-//	}
-//
-//	/**
-//	 * Returns the cells which are movable in the given array of cells.
-//	 */
-//	public Object[] getMovableCells(Object[] cells)
-//	{
-//		return mxGraphModel.filterCells(cells, new Filter()
-//		{
-//			public boolean filter(Object cell)
-//			{
-//				return isCellMovable(cell);
-//			}
-//		});
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is movable. This implementation
-//	 * returns movable.
-//	 * 
-//	 * @param cell Cell whose movable state should be returned.
-//	 * @return Returns true if the cell is movable.
-//	 */
-//	public boolean isCellMovable(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isCellsMovable() && !isCellLocked(cell)
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_MOVABLE, true);
-//	}
-//
-//	/**
-//	 * Returns cellsMovable.
-//	 */
-//	public boolean isCellsMovable()
-//	{
-//		return cellsMovable;
-//	}
-//
-//	/**
-//	 * Sets cellsMovable.
-//	 */
-//	public void setCellsMovable(boolean value)
-//	{
-//		boolean oldValue = cellsMovable;
-//		cellsMovable = value;
-//
-//		changeSupport
-//				.firePropertyChange("cellsMovable", oldValue, cellsMovable);
-//	}
-//
-//	/**
-//	 * Function: isTerminalPointMovable
-//	 *
-//	 * Returns true if the given terminal point is movable. This is independent
-//	 * from isCellConnectable and isCellDisconnectable and controls if terminal
-//	 * points can be moved in the graph if the edge is not connected. Note that
-//	 * it is required for this to return true to connect unconnected edges.
-//	 * This implementation returns true.
-//	 * 
-//	 * @param cell Cell whose terminal point should be moved.
-//	 * @param source Boolean indicating if the source or target terminal should be moved.
-//	 */
-//	public boolean isTerminalPointMovable(Object cell, boolean source)
-//	{
-//		return true;
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is bendable. This implementation returns
-//	 * bendable. This is used in mxElbowEdgeHandler to determine if the middle
-//	 * handle should be shown.
-//	 * 
-//	 * @param cell Cell whose bendable state should be returned.
-//	 * @return Returns true if the cell is bendable.
-//	 */
-//	public boolean isCellBendable(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isCellsBendable() && !isCellLocked(cell)
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_BENDABLE, true);
-//	}
-//
-//	/**
-//	 * Returns cellsBendable.
-//	 */
-//	public boolean isCellsBendable()
-//	{
-//		return cellsBendable;
-//	}
-//
-//	/**
-//	 * Sets cellsBendable.
-//	 */
-//	public void setCellsBendable(boolean value)
-//	{
-//		boolean oldValue = cellsBendable;
-//		cellsBendable = value;
-//
-//		changeSupport.firePropertyChange("cellsBendable", oldValue,
-//				cellsBendable);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is selectable. This implementation returns
-//	 * <selectable>.
-//	 * 
-//	 * @param cell <mxCell> whose selectable state should be returned.
-//	 * @return Returns true if the given cell is selectable.
-//	 */
-//	public boolean isCellSelectable(Object cell)
-//	{
-//		return isCellsSelectable();
-//	}
-//
-//	/**
-//	 * Returns cellsSelectable.
-//	 */
-//	public boolean isCellsSelectable()
-//	{
-//		return cellsSelectable;
-//	}
-//
-//	/**
-//	 * Sets cellsSelectable.
-//	 */
-//	public void setCellsSelectable(boolean value)
-//	{
-//		boolean oldValue = cellsSelectable;
-//		cellsSelectable = value;
-//
-//		changeSupport.firePropertyChange("cellsSelectable", oldValue,
-//				cellsSelectable);
-//	}
-//
-//	/**
-//	 * Returns the cells which are movable in the given array of cells.
-//	 */
-//	public Object[] getDeletableCells(Object[] cells)
-//	{
-//		return mxGraphModel.filterCells(cells, new Filter()
-//		{
-//			public boolean filter(Object cell)
-//			{
-//				return isCellDeletable(cell);
-//			}
-//		});
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is movable. This implementation always
-//	 * returns true.
-//	 * 
-//	 * @param cell Cell whose movable state should be returned.
-//	 * @return Returns true if the cell is movable.
-//	 */
-//	public boolean isCellDeletable(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isCellsDeletable()
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_DELETABLE, true);
-//	}
-//
-//	/**
-//	 * Returns cellsDeletable.
-//	 */
-//	public boolean isCellsDeletable()
-//	{
-//		return cellsDeletable;
-//	}
-//
-//	/**
-//	 * Sets cellsDeletable.
-//	 */
-//	public void setCellsDeletable(boolean value)
-//	{
-//		boolean oldValue = cellsDeletable;
-//		cellsDeletable = value;
-//
-//		changeSupport.firePropertyChange("cellsDeletable", oldValue,
-//				cellsDeletable);
-//	}
-//
-//	/**
-//	 * Returns the cells which are movable in the given array of cells.
-//	 */
-//	public Object[] getCloneableCells(Object[] cells)
-//	{
-//		return mxGraphModel.filterCells(cells, new Filter()
-//		{
-//			public boolean filter(Object cell)
-//			{
-//				return isCellCloneable(cell);
-//			}
-//		});
-//	}
-//
-//	/**
-//	 * Returns the constant true. This does not use the cloneable field to
-//	 * return a value for a given cell, it is simply a hook for subclassers
-//	 * to disallow cloning of individual cells.
-//	 */
-//	public boolean isCellCloneable(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isCellsCloneable()
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_CLONEABLE, true);
-//	}
-//
-//	/**
-//	 * Returns cellsCloneable.
-//	 */
-//	public boolean isCellsCloneable()
-//	{
-//		return cellsCloneable;
-//	}
-//
-//	/**
-//	 * Specifies if the graph should allow cloning of cells by holding down the
-//	 * control key while cells are being moved. This implementation updates
-//	 * cellsCloneable.
-//	 *
-//	 * @param value Boolean indicating if the graph should be cloneable.
-//	 */
-//	public void setCellsCloneable(boolean value)
-//	{
-//		boolean oldValue = cellsCloneable;
-//		cellsCloneable = value;
-//
-//		changeSupport.firePropertyChange("cellsCloneable", oldValue,
-//				cellsCloneable);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is disconnectable from the source or
-//	 * target terminal. This returns <disconnectable> for all given cells if
-//	 * <isLocked> does not return true for the given cell.
-//	 * 
-//	 * @param cell <mxCell> whose disconnectable state should be returned.
-//	 * @param terminal <mxCell> that represents the source or target terminal.
-//	 * @param source Boolean indicating if the source or target terminal is to be
-//	 * disconnected.
-//	 * @return Returns true if the given edge can be disconnected from the given
-//	 * terminal.
-//	 */
-//	public boolean isCellDisconnectable(Object cell, Object terminal,
-//			boolean source)
-//	{
-//		return isCellsDisconnectable() && !isCellLocked(cell);
-//	}
-//
-//	/**
-//	 * Returns cellsDisconnectable.
-//	 */
-//	public boolean isCellsDisconnectable()
-//	{
-//		return cellsDisconnectable;
-//	}
-//
-//	/**
-//	 * Sets cellsDisconnectable.
-//	 * 
-//	 * @param value Boolean indicating if the graph should allow disconnecting of
-//	 * edges.
-//	 */
-//	public void setCellsDisconnectable(boolean value)
-//	{
-//		boolean oldValue = cellsDisconnectable;
-//		cellsDisconnectable = value;
-//
-//		changeSupport.firePropertyChange("cellsDisconnectable", oldValue,
-//				cellsDisconnectable);
-//	}
-//
-//	/**
-//	 * Returns true if the overflow portion of labels should be hidden. If this
-//	 * returns true then vertex labels will be clipped to the size of the vertices.
-//	 * This implementation returns true if <mxConstants.STYLE_OVERFLOW> in the
-//	 * style of the given cell is "hidden".
-//	 * 
-//	 * @param cell Cell whose label should be clipped.
-//	 * @return Returns true if the cell label should be clipped.
-//	 */
-//	public boolean isLabelClipped(Object cell)
-//	{
-//		if (!isLabelsClipped())
-//		{
-//			mxCellState state = view.getState(cell);
-//			Map<String, Object> style = (state != null) ? state.getStyle()
-//					: getCellStyle(cell);
-//
-//			return (style != null) ? mxUtils.getString(style,
-//					mxConstants.STYLE_OVERFLOW, "").equals("hidden") : false;
-//		}
-//
-//		return isLabelsClipped();
-//	}
-//
-//	/**
-//	 * Returns labelsClipped.
-//	 */
-//	public boolean isLabelsClipped()
-//	{
-//		return labelsClipped;
-//	}
-//
-//	/**
-//	 * Sets labelsClipped.
-//	 */
-//	public void setLabelsClipped(boolean value)
-//	{
-//		boolean oldValue = labelsClipped;
-//		labelsClipped = value;
-//
-//		changeSupport.firePropertyChange("labelsClipped", oldValue,
-//				labelsClipped);
-//	}
-//
-//	/**
-//	 * Returns true if the given edges's label is moveable. This returns
-//	 * <movable> for all given cells if <isLocked> does not return true
-//	 * for the given cell.
-//	 * 
-//	 * @param cell <mxCell> whose label should be moved.
-//	 * @return Returns true if the label of the given cell is movable.
-//	 */
-//	public boolean isLabelMovable(Object cell)
-//	{
-//		return !isCellLocked(cell)
-//				&& ((model.isEdge(cell) && isEdgeLabelsMovable()) || (model
-//						.isVertex(cell) && isVertexLabelsMovable()));
-//	}
-//
-//	/**
-//	 * Returns vertexLabelsMovable.
-//	 */
-//	public boolean isVertexLabelsMovable()
-//	{
-//		return vertexLabelsMovable;
-//	}
-//
-//	/**
-//	 * Sets vertexLabelsMovable.
-//	 */
-//	public void setVertexLabelsMovable(boolean value)
-//	{
-//		boolean oldValue = vertexLabelsMovable;
-//		vertexLabelsMovable = value;
-//
-//		changeSupport.firePropertyChange("vertexLabelsMovable", oldValue,
-//				vertexLabelsMovable);
-//	}
-//
-//	/**
-//	 * Returns edgeLabelsMovable.
-//	 */
-//	public boolean isEdgeLabelsMovable()
-//	{
-//		return edgeLabelsMovable;
-//	}
-//
-//	/**
-//	 * Returns edgeLabelsMovable.
-//	 */
-//	public void setEdgeLabelsMovable(boolean value)
-//	{
-//		boolean oldValue = edgeLabelsMovable;
-//		edgeLabelsMovable = value;
-//
-//		changeSupport.firePropertyChange("edgeLabelsMovable", oldValue,
-//				edgeLabelsMovable);
-//	}
-//
-//	//
-//	// Graph control options
-//	//
-//
-//	/**
-//	 * Returns true if the graph is <enabled>.
-//	 * 
-//	 * @return Returns true if the graph is enabled.
-//	 */
-//	public boolean isEnabled()
-//	{
-//		return enabled;
-//	}
-//
-//	/**
-//	 * Specifies if the graph should allow any interactions. This
-//	 * implementation updates <enabled>.
-//	 * 
-//	 * @param value Boolean indicating if the graph should be enabled.
-//	 */
-//	public void setEnabled(boolean value)
-//	{
-//		boolean oldValue = enabled;
-//		enabled = value;
-//
-//		changeSupport.firePropertyChange("enabled", oldValue, enabled);
-//	}
-//
-//	/**
-//	 * Returns true if the graph allows drop into other cells.
-//	 */
-//	public boolean isDropEnabled()
-//	{
-//		return dropEnabled;
-//	}
-//
-//	/**
-//	 * Sets dropEnabled.
-//	 */
-//	public void setDropEnabled(boolean value)
-//	{
-//		boolean oldValue = dropEnabled;
-//		dropEnabled = value;
-//
-//		changeSupport.firePropertyChange("dropEnabled", oldValue, dropEnabled);
-//	}
-//
-//	/**
-//	 * Affects the return values of isValidDropTarget to allow for edges as
-//	 * drop targets. The splitEdge method is called in mxGraphHandler if
-//	 * mxGraphComponent.isSplitEvent returns true for a given configuration.
-//	 */
-//	public boolean isSplitEnabled()
-//	{
-//		return splitEnabled;
-//	}
-//
-//	/**
-//	 * Sets splitEnabled.
-//	 */
-//	public void setSplitEnabled(boolean value)
-//	{
-//		splitEnabled = value;
-//	}
-//
-//	/**
-//	 * Returns multigraph.
-//	 */
-//	public boolean isMultigraph()
-//	{
-//		return multigraph;
-//	}
-//
-//	/**
-//	 * Sets multigraph.
-//	 */
-//	public void setMultigraph(boolean value)
-//	{
-//		boolean oldValue = multigraph;
-//		multigraph = value;
-//
-//		changeSupport.firePropertyChange("multigraph", oldValue, multigraph);
-//	}
-//
-//	/**
-//	 * Returns swimlaneNesting.
-//	 */
-//	public boolean isSwimlaneNesting()
-//	{
-//		return swimlaneNesting;
-//	}
-//
-//	/**
-//	 * Sets swimlaneNesting.
-//	 */
-//	public void setSwimlaneNesting(boolean value)
-//	{
-//		boolean oldValue = swimlaneNesting;
-//		swimlaneNesting = value;
-//
-//		changeSupport.firePropertyChange("swimlaneNesting", oldValue,
-//				swimlaneNesting);
-//	}
-//
-//	/**
-//	 * Returns allowDanglingEdges
-//	 */
-//	public boolean isAllowDanglingEdges()
-//	{
-//		return allowDanglingEdges;
-//	}
-//
-//	/**
-//	 * Sets allowDanglingEdges.
-//	 */
-//	public void setAllowDanglingEdges(boolean value)
-//	{
-//		boolean oldValue = allowDanglingEdges;
-//		allowDanglingEdges = value;
-//
-//		changeSupport.firePropertyChange("allowDanglingEdges", oldValue,
-//				allowDanglingEdges);
-//	}
-//
-//	/**
-//	 * Returns cloneInvalidEdges.
-//	 */
-//	public boolean isCloneInvalidEdges()
-//	{
-//		return cloneInvalidEdges;
-//	}
-//
-//	/**
-//	 * Sets cloneInvalidEdge.
-//	 */
-//	public void setCloneInvalidEdges(boolean value)
-//	{
-//		boolean oldValue = cloneInvalidEdges;
-//		cloneInvalidEdges = value;
-//
-//		changeSupport.firePropertyChange("cloneInvalidEdges", oldValue,
-//				cloneInvalidEdges);
-//	}
-//
-//	/**
-//	 * Returns disconnectOnMove
-//	 */
-//	public boolean isDisconnectOnMove()
-//	{
-//		return disconnectOnMove;
-//	}
-//
-//	/**
-//	 * Sets disconnectOnMove.
-//	 */
-//	public void setDisconnectOnMove(boolean value)
-//	{
-//		boolean oldValue = disconnectOnMove;
-//		disconnectOnMove = value;
-//
-//		changeSupport.firePropertyChange("disconnectOnMove", oldValue,
-//				disconnectOnMove);
-//
-//	}
-//
-//	/**
-//	 * Returns allowLoops.
-//	 */
-//	public boolean isAllowLoops()
-//	{
-//		return allowLoops;
-//	}
-//
-//	/**
-//	 * Sets allowLoops.
-//	 */
-//	public void setAllowLoops(boolean value)
-//	{
-//		boolean oldValue = allowLoops;
-//		allowLoops = value;
-//
-//		changeSupport.firePropertyChange("allowLoops", oldValue, allowLoops);
-//	}
-//
-//	/**
-//	 * Returns connectableEdges.
-//	 */
-//	public boolean isConnectableEdges()
-//	{
-//		return connectableEdges;
-//	}
-//
-//	/**
-//	 * Sets connetableEdges.
-//	 */
-//	public void setConnectableEdges(boolean value)
-//	{
-//		boolean oldValue = connectableEdges;
-//		connectableEdges = value;
-//
-//		changeSupport.firePropertyChange("connectableEdges", oldValue,
-//				connectableEdges);
-//
-//	}
-//
-//	/**
-//	 * Returns resetEdgesOnMove.
-//	 */
-//	public boolean isResetEdgesOnMove()
-//	{
-//		return resetEdgesOnMove;
-//	}
-//
-//	/**
-//	 * Sets resetEdgesOnMove.
-//	 */
-//	public void setResetEdgesOnMove(boolean value)
-//	{
-//		boolean oldValue = resetEdgesOnMove;
-//		resetEdgesOnMove = value;
-//
-//		changeSupport.firePropertyChange("resetEdgesOnMove", oldValue,
-//				resetEdgesOnMove);
-//	}
-//
-//	/**
-//	 * Returns resetViewOnRootChange.
-//	 */
-//	public boolean isResetViewOnRootChange()
-//	{
-//		return resetViewOnRootChange;
-//	}
-//
-//	/**
-//	 * Sets resetEdgesOnResize.
-//	 */
-//	public void setResetViewOnRootChange(boolean value)
-//	{
-//		boolean oldValue = resetViewOnRootChange;
-//		resetViewOnRootChange = value;
-//
-//		changeSupport.firePropertyChange("resetViewOnRootChange", oldValue,
-//				resetViewOnRootChange);
-//	}
-//
-//	/**
-//	 * Returns resetEdgesOnResize.
-//	 */
-//	public boolean isResetEdgesOnResize()
-//	{
-//		return resetEdgesOnResize;
-//	}
-//
-//	/**
-//	 * Sets resetEdgesOnResize.
-//	 */
-//	public void setResetEdgesOnResize(boolean value)
-//	{
-//		boolean oldValue = resetEdgesOnResize;
-//		resetEdgesOnResize = value;
-//
-//		changeSupport.firePropertyChange("resetEdgesOnResize", oldValue,
-//				resetEdgesOnResize);
-//	}
-//
-//	/**
-//	 * Returns resetEdgesOnConnect.
-//	 */
-//	public boolean isResetEdgesOnConnect()
-//	{
-//		return resetEdgesOnConnect;
-//	}
-//
-//	/**
-//	 * Sets resetEdgesOnConnect.
-//	 */
-//	public void setResetEdgesOnConnect(boolean value)
-//	{
-//		boolean oldValue = resetEdgesOnConnect;
-//		resetEdgesOnConnect = value;
-//
-//		changeSupport.firePropertyChange("resetEdgesOnConnect", oldValue,
-//				resetEdgesOnResize);
-//	}
-//
-//	/**
-//	 * Returns true if the size of the given cell should automatically be
-//	 * updated after a change of the label. This implementation returns
-//	 * autoSize for all given cells or checks if the cell style does specify
-//	 * mxConstants.STYLE_AUTOSIZE to be 1.
-//	 * 
-//	 * @param cell Cell that should be resized.
-//	 * @return Returns true if the size of the given cell should be updated.
-//	 */
-//	public boolean isAutoSizeCell(Object cell)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return isAutoSizeCells()
-//				|| mxUtils.isTrue(style, mxConstants.STYLE_AUTOSIZE, false);
-//	}
-//
-//	/**
-//	 * Returns true if the size of the given cell should automatically be
-//	 * updated after a change of the label. This implementation returns
-//	 * autoSize for all given cells.
-//	 */
-//	public boolean isAutoSizeCells()
-//	{
-//		return autoSizeCells;
-//	}
-//
-//	/**
-//	 * Specifies if cell sizes should be automatically updated after a label
-//	 * change. This implementation sets autoSize to the given parameter.
-//	 * 
-//	 * @param value Boolean indicating if cells should be resized
-//	 * automatically.
-//	 */
-//	public void setAutoSizeCells(boolean value)
-//	{
-//		boolean oldValue = autoSizeCells;
-//		autoSizeCells = value;
-//
-//		changeSupport.firePropertyChange("autoSizeCells", oldValue,
-//				autoSizeCells);
-//	}
-//
-//	/**
-//	 * Returns true if the parent of the given cell should be extended if the
-//	 * child has been resized so that it overlaps the parent. This
-//		 * implementation returns ExtendParents if cell is not an edge.
-//	 * 
-//	 * @param cell Cell that has been resized.
-//	 */
-//	public boolean isExtendParent(Object cell)
-//	{
-//		return !getModel().isEdge(cell) && isExtendParents();
-//	}
-//
-//	/**
-//	 * Returns extendParents.
-//	 */
-//	public boolean isExtendParents()
-//	{
-//		return extendParents;
-//	}
-//
-//	/**
-//	 * Sets extendParents.
-//	 */
-//	public void setExtendParents(boolean value)
-//	{
-//		boolean oldValue = extendParents;
-//		extendParents = value;
-//
-//		changeSupport.firePropertyChange("extendParents", oldValue,
-//				extendParents);
-//	}
-//
-//	/**
-//	 * Returns extendParentsOnAdd.
-//	 */
-//	public boolean isExtendParentsOnAdd()
-//	{
-//		return extendParentsOnAdd;
-//	}
-//
-//	/**
-//	 * Sets extendParentsOnAdd.
-//	 */
-//	public void setExtendParentsOnAdd(boolean value)
-//	{
-//		boolean oldValue = extendParentsOnAdd;
-//		extendParentsOnAdd = value;
-//
-//		changeSupport.firePropertyChange("extendParentsOnAdd", oldValue,
-//				extendParentsOnAdd);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell should be kept inside the bounds of its
-//	 * parent according to the rules defined by getOverlap and
-//	 * isAllowOverlapParent. This implementation returns false for all children
-//	 * of edges and isConstrainChildren() otherwise.
-//	 */
-//	public boolean isConstrainChild(Object cell)
-//	{
-//		return isConstrainChildren()
-//				&& !getModel().isEdge(getModel().getParent(cell));
-//	}
-//
-//	/**
-//	 * Returns constrainChildren.
-//	 * 
-//	 * @return the keepInsideParentOnMove
-//	 */
-//	public boolean isConstrainChildren()
-//	{
-//		return constrainChildren;
-//	}
-//
-//	/**
-//	 * @param value the constrainChildren to set
-//	 */
-//	public void setConstrainChildren(boolean value)
-//	{
-//		boolean oldValue = constrainChildren;
-//		constrainChildren = value;
-//
-//		changeSupport.firePropertyChange("constrainChildren", oldValue,
-//				constrainChildren);
-//	}
-//
-//	/**
-//	 * Returns autoOrigin.
-//	 */
-//	public boolean isAutoOrigin()
-//	{
-//		return autoOrigin;
-//	}
-//
-//	/**
-//	 * @param value the autoOrigin to set
-//	 */
-//	public void setAutoOrigin(boolean value)
-//	{
-//		boolean oldValue = autoOrigin;
-//		autoOrigin = value;
-//
-//		changeSupport.firePropertyChange("autoOrigin", oldValue, autoOrigin);
-//	}
-//
-//	/**
-//	 * Returns origin.
-//	 */
-//	public mxPoint getOrigin()
-//	{
-//		return origin;
-//	}
-//
-//	/**
-//	 * @param value the origin to set
-//	 */
-//	public void setOrigin(mxPoint value)
-//	{
-//		mxPoint oldValue = origin;
-//		origin = value;
-//
-//		changeSupport.firePropertyChange("origin", oldValue, origin);
-//	}
-//
-//	/**
-//	 * @return Returns changesRepaintThreshold.
-//	 */
-//	public int getChangesRepaintThreshold()
-//	{
-//		return changesRepaintThreshold;
-//	}
-//
-//	/**
-//	 * @param value the changesRepaintThreshold to set
-//	 */
-//	public void setChangesRepaintThreshold(int value)
-//	{
-//		int oldValue = changesRepaintThreshold;
-//		changesRepaintThreshold = value;
-//
-//		changeSupport.firePropertyChange("changesRepaintThreshold", oldValue,
-//				changesRepaintThreshold);
-//	}
-//
-//	/**
-//	 * Returns isAllowNegativeCoordinates.
-//	 * 
-//	 * @return the allowNegativeCoordinates
-//	 */
-//	public boolean isAllowNegativeCoordinates()
-//	{
-//		return allowNegativeCoordinates;
-//	}
-//
-//	/**
-//	 * @param value the allowNegativeCoordinates to set
-//	 */
-//	public void setAllowNegativeCoordinates(boolean value)
-//	{
-//		boolean oldValue = allowNegativeCoordinates;
-//		allowNegativeCoordinates = value;
-//
-//		changeSupport.firePropertyChange("allowNegativeCoordinates", oldValue,
-//				allowNegativeCoordinates);
-//	}
-//
-//	/**
-//	 * Returns collapseToPreferredSize.
-//	 * 
-//	 * @return the collapseToPreferredSize
-//	 */
-//	public boolean isCollapseToPreferredSize()
-//	{
-//		return collapseToPreferredSize;
-//	}
-//
-//	/**
-//	 * @param value the collapseToPreferredSize to set
-//	 */
-//	public void setCollapseToPreferredSize(boolean value)
-//	{
-//		boolean oldValue = collapseToPreferredSize;
-//		collapseToPreferredSize = value;
-//
-//		changeSupport.firePropertyChange("collapseToPreferredSize", oldValue,
-//				collapseToPreferredSize);
-//	}
-//
-//	/**
-//	 * @return Returns true if edges are rendered in the foreground.
-//	 */
-//	public boolean isKeepEdgesInForeground()
-//	{
-//		return keepEdgesInForeground;
-//	}
-//
-//	/**
-//	 * @param value the keepEdgesInForeground to set
-//	 */
-//	public void setKeepEdgesInForeground(boolean value)
-//	{
-//		boolean oldValue = keepEdgesInForeground;
-//		keepEdgesInForeground = value;
-//
-//		changeSupport.firePropertyChange("keepEdgesInForeground", oldValue,
-//				keepEdgesInForeground);
-//	}
-//
-//	/**
-//	 * @return Returns true if edges are rendered in the background.
-//	 */
-//	public boolean isKeepEdgesInBackground()
-//	{
-//		return keepEdgesInBackground;
-//	}
-//
-//	/**
-//	 * @param value the keepEdgesInBackground to set
-//	 */
-//	public void setKeepEdgesInBackground(boolean value)
-//	{
-//		boolean oldValue = keepEdgesInBackground;
-//		keepEdgesInBackground = value;
-//
-//		changeSupport.firePropertyChange("keepEdgesInBackground", oldValue,
-//				keepEdgesInBackground);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is a valid source for new connections.
-//	 * This implementation returns true for all non-null values and is
-//	 * called by is called by <isValidConnection>.
-//	 * 
-//	 * @param cell Object that represents a possible source or null.
-//	 * @return Returns true if the given cell is a valid source terminal.
-//	 */
-//	public boolean isValidSource(Object cell)
-//	{
-//		return (cell == null && allowDanglingEdges)
-//				|| (cell != null
-//						&& (!model.isEdge(cell) || isConnectableEdges()) && isCellConnectable(cell));
-//	}
-//
-//	/**
-//	 * Returns isValidSource for the given cell. This is called by
-//	 * isValidConnection.
-//	 *
-//	 * @param cell Object that represents a possible target or null.
-//	 * @return Returns true if the given cell is a valid target.
-//	 */
-//	public boolean isValidTarget(Object cell)
-//	{
-//		return isValidSource(cell);
-//	}
-//
-//	/**
-//	 * Returns true if the given target cell is a valid target for source.
-//	 * This is a boolean implementation for not allowing connections between
-//	 * certain pairs of vertices and is called by <getEdgeValidationError>.
-//	 * This implementation returns true if <isValidSource> returns true for
-//	 * the source and <isValidTarget> returns true for the target.
-//	 * 
-//	 * @param source Object that represents the source cell.
-//	 * @param target Object that represents the target cell.
-//	 * @return Returns true if the the connection between the given terminals
-//	 * is valid.
-//	 */
-//	public boolean isValidConnection(Object source, Object target)
-//	{
-//		return isValidSource(source) && isValidTarget(target)
-//				&& (isAllowLoops() || source != target);
-//	}
-//
-//	/**
-//	 * Returns the minimum size of the diagram.
-//	 * 
-//	 * @return Returns the minimum container size.
-//	 */
-//	public mxRectangle getMinimumGraphSize()
-//	{
-//		return minimumGraphSize;
-//	}
-//
-//	/**
-//	 * @param value the minimumGraphSize to set
-//	 */
-//	public void setMinimumGraphSize(mxRectangle value)
-//	{
-//		mxRectangle oldValue = minimumGraphSize;
-//		minimumGraphSize = value;
-//
-//		changeSupport.firePropertyChange("minimumGraphSize", oldValue, value);
-//	}
-//
-//	/**
-//	 * Returns a decimal number representing the amount of the width and height
-//	 * of the given cell that is allowed to overlap its parent. A value of 0
-//	 * means all children must stay inside the parent, 1 means the child is
-//	 * allowed to be placed outside of the parent such that it touches one of
-//	 * the parents sides. If <isAllowOverlapParent> returns false for the given
-//	 * cell, then this method returns 0.
-//	 * 
-//	 * @param cell
-//	 * @return Returns the overlapping value for the given cell inside its
-//	 * parent.
-//	 */
-//	public double getOverlap(Object cell)
-//	{
-//		return (isAllowOverlapParent(cell)) ? getDefaultOverlap() : 0;
-//	}
-//
-//	/**
-//	 * Gets defaultOverlap.
-//	 */
-//	public double getDefaultOverlap()
-//	{
-//		return defaultOverlap;
-//	}
-//
-//	/**
-//	 * Sets defaultOverlap.
-//	 */
-//	public void setDefaultOverlap(double value)
-//	{
-//		double oldValue = defaultOverlap;
-//		defaultOverlap = value;
-//
-//		changeSupport.firePropertyChange("defaultOverlap", oldValue, value);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is allowed to be placed outside of the
-//	 * parents area.
-//	 * 
-//	 * @param cell
-//	 * @return Returns true if the given cell may overlap its parent.
-//	 */
-//	public boolean isAllowOverlapParent(Object cell)
-//	{
-//		return false;
-//	}
-//
-//	/**
-//	 * Returns the cells which are movable in the given array of cells.
-//	 */
-//	public Object[] getFoldableCells(Object[] cells, final boolean collapse)
-//	{
-//		return mxGraphModel.filterCells(cells, new Filter()
-//		{
-//			public boolean filter(Object cell)
-//			{
-//				return isCellFoldable(cell, collapse);
-//			}
-//		});
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is expandable. This implementation
-//	 * returns true if the cell has at least one child and its style
-//	 * does not specify mxConstants.STYLE_FOLDABLE to be 0.
-//	 *
-//	 * @param cell <mxCell> whose expandable state should be returned.
-//	 * @return Returns true if the given cell is expandable.
-//	 */
-//	public boolean isCellFoldable(Object cell, boolean collapse)
-//	{
-//		mxCellState state = view.getState(cell);
-//		Map<String, Object> style = (state != null) ? state.getStyle()
-//				: getCellStyle(cell);
-//
-//		return model.getChildCount(cell) > 0
-//				&& mxUtils.isTrue(style, mxConstants.STYLE_FOLDABLE, true);
-//	}
-//
-//	/**
-//	 * Returns true if the grid is enabled.
-//	 * 
-//	 * @return Returns the enabled state of the grid.
-//	 */
-//	public boolean isGridEnabled()
-//	{
-//		return gridEnabled;
-//	}
-//
-//	/**
-//	 * Sets if the grid is enabled.
-//	 * 
-//	 * @param value Specifies if the grid should be enabled.
-//	 */
-//	public void setGridEnabled(boolean value)
-//	{
-//		boolean oldValue = gridEnabled;
-//		gridEnabled = value;
-//
-//		changeSupport.firePropertyChange("gridEnabled", oldValue, gridEnabled);
-//	}
-//
-//	/**
-//	 * Returns true if ports are enabled.
-//	 * 
-//	 * @return Returns the enabled state of the ports.
-//	 */
-//	public boolean isPortsEnabled()
-//	{
-//		return portsEnabled;
-//	}
-//
-//	/**
-//	 * Sets if ports are enabled.
-//	 * 
-//	 * @param value Specifies if the ports should be enabled.
-//	 */
-//	public void setPortsEnabled(boolean value)
-//	{
-//		boolean oldValue = portsEnabled;
-//		portsEnabled = value;
-//
-//		changeSupport
-//				.firePropertyChange("portsEnabled", oldValue, portsEnabled);
-//	}
-//
-//	/**
-//	 * Returns the grid size.
-//	 * 
-//	 * @return Returns the grid size
-//	 */
-//	public int getGridSize()
-//	{
-//		return gridSize;
-//	}
-//
-//	/**
-//	 * Sets the grid size and fires a property change event for gridSize.
-//	 * 
-//	 * @param value New grid size to be used.
-//	 */
-//	public void setGridSize(int value)
-//	{
-//		int oldValue = gridSize;
-//		gridSize = value;
-//
-//		changeSupport.firePropertyChange("gridSize", oldValue, gridSize);
-//	}
-//
-//	/**
-//	 * Returns alternateEdgeStyle.
-//	 */
-//	public String getAlternateEdgeStyle()
-//	{
-//		return alternateEdgeStyle;
-//	}
-//
-//	/**
-//	 * Sets alternateEdgeStyle.
-//	 */
-//	public void setAlternateEdgeStyle(String value)
-//	{
-//		String oldValue = alternateEdgeStyle;
-//		alternateEdgeStyle = value;
-//
-//		changeSupport.firePropertyChange("alternateEdgeStyle", oldValue,
-//				alternateEdgeStyle);
-//	}
-//
-//	/**
-//	 * Returns true if the given cell is a valid drop target for the specified
-//	 * cells. This returns true if the cell is a swimlane, has children and is
-//	 * not collapsed, or if splitEnabled is true and isSplitTarget returns
-//	 * true for the given arguments
-//	 * 
-//	 * @param cell Object that represents the possible drop target.
-//	 * @param cells Objects that are going to be dropped.
-//	 * @return Returns true if the cell is a valid drop target for the given
-//	 * cells.
-//	 */
-//	public boolean isValidDropTarget(Object cell, Object[] cells)
-//	{
-//		return cell != null
-//				&& ((isSplitEnabled() && isSplitTarget(cell, cells)) || (!model
-//						.isEdge(cell) && (isSwimlane(cell) || (model
-//						.getChildCount(cell) > 0 && !isCellCollapsed(cell)))));
-//	}
-//
-//	/**
-//	 * Returns true if split is enabled and the given edge may be splitted into
-//	 * two edges with the given cell as a new terminal between the two.
-//	 * 
-//	 * @param target Object that represents the edge to be splitted.
-//	 * @param cells Array of cells to add into the given edge.
-//	 * @return Returns true if the given edge may be splitted by the given
-//	 * cell.
-//	 */
-//	public boolean isSplitTarget(Object target, Object[] cells)
-//	{
-//		if (target != null && cells != null && cells.length == 1)
-//		{
-//			Object src = model.getTerminal(target, true);
-//			Object trg = model.getTerminal(target, false);
-//
-//			return (model.isEdge(target)
-//					&& isCellConnectable(cells[0])
-//					&& getEdgeValidationError(target,
-//							model.getTerminal(target, true), cells[0]) == null
-//					&& !model.isAncestor(cells[0], src) && !model.isAncestor(
-//					cells[0], trg));
-//		}
-//
-//		return false;
-//	}
-//
-//	/**
-//	 * Returns the given cell if it is a drop target for the given cells or the
-//	 * nearest ancestor that may be used as a drop target for the given cells.
-//	 * If the given array contains a swimlane and swimlaneNesting is false
-//	 * then this always returns null. If no cell is given, then the bottommost
-//	 * swimlane at the location of the given event is returned.
-//	 * 
-//	 * This function should only be used if isDropEnabled returns true.
-//	 */
-//	public Object getDropTarget(Object[] cells, Point pt, Object cell)
-//	{
-//		if (!isSwimlaneNesting())
-//		{
-//			for (int i = 0; i < cells.length; i++)
-//			{
-//				if (isSwimlane(cells[i]))
-//				{
-//					return null;
-//				}
-//			}
-//		}
-//
-//		// FIXME the else below does nothing if swimlane is null
-//		Object swimlane = null; //getSwimlaneAt(pt.x, pt.y);
-//
-//		if (cell == null)
-//		{
-//			cell = swimlane;
-//		}
-//		/*else if (swimlane != null)
-//		{
-//			// Checks if the cell is an ancestor of the swimlane
-//			// under the mouse and uses the swimlane in that case
-//			Object tmp = model.getParent(swimlane);
-//
-//			while (tmp != null && isSwimlane(tmp) && tmp != cell)
-//			{
-//				tmp = model.getParent(tmp);
-//			}
-//
-//			if (tmp == cell)
-//			{
-//				cell = swimlane;
-//			}
-//		}*/
-//
-//		while (cell != null && !isValidDropTarget(cell, cells)
-//				&& model.getParent(cell) != model.getRoot())
-//		{
-//			cell = model.getParent(cell);
-//		}
-//
-//		return (model.getParent(cell) != model.getRoot() && !mxUtils.contains(
-//				cells, cell)) ? cell : null;
-//	};
-//
-//	//
-//	// Cell retrieval
-//	//
-//
-//	/**
-//	 * Returns the first child of the root in the model, that is, the first or
-//	 * default layer of the diagram. 
-//	 * 
-//	 * @return Returns the default parent for new cells.
-//	 */
-//	public Object getDefaultParent()
-//	{
-//		Object parent = defaultParent;
-//
-//		if (parent == null)
-//		{
-//			parent = view.getCurrentRoot();
-//
-//			if (parent == null)
-//			{
-//				Object root = model.getRoot();
-//				parent = model.getChildAt(root, 0);
-//			}
-//		}
-//
-//		return parent;
-//	}
-//
-//	/**
-//	 * Sets the default parent to be returned by getDefaultParent.
-//	 * Set this to null to return the first child of the root in
-//	 * getDefaultParent.
-//	 */
-//	public void setDefaultParent(Object value)
-//	{
-//		defaultParent = value;
-//	}
-//
-//	/**
-//	 * Returns the visible child vertices of the given parent.
-//	 * 
-//	 * @param parent Cell whose children should be returned.
-//	 */
-//	public Object[] getChildVertices(Object parent)
-//	{
-//		return getChildCells(parent, true, false);
-//	}
-//
-//	/**
-//	 * Returns the visible child edges of the given parent.
-//	 * 
-//	 * @param parent Cell whose children should be returned.
-//	 */
-//	public Object[] getChildEdges(Object parent)
-//	{
-//		return getChildCells(parent, false, true);
-//	}
-//
-//	/**
-//	 * Returns the visible children of the given parent.
-//	 * 
-//	 * @param parent Cell whose children should be returned.
-//	 */
-//	public Object[] getChildCells(Object parent)
-//	{
-//		return getChildCells(parent, false, false);
-//	}
-//
-//	/**
-//	 * Returns the visible child vertices or edges in the given parent. If
-//	 * vertices and edges is false, then all children are returned.
-//	 * 
-//	 * @param parent Cell whose children should be returned.
-//	 * @param vertices Specifies if child vertices should be returned.
-//	 * @param edges Specifies if child edges should be returned.
-//	 * @return Returns the child vertices and edges.
-//	 */
-//	public Object[] getChildCells(Object parent, boolean vertices, boolean edges)
-//	{
-//		Object[] cells = mxGraphModel.getChildCells(model, parent, vertices,
-//				edges);
-//		List<Object> result = new ArrayList<Object>(cells.length);
-//
-//		// Filters out the non-visible child cells
-//		for (int i = 0; i < cells.length; i++)
-//		{
-//			if (isCellVisible(cells[i]))
-//			{
-//				result.add(cells[i]);
-//			}
-//		}
-//
-//		return result.toArray();
-//	}
-//
-//	/**
-//	 * Returns all visible edges connected to the given cell without loops.
-//	 * 
-//	 * @param cell Cell whose connections should be returned.
-//	 * @return Returns the connected edges for the given cell.
-//	 */
-//	public Object[] getConnections(Object cell)
-//	{
-//		return getConnections(cell, null);
-//	}
-//
-//	/**
-//	 * Returns all visible edges connected to the given cell without loops.
-//	 * If the optional parent argument is specified, then only child
-//	 * edges of the given parent are returned.
-//	 * 
-//	 * @param cell Cell whose connections should be returned.
-//	 * @param parent Optional parent of the opposite end for a connection
-//	 * to be returned.
-//	 * @return Returns the connected edges for the given cell.
-//	 */
-//	public Object[] getConnections(Object cell, Object parent)
-//	{
-//		return getConnections(cell, parent, false);
-//	}
-//
-//	/**
-//	 * Returns all visible edges connected to the given cell without loops.
-//	 * If the optional parent argument is specified, then only child
-//	 * edges of the given parent are returned.
-//	 * 
-//	 * @param cell Cell whose connections should be returned.
-//	 * @param parent Optional parent of the opposite end for a connection
-//	 * to be returned.
-//	 * @return Returns the connected edges for the given cell.
-//	 */
-//	public Object[] getConnections(Object cell, Object parent, boolean recurse)
-//	{
-//		return getEdges(cell, parent, true, true, false, recurse);
-//	}
-//
-//	/**
-//	 * Returns all incoming visible edges connected to the given cell without
-//	 * loops.
-//	 * 
-//	 * @param cell Cell whose incoming edges should be returned.
-//	 * @return Returns the incoming edges of the given cell.
-//	 */
-//	public Object[] getIncomingEdges(Object cell)
-//	{
-//		return getIncomingEdges(cell, null);
-//	}
-//
-//	/**
-//	 * Returns the visible incoming edges for the given cell. If the optional
-//	 * parent argument is specified, then only child edges of the given parent
-//	 * are returned.
-//	 * 
-//	 * @param cell Cell whose incoming edges should be returned.
-//	 * @param parent Optional parent of the opposite end for an edge
-//	 * to be returned.
-//	 * @return Returns the incoming edges of the given cell.
-//	 */
-//	public Object[] getIncomingEdges(Object cell, Object parent)
-//	{
-//		return getEdges(cell, parent, true, false, false);
-//	}
-//
-//	/**
-//	 * Returns all outgoing visible edges connected to the given cell without
-//	 * loops.
-//	 * 
-//	 * @param cell Cell whose outgoing edges should be returned.
-//	 * @return Returns the outgoing edges of the given cell.
-//	 */
-//	public Object[] getOutgoingEdges(Object cell)
-//	{
-//		return getOutgoingEdges(cell, null);
-//	}
-//
-//	/**
-//	 * Returns the visible outgoing edges for the given cell. If the optional
-//	 * parent argument is specified, then only child edges of the given parent
-//	 * are returned.
-//	 * 
-//	 * @param cell Cell whose outgoing edges should be returned.
-//	 * @param parent Optional parent of the opposite end for an edge
-//	 * to be returned.
-//	 * @return Returns the outgoing edges of the given cell.
-//	 */
-//	public Object[] getOutgoingEdges(Object cell, Object parent)
-//	{
-//		return getEdges(cell, parent, false, true, false);
-//	}
-//
-//	/**
-//	 * Returns all visible edges connected to the given cell including loops.
-//	 *
-//	 * @param cell Cell whose edges should be returned.
-//	 * @return Returns the edges of the given cell.
-//	 */
-//	public Object[] getEdges(Object cell)
-//	{
-//		return getEdges(cell, null);
-//	}
-//
-//	/**
-//	 * Returns all visible edges connected to the given cell including loops.
-//	 * 
-//	 * @param cell Cell whose edges should be returned.
-//	 * @param parent Optional parent of the opposite end for an edge
-//	 * to be returned.
-//	 * @return Returns the edges of the given cell.
-//	 */
-//	public Object[] getEdges(Object cell, Object parent)
-//	{
-//		return getEdges(cell, parent, true, true, true);
-//	}
-//
-//	/**
-//	 * Returns the incoming and/or outgoing edges for the given cell.
-//	 * If the optional parent argument is specified, then only edges are returned
-//	 * where the opposite is in the given parent cell.
-//	 * 
-//	 * @param cell Cell whose edges should be returned.
-//	 * @param parent Optional parent. If specified the opposite end of any edge
-//	 * must be a direct child of that parent in order for the edge to be returned.
-//	 * @param incoming Specifies if incoming edges should be included in the
-//	 * result.
-//	 * @param outgoing Specifies if outgoing edges should be included in the
-//	 * result.
-//	 * @param includeLoops Specifies if loops should be included in the result.
-//	 * @return Returns the edges connected to the given cell.
-//	 */
-//	public Object[] getEdges(Object cell, Object parent, boolean incoming,
-//			boolean outgoing, boolean includeLoops)
-//	{
-//		return getEdges(cell, parent, incoming, outgoing, includeLoops, false);
-//	}
-//
-//	/**
-//	 * Returns the incoming and/or outgoing edges for the given cell.
-//	 * If the optional parent argument is specified, then only edges are returned
-//	 * where the opposite is in the given parent cell.
-//	 * 
-//	 * @param cell Cell whose edges should be returned.
-//	 * @param parent Optional parent. If specified the opposite end of any edge
-//	 * must be a child of that parent in order for the edge to be returned. The
-//	 * recurse parameter specifies whether or not it must be the direct child
-//	 * or the parent just be an ancestral parent.
-//	 * @param incoming Specifies if incoming edges should be included in the
-//	 * result.
-//	 * @param outgoing Specifies if outgoing edges should be included in the
-//	 * result.
-//	 * @param includeLoops Specifies if loops should be included in the result.
-//	 * @param recurse Specifies if the parent specified only need be an ancestral
-//	 * parent, <code>true</code>, or the direct parent, <code>false</code>
-//	 * @return Returns the edges connected to the given cell.
-//	 */
-//	public Object[] getEdges(Object cell, Object parent, boolean incoming,
-//			boolean outgoing, boolean includeLoops, boolean recurse)
-//	{
-//		boolean isCollapsed = isCellCollapsed(cell);
-//		List<Object> edges = new ArrayList<Object>();
-//		int childCount = model.getChildCount(cell);
-//
-//		for (int i = 0; i < childCount; i++)
-//		{
-//			Object child = model.getChildAt(cell, i);
-//
-//			if (isCollapsed || !isCellVisible(child))
-//			{
-//				edges.addAll(Arrays.asList(mxGraphModel.getEdges(model, child,
-//						incoming, outgoing, includeLoops)));
-//			}
-//		}
-//
-//		edges.addAll(Arrays.asList(mxGraphModel.getEdges(model, cell, incoming,
-//				outgoing, includeLoops)));
-//		List<Object> result = new ArrayList<Object>(edges.size());
-//		Iterator<Object> it = edges.iterator();
-//
-//		while (it.hasNext())
-//		{
-//			Object edge = it.next();
-//			mxCellState state = view.getState(edge);
-//			Object source = (state != null) ? state.getVisibleTerminal(true)
-//					: view.getVisibleTerminal(edge, true);
-//			Object target = (state != null) ? state.getVisibleTerminal(false)
-//					: view.getVisibleTerminal(edge, false);
-//
-//			if ((includeLoops && source == target)
-//					|| ((source != target) && ((incoming && target == cell && (parent == null || isValidAncestor(
-//							source, parent, recurse))) || (outgoing
-//							&& source == cell && (parent == null || isValidAncestor(
-//							target, parent, recurse))))))
-//			{
-//				result.add(edge);
-//			}
-//		}
-//
-//		return result.toArray();
-//	}
-//
-//	/**
-//	 * Returns whether or not the specified parent is a valid
-//	 * ancestor of the specified cell, either direct or indirectly
-//	 * based on whether ancestor recursion is enabled.
-//	 * @param cell the possible child cell
-//	 * @param parent the possible parent cell
-//	 * @param recurse whether or not to recurse the child ancestors
-//	 * @return whether or not the specified parent is a valid
-//	 * ancestor of the specified cell, either direct or indirectly
-//	 * based on whether ancestor recursion is enabled.
-//	 */
-//	public boolean isValidAncestor(Object cell, Object parent, boolean recurse)
-//	{
-//		return (recurse ? model.isAncestor(parent, cell) : model
-//				.getParent(cell) == parent);
-//	}
-//
-//	/**
-//	 * Returns all distinct visible opposite cells of the terminal on the given
-//	 * edges.
-//	 * 
-//	 * @param edges
-//	 * @param terminal
-//	 * @return Returns the terminals at the opposite ends of the given edges.
-//	 */
-//	public Object[] getOpposites(Object[] edges, Object terminal)
-//	{
-//		return getOpposites(edges, terminal, true, true);
-//	}
-//
-//	/**
-//	 * Returns all distincts visible opposite cells for the specified terminal
-//	 * on the given edges.
-//	 * 
-//	 * @param edges Edges whose opposite terminals should be returned.
-//	 * @param terminal Terminal that specifies the end whose opposite should be
-//	 * returned.
-//	 * @param sources Specifies if source terminals should be included in the
-//	 * result.
-//	 * @param targets Specifies if target terminals should be included in the
-//	 * result.
-//	 * @return Returns the cells at the opposite ends of the given edges.
-//	 */
-//	public Object[] getOpposites(Object[] edges, Object terminal,
-//			boolean sources, boolean targets)
-//	{
-//		Collection<Object> terminals = new LinkedHashSet<Object>();
-//
-//		if (edges != null)
-//		{
-//			for (int i = 0; i < edges.length; i++)
-//			{
-//				mxCellState state = view.getState(edges[i]);
-//				Object source = (state != null) ? state
-//						.getVisibleTerminal(true) : view.getVisibleTerminal(
-//						edges[i], true);
-//				Object target = (state != null) ? state
-//						.getVisibleTerminal(false) : view.getVisibleTerminal(
-//						edges[i], false);
-//
-//				// Checks if the terminal is the source of
-//				// the edge and if the target should be
-//				// stored in the result
-//				if (targets && source == terminal && target != null
-//						&& target != terminal)
-//				{
-//					terminals.add(target);
-//				}
-//
-//				// Checks if the terminal is the taget of
-//				// the edge and if the source should be
-//				// stored in the result
-//				else if (sources && target == terminal && source != null
-//						&& source != terminal)
-//				{
-//					terminals.add(source);
-//				}
-//			}
-//		}
-//
-//		return terminals.toArray();
-//	}
-//
-//	/**
-//	 * Returns the edges between the given source and target. This takes into
-//	 * account collapsed and invisible cells and returns the connected edges
-//	 * as displayed on the screen.
-//	 * 
-//	 * @param source
-//	 * @param target
-//	 * @return Returns all edges between the given terminals.
-//	 */
-//	public Object[] getEdgesBetween(Object source, Object target)
-//	{
-//		return getEdgesBetween(source, target, false);
-//	}
-//
-//	/**
-//	 * Returns the edges between the given source and target. This takes into
-//	 * account collapsed and invisible cells and returns the connected edges
-//	 * as displayed on the screen.
-//	 * 
-//	 * @param source
-//	 * @param target
-//	 * @param directed
-//	 * @return Returns all edges between the given terminals.
-//	 */
-//	public Object[] getEdgesBetween(Object source, Object target,
-//			boolean directed)
-//	{
-//		Object[] edges = getEdges(source);
-//		List<Object> result = new ArrayList<Object>(edges.length);
-//
-//		// Checks if the edge is connected to the correct
-//		// cell and adds any match to the result
-//		for (int i = 0; i < edges.length; i++)
-//		{
-//			mxCellState state = view.getState(edges[i]);
-//			Object src = (state != null) ? state.getVisibleTerminal(true)
-//					: view.getVisibleTerminal(edges[i], true);
-//			Object trg = (state != null) ? state.getVisibleTerminal(false)
-//					: view.getVisibleTerminal(edges[i], false);
-//
-//			if ((src == source && trg == target)
-//					|| (!directed && src == target && trg == source))
-//			{
-//				result.add(edges[i]);
-//			}
-//		}
-//
-//		return result.toArray();
-//	}
-//
-//	/**
-//	 * Returns the children of the given parent that are contained in the
-//	 * halfpane from the given point (x0, y0) rightwards and downwards
-//	 * depending on rightHalfpane and bottomHalfpane.
-//	 * 
-//	 * @param x0 X-coordinate of the origin.
-//	 * @param y0 Y-coordinate of the origin.
-//	 * @param parent <mxCell> whose children should be checked.
-//	 * @param rightHalfpane Boolean indicating if the cells in the right halfpane
-//	 * from the origin should be returned.
-//	 * @param bottomHalfpane Boolean indicating if the cells in the bottom halfpane
-//	 * from the origin should be returned.
-//	 * @return Returns the cells beyond the given halfpane.
-//	 */
-//	public Object[] getCellsBeyond(double x0, double y0, Object parent,
-//			boolean rightHalfpane, boolean bottomHalfpane)
-//	{
-//		if (parent == null)
-//		{
-//			parent = getDefaultParent();
-//		}
-//
-//		int childCount = model.getChildCount(parent);
-//		List<Object> result = new ArrayList<Object>(childCount);
-//
-//		if (rightHalfpane || bottomHalfpane)
-//		{
-//
-//			if (parent != null)
-//			{
-//				for (int i = 0; i < childCount; i++)
-//				{
-//					Object child = model.getChildAt(parent, i);
-//					mxCellState state = view.getState(child);
-//
-//					if (isCellVisible(child) && state != null)
-//					{
-//						if ((!rightHalfpane || state.getX() >= x0)
-//								&& (!bottomHalfpane || state.getY() >= y0))
-//						{
-//							result.add(child);
-//						}
-//					}
-//				}
-//			}
-//		}
-//
-//		return result.toArray();
-//	}
-//
-//	/**
-//	 * Returns all visible children in the given parent which do not have
-//	 * incoming edges. If the result is empty then the with the greatest
-//	 * difference between incoming and outgoing edges is returned. This
-//	 * takes into account edges that are being promoted to the given
-//	 * root due to invisible children or collapsed cells.
-//	 * 
-//	 * @param parent Cell whose children should be checked.
-//	 * @return List of tree roots in parent.
-//	 */
-//	public List<Object> findTreeRoots(Object parent)
-//	{
-//		return findTreeRoots(parent, false);
-//	}
-//
-//	/**
-//	 * Returns all visible children in the given parent which do not have
-//	 * incoming edges. If the result is empty then the children with the
-//	 * maximum difference between incoming and outgoing edges are returned.
-//	 * This takes into account edges that are being promoted to the given
-//	 * root due to invisible children or collapsed cells.
-//	 * 
-//	 * @param parent Cell whose children should be checked.
-//	 * @param isolate Specifies if edges should be ignored if the opposite
-//	 * end is not a child of the given parent cell.
-//	 * @return List of tree roots in parent.
-//	 */
-//	public List<Object> findTreeRoots(Object parent, boolean isolate)
-//	{
-//		return findTreeRoots(parent, isolate, false);
-//	}
-//
-//	/**
-//	 * Returns all visible children in the given parent which do not have
-//	 * incoming edges. If the result is empty then the children with the
-//	 * maximum difference between incoming and outgoing edges are returned.
-//	 * This takes into account edges that are being promoted to the given
-//	 * root due to invisible children or collapsed cells.
-//	 * 
-//	 * @param parent Cell whose children should be checked.
-//	 * @param isolate Specifies if edges should be ignored if the opposite
-//	 * end is not a child of the given parent cell.
-//	 * @param invert Specifies if outgoing or incoming edges should be counted
-//	 * for a tree root. If false then outgoing edges will be counted.
-//	 * @return List of tree roots in parent.
-//	 */
-//	public List<Object> findTreeRoots(Object parent, boolean isolate,
-//			boolean invert)
-//	{
-//		List<Object> roots = new ArrayList<Object>();
-//
-//		if (parent != null)
-//		{
-//			int childCount = model.getChildCount(parent);
-//			Object best = null;
-//			int maxDiff = 0;
-//
-//			for (int i = 0; i < childCount; i++)
-//			{
-//				Object cell = model.getChildAt(parent, i);
-//
-//				if (model.isVertex(cell) && isCellVisible(cell))
-//				{
-//					Object[] conns = getConnections(cell, (isolate) ? parent
-//							: null);
-//					int fanOut = 0;
-//					int fanIn = 0;
-//
-//					for (int j = 0; j < conns.length; j++)
-//					{
-//						Object src = view.getVisibleTerminal(conns[j], true);
-//
-//						if (src == cell)
-//						{
-//							fanOut++;
-//						}
-//						else
-//						{
-//							fanIn++;
-//						}
-//					}
-//
-//					if ((invert && fanOut == 0 && fanIn > 0)
-//							|| (!invert && fanIn == 0 && fanOut > 0))
-//					{
-//						roots.add(cell);
-//					}
-//
-//					int diff = (invert) ? fanIn - fanOut : fanOut - fanIn;
-//
-//					if (diff > maxDiff)
-//					{
-//						maxDiff = diff;
-//						best = cell;
-//					}
-//				}
-//			}
-//
-//			if (roots.isEmpty() && best != null)
-//			{
-//				roots.add(best);
-//			}
-//		}
-//
-//		return roots;
-//	}
-//
-//	/**
-//	 * Traverses the tree starting at the given vertex. Here is how to use this
-//	 * method for a given vertex (root) which is typically the root of a tree:
-//	 * <code>
-//	 * graph.traverse(root, true, new mxICellVisitor()
-//	 * {
-//	 *   public boolean visit(Object vertex, Object edge)
-//	 *   {
-//	 *     System.out.println("edge="+graph.convertValueToString(edge)+
-//	 *       " vertex="+graph.convertValueToString(vertex));
-//	 *     
-//	 *     return true;
-//	 *   }
-//	 * });
-//	 * </code>
-//	 * 
-//	 * @param vertex
-//	 * @param directed
-//	 * @param visitor
-//	 */
-//	public void traverse(Object vertex, boolean directed, mxICellVisitor visitor)
-//	{
-//		traverse(vertex, directed, visitor, null, null);
-//	}
-//
-//	/**
-//	 * Traverses the (directed) graph invoking the given function for each
-//	 * visited vertex and edge. The function is invoked with the current vertex
-//	 * and the incoming edge as a parameter. This implementation makes sure
-//	 * each vertex is only visited once. The function may return false if the
-//	 * traversal should stop at the given vertex.
-//	 * 
-//	 * @param vertex <mxCell> that represents the vertex where the traversal starts.
-//	 * @param directed Optional boolean indicating if edges should only be traversed
-//	 * from source to target. Default is true.
-//	 * @param visitor Visitor that takes the current vertex and the incoming edge.
-//	 * The traversal stops if the function returns false.
-//	 * @param edge Optional <mxCell> that represents the incoming edge. This is
-//	 * null for the first step of the traversal.
-//	 * @param visited Optional array of cell paths for the visited cells.
-//	 */
-//	public void traverse(Object vertex, boolean directed,
-//			mxICellVisitor visitor, Object edge, Set<Object> visited)
-//	{
-//		if (vertex != null && visitor != null)
-//		{
-//			if (visited == null)
-//			{
-//				visited = new HashSet<Object>();
-//			}
-//
-//			if (!visited.contains(vertex))
-//			{
-//				visited.add(vertex);
-//
-//				if (visitor.visit(vertex, edge))
-//				{
-//					int edgeCount = model.getEdgeCount(vertex);
-//
-//					if (edgeCount > 0)
-//					{
-//						for (int i = 0; i < edgeCount; i++)
-//						{
-//							Object e = model.getEdgeAt(vertex, i);
-//							boolean isSource = model.getTerminal(e, true) == vertex;
-//
-//							if (!directed || isSource)
-//							{
-//								Object next = model.getTerminal(e, !isSource);
-//								traverse(next, directed, visitor, e, visited);
-//							}
-//						}
-//					}
-//				}
-//			}
-//		}
-//	}
-//
-//	//
-//	// Selection
-//	//
-//
-//	/**
-//	 * 
-//	 */
-//	public mxGraphSelectionModel getSelectionModel()
-//	{
-//		return selectionModel;
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public int getSelectionCount()
-//	{
-//		return selectionModel.size();
-//	}
-//
-//	/**
-//	 * 
-//	 * @param cell
-//	 * @return Returns true if the given cell is selected.
-//	 */
-//	public boolean isCellSelected(Object cell)
-//	{
-//		return selectionModel.isSelected(cell);
-//	}
-//
-//	/**
-//	 * 
-//	 * @return Returns true if the selection is empty.
-//	 */
-//	public boolean isSelectionEmpty()
-//	{
-//		return selectionModel.isEmpty();
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void clearSelection()
-//	{
-//		selectionModel.clear();
-//	}
-//
-//	/**
-//	 * 
-//	 * @return Returns the selection cell.
-//	 */
-//	public Object getSelectionCell()
-//	{
-//		return selectionModel.getCell();
-//	}
-//
-//	/**
-//	 * 
-//	 * @param cell
-//	 */
-//	public void setSelectionCell(Object cell)
-//	{
-//		selectionModel.setCell(cell);
-//	}
-//
-//	/**
-//	 * 
-//	 * @return Returns the selection cells.
-//	 */
-//	public Object[] getSelectionCells()
-//	{
-//		return selectionModel.getCells();
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void setSelectionCells(Object[] cells)
-//	{
-//		selectionModel.setCells(cells);
-//	}
-//
-//	/**
-//	 * 
-//	 * @param cells
-//	 */
-//	public void setSelectionCells(Collection<Object> cells)
-//	{
-//		if (cells != null)
-//		{
-//			setSelectionCells(cells.toArray());
-//		}
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void addSelectionCell(Object cell)
-//	{
-//		selectionModel.addCell(cell);
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void addSelectionCells(Object[] cells)
-//	{
-//		selectionModel.addCells(cells);
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void removeSelectionCell(Object cell)
-//	{
-//		selectionModel.removeCell(cell);
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void removeSelectionCells(Object[] cells)
-//	{
-//		selectionModel.removeCells(cells);
-//	}
-//
-//	/**
-//	 * Selects the next cell.
-//	 */
-//	public void selectNextCell()
-//	{
-//		selectCell(true, false, false);
-//	}
-//
-//	/**
-//	 * Selects the previous cell.
-//	 */
-//	public void selectPreviousCell()
-//	{
-//		selectCell(false, false, false);
-//	}
-//
-//	/**
-//	 * Selects the parent cell.
-//	 */
-//	public void selectParentCell()
-//	{
-//		selectCell(false, true, false);
-//	}
-//
-//	/**
-//	 * Selects the first child cell.
-//	 */
-//	public void selectChildCell()
-//	{
-//		selectCell(false, false, true);
-//	}
-//
-//	/**
-//	 * Selects the next, parent, first child or previous cell, if all arguments
-//	 * are false.
-//	 * 
-//	 * @param isNext
-//	 * @param isParent
-//	 * @param isChild
-//	 */
-//	public void selectCell(boolean isNext, boolean isParent, boolean isChild)
-//	{
-//		Object cell = getSelectionCell();
-//
-//		if (getSelectionCount() > 1)
-//		{
-//			clearSelection();
-//		}
-//
-//		Object parent = (cell != null) ? model.getParent(cell)
-//				: getDefaultParent();
-//		int childCount = model.getChildCount(parent);
-//
-//		if (cell == null && childCount > 0)
-//		{
-//			Object child = model.getChildAt(parent, 0);
-//			setSelectionCell(child);
-//		}
-//		else if ((cell == null || isParent) && view.getState(parent) != null
-//				&& model.getGeometry(parent) != null)
-//		{
-//			if (getCurrentRoot() != parent)
-//			{
-//				setSelectionCell(parent);
-//			}
-//		}
-//		else if (cell != null && isChild)
-//		{
-//			int tmp = model.getChildCount(cell);
-//
-//			if (tmp > 0)
-//			{
-//				Object child = model.getChildAt(cell, 0);
-//				setSelectionCell(child);
-//			}
-//		}
-//		else if (childCount > 0)
-//		{
-//			int i = ((mxICell) parent).getIndex((mxICell) cell);
-//
-//			if (isNext)
-//			{
-//				i++;
-//				setSelectionCell(model.getChildAt(parent, i % childCount));
-//			}
-//			else
-//			{
-//				i--;
-//				int index = (i < 0) ? childCount - 1 : i;
-//				setSelectionCell(model.getChildAt(parent, index));
-//			}
-//		}
-//	}
-//
-//	/**
-//	 * Selects all vertices inside the default parent.
-//	 */
-//	public void selectVertices()
-//	{
-//		selectVertices(null);
-//	}
-//
-//	/**
-//	 * Selects all vertices inside the given parent or the default parent
-//	 * if no parent is given.
-//	 */
-//	public void selectVertices(Object parent)
-//	{
-//		selectCells(true, false, parent);
-//	}
-//
-//	/**
-//	 * Selects all vertices inside the default parent.
-//	 */
-//	public void selectEdges()
-//	{
-//		selectEdges(null);
-//	}
-//
-//	/**
-//	 * Selects all vertices inside the given parent or the default parent
-//	 * if no parent is given.
-//	 */
-//	public void selectEdges(Object parent)
-//	{
-//		selectCells(false, true, parent);
-//	}
-//
-//	/**
-//	 * Selects all vertices and/or edges depending on the given boolean
-//	 * arguments recursively, starting at the default parent. Use
-//	 * <code>selectAll</code> to select all cells.
-//	 *  
-//	 * @param vertices Boolean indicating if vertices should be selected.
-//	 * @param edges Boolean indicating if edges should be selected.
-//	 */
-//	public void selectCells(boolean vertices, boolean edges)
-//	{
-//		selectCells(vertices, edges, null);
-//	}
-//
-//	/**
-//	 * Selects all vertices and/or edges depending on the given boolean
-//	 * arguments recursively, starting at the given parent or the default
-//	 * parent if no parent is specified. Use <code>selectAll</code> to select
-//	 * all cells.
-//	 * 
-//	 * @param vertices Boolean indicating if vertices should be selected.
-//	 * @param edges Boolean indicating if edges should be selected.
-//	 * @param parent Optional cell that acts as the root of the recursion.
-//	 * Default is <code>defaultParent</code>.
-//	 */
-//	public void selectCells(final boolean vertices, final boolean edges,
-//			Object parent)
-//	{
-//		if (parent == null)
-//		{
-//			parent = getDefaultParent();
-//		}
-//
-//		Collection<Object> cells = mxGraphModel.filterDescendants(getModel(),
-//				new mxGraphModel.Filter()
-//				{
-//
-//					/**
-//					 * 
-//					 */
-//					public boolean filter(Object cell)
-//					{
-//						return view.getState(cell) != null
-//								&& model.getChildCount(cell) == 0
-//								&& ((model.isVertex(cell) && vertices) || (model
-//										.isEdge(cell) && edges));
-//					}
-//
-//				});
-//		setSelectionCells(cells);
-//	}
-//
-//	/**
-//	 * 
-//	 */
-//	public void selectAll()
-//	{
-//		selectAll(null);
-//	}
-//
-//	/**
-//	 * Selects all children of the given parent cell or the children of the
-//	 * default parent if no parent is specified. To select leaf vertices and/or
-//	 * edges use <selectCells>.
-//	 * 
-//	 * @param parent  Optional <mxCell> whose children should be selected.
-//	 * Default is <defaultParent>.
-//	 */
-//	public void selectAll(Object parent)
-//	{
-//		if (parent == null)
-//		{
-//			parent = getDefaultParent();
-//		}
-//
-//		Object[] children = mxGraphModel.getChildren(model, parent);
-//
-//		if (children != null)
-//		{
-//			setSelectionCells(children);
-//		}
-//	}
-//
-//	//
-//	// Images and drawing
-//	//
-//
-//	/**
-//	 * Draws the graph onto the given canvas.
-//	 * 
-//	 * @param canvas Canvas onto which the graph should be drawn.
-//	 */
-//	public void drawGraph(mxICanvas canvas)
-//	{
-//		drawCell(canvas, getModel().getRoot());
-//	}
-//
-//	/**
-//	 * Draws the given cell and its descendants onto the specified canvas.
-//	 * 
-//	 * @param canvas Canvas onto which the cell should be drawn.
-//	 * @param cell Cell that should be drawn onto the canvas.
-//	 */
-//	public void drawCell(mxICanvas canvas, Object cell)
-//	{
-//		drawState(canvas, getView().getState(cell), true);
-//
-//		// Draws the children on top of their parent
-//		int childCount = model.getChildCount(cell);
-//
-//		for (int i = 0; i < childCount; i++)
-//		{
-//			Object child = model.getChildAt(cell, i);
-//			drawCell(canvas, child);
-//		}
-//	}
-//
-//	/**
-//	 * Draws the cell state with the given label onto the canvas. No
-//	 * children or descendants are painted here. This method invokes
-//	 * cellDrawn after the cell, but not its descendants have been
-//	 * painted.
-//	 * 
-//	 * @param canvas Canvas onto which the cell should be drawn.
-//	 * @param state State of the cell to be drawn.
-//	 * @param drawLabel Indicates if the label should be drawn.
-//	 */
-//	public void drawState(mxICanvas canvas, mxCellState state, boolean drawLabel)
-//	{
-//		Object cell = (state != null) ? state.getCell() : null;
-//
-//		if (cell != null && cell != view.getCurrentRoot()
-//				&& cell != model.getRoot()
-//				&& (model.isVertex(cell) || model.isEdge(cell)))
-//		{
-//			Object obj = canvas.drawCell(state);
-//			Object lab = null;
-//
-//			// Holds the current clipping region in case the label will
-//			// be clipped
-//			Shape clip = null;
-//			Rectangle newClip = state.getRectangle();
-//
-//			// Indirection for image canvas that contains a graphics canvas
-//			mxICanvas clippedCanvas = (isLabelClipped(state.getCell())) ? canvas
-//					: null;
-//
-//			if (clippedCanvas instanceof mxImageCanvas)
-//			{
-//				clippedCanvas = ((mxImageCanvas) clippedCanvas)
-//						.getGraphicsCanvas();
-//				// TODO: Shift newClip to match the image offset
-//				//Point pt = ((mxImageCanvas) canvas).getTranslate();
-//				//newClip.translate(-pt.x, -pt.y);
-//			}
-//
-//			if (clippedCanvas instanceof mxGraphics2DCanvas)
-//			{
-//				Graphics g = ((mxGraphics2DCanvas) clippedCanvas).getGraphics();
-//				clip = g.getClip();
-//
-//				// Ensure that our new clip resides within our old clip
-//				if (clip instanceof Rectangle)
-//				{
-//					g.setClip(newClip.intersection((Rectangle) clip));
-//				}
-//				// Otherwise, default to original implementation
-//				else
-//				{
-//					g.setClip(newClip);
-//				}
-//			}
-//
-//			if (drawLabel)
-//			{
-//				String label = state.getLabel();
-//
-//				if (label != null && state.getLabelBounds() != null)
-//				{
-//					lab = canvas.drawLabel(label, state, isHtmlLabel(cell));
-//				}
-//			}
-//
-//			// Restores the previous clipping region
-//			if (clippedCanvas instanceof mxGraphics2DCanvas)
-//			{
-//				((mxGraphics2DCanvas) clippedCanvas).getGraphics()
-//						.setClip(clip);
-//			}
-//
-//			// Invokes the cellDrawn callback with the object which was created
-//			// by the canvas to represent the cell graphically
-//			if (obj != null)
-//			{
-//				cellDrawn(canvas, state, obj, lab);
-//			}
-//		}
-//	}
-//
-//	/**
-//	 * Called when a cell has been painted as the specified object, typically a
-//	 * DOM node that represents the given cell graphically in a document.
-//	 */
-//	protected void cellDrawn(mxICanvas canvas, mxCellState state,
-//			Object element, Object labelElement)
-//	{
-//		if (element instanceof Element)
-//		{
-//			String link = getLinkForCell(state.getCell());
-//
-//			if (link != null)
-//			{
-//				String title = getToolTipForCell(state.getCell());
-//				Element elem = (Element) element;
-//
-//				if (elem.getNodeName().startsWith("v:"))
-//				{
-//					elem.setAttribute("href", link.toString());
-//
-//					if (title != null)
-//					{
-//						elem.setAttribute("title", title);
-//					}
-//				}
-//				else if (elem.getOwnerDocument().getElementsByTagName("svg")
-//						.getLength() > 0)
-//				{
-//					Element xlink = elem.getOwnerDocument().createElement("a");
-//					xlink.setAttribute("xlink:href", link.toString());
-//
-//					elem.getParentNode().replaceChild(xlink, elem);
-//					xlink.appendChild(elem);
-//
-//					if (title != null)
-//					{
-//						xlink.setAttribute("xlink:title", title);
-//					}
-//
-//					elem = xlink;
-//				}
-//				else
-//				{
-//					Element a = elem.getOwnerDocument().createElement("a");
-//					a.setAttribute("href", link.toString());
-//					a.setAttribute("style", "text-decoration:none;");
-//
-//					elem.getParentNode().replaceChild(a, elem);
-//					a.appendChild(elem);
-//
-//					if (title != null)
-//					{
-//						a.setAttribute("title", title);
-//					}
-//
-//					elem = a;
-//				}
-//
-//				String target = getTargetForCell(state.getCell());
-//
-//				if (target != null)
-//				{
-//					elem.setAttribute("target", target);
-//				}
-//			}
-//		}
-//	}
-//
-//	/**
-//	 * Returns the hyperlink to be used for the given cell.
-//	 */
-//	protected String getLinkForCell(Object cell)
-//	{
-//		return null;
-//	}
-//
-//	/**
-//	 * Returns the hyperlink to be used for the given cell.
-//	 */
-//	protected String getTargetForCell(Object cell)
-//	{
-//		return null;
-//	}
-//
-//	//
-//	// Redirected to change support
-//	//
-//
-//	/**
-//	 * @param listener
-//	 * @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.beans.PropertyChangeListener)
-//	 */
-//	public void addPropertyChangeListener(PropertyChangeListener listener)
-//	{
-//		changeSupport.addPropertyChangeListener(listener);
-//	}
-//
-//	/**
-//	 * @param propertyName
-//	 * @param listener
-//	 * @see java.beans.PropertyChangeSupport#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
-//	 */
-//	public void addPropertyChangeListener(String propertyName,
-//			PropertyChangeListener listener)
-//	{
-//		changeSupport.addPropertyChangeListener(propertyName, listener);
-//	}
-//
-//	/**
-//	 * @param listener
-//	 * @see java.beans.PropertyChangeSupport#removePropertyChangeListener(java.beans.PropertyChangeListener)
-//	 */
-//	public void removePropertyChangeListener(PropertyChangeListener listener)
-//	{
-//		changeSupport.removePropertyChangeListener(listener);
-//	}
-//
-//	/**
-//	 * @param propertyName
-//	 * @param listener
-//	 * @see java.beans.PropertyChangeSupport#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
-//	 */
-//	public void removePropertyChangeListener(String propertyName,
-//			PropertyChangeListener listener)
-//	{
-//		changeSupport.removePropertyChangeListener(propertyName, listener);
-//	}
-//
-//	/**
-//	 * Prints the version number on the console. 
-//	 */
-//	public static void main(String[] args)
-//	{
-//		System.out.println("mxGraph version \"" + VERSION + "\"");
-//	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxVsdxCodec.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxVsdxCodec.java
deleted file mode 100644
index 52816555c42f8d3b09a6ab325793682f9b6fde34..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxVsdxCodec.java
+++ /dev/null
@@ -1,1165 +0,0 @@
-///**
-// * Copyright (c) 2006-2017, JGraph Ltd
-// * Copyright (c) 2006-2017, Gaudenz Alder
-// */
-package com.mxgraph.io;
-
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.imageio.ImageIO;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.binary.StringUtils;
-import org.apache.commons.lang3.StringEscapeUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-import com.mxgraph.io.mxGraph.Model;
-import com.mxgraph.io.vsdx.ShapePageId;
-import com.mxgraph.io.vsdx.VsdxShape;
-import com.mxgraph.io.vsdx.mxCell;
-import com.mxgraph.io.vsdx.mxGeometry;
-import com.mxgraph.io.vsdx.mxPoint;
-import com.mxgraph.io.vsdx.mxRectangle;
-import com.mxgraph.io.vsdx.mxVsdxConnect;
-import com.mxgraph.io.vsdx.mxVsdxConstants;
-import com.mxgraph.io.vsdx.mxVsdxGeometryList;
-import com.mxgraph.io.vsdx.mxVsdxMaster;
-import com.mxgraph.io.vsdx.mxVsdxModel;
-import com.mxgraph.io.vsdx.mxVsdxPage;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.online.Utils;
-import com.mxgraph.online.mxBase64;
-import com.mxgraph.util.mxConstants;
-
-/**
- * Parses a .vsdx XML diagram file and imports it in the given graph.<br/>
- */
-public class mxVsdxCodec
-{
-	protected String RESPONSE_END = "</mxfile>";
-
-	protected String RESPONSE_DIAGRAM_START = "";
-	protected String RESPONSE_DIAGRAM_END = "</diagram>";
-
-	protected String RESPONSE_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><mxfile>";
-
-	/**
-	 * Stores the vertexes imported.
-	 */
-	protected HashMap<ShapePageId, mxCell> vertexMap = new HashMap<ShapePageId, mxCell>();
-
-	/**
-	 * Stores the shapes that represent Edges.
-	 */
-	protected HashMap<ShapePageId, VsdxShape> edgeShapeMap = new HashMap<ShapePageId, VsdxShape>();
-
-	/**
-	 * Stores the shapes that represent Vertexes.
-	 */
-	protected HashMap<ShapePageId, VsdxShape> vertexShapeMap = new HashMap<ShapePageId, VsdxShape>();
-
-	/**
-	 * Stores the parents of the shapes imported.
-	 */
-	protected HashMap<ShapePageId, Object> parentsMap = new HashMap<ShapePageId, Object>();
-
-	/**
-	 * Set to true if you want to display spline debug data
-	 */
-	protected boolean debugPaths = false;
-	
-	/**
-	 * Do not remove, ask David
-	 */
-	public static String vsdxPlaceholder = new String(Base64.decodeBase64("dmlzaW8="));
-public static void main(String[] args) {
-	System.out.println(vsdxPlaceholder);
-}
-	protected mxVsdxModel vsdxModel;
-	
-	public mxVsdxCodec()
-	{
-	}
-
-	/**
-	 * Calculate the absolute coordinates of a cell's point.
-	 * @param cellParent Cell that contains the point.
-	 * @param graph Graph where the parsed graph is included.
-	 * @param point Point to which coordinates are calculated.
-	 * @return The point in absolute coordinates.
-	 */
-	private static mxPoint calculateAbsolutePoint(Object cellParent,
-			mxGraph graph, mxPoint point)
-	{
-		if (cellParent != null)
-		{
-			mxGeometry geo = graph.getModel().getGeometry(cellParent);
-
-			if (geo != null) 
-			{
-				point.setX(point.getX() + geo.getX());
-				point.setY(point.getY() + geo.getY());				
-			}
-		}
-
-		return point;
-	}
-
-	/**
-	 * Parses the input VSDX format and uses the information to populate 
-	 * the specified graph.
-	 * @param docs All XML documents contained in the VSDX source file
-	 * @throws IOException 
-	 * @throws ParserConfigurationException 
-	 * @throws SAXException 
-	 * @throws TransformerException 
-	 */
-	public String decodeVsdx(byte[] data, String charset)
-			throws IOException, ParserConfigurationException, SAXException,
-			TransformerException
-	{
-		ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(data));
-		ZipEntry ze = null;
-		Map<String, Document> docData = new HashMap<String, Document>();
-		Map<String, String> mediaData = new HashMap<String, String>();
-
-		while ((ze = zis.getNextEntry()) != null)
-		{
-			String filename = ze.getName();
-
-			if (!ze.isDirectory())
-			{
-				ByteArrayOutputStream out = new ByteArrayOutputStream();
-				Utils.copy(zis, out);
-				out.close();
-
-				if (filename.toLowerCase().endsWith(".xml") | filename
-							.toLowerCase().endsWith(".xml.rels"))
-				{
-					String str = out.toString(charset);
-					if (!str.isEmpty())
-					{
-						//UTF-8 BOM causes exception while parsing, so remove it
-						//TODO is the text encoding will be correct or string must be re-read as UTF-8?
-						if (str.startsWith("")) str = str.substring(3);
-						
-						Document doc = mxXmlUtils.parseXml(str);
-						
-						if (doc == null) //An exception that is most probably due to encoding issues
-						{
-							byte[] outBytes = out.toByteArray();
-							if (outBytes[1] == 0 && outBytes[3] == 0 && outBytes[5] == 0) //UTF-16 Little Endian (has a null every other character) [Heuristic]
-							{
-								str = out.toString("UTF-16LE");
-								doc = mxXmlUtils.parseXml(str);
-							}
-							//TODO add any other non-standard encoding that may be needed 
-						}
-						
-						// Hack to be able to find the filename from an element in the XML
-						doc.setDocumentURI(filename);
-						docData.put(filename, doc);
-					}
-				}
-				else if (filename.toLowerCase().startsWith(mxVsdxCodec.vsdxPlaceholder + "/media"))
-				{
-					String base64Str = "";
-					//Some BMP images are huge and doesn't show up in the browser, so, it is better to compress it as PNG 
-					if (filename.toLowerCase().endsWith(".bmp")) 
-					{
-						try 
-						{
-							
-								//Use ImageIO as it is normally available in other servlet containers (e.g.; Tomcat)
-								ByteArrayInputStream bis = new ByteArrayInputStream(out.toByteArray());
-								ByteArrayOutputStream bos = new ByteArrayOutputStream();
-								
-								BufferedImage image = ImageIO.read(bis);
-								ImageIO.write(image, "PNG", bos);
-								
-								base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(bos.toByteArray(), false));
-							
-						}
-						catch (Exception e) 
-						{
-							//conversion failed, nothing we can do!
-							base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(out.toByteArray(), false));
-						}
-					}
-					else if (filename.toLowerCase().endsWith(".emf")) //extract jpg or png images from emf file 
-					{
-						byte[] emfData = out.toByteArray();
-						boolean imageFound = false;
-						//search for jpg or png header
-						for (int i = 0; i < emfData.length - 8; i++) //we subtract 8 from the length to be safe when testing image headers
-						{
-							if (isPng(emfData, i) || isJpg(emfData, i)) //png or jpg?
-							{
-								//although the resulting file is larger than the actual image but any extra bytes after the image are ignored
-								base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(Arrays.copyOfRange(emfData, i, emfData.length), false));
-								imageFound = true;
-								break;
-							}
-							
-						}
-						if (!imageFound)
-						{
-							base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(out.toByteArray(), false));
-						}
-					}
-					else
-					{
-						base64Str = StringUtils.newStringUtf8(Base64.encodeBase64(out.toByteArray(), false));
-					}
-
-					mediaData.put(filename, base64Str);
-				}
-			}
-		}
-
-		zis.close();
-
-		String path = mxVsdxCodec.vsdxPlaceholder + "/document.xml";
-		Document rootDoc = docData.get(path);
-		Node rootChild = rootDoc.getFirstChild();
-
-		while (rootChild != null && !(rootChild instanceof Element))
-		{
-			rootChild.getNextSibling();
-		}
-
-		if (rootChild != null && rootChild instanceof Element)
-		{
-			importNodes(rootDoc, (Element) rootChild, path, docData);
-		}
-		else
-		{
-			// TODO log error
-			return null;
-		}
-
-		vsdxModel = new mxVsdxModel(rootDoc, docData, mediaData);
-
-		//Imports each page of the document.
-		Map<Integer, mxVsdxPage> pages = vsdxModel.getPages();
-
-		StringBuilder xmlBuilder = new StringBuilder(RESPONSE_HEADER);
-
-		for (Map.Entry<Integer, mxVsdxPage> entry : pages.entrySet())
-		{
-			mxVsdxPage page = entry.getValue();
-			
-			if (!page.isBackground())
-			{
-				mxGraph graph = createMxGraph();
-				
-				graph.getModel().beginUpdate();
-				importPage(page, graph, graph.getDefaultParent());
-				
-				mxVsdxPage backPage = page.getBackPage();
-				
-				if (backPage != null)
-				{
-					graph.getModel().setValue(graph.getDefaultParent(), page.getPageName());
-					Object backCell = new mxCell(backPage.getPageName());
-					graph.addCell(backCell, graph.getModel().getRoot(), 0, null, null);
-					importPage(backPage, graph, graph.getDefaultParent());
-				}
-				
-				//scale page 
-				double scale = page.getPageScale() / page.getDrawingScale();
-				
-				if (scale != 1)
-				{
-					 Model model = graph.getModel();
-	
-					for (Object c : model.getCells().values()) 
-					{
-						mxGeometry geo = model.getGeometry(c);
-						
-						if (geo != null) 
-						{
-							scaleRect(geo, scale);
-							scaleRect(geo.getAlternateBounds(), scale);
-							
-							if (model.isEdge(c)) 
-							{
-								//scale edge waypoints, offset, ...
-								scalePoint(geo.getSourcePoint(), scale);
-								scalePoint(geo.getTargetPoint(), scale);
-								scalePoint(geo.getOffset(), scale);
-								List<mxPoint> points = geo.getPoints();
-								
-								if (points != null) 
-								{
-									for (mxPoint p : points) 
-									{
-										scalePoint(p, scale);
-									}
-								}
-							}
-						}
-					}
-				}
-				
-				graph.getModel().endUpdate();
-				
-				xmlBuilder.append(RESPONSE_DIAGRAM_START);
-				xmlBuilder.append(processPage(graph, page));
-				xmlBuilder.append(RESPONSE_DIAGRAM_END);
-			}
-		}
-
-		xmlBuilder.append(RESPONSE_END);
-		
-		return xmlBuilder.toString();
-	}
-
-	protected mxGraph createMxGraph() {
-		mxGraph graph = new mxGraph();
-		//Disable parent (groups) auto extend feature as it miss with the coordinates of vsdx format
-		graph.setExtendParents(false);
-		graph.setExtendParentsOnAdd(false);
-		
-		graph.setConstrainChildren(false);
-		graph.setHtmlLabels(true);
-		//Prevent change of edge parent as it misses with the routing points
-		graph.getModel().setMaintainEdgeParent(false);
-		return graph;
-	}
-
-	protected String processPage(mxGraph graph, mxVsdxPage page) throws IOException
-	{
-		mxCodec codec = new mxCodec();
-		Node node = codec.encode(graph.getModel());
-		((Element) node).setAttribute("style", "default-style2");
-		String modelString = mxXmlUtils.getXml(node);
-		String modelAscii = Utils.encodeURIComponent(modelString, Utils.CHARSET_FOR_URL_ENCODING);
-		byte[] modelBytes= Utils.deflate(modelAscii);
-		
-		StringBuilder output = new StringBuilder();
-		
-		if (page != null)
-		{
-			String pageName = StringEscapeUtils.escapeXml11(page.getPageName());
-			output.append("<diagram name=\""); 
-			output.append(pageName);
-			output.append("\">");
-		}
-		output.append(mxBase64.encodeToString(modelBytes, false));
-		
-		return  output.toString();
-	}
-	
-	private boolean isJpg(byte[] emfData, int i) 
-	{
-		//the loop calling this function make sure that we still have 3 bytes in the buffer
-		return emfData[i  ] == (byte) 0xFF && emfData[i+1] == (byte) 0xD8 &&
-			   emfData[i+2] == (byte) 0xFF;
-	}
-
-	private boolean isPng(byte[] emfData, int i) 
-	{
-		//the loop calling this function make sure that we still have 8 bytes in the buffer
-		return emfData[i  ] == (byte) 0x89 && emfData[i+1] == (byte) 0x50 &&
-			   emfData[i+2] == (byte) 0x4E && emfData[i+3] == (byte) 0x47 &&
-			   emfData[i+4] == (byte) 0x0D && emfData[i+5] == (byte) 0x0A &&
-			   emfData[i+6] == (byte) 0x1A && emfData[i+7] == (byte) 0x0A;
-	}
-
-	/**
-	 * Scale a point in place
-	 * 
-	 * @param p point to scale in place 
-	 * @param scale scale
-	 * @return scaled point
-	 */
-	private mxPoint scalePoint(mxPoint p, double scale) 
-	{
-		if (p != null)
-		{
-			p.setX(p.getX() * scale);
-			p.setY(p.getY() * scale);
-		}
-
-		return p;
-	}
-	
-	/**
-	 * Scale a rectangle in place
-	 * 
-	 * @param rect rectangle to scale in place
-	 * @param scale scale
-	 * @return scaled rectangle
-	 */
-	private mxRectangle scaleRect(mxRectangle rect, double scale) 
-	{
-		if (rect != null) 
-		{
-			rect.setX(rect.getX() * scale);
-			rect.setY(rect.getY() * scale);
-			rect.setHeight(rect.getHeight() * scale);
-			rect.setWidth(rect.getWidth() * scale);
-		}
-
-		return rect;
-	}
-	
-	/**
-	 * 
-	 * @param rootDoc
-	 * @param currentNode
-	 * @param path
-	 * @param docData
-	 */
-	private void importNodes(Document rootDoc, Element currentNode,
-			String path, Map<String, Document> docData)
-	{
-		int lastSlash = path.lastIndexOf("/");
-
-		String dir = path;
-		String fileName = path;
-
-		if (lastSlash != -1)
-		{
-			dir = path.substring(0, lastSlash);
-			fileName = path.substring(lastSlash + 1, path.length());
-		}
-		else
-		{
-			// Can't handle this case
-			return;
-		}
-
-		String relsPath = dir + "/_rels/" + fileName + ".rels";
-		Document relsDoc = docData.get(relsPath);
-
-		if (relsDoc == null)
-		{
-			// Valid to not have a rels for an XML file
-			return;
-		}
-
-		NodeList rels = relsDoc.getElementsByTagName("Relationship");
-		Map<String, String> relMap = new HashMap<String, String>();
-
-		for (int i = 0; i < rels.getLength(); i++)
-		{
-			Element currElem = (Element) rels.item(i);
-			String id = currElem.getAttribute("Id");
-			String target = currElem.getAttribute("Target");
-			relMap.put(id, target);
-		}
-
-		NodeList relList = currentNode.getElementsByTagName("Rel");
-
-		for (int i = 0; i < relList.getLength(); i++)
-		{
-			Element rel = (Element) relList.item(i);
-			String pathSuffix = relMap.get(rel.getAttribute("r:id"));
-			String target = dir + "/" + pathSuffix;
-
-			if (target != null)
-			{
-				Document childDoc = docData.get(target);
-
-				if (childDoc != null)
-				{
-					Node parent = rel.getParentNode();
-					Node rootChild = childDoc.getFirstChild();
-
-					while (rootChild != null && !(rootChild instanceof Element))
-					{
-						rootChild.getNextSibling();
-					}
-
-					if (rootChild != null && rootChild instanceof Element)
-					{
-						Node importNode = rootChild.getFirstChild();
-
-						while (importNode != null)
-						{
-							if (importNode instanceof Element)
-							{
-								Node newNode = parent.appendChild(rootDoc
-										.importNode(importNode, true));
-								String pathTmp = target;
-								importNodes(rootDoc, (Element) newNode,
-										pathTmp, docData);
-							}
-
-							importNode = importNode.getNextSibling();
-						}
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Imports a page of the document with the actual pageHeight.<br/>
-	 * In .vdx, the Y-coordinate grows upward from the bottom of the page.<br/>
-	 * The page height is used for calculating the correct position in mxGraph using
-	 * this formula: mxGraph_Y_Coord = PageHeight - VSDX_Y_Coord.
-	 * @param page Actual page Element to be imported
-	 * @param graph Graph where the parsed graph is included.
-	 * @param parent The parent of the elements to be imported.
-	 */
-	protected double importPage(mxVsdxPage page, mxGraph graph, Object parent)
-	{
-		Map<Integer, VsdxShape> shapes = page.getShapes();
-		Iterator<Map.Entry<Integer, VsdxShape>> entries = shapes.entrySet()
-				.iterator();
-
-		double pageHeight = page.getPageDimensions().getY();
-		Integer pageId = page.getId();
-
-		while (entries.hasNext())
-		{
-			Map.Entry<Integer, VsdxShape> entry = entries.next();
-
-			addShape(graph, entry.getValue(), parent,
-					pageId, pageHeight);
-		}
-
-		Map<Integer, mxVsdxConnect> connects = page.getConnects();
-		Iterator<Map.Entry<Integer, mxVsdxConnect>> entries2 = connects
-				.entrySet().iterator();
-
-		while (entries2.hasNext())
-		{
-			Map.Entry<Integer, mxVsdxConnect> entry = entries2.next();
-			ShapePageId edgeId = addConnectedEdge(graph, entry.getValue(), pageId, pageHeight);
-			
-			if (edgeId != null)
-			{
-				edgeShapeMap.remove(edgeId); // ensure not processed twice
-			}
-		}
-
-		//Process unconnected edges.
-		Iterator<Entry<ShapePageId, VsdxShape>> it = edgeShapeMap.entrySet().iterator();
-		
-		while (it.hasNext())
-		{
-			Entry<ShapePageId, VsdxShape> edgeShapeEntry = it.next();
-			
-			//Only this page unconnected edges
-			if (edgeShapeEntry.getKey().getPageNumber() == pageId)
-			{
-				addUnconnectedEdge(graph, parentsMap.get(edgeShapeEntry.getKey()), edgeShapeEntry.getValue(), pageHeight);
-			}
-		}
-
-		sanitiseGraph(graph);
-
-		return pageHeight;
-	}
-
-	/**
-	 * Adds a vertex to the graph if 'shape' is a vertex or add the shape to edgeShapeMap if it is an edge.
-	 * This method doesn't import sub-shapes of 'shape'.
-	 * @param graph Graph where the parsed graph is included.
-	 * @param shp Shape to be imported.
-	 * @param parentHeight Height of the parent cell.
-	 * @return the new vertex added. null if 'shape' is not a vertex.
-	 */
-	protected mxCell addShape(mxGraph graph, VsdxShape shape, Object parent, Integer pageId, double parentHeight)
-	{
-		shape.parentHeight = parentHeight;
-
-		String type = VsdxShape.getType(shape.getShape());
-
-		//If is a Shape or a Group add the vertex to the graph.
-		if (type != null
-				&& (type.equals(mxVsdxConstants.TYPE_SHAPE)
-						|| type.equals(mxVsdxConstants.TYPE_GROUP) || type
-							.equals(mxVsdxConstants.FOREIGN)))
-		{
-			int id = shape.getId();
-
-			if (shape.isVertex())
-			{
-				mxCell v1 = null;
-
-				if (shape.isGroup())
-				{
-					v1 = addGroup(graph, shape, parent, pageId, parentHeight);
-				}
-				else
-				{
-					v1 = addVertex(graph, shape, parent, pageId, parentHeight);
-				}
-
-				vertexShapeMap.put(new ShapePageId(pageId, id), shape);
-				return v1;
-			}
-			else
-			{
-				//remember the edge order to maintain the shapes order (back to front)
-				shape.setShapeIndex(graph.getModel().getChildCount(parent));
-				edgeShapeMap.put(new ShapePageId(pageId, id), shape);
-				parentsMap.put(new ShapePageId(pageId, id), parent);
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * Adds a group to the graph.
-	 * The sub-shapes of a complex shape are processed like part of the shape.
-	 * @param graph Graph where the parsed graph is included.
-	 * @param parent Parent cell of the shape.
-	 * @param parentHeight Height of the parent cell of the shape.
-	 * @return Cell added to the graph.
-	 */
-	public mxCell addGroup(mxGraph graph, VsdxShape shape, Object parent, Integer pageId, double parentHeight)
-	{
-		//Set title
-		//		String t = "";
-		//		Element shapeElem = shape.getShape();
-		//		Element text = (Element) shapeElem.getElementsByTagName("Text").item(0);
-		//
-		//		if (text != null)
-		//		{
-		//			t = (text.getTextContent());
-		//		}
-		
-		//Define dimensions
-		mxPoint d = shape.getDimensions();
-		mxVsdxMaster master = shape.getMaster();
-		//Define style
-		Map<String, String> styleMap = shape.getStyleFromShape();
-		
-		//Shape inherit its master geometry, so we don't need to check its master
-		mxVsdxGeometryList geomList = shape.getGeomList();
-		
-		if (geomList.isNoFill())
-		{
-			styleMap.put(mxConstants.STYLE_FILLCOLOR, "none");
-			styleMap.put(mxConstants.STYLE_GRADIENTCOLOR, "none");
-		}
-		
-		if (geomList.isNoLine())
-		{
-			styleMap.put(mxConstants.STYLE_STROKECOLOR, "none");
-		}
-
-		styleMap.put("html", "1");
-		styleMap.put(mxConstants.STYLE_WHITE_SPACE, "wrap");
-		//TODO need to check if "shape=" should be added before the shape name (for "image", it should be skipped for example)
-		String style = mxVsdxUtils.getStyleString(styleMap, "=");
-
-		mxCell group = null;
-		Map<Integer, VsdxShape> children = shape.getChildShapes();
-		boolean hasChildren = children != null && children.size() > 0;
-		boolean subLabel = shape.isDisplacedLabel() || shape.isRotatedLabel() || hasChildren;
-		mxPoint o = shape.getOriginPoint(parentHeight, true);
-
-		if (subLabel)
-		{
-			group = (mxCell) graph.insertVertex(parent, null, null,
-				Math.round(o.getX() * 100) / 100, Math.round(o.getY() * 100) / 100,
-				Math.round(d.getX() * 100) / 100, Math.round(d.getY() * 100) / 100, style);
-		}
-		else
-		{
-			String textLabel = shape.getTextLabel();
-			group = (mxCell) graph.insertVertex(parent, null, textLabel,
-				Math.round(o.getX() * 100) / 100, Math.round(o.getY() * 100) / 100,
-				Math.round(d.getX() * 100) / 100, Math.round(d.getY() * 100) / 100, style);
-		}
-
-		Iterator<Map.Entry<Integer, VsdxShape>> entries = children.entrySet()
-				.iterator();
-		
-		while (entries.hasNext())
-		{
-			Map.Entry<Integer, VsdxShape> entry = entries.next();
-			VsdxShape subShape = entry.getValue();
-			Integer Id = subShape.getId();
-
-			if (subShape.isVertex())
-			{
-				String type = VsdxShape.getType(subShape.getShape());
-
-				//If is a Shape or a Group add the vertex to the graph.
-				if (type != null
-						&& (type.equals(mxVsdxConstants.TYPE_SHAPE)
-								|| type.equals(mxVsdxConstants.TYPE_GROUP) || type
-									.equals(mxVsdxConstants.FOREIGN)))
-				{
-					if (subShape.isVertex())
-					{
-						subShape.propagateRotation(shape.getRotation());
-
-						if (subShape.isGroup())
-						{
-							addGroup(graph, subShape, group, pageId, d.getY());
-						}
-						else
-						{
-							addVertex(graph, subShape, group, pageId, d.getY());
-						}
-					}
-				}
-
-				if (master == null)
-				{
-					// If the group doesn't have a master, sub vertices are instances of document masters
-					vertexShapeMap.put(new ShapePageId(pageId, Id),
-							subShape);
-				}
-			}
-			else
-			{
-				if (master == null)
-				{
-					// If the group doesn't have a master, sub edges are instances of document masters
-					edgeShapeMap.put(new ShapePageId(pageId, Id),
-							subShape);
-					parentsMap.put(new ShapePageId(pageId, Id), group);
-				}
-				else
-				{
-					addUnconnectedEdge(graph, group, subShape, parentHeight);
-				}
-			}
-		}
-		
-		if (subLabel)
-		{
-			shape.createLabelSubShape(graph, group);
-		}
-
-		//rotate sub vertices coordinates based on parent rotation. It should be done here after the group size if determined
-		double rotation = shape.getRotation();
-		if (rotation != 0)
-		{
-			mxGeometry pgeo = group.getGeometry();
-			double hw = pgeo.getWidth() / 2, hh = pgeo.getHeight() / 2;
-			for (int i = 0; i < group.getChildCount(); i++)
-			{
-				mxCell child = group.getChildAt(i);
-				Utils.rotatedGeometry(child.getGeometry(), rotation, hw, hh);				
-			}
-		}
-		return group;
-	}
-
-	public static void rotatedEdgePoint(mxPoint pt, double rotation,
-			double cx, double cy)
-	{
-		rotation = Math.toRadians(rotation);
-		double cos = Math.cos(rotation), sin = Math.sin(rotation);
-
-		double x = pt.getX() - cx;
-		double y = pt.getY() - cy;
-
-		double x1 = x * cos - y * sin;
-		double y1 = y * cos + x * sin;
-
-		pt.setX(Math.round(x1 + cx));
-		pt.setY(Math.round(y1 + cy));
-	}
-
-	/**
-	 * Adds a simple shape to the graph
-	 * @param graph Graph where the parsed graph is included.
-	 * @param parent Parent cell of the shape.
-	 * @param parentHeight Height of the parent cell of the shape.
-	 * @return Cell added to the graph.
-	 */
-	public mxCell addVertex(mxGraph graph, VsdxShape shape, Object parent, Integer pageId, double parentHeight)
-	{
-		//Defines Text Label.
-		String textLabel = "";
-
-		boolean hasSubLabel = shape.isDisplacedLabel() || shape.isRotatedLabel();// || shape.getRotation() != 0;
-
-		if (!hasSubLabel)
-		{
-			textLabel = shape.getTextLabel();
-		}
-
-		mxPoint dimensions = shape.getDimensions();
-
-		Map<String, String> styleMap = shape.getStyleFromShape();
-
-		//if (textLabel != null && (textLabel.startsWith("<p>") || textLabel.startsWith("<p ")
-		//		|| textLabel.startsWith("<font")))
-		//{
-			styleMap.put("html", "1");
-		//}
-
-		boolean geomExists = styleMap.containsKey(mxConstants.STYLE_SHAPE)
-				|| styleMap.containsKey("stencil");
-
-		if (!styleMap.containsKey(mxConstants.STYLE_FILLCOLOR) || !geomExists)
-		{
-			styleMap.put(mxConstants.STYLE_FILLCOLOR, "none");
-		}
-
-		if (!geomExists)
-		{
-			styleMap.put(mxConstants.STYLE_STROKECOLOR, "none");
-		}
-
-		if (!styleMap.containsKey(mxConstants.STYLE_GRADIENTCOLOR)
-				|| !geomExists)
-		{
-			styleMap.put(mxConstants.STYLE_GRADIENTCOLOR, "none");
-		}
-
-		styleMap.put(mxConstants.STYLE_WHITE_SPACE, "wrap");
-
-		mxPoint coordinates = shape.getOriginPoint(parentHeight, true);
-
-		if (geomExists || textLabel != null)
-		{
-			String style = mxVsdxUtils.getStyleString(styleMap, "=");
-
-			mxCell v1 = null;
-
-			if (hasSubLabel)
-			{
-				v1 = (mxCell) graph.insertVertex(parent, null, null,
-					Math.round(coordinates.getX() * 100) / 100, Math.round(coordinates.getY() * 100) / 100,
-					Math.round(dimensions.getX() * 100) / 100, Math.round(dimensions.getY() * 100) / 100, style);
-			}
-			else
-			{
-				v1 = (mxCell) graph.insertVertex(parent, null, textLabel,
-					Math.round(coordinates.getX() * 100) / 100, Math.round(coordinates.getY() * 100) / 100,
-					Math.round(dimensions.getX() * 100) / 100, Math.round(dimensions.getY() * 100) / 100, style);
-			}
-
-			vertexMap.put(new ShapePageId(pageId, shape.getId()), v1);
-			shape.setLabelOffset(v1, style);
-
-			if (hasSubLabel)
-			{
-				shape.createLabelSubShape(graph, v1);
-			}
-
-			return v1;
-		}
-
-		return null;
-	}
-
-	/**
-	 * Adds a connected edge to the graph.
-	 * These edged are the referenced in one Connect element at least.
-	 * @param graph graph Graph where the parsed graph is included.
-	 * @param connect Connect Element that references an edge shape and the source vertex.
-	 */
-	protected ShapePageId addConnectedEdge(mxGraph graph, mxVsdxConnect connect, Integer pageId, double pageHeight)
-	{
-		Integer fromSheet = connect.getFromSheet();
-		ShapePageId edgeId = new ShapePageId(pageId, fromSheet);
-		VsdxShape edgeShape = edgeShapeMap.get(edgeId);
-
-		if (edgeShape == null)
-		{
-			return null;
-		}
-
-		Object parent = parentsMap.get(new ShapePageId(pageId,
-				edgeShape.getId()));
-		double parentHeight = pageHeight;
-
-		if (parent != null)
-		{
-			mxGeometry parentGeo = graph.getModel().getGeometry(parent);
-
-			if (parentGeo != null)
-			{
-				parentHeight = parentGeo.getHeight();
-			}
-		}
-
-		//Get beginXY and endXY coordinates.
-		mxPoint beginXY = edgeShape.getStartXY(parentHeight);
-		mxPoint endXY = edgeShape.getEndXY(parentHeight);
-		List<mxPoint> points = edgeShape.getRoutingPoints(parentHeight, beginXY, edgeShape.getRotation());
-
-		rotateChildEdge(graph.getModel(), parent, beginXY, endXY, points);
-
-		Integer sourceSheet = connect.getSourceToSheet();
-
-		mxCell source = sourceSheet != null ? vertexMap
-				.get(new ShapePageId(pageId, sourceSheet)) : null;
-
-		if (source == null)
-		{
-			// Source is dangling
-			source = (mxCell) graph.insertVertex(parent, null, null,
-				Math.round(beginXY.getX() * 100) / 100,
-				Math.round(beginXY.getY() * 100) / 100, 0, 0);
-		}
-		//Else: Routing points will contain the exit/entry points, so no need to set the to/from constraint 
-
-		Integer toSheet = connect.getTargetToSheet();
-
-		mxCell target = toSheet != null ? vertexMap.get(new ShapePageId(
-				pageId, toSheet)) : null;
-
-		if (target == null)
-		{
-			// Target is dangling
-			target = (mxCell) graph.insertVertex(parent, null, null,
-				Math.round(endXY.getX() * 100) / 100,
-				Math.round(endXY.getY() * 100) / 100, 0, 0);
-		}
-		//Else: Routing points will contain the exit/entry points, so no need to set the to/from constraint 
-
-		//Defines the style of the edge.
-		Map<String, String> styleMap = edgeShape
-				.getStyleFromEdgeShape(parentHeight);
-		//Insert new edge and set constraints.
-		Object edge;
-		double rotation = edgeShape.getRotation();
-		if (rotation != 0)
-		{
-			edge = graph.insertEdge(parent, null, null, source,
-					target, mxVsdxUtils.getStyleString(styleMap, "="));
-			
-			mxCell label = edgeShape.createLabelSubShape(graph, (mxCell) edge);
-			if (label != null)
-			{
-				label.setStyle(label.getStyle() + ";rotation=" + (rotation > 60 && rotation < 240 ? (rotation + 180) % 360 : rotation));
-				
-				mxGeometry geo = label.getGeometry();
-				geo.setX(0);
-				geo.setY(0);
-				geo.setRelative(true);
-				geo.setOffset(new mxPoint(-geo.getWidth() / 2, -geo.getHeight() / 2));
-			}
-		}
-		else
-		{
-			edge = graph.insertEdge(parent, null, edgeShape.getTextLabel(), source,
-					target, mxVsdxUtils.getStyleString(styleMap, "="));
-			
-			mxPoint lblOffset = edgeShape.getLblEdgeOffset(graph.getView(), points);
-			((mxCell)edge).getGeometry().setOffset(lblOffset);
-		}
-		
-		mxGeometry edgeGeometry = graph.getModel().getGeometry(edge);
-		edgeGeometry.setPoints(points);
-
-		//Gets and sets routing points of the edge.
-		if (styleMap.containsKey("curved")
-				&& styleMap.get("curved").equals("1"))
-		{
-			edgeGeometry = graph.getModel().getGeometry(edge);
-			List<mxPoint> pointList = edgeShape
-					.getControlPoints(parentHeight);
-			edgeGeometry.setPoints(pointList);
-		}
-		
-		return edgeId;
-	}
-
-	/**
-	 * Adds a new edge not connected to any vertex to the graph.
-	 * @param graph Graph where the parsed graph is included.
-	 * @param parent Parent cell of the edge to be imported.
-	 * @param edgeShape Shape Element that represents an edge.
-	 * @return The new edge added.
-	 */
-	protected Object addUnconnectedEdge(mxGraph graph, Object parent, VsdxShape edgeShape, double pageHeight)
-	{
-		double parentHeight = pageHeight;
-
-		if (parent != null)
-		{
-			mxGeometry parentGeometry = graph.getModel().getGeometry(parent);
-
-			if (parentGeometry != null)
-			{
-				parentHeight = parentGeometry.getHeight();
-			}
-		}
-
-		mxPoint beginXY = edgeShape.getStartXY(parentHeight);
-		mxPoint endXY = edgeShape.getEndXY(parentHeight);
-
-		//Define style of the edge
-		Map<String, String> styleMap = edgeShape.getStyleFromEdgeShape(parentHeight);
-
-		//TODO add style numeric entries rounding option
-		
-		//Insert new edge and set constraints.
-		Object edge;
-		List<mxPoint> points = edgeShape.getRoutingPoints(parentHeight, beginXY, edgeShape.getRotation());
-		double rotation = edgeShape.getRotation();
-		if (rotation != 0)
-		{
-			if (edgeShape.getShapeIndex() == 0)
-			{
-				edge = graph.insertEdge(parent, null, null, null, null, mxVsdxUtils.getStyleString(styleMap, "="));
-			}
-			else
-			{
-				edge = graph.createEdge(parent, null, null, null, null, mxVsdxUtils.getStyleString(styleMap, "="));
-				edge = graph.addEdge(edge, parent, null, null, edgeShape.getShapeIndex());
-			}
-			mxCell label = edgeShape.createLabelSubShape(graph, (mxCell) edge);
-			if (label != null)
-			{
-				label.setStyle(label.getStyle() + ";rotation=" + (rotation > 60 && rotation < 240 ? (rotation + 180) % 360 : rotation));
-				
-				mxGeometry geo = label.getGeometry();
-				geo.setX(0);
-				geo.setY(0);
-				geo.setRelative(true);
-				geo.setOffset(new mxPoint(-geo.getWidth() / 2, -geo.getHeight() / 2));
-			}
-		}
-		else
-		{
-			if (edgeShape.getShapeIndex() == 0)
-			{
-				edge = graph.insertEdge(parent, null, edgeShape.getTextLabel(), null, null, mxVsdxUtils.getStyleString(styleMap, "="));
-			}
-			else
-			{
-				edge = graph.createEdge(parent, null, edgeShape.getTextLabel(), null, null, mxVsdxUtils.getStyleString(styleMap, "="));
-				edge = graph.addEdge(edge, parent, null, null, edgeShape.getShapeIndex());
-			}
-			
-			mxPoint lblOffset = edgeShape.getLblEdgeOffset(graph.getView(), points);
-			((mxCell)edge).getGeometry().setOffset(lblOffset);
-		}
-		
-		rotateChildEdge(graph.getModel(), parent, beginXY, endXY, points);
-		
-		mxGeometry edgeGeometry = graph.getModel().getGeometry(edge);
-		edgeGeometry.setPoints(points);
-		
-		edgeGeometry.setTerminalPoint(beginXY, true);
-		edgeGeometry.setTerminalPoint(endXY, false);
-
-		//Gets and sets routing points of the edge.
-		if (styleMap.containsKey("curved")
-				&& styleMap.get("curved").equals("1"))
-		{
-			edgeGeometry = graph.getModel().getGeometry(edge);
-			List<mxPoint> pointList = edgeShape
-					.getControlPoints(parentHeight);
-			edgeGeometry.setPoints(pointList);
-		}
-		
-		return edge;
-	}
-
-	protected void rotateChildEdge(Model model, Object parent, mxPoint beginXY, mxPoint endXY, List<mxPoint> points) {
-		//Rotate all points based on parent rotation
-		//Must get parent rotation and apply it similar to what we did in group rotation of all children
-		if (parent != null)
-		{
-			mxGeometry pgeo = model.getGeometry(parent);
-			String pStyle = model.getStyle(parent);
-			
-			if (pgeo != null && pStyle != null) 
-			{
-				int pos = pStyle.indexOf("rotation=");
-				
-				if (pos > -1)
-				{
-					double pRotation = Double.parseDouble(pStyle.substring(pos + 9, pStyle.indexOf(';', pos))); //9 is the length of "rotation="
-	
-					double hw = pgeo.getWidth() / 2, hh = pgeo.getHeight() / 2;
-					
-					rotatedEdgePoint(beginXY, pRotation, hw, hh);
-					rotatedEdgePoint(endXY, pRotation, hw, hh);
-					
-					for (mxPoint p : points) 
-					{
-						rotatedEdgePoint(p, pRotation, hw, hh);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Post processes groups to remove leaf vertices that render nothing
-	 * @param group
-	 */
-	protected void sanitiseGraph(mxGraph graph)
-	{
-		Object root = graph.getModel().getRoot();
-		sanitiseCell(graph, root);
-	}
-	
-	private boolean sanitiseCell(mxGraph graph, Object cell)
-	{
-		Model model = graph.getModel();
-		int childCount = model.getChildCount(cell);
-		ArrayList<Object> removeList = new ArrayList<Object>();
-
-		for (int i = 0; i < childCount; i++)
-		{
-			Object child = model.getChildAt(cell, i);
-			boolean remove = sanitiseCell(graph, child);
-			
-			// Can't remove during loop or indexing is messed up
-			if (remove)
-			{
-				removeList.add(child);
-			}
-		}
-		
-		for (Object removeChild : removeList)
-		{
-			model.remove(removeChild);
-		}
-		
-		if (childCount > 0)
-		{
-			// children may have been removed above
-			childCount = model.getChildCount(cell);
-		}
-		
-		String value = String.valueOf(model.getValue(cell));
-		String style = model.getStyle(cell);
-
-		if (childCount == 0 && model.isVertex(cell))
-		{
-			if ((model.getValue(cell) == null || value.isEmpty()) &&
-					(style != null) &&
-					(style.contains(mxConstants.STYLE_FILLCOLOR + "=none")) &&
-					(style.contains(mxConstants.STYLE_STROKECOLOR + "=none")) &&
-					(!style.contains("image=")))
-			{
-				// Leaf vertex, nothing rendered, no label, remove it
-
-				return true;
-			}
-		}
-		
-		return false;
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxVssxCodec.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxVssxCodec.java
deleted file mode 100644
index 1606790b2603335685800ef8d63625451442633b..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxVssxCodec.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package com.mxgraph.io;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
-
-import com.mxgraph.io.mxGraph.Model;
-import com.mxgraph.io.vsdx.ShapePageId;
-import com.mxgraph.io.vsdx.VsdxShape;
-import com.mxgraph.io.vsdx.mxCell;
-import com.mxgraph.io.vsdx.mxGeometry;
-import com.mxgraph.io.vsdx.mxPoint;
-import com.mxgraph.io.vsdx.mxVsdxConstants;
-import com.mxgraph.io.vsdx.mxVsdxMaster;
-import com.mxgraph.io.vsdx.mxVsdxPage;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class mxVssxCodec extends mxVsdxCodec 
-{
-	public mxVssxCodec()
-	{
-		RESPONSE_END = "";
-		RESPONSE_DIAGRAM_START = "";
-		RESPONSE_DIAGRAM_END = "";
-		RESPONSE_HEADER = "";
-	}
-	
-	public String decodeVssx(byte[] data, String charset)
-			throws IOException, ParserConfigurationException, SAXException,
-			TransformerException
-	{
-		StringBuilder library = new StringBuilder("<mxlibrary>[");
-		
-		//process shapes in pages
-		String shapesInPages = decodeVsdx(data, charset);
-		
-		library.append(shapesInPages);
-		
-		//process shapes in master
-		Map<String, mxVsdxMaster> masterShapes = vsdxModel.getMasterShapes();
-		
-		//using the first page as a dummy one
-		mxVsdxPage page = vsdxModel.getPages().values().iterator().next();
-		
-		if (masterShapes != null)
-		{
-			StringBuilder shapes = new StringBuilder();
-			String comma = shapesInPages.isEmpty()? "" : ",";
-			for (mxVsdxMaster master : masterShapes.values())
-			{
-				mxGraph shapeGraph = createMxGraph();
-				
-				Element shapeElem = master.getMasterShape().getShape();
-				VsdxShape shape = new VsdxShape(page, shapeElem, !page.isEdge(shapeElem), masterShapes, null, vsdxModel);
-				mxCell cell = null;
-				
-				if (shape.isVertex())
-				{
-					edgeShapeMap.clear();
-					parentsMap.clear();
-					cell = addShape(shapeGraph, shape, shapeGraph.getDefaultParent(),
-							0, 1169); //1169 is A4 page height
-					
-					for ( Entry<ShapePageId, VsdxShape> edgeEntry : edgeShapeMap.entrySet()) 
-					{
-						Object parent = parentsMap.get(edgeEntry.getKey());
-						addUnconnectedEdge(shapeGraph, parent, edgeEntry.getValue(), 1169); //1169 is A4 page height
-					}
-				}
-				else
-				{
-					cell = (mxCell) addUnconnectedEdge(shapeGraph, null, shape, 1169); //1169 is A4 page height
-				}
-				
-				if (cell != null)
-				{
-					shapes.append(comma);
-					shapes.append("{\"xml\":\"");
-					mxGeometry geo = normalizeGeo(cell);
-					
-					sanitiseGraph(shapeGraph);
-					
-					if (shapeGraph.getModel().getChildCount(shapeGraph.getDefaultParent()) == 0) continue;
-				
-					String shapeXML = super.processPage(shapeGraph, null);
-					shapes.append(shapeXML);
-					shapes.append("\",\"w\":");
-					shapes.append(geo.getWidth());
-					shapes.append(",\"h\":");
-					shapes.append(geo.getHeight());
-					shapes.append(",\"title\":\"");
-					
-					String shapeName = master.getName();
-					if (shapeName != null) shapeName = mxVsdxUtils.htmlEntities(shapeName);
-					
-					shapes.append(shapeName);
-					
-					shapes.append("\"}");
-					comma = ",";
-				}
-			}
-			library.append(shapes);
-		}
-		library.append("]</mxlibrary>");
-		
-		//TODO UTF-8 support is missing
-		//
-//		System.out.println(library);
-		
-		return library.toString();
-	}
-
-	protected mxGeometry normalizeGeo(mxCell cell) {
-		mxGeometry geo = cell.getGeometry();
-		geo.setX(0);
-		geo.setY(0);
-		
-		mxPoint srcP = geo.getSourcePoint();
-
-		if (cell.isEdge() && srcP != null)
-		{
-			transPoint(geo.getTargetPoint(), srcP);
-			transPoint(geo.getOffset(), srcP);
-			List<mxPoint> points = geo.getPoints();
-			
-			if (points != null) 
-			{
-				for (mxPoint p : points) 
-				{
-					transPoint(p, srcP);
-				}
-			}
-			transPoint(srcP, srcP);
-		}
-		return geo;
-	}
-
-	protected void transPoint(mxPoint p, mxPoint srcP) 
-	{
-		if (p != null)
-		{
-			p.setX(p.getX() - srcP.getX());
-			p.setY(p.getY() - srcP.getY());
-		}
-	}
-
-	@Override
-	protected String processPage(mxGraph graph, mxVsdxPage page) throws IOException {
-		Model model = graph.getModel();
-		
-		StringBuilder shapes = new StringBuilder(); 
-		String comma = "";
-		for (Object c : model.getCells().values()) 
-		{
-			//add top level shapes only to the library
-			if (graph.getDefaultParent() == model.getParent(c))
-			{
-				shapes.append(comma);
-				shapes.append("{\"xml\":\"");
-				mxGraph shapeGraph = createMxGraph();
-				shapeGraph.addCell(c, null, 0 , null, null);
-				sanitiseGraph(shapeGraph);
-				
-				if (shapeGraph.getModel().getChildCount(shapeGraph.getDefaultParent()) == 0) continue;
-				
-				mxGeometry geo = normalizeGeo((mxCell) c);
-				String shapeXML = super.processPage(shapeGraph, null);
-				shapes.append(shapeXML);
-				shapes.append("\",\"w\":");
-				shapes.append(geo.getWidth());
-				shapes.append(",\"h\":");
-				shapes.append(geo.getHeight());
-				shapes.append(",\"title\":\"");
-				String style = model.getStyle(c);
-				
-				String name = "";
-				if (style != null)
-				{
-					int p = style.indexOf(mxVsdxConstants.VSDX_ID);
-					if (p >= 0)
-					{
-						p += mxVsdxConstants.VSDX_ID.length() + 1;
-						int id = Integer.parseInt(style.substring(p, style.indexOf(";", p)));
-						VsdxShape vsdxShape = vertexShapeMap.get(new ShapePageId(page.getId(), id));
-						if (vsdxShape != null)
-							name = vsdxShape.getName();
-					}
-				}
-				shapes.append(name);
-				shapes.append("\"}");
-				comma = ",";
-			}
-		}
-		
-		if (shapes.length() > 0) 
-			RESPONSE_DIAGRAM_START = ",";
-		else
-			RESPONSE_DIAGRAM_START = "";
-		
-		return shapes.toString();
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxXmlUtils.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxXmlUtils.java
deleted file mode 100644
index 013e256b600b0bc5274ce210557af00645301cb1..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/mxXmlUtils.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.mxgraph.io;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class mxXmlUtils {
-
-	public static Document parseXml(String str) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public static String getXml(Node node) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Shape.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Shape.java
deleted file mode 100644
index 07e993b2848e1a23d2f97881b60b9e6d4a4ceb34..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Shape.java
+++ /dev/null
@@ -1,925 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.mxgraph.io.mxVsdxCodec;
-import com.mxgraph.io.vsdx.theme.QuickStyleVals;
-import com.mxgraph.util.mxConstants;
-
-public class Shape extends Style
-{
-	public final static long VSDX_START_TIME = -2209168800000L;//new Date("12/30/1899").getTime(); 
-	/**
-	 * The text element of the shape, if any
-	 */
-	protected Element text;
-	
-	/**
-	 * The text fields of the shape, if any
-	 */
-	protected LinkedHashMap<String, String> fields;
-	
-	/**
-	 * List of paragraphs in this shape
-	 */
-	protected LinkedHashMap<String,Paragraph> paragraphs = null;
-	
-	/**
-	 * mxGraph cell style map
-	 */
-	protected Map<String, String> styleMap = new HashMap<String, String>();
-	
-	/**
-	 * Width of shape
-	 */
-	protected double width = 0;
-	
-	/**
-	 * Height of shape
-	 */
-	protected double height = 0;
-	
-	/**
-	 * Cumulative rotation of shape, including parents
-	 */
-	protected double rotation = 0;
-
-	protected double lastX = 0;
-	
-	protected double lastY = 0;
-	
-	protected double lastMoveX = 0;
-	
-	protected double lastMoveY = 0;
-
-	protected double lastKnot = -1;
-	
-	protected List<Element> geom;
-	
-	protected mxVsdxGeometryList geomList = null;
-	protected boolean geomListProcessed = false;
-	
-	protected Map<String, String> imageData;
-
-	protected mxVsdxTheme theme;
-	
-	protected int themeVariant = 0;
-	
-	protected QuickStyleVals quickStyleVals;
-	
-	protected final static String UNICODE_LINE_SEP = new String(new char[]{(char)226, (char)128, (char)168});
-	
-	public Shape(Element shape, mxVsdxModel model)
-	{
-		super(shape, model);
-		this.width = getScreenNumericalValue(this.cellElements.get(mxVsdxConstants.WIDTH), 0);
-		this.height = getScreenNumericalValue(this.cellElements.get(mxVsdxConstants.HEIGHT), 0);
-	}
-
-	public void setThemeAndVariant(mxVsdxTheme theme, int themeVariant)
-	{
-		this.theme = theme; 
-		this.themeVariant = themeVariant;
-	}
-	
-	public mxVsdxTheme getTheme()
-	{
-		if (theme != null)
-		{
-			theme.setVariant(themeVariant);
-		}
-		return theme;
-	}
-	
-	public QuickStyleVals getQuickStyleVals()
-	{
-		return quickStyleVals;
-	}
-	
-	protected void processGeomList(mxVsdxGeometryList parentGeoList)
-	{
-		if (!geomListProcessed)
-		{
-			geomList = new mxVsdxGeometryList(parentGeoList);
-
-			if (geom != null)
-			{
-				for (Element geoElem : geom)
-				{
-					geomList.addGeometry(geoElem);
-				}
-			}
-
-			geomListProcessed = true;
-		}
-	}
-	
-	/**
-	 * Caches the specified element
-	 * @param elem the element to cache
-	 */
-	protected void parseShapeElem(Element elem, mxVsdxModel model)
-	{
-		super.parseShapeElem(elem, model);
-		
-		String childName = elem.getNodeName();
-
-		if (childName.equals("ForeignData"))
-		{
-			String filename = elem.getOwnerDocument().getDocumentURI();
-			String iType = elem.getAttribute("ForeignType");
-			String compression = elem.getAttribute("CompressionType");
-			
-			if (iType.equals("Bitmap"))
-			{
-				compression = compression.toLowerCase();
-			}
-			else if (iType.equals("MetaFile"))
-			{
-				compression = "x-wmf";
-			}
-			else if (iType.equals("Enhanced Metafile") || iType.equals("EnhMetaFile"))
-			{
-				compression = "x-emf";
-			}
-			else
-			{
-				//TODO log and unsupported type
-				return;
-			}
-			
-			Node fdChild = elem.getFirstChild();
-			
-			if (fdChild != null)
-			{
-				if (fdChild instanceof Element)
-				{
-					Element fdElem = (Element) fdChild;
-					String grandchildName = fdElem.getNodeName();
-					
-					if (grandchildName.toLowerCase().equals("rel"))
-					{
-						String rid = fdElem.getAttribute("r:id");
-						
-						if (rid != null && !rid.isEmpty())
-						{
-							// insert "_rel" into the path
-							int index = filename.lastIndexOf('/');
-							String pre = "";
-							String post = "";
-
-							try
-							{
-								pre = filename.substring(0, index);
-								post = filename.substring(index, filename.length());
-							}
-							catch (IndexOutOfBoundsException e)
-							{
-								return;
-							}
-							
-							Element relElem = model.getRelationship(rid, pre + "/_rels" + post + ".rels");
-							
-							if (relElem != null)
-							{
-								String target = relElem.getAttribute("Target");
-								String type = relElem.getAttribute("Type");
-								index = target.lastIndexOf('/');
-								
-								try
-								{
-									target = target.substring(index + 1, target.length());
-								}
-								catch (IndexOutOfBoundsException e)
-								{
-									return;
-								}
-								
-								if (type != null && type.endsWith("image"))
-								{
-									this.imageData = new HashMap<String, String>();
-									String iData = model.getMedia(mxVsdxCodec.vsdxPlaceholder + "/media/" + target);
-									this.imageData.put("iData", iData);
-									
-									//since we convert BMP files to PNG, we set the compression to PNG
-									if (target.toLowerCase().endsWith(".bmp"))
-									{
-										compression = "png";
-									}
-									else if (target.toLowerCase().endsWith(".emf"))
-									{
-										//emf can be a png or jpg or vector (which is not supported yet)
-										//We use a number of bytes equal to file header length (which is safe as header in base64 requires 4n/3 bytes
-										compression = iData.startsWith("iVBORw0K") ? "png" : (iData.startsWith("/9j/") ? "jpg" : compression);
-									}
-
-									this.imageData.put("iType", compression);
-								}
-							}
-							else
-							{
-								//TODO log path issue
-							}
-							
-							// more than one rel would break things
-							return;
-						}
-						
-
-					}
-				}
-				
-				fdChild = fdChild.getNextSibling();
-			}
-		}
-		else if (childName.equals(mxVsdxConstants.TEXT))
-		{
-			this.text = elem;
-		}
-	}
-
-	/**
-	 * Caches the specific section element
-	 * @param elem the element to cache
-	 */
-	protected void parseSection(Element elem)
-	{
-		String n = elem.getAttribute("N");
-		
-		if (n.equals("Geometry"))
-		{
-			if (geom == null)
-			{
-				geom = new ArrayList<Element>();
-			}
-
-			this.geom.add(elem);
-		}
-		else if (n.equals("Field"))
-		{
-			ArrayList<Element> rows = mxVsdxUtils.getDirectChildNamedElements(elem, "Row");
-			
-			for (Element row : rows)
-			{
-				String ix = row.getAttribute("IX");
-
-				if (!ix.isEmpty())
-				{
-					if (this.fields == null)
-					{
-						fields = new LinkedHashMap<String, String>();
-					}
-	
-					String del = row.getAttribute("Del");
-					
-					//supporting deletion of a field by adding an empty string such that master field is not used
-					if ("1".equals(del))
-					{
-						this.fields.put(ix, "");
-						continue;
-					}
-					
-					ArrayList<Element> cells = mxVsdxUtils.getDirectChildNamedElements(row, "Cell");
-	
-					String value = "", format = "", calendar = "", type = "";
-					for (Element cell : cells)
-					{
-						n = cell.getAttribute("N");
-						String v = cell.getAttribute("V");
-						
-						switch (n)
-						{
-							case "Value":
-								value = v;
-							break;
-							case "Format":
-								format = v;
-							break;
-							case "Calendar":
-								calendar = v;
-							break;
-							case "Type":
-								type = v;
-							break;
-						}
-					}
-					
-					if (!value.isEmpty())
-					{
-						
-						try
-						{
-							//TODO support other formats and calendars
-							if (format.startsWith("{{"))
-							{
-								value = new SimpleDateFormat(
-										format.replaceAll("\\{|\\}", ""))
-										//the value is the number of days after 30/12/1899 (VSDX_START_TIME)
-										.format(new Date(VSDX_START_TIME + (long)(Double.parseDouble(value) * 24 * 60 * 60 * 1000)));
-							}
-						}
-						catch (Exception e)
-						{
-	//						System.out.println("Vsdx import: Unkown text format " + format + ". Error: " + e.getMessage());
-						}
-						this.fields.put(ix, value);
-					}
-				}
-			}
-		}
-		else
-		{
-			super.parseSection(elem);
-		}
-	}
-
-	/**
-	 * 
-	 * @return mxGraph stencil XML or null or there is no displayed geometry
-	 */
-	protected String parseGeom()
-	{
-		if (!hasGeomList())
-		{
-			return "";
-		}
-		
-		return geomList.getShapeXML(this);
-	}
-
-	/**
-	 * Returns the value of the Text element.
-	 * @return Value of the Text element.
-	 */
-	public String getText()
-	{
-		return this.text != null ? text.getTextContent() : null;
-	}
-
-	/**
-	 * Returns the children Nodes of Text.
-	 * @return List with the children of the Text element.
-	 */
-	public NodeList getTextChildren()
-	{
-		return this.text != null ? text.getChildNodes() : null;
-	}
-
-	/**
-	 * Returns the value of the width element in pixels.
-	 * @return Numerical value of the width element.
-	 */
-	public double getWidth()
-	{
-		//some shapes has zero width while the height is non-zero. Setting width to 1 fixed it.
-		return this.width == 0 && this.height > 0 ? 1 : this.width;
-	}
-
-	/**
-	 * Returns the value of the height element in pixels.
-	 * @return Numerical value of the height element.
-	 */
-	public double getHeight()
-	{
-		//some shapes has zero height while the width is non-zero. Setting height to 1 fixed it.
-		return this.height == 0 && this.width > 0 ? 1 : this.height;
-	}
-	
-	/**
-	 * Returns the value of the rotation.
-	 * @return Numerical value of the rotation
-	 */
-	public double getRotation()
-	{
-		return this.rotation;
-	}
-	
-	/**
-	 * Returns the style map of this shape
-	 * @return the style map
-	 */
-	public Map<String, String> getStyleMap()
-	{
-		return this.styleMap;
-	}
-
-	/**
-	 * Returns whether or not this shape has a geometry defined, locally
-	 * or inherited
-	 * @return whether the shape has a geometry
-	 */
-	public boolean hasGeom()
-	{
-		return !(this.geom == null || this.geom.isEmpty());
-	}
-	
-	/**
-	 * Returns whether or not this shape or its master has a geometry defined
-	 * @return whether the shape has a geometry
-	 */
-	public boolean hasGeomList()
-	{
-		return this.geomList != null && this.geomList.hasGeom();
-	}
-	
-	/**
-	 * Last cp IX referenced in the Text Element.
-	 */
-	String cp = "0";
-
-	/**
-	 * Last pp IX referenced in the Text Element.
-	 */
-	String pp = "0";
-
-	/**
-	 * Last tp IX referenced in the Text Element.
-	 */
-	String tp = "0";
-
-	/**
-	 * Last fld IX referenced in the Text Element.
-	 */
-	String fld = "0";
-	
-	
-	
-	
-	
-	
-	
-	/**
-	 * Transform plain text into a HTML list if the Para element referenced by
-	 * pp indicates it.
-	 * @param text Text to be transformed.
-	 * @param pp Reference to a Para element.
-	 * @return Text like a HTML list.
-	 */
-	public String textToList(String text, String pp)
-	{
-		if (!pp.equals(""))
-		{
-			String bullet = getBullet(pp);
-			
-			if (!bullet.equals("0"))
-			{
-				String[] entries = text.split("\n");
-				String ret = "";
-				
-				for (String entry : entries)
-				{
-					ret += mxVsdxUtils.surroundByTags(entry, "li");
-				}
-				
-				ret = mxVsdxUtils.surroundByTags(ret, "ul");
-				HashMap<String, String> styleMap = new HashMap<String, String>();
-				
-				if (bullet.equals("4"))
-				{
-					styleMap.put("list-style-type", "square");
-				}
-				else
-				{
-					styleMap.put("list-style-type", "disc");
-				}
-				
-				ret = this.insertAttributes(ret, styleMap);
-				
-				return ret;
-			}
-		}
-		
-		return text;
-	}
-	
-	/**
-	 * Returns the paragraph formated according the properties in the last
-	 * Para element referenced.
-	 * @param para Paragraph to be formated
-	 * @return Formated paragraph.
-	 */
-	public String getTextParagraphFormated(String para)
-	{
-		String ret = "";
-		HashMap<String, String> styleMap = new HashMap<String, String>();
-		styleMap.put("align", getHorizontalAlign(pp, true));
-		styleMap.put("margin-left", getIndentLeft(pp));
-		styleMap.put("margin-right", getIndentRight(pp));
-		styleMap.put("margin-top", getSpBefore(pp) + "px");
-		styleMap.put("margin-bottom", getSpAfter(pp) + "px");
-		styleMap.put("text-indent", getIndentFirst(pp));
-		styleMap.put("valign", getAlignVertical());
-//		String spc = getSpcLine(pp);
-		//TODO dividing by 0.71 gives very large line height in most of the cases. Probably we don't need it?
-//		String spcNum = spc.replaceAll("[^\\d.]", "");
-//		String postFix = spc.substring(spcNum.length(),spc.length());
-		//double lineH = (Double.parseDouble(spcNum) / 0.71);
-//		spc = Double.toString(lineH);
-//		
-//		if (spc.contains("."))
-//		{
-//			spc = spc.substring(0, spc.lastIndexOf(".") + 3);
-//		}
-//		
-//		spc = spc + postFix;
-//		styleMap.put("line-height", spc);
-		styleMap.put("direction", getTextDirection(pp));
-		ret += insertAttributes(para, styleMap);
-		return ret;
-	}
-	
-	/**
-	 * Returns the text formated according the properties in the last
-	 * Char element referenced.
-	 * @param text Text to be formated
-	 * @return Formated text.
-	 */
-	public String getTextCharFormated(String text)
-	{
-		String ret = "";
-		String color = "color:" + getTextColor(cp) + ";";
-		String size = "font-size:" + (Double.parseDouble(this.getTextSize(cp))) + "px;";
-		String font = "font-family:" + this.getTextFont(cp) + ";";
-		String direction = "direction:" + this.getRtlText(cp) + ";";
-		String space = "letter-spacing:" + (Double.parseDouble(this.getLetterSpace(cp)) / 0.71) + "px;";
-		String lineHeight = "line-height:" + getSpcLine(pp);
-		String opacity = ";opacity:" + getTextOpacity(cp);
-		String pos = this.getTextPos(cp);
-		String tCase = getTextCase(cp);
-		
-		if (tCase.equals("1"))
-		{
-			text = text.toUpperCase();
-		}
-		else if (tCase.equals("2"))
-		{
-			text = mxVsdxUtils.toInitialCapital(text);
-		}
-		
-		if (pos.equals("1"))
-		{
-			text = mxVsdxUtils.surroundByTags(text, "sup");
-		}
-		else if (pos.equals("2"))
-		{
-			text = mxVsdxUtils.surroundByTags(text, "sub");
-		}
-		
-		text = this.isBold(cp) ? mxVsdxUtils.surroundByTags(text, "b") : text;
-		text = this.isItalic(cp) ? mxVsdxUtils.surroundByTags(text, "i") : text;
-		text = this.isUnderline(cp) ? mxVsdxUtils.surroundByTags(text, "u") : text;
-		text = this.getTextStrike(cp) ? mxVsdxUtils.surroundByTags(text, "s") : text;
-		text = this.isSmallCaps(cp) ? mxVsdxUtils.toSmallCaps(text, this.getTextSize(cp)) : text;
-
-		ret += "<font style=\"" + size + font + color + direction + space + lineHeight + opacity + "\">" + text + "</font>";
-		return ret;
-	}
-	
-	/**
-	 * Returns the direction of the text. It may be right to left or left to right.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default style-sheet.
-	 * @param index Index of the Para element that contains the Flags element.
-	 * @return The direction of the text.
-	 */
-	public String getTextDirection(String index)
-	{
-		String direction = getFlags(index);
-		
-		if (direction.equals("0"))
-		{
-			direction = "ltr";
-		}
-		else if (direction.equals("1"))
-		{
-			direction = "rtl";
-		}
-		
-		return direction;
-	}
-
-	/**
-	 * Returns the space between lines in a paragraph.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default style-sheet.
-	 * @param index Index of the Para element that contains the SpLine element.
-	 * @return The space between lines n pixels.
-	 */
-	public String getSpcLine(String index)
-	{
-		String ret = "0";
-		boolean isPercent = false;
-		double space = getSpLine(index);
-		
-		if (space > 0)
-		{
-			space = space * mxVsdxUtils.conversionFactor;
-		}
-		else if (space == 0)
-		{
-			space = 100;
-			isPercent = true;
-		}
-		else
-		{
-			space = Math.abs(space) * 100;
-			isPercent = true;
-		}
-		
-		ret = String.valueOf(space);
-		ret += isPercent ? "%" : "px";
-		
-		return ret;
-	}
-
-	/**
-	 * Returns the space before a paragraph.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default style-sheet.
-	 * @param index Index of the Para element that contains the SpBefore element.
-	 * @return The space before the paragraph in pixels.
-	 */
-	public String getSpcBefore(String index)
-	{
-		return getSpBefore(index);
-	}
-
-	/**
-	 * Inserts the style attributes contained in attr into the text.<br/>
-	 * The text must be surrounded by tags html.
-	 * @param text Text where the attributes must be inserted.
-	 * @param attr Map with the attributes.
-	 * @return Text with the attributes applied like style.
-	 */
-	public String insertAttributes(String text, HashMap<String, String> attr)
-	{
-		if (text.contains(">"))
-		{
-			int i = text.indexOf(">");
-			String tail = text.substring(i);
-			String head = text.substring(0, i);
-
-			String style = " style=\"" + mxVsdxUtils.getStyleString(attr, ":") + "\"";
-			return head + style + tail;
-		}
-
-		return text;
-	}
-
-	/**
-	 * Returns the direction of the text. It may be right to left or left to right.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default stylesheet.
-	 * @param index Index of the Char element that contains the RTLText element.
-	 * @return Direction of the text.
-	 */
-	public String getRtlText(String index)
-	{
-		Element rtlElem = getCellElement(mxVsdxConstants.RTL_TEXT, index, mxVsdxConstants.PARAGRAPH);
-		String direction = getValue(rtlElem, "ltr");
-		
-		
-		if (direction.equals("0"))
-		{
-			direction = "ltr";
-		}
-		else if (direction.equals("1"))
-		{
-			direction = "rtl";
-		}
-		
-		return direction;
-	}
-
-	/**
-	 * Checks if the style property of the Char element of index = 'index' 
-	 * indicates bold.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default stylesheet.
-	 * @param index Index of the Char element that contains the Style element.
-	 * @return Returns <code>true</code> if the style property of the Char element of 
-	 * index = 'index' indicates bold.
-	 */
-	public boolean isBold(String index)
-	{
-		boolean isBold = false;
-		String style = getTextStyle(index);
-		
-		if (!style.equals(""))
-		{
-			if (style.toLowerCase().equals("themed"))
-			{
-				// TODO theme support
-			}
-			else
-			{
-				int value = Integer.parseInt(style);
-				isBold = ((value & 1) == 1);
-			}
-		}
-		
-		return isBold;
-	}
-
-	/**
-	 * Checks if the style property of the Char element of index = 'index' 
-	 * indicates italic.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default stylesheet.
-	 * @param index Index of the Char element that contains the Style element.
-	 * @return Returns <code>true</code> if the style property of the Char element of 
-	 * index = 'index' indicates italic.
-	 */
-	public boolean isItalic(String index)
-	{
-		boolean isItalic = false;
-		String style = getTextStyle(index);
-		
-		if (!style.equals(""))
-		{
-			if (style.toLowerCase().equals("themed"))
-			{
-				// TODO theme support
-			}
-			else
-			{
-				int value = Integer.parseInt(style);
-				isItalic = ((value & 2) == 2);
-			}
-		}
-		
-		return isItalic;
-	}
-
-	/**
-	 * Checks if the style property of the Char element of index = 'index' 
-	 * indicates underline.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default stylesheet.
-	 * @param index Index of the Char element that contains the Style element.
-	 * @return Returns <code>true</code> if the style property of the Char element of 
-	 * index = 'index' indicates underline.
-	 */
-	public boolean isUnderline(String index)
-	{
-		boolean isUnderline = false;
-		String style = getTextStyle(index);
-		
-		if (!style.equals(""))
-		{
-			if (style.toLowerCase().equals("themed"))
-			{
-				// TODO theme support
-			}
-			else
-			{
-				int value = Integer.parseInt(style);
-				isUnderline = ((value & 4) == 4);
-			}
-		}
-	
-		return isUnderline;
-	}
-
-	/**
-	 * Checks if the style property of the Char element of index = 'index'
-	 * indicates small caps.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default stylesheet.
-	 * @param index Index of the Char element that contains the Style element.
-	 * @return Returns <code>true</code> if the style property of the Char element of
-	 * index = 'index' indicates small caps.
-	 */
-	public boolean isSmallCaps(String index)
-	{
-		boolean isSmallCaps = false;
-		String style = getTextStyle(index);
-		
-		if (!style.equals(""))
-		{
-			if (style.toLowerCase().equals("themed"))
-			{
-				// TODO theme support
-			}
-			else
-			{
-				int value = Integer.parseInt(style);
-				isSmallCaps = ((value & 8) == 8);
-			}
-		}
-		
-		return isSmallCaps;
-	}
-
-	public String getTextOpacity(String index)
-	{
-		Element colorTrans = getCellElement(mxVsdxConstants.COLOR_TRANS, index, mxVsdxConstants.CHARACTER);
-		String trans = getValue(colorTrans, "0");
-		String result = "1";
-		
-		if (trans != null && !trans.isEmpty())
-		{
-			double tmp = 1.0 - Double.valueOf(trans);
-			result = String.valueOf(tmp);
-		}
-		
-		return result;
-	}
-
-	/**
-	 * Returns the actual text size defined by the Char element referenced in cp.<br/>
-	 * This property may to be founded in the shape, master shape, stylesheet or
-	 * default stylesheet.
-	 * @param index Index of the Char element that contains the Size element.
-	 * @return Returns the size of the font in pixels.
-	 */
-	public String getTextSize(String index)
-	{
-		Element sizeElem = getCellElement(mxVsdxConstants.SIZE, index, mxVsdxConstants.CHARACTER);
-		double size = getScreenNumericalValue(sizeElem, 12);
-		
-		return Double.toString(Math.round(size * 100) / 100);
-	}
-	
-	/**
-	 * Returns the vertical align of the label.<br/>
-	 * The property may to be defined in master shape or text stylesheet.<br/>
-	 * @return Vertical align (bottom, middle and top)
-	 */
-	public String getAlignVertical()
-	{
-		String vertical = mxConstants.ALIGN_MIDDLE;
-
-		int align = Integer.parseInt(getValue(this.getCellElement(mxVsdxConstants.VERTICAL_ALIGN), "1"));
-
-		if (align == 0)
-		{
-			vertical = mxConstants.ALIGN_TOP;
-		}
-		else if (align == 2)
-		{
-			vertical = mxConstants.ALIGN_BOTTOM;
-		}
-
-		return vertical;
-	}
-
-	public mxVsdxGeometryList getGeomList() 
-	{
-		return geomList;
-	}
-
-	public double getLastX() {
-		return lastX;
-	}
-
-	public double getLastY() {
-		return lastY;
-	}
-
-	public double getLastMoveX() {
-		return lastMoveX;
-	}
-
-	public double getLastMoveY() {
-		return lastMoveY;
-	}
-
-	public double getLastKnot() {
-		return lastKnot;
-	}
-
-	public void setLastX(double lastX) {
-		this.lastX = lastX;
-	}
-
-	public void setLastY(double lastY) {
-		this.lastY = lastY;
-	}
-
-	public void setLastMoveX(double lastMoveX) {
-		this.lastMoveX = lastMoveX;
-	}
-
-	public void setLastMoveY(double lastMoveY) {
-		this.lastMoveY = lastMoveY;
-	}
-
-	public void setLastKnot(double lastKnot) {
-		this.lastKnot = lastKnot;
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/VsdxShape.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/VsdxShape.java
deleted file mode 100644
index c4dd08384a64a2be88e94707ad26497c70a0a377..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/VsdxShape.java
+++ /dev/null
@@ -1,2519 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Logger;
-import java.util.zip.Deflater;
-
-import javax.xml.parsers.DocumentBuilder;
-
-//import org.apache.commons.codec.binary.Base64;
-//import org.apache.commons.lang3.StringUtils;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.mxgraph.io.mxGraph;
-import com.mxgraph.io.mxVsdxCodec;
-import com.mxgraph.io.vsdx.theme.Color;
-import com.mxgraph.io.vsdx.theme.QuickStyleVals;
-import com.mxgraph.online.Utils;
-import com.mxgraph.util.mxConstants;
-
-/**
- * This class is a wrapper for one Shape Element.<br/>
- * This class is responsible for retrieve all the properties of the shape and add it
- * to the graph. If a property is not found in the shape element but it is an instance
- * of a Master, the property is taken from the masterShape element. If the property
- * is not found neither in the masterShape , and it has a reference to a stylesheet
- * the property is taken from there.
- */
-public class VsdxShape extends Shape
-{
-	private static final String ARROW_NO_FILL_MARKER = "0";
-
-	/**
-	 * Number of d.p. to round non-integers to
-	 */
-	static public int maxDp = 2;
-
-	// For debugging to switch off shape matching by name
-	static public boolean USE_SHAPE_MATCH = true;
-
-	/**
-	 * Whether or not to assume HTML labels
-	 */
-	public boolean htmlLabels = true;
-
-	/**
-	 * Master Shape referenced by the shape.
-	 */
-	protected Shape masterShape;
-
-	/**
-	 * Master element referenced by the shape.
-	 */
-	protected mxVsdxMaster master;
-
-	/**
-	 * If the shape is a sub shape, this is a reference to its root shape, otherwise null
-	 */
-	protected VsdxShape rootShape = this;
-
-	public double parentHeight;
-
-	/**
-	 * The prefix of the shape name
-	 */
-	protected String shapeName = null;
-
-	/**
-	 * Shape index
-	 */
-	protected int shapeIndex = 0;
-
-	/**
-	 * Whether this cell is a vertex
-	 */
-	protected boolean vertex = true;
-
-	protected Map<Integer, VsdxShape> childShapes = new HashMap<Integer, VsdxShape>();
-
-	public static final Set<String> OFFSET_ARRAY = new HashSet<String>(
-			Arrays.asList(new String[] { "Organizational unit", "Domain 3D" }));
-
-	public static final String stencilTemplate = "<shape h=\"htemplate\" w=\"wtemplate\" aspect=\"variable\" strokewidth=\"inherit\"><connections></connections><background></background><foreground></foreground></shape>";
-
-	public static final float[] arrowSizes = { 2, 3, 5, 7, 9, 22, 45 };
-
-	public static final Map<Integer, String> arrowTypes;
-
-	static
-	{
-//		try
-//		{
-//			mxResources.add("com/mxgraph/io/vdx/resources/edgeNameU");
-//			mxResources.add("com/mxgraph/io/vdx/resources/nameU");
-//		}
-//		catch (Exception e)
-//		{
-//			// todo
-//		}
-
-		arrowTypes = new HashMap<Integer, String>();
-		arrowTypes.put(0, mxConstants.NONE);
-		arrowTypes.put(1, mxConstants.ARROW_OPEN);
-		arrowTypes.put(2, "blockThin");
-		arrowTypes.put(3, mxConstants.ARROW_OPEN);
-		arrowTypes.put(4, mxConstants.ARROW_BLOCK);
-		arrowTypes.put(5, mxConstants.ARROW_CLASSIC);
-		arrowTypes.put(10, mxConstants.ARROW_OVAL);
-		arrowTypes.put(13, mxConstants.ARROW_BLOCK);
-
-		arrowTypes.put(14, ARROW_NO_FILL_MARKER + mxConstants.ARROW_BLOCK);
-		arrowTypes.put(17, ARROW_NO_FILL_MARKER + mxConstants.ARROW_CLASSIC);
-		arrowTypes.put(20, ARROW_NO_FILL_MARKER + mxConstants.ARROW_OVAL);
-		arrowTypes.put(22, ARROW_NO_FILL_MARKER + "diamond");
-
-		arrowTypes.put(23, "dash");
-		arrowTypes.put(24, "ERone");
-		arrowTypes.put(25, "ERmandOne");
-		arrowTypes.put(27, "ERmany");
-		arrowTypes.put(28, "ERoneToMany");
-		arrowTypes.put(29, "ERzeroToMany");
-		arrowTypes.put(30, "ERzeroToOne");
-
-		//approximations
-		arrowTypes.put(6, mxConstants.ARROW_BLOCK);
-		arrowTypes.put(7, mxConstants.ARROW_OPEN);
-		arrowTypes.put(8, mxConstants.ARROW_CLASSIC);
-
-		arrowTypes.put(9, "openAsync");
-		arrowTypes.put(11, "diamond");
-
-		arrowTypes.put(12, mxConstants.ARROW_OPEN);
-
-		arrowTypes.put(15, ARROW_NO_FILL_MARKER + mxConstants.ARROW_BLOCK);
-		arrowTypes.put(16, ARROW_NO_FILL_MARKER + mxConstants.ARROW_BLOCK);
-		arrowTypes.put(18, ARROW_NO_FILL_MARKER + mxConstants.ARROW_BLOCK);
-		arrowTypes.put(19, ARROW_NO_FILL_MARKER + mxConstants.ARROW_CLASSIC);
-		arrowTypes.put(21, ARROW_NO_FILL_MARKER + "diamond");
-		arrowTypes.put(26, "ERmandOne");
-
-		arrowTypes.put(31, ARROW_NO_FILL_MARKER + mxConstants.ARROW_OVAL);
-		arrowTypes.put(32, ARROW_NO_FILL_MARKER + mxConstants.ARROW_OVAL);
-		arrowTypes.put(33, ARROW_NO_FILL_MARKER + mxConstants.ARROW_OVAL);
-		arrowTypes.put(34, ARROW_NO_FILL_MARKER + mxConstants.ARROW_OVAL);
-
-		arrowTypes.put(35, mxConstants.ARROW_OVAL);
-		arrowTypes.put(36, mxConstants.ARROW_OVAL);
-		arrowTypes.put(37, mxConstants.ARROW_OVAL);
-		arrowTypes.put(38, mxConstants.ARROW_OVAL);
-
-		arrowTypes.put(39, mxConstants.ARROW_BLOCK);
-		arrowTypes.put(40, ARROW_NO_FILL_MARKER + mxConstants.ARROW_BLOCK);
-
-		arrowTypes.put(41, ARROW_NO_FILL_MARKER + mxConstants.ARROW_OVAL);
-		arrowTypes.put(42, mxConstants.ARROW_OVAL);
-
-		arrowTypes.put(43, mxConstants.ARROW_OPEN);
-		arrowTypes.put(44, mxConstants.ARROW_OPEN);
-		arrowTypes.put(45, mxConstants.ARROW_OPEN);
-	}
-
-	private final static Logger LOGGER = Logger
-			.getLogger(VsdxShape.class.getName());
-
-	/**
-	 * Create a new instance of mxVdxShape.
-	 * This method get the references to the master element, master shape
-	 * and stylesheet.
-	 * @param shape
-	 */
-	public VsdxShape(mxVsdxPage page, Element shape, boolean vertex,
-			Map<String, mxVsdxMaster> masters, mxVsdxMaster master,
-			mxVsdxModel model)
-	{
-		super(shape, model);
-
-		String masterId = this.getMasterId();
-		String masterShapeLocal = this.getShapeMasterId();
-
-		if (masterId != null)
-		{
-			this.master = masters.get(masterId);
-		}
-		else
-		{
-			this.master = master;
-		}
-
-		if (this.master != null)
-		{
-			// Check if the master ID corresponds to the one passed in. If it doesn't, or doesn't
-			// exist on this shape, this shape is within a group that has that master
-
-			if (masterId == null && masterShapeLocal != null)
-			{
-				this.masterShape = this.master.getSubShape(masterShapeLocal);
-			}
-			else
-			{
-				this.masterShape = this.master.getMasterShape();
-			}
-		}
-
-		String name = getNameU();
-		int index = name.lastIndexOf(".");
-
-		if (index != -1)
-		{
-			name = name.substring(0, index);
-		}
-
-		this.shapeName = name;
-
-		// Get sub-shapes
-		NodeList shapesList = shape
-				.getElementsByTagName(mxVsdxConstants.SHAPES);
-
-		if (shapesList != null && shapesList.getLength() > 0)
-		{
-			Element shapesElement = (Element) shapesList.item(0);
-			this.childShapes = page.parseShapes(shapesElement, this.master,
-					false);
-		}
-
-		double rotation = this.calcRotation();
-		this.rotation = rotation * 100 / 100;
-		this.rotation = this.rotation % 360.0;
-
-		int themeIndex = page.getCellIntValue("ThemeIndex", -100);
-
-		//sometimes theme information are at the shape level!
-		if (themeIndex == -100)
-		{
-			themeIndex = Integer.parseInt(
-					this.getValue(this.getCellElement("ThemeIndex"), "0"));
-		}
-
-		mxVsdxTheme theme = model.getThemes().get(themeIndex);
-		int variant = page.getCellIntValue("VariationColorIndex", 0);
-
-		setThemeAndVariant(theme, variant);
-
-		for (Map.Entry<Integer, VsdxShape> entry : childShapes.entrySet())
-		{
-			VsdxShape childShape = entry.getValue();
-			childShape.setRootShape(this);
-
-			if (childShape.theme == null)
-			{
-				childShape.setThemeAndVariant(theme, variant);
-			}
-		}
-
-		quickStyleVals = new QuickStyleVals(
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleEffectsMatrix"), "0")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleFillColor"), "1")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleFillMatrix"), "0")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleFontColor"), "1")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleFontMatrix"), "0")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleLineColor"), "1")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleLineMatrix"), "0")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleShadowColor"), "1")),
-				Integer.parseInt(this
-						.getValue(this.getCellElement("QuickStyleType"), "0")),
-				Integer.parseInt(this.getValue(
-						this.getCellElement("QuickStyleVariation"), "0")));
-
-		//process shape geometry
-		if (masterShape != null)
-		{
-			masterShape.processGeomList(null);
-			processGeomList(masterShape.getGeomList());
-
-			//recalculate width and height using master data
-			if (this.width == 0)
-				this.width = getScreenNumericalValue(
-						getCellElement(mxVsdxConstants.WIDTH), 0);
-
-			if (this.height == 0)
-				this.height = getScreenNumericalValue(
-						getCellElement(mxVsdxConstants.HEIGHT), 0);
-		}
-		else
-		{
-			processGeomList(null);
-		}
-		//several shapes have beginX/Y and also has a fill color, thus it is better to render it as a vertex
-		//vsdx can have an edge as a group!
-		this.vertex = vertex || (childShapes != null && !childShapes.isEmpty())
-				|| (geomList != null && !geomList.isNoFill());
-	}
-
-	/**
-	 * Locates the first entry for the specified attribute string in the shape hierarchy.
-	 * The order is to look locally, then delegate the request to the master shape
-	 * if it doesn't exist locally
-	 * @param key The key of the shape to find
-	 * @return the Element that first resolves to that shape key or null or none is found
-	 */
-	public Element getShapeNode(String key)
-	{
-		Element elem = this.cellElements.get(key);
-
-		if (elem == null && this.masterShape != null)
-		{
-			return this.masterShape.getCellElement(key);
-		}
-
-		return elem;
-	}
-
-	/**
-	 * Returns the value of the Text element.<br/>
-	 * If the shape has no text, it is obtained from the master shape.
-	 * @return Text label of the shape.
-	 */
-	public String getTextLabel()
-	{
-		String hideText = this
-				.getValue(this.getCellElement(mxVsdxConstants.HIDE_TEXT), "0");
-
-		if ("1".equals(hideText))
-		{
-			return null;
-		}
-
-		NodeList txtChildren = getTextChildren();
-
-		if (txtChildren == null && masterShape != null)
-		{
-			txtChildren = masterShape.getTextChildren();
-		}
-
-		if (this.htmlLabels)
-		{
-			if (txtChildren != null)
-			{
-				// Collect text into same formatting paragraphs. If there's one paragraph, use the new system, otherwise
-				// leave it to the old one.
-				//				if (this.paragraphs == null)
-				//				{
-				//					initLabels(txtChildren);
-				//				}
-				//				
-				//				if (this.paragraphs.size() == 0)
-				//				{
-				//					// valid way to have an empty label override a master value "<text />"
-				//					return "";
-				//				}
-				//				else if (this.paragraphs.size() == 1)
-				//				{
-				//					return createHybridLabel(this.paragraphs.keySet().iterator().next());
-				//				}
-				//				else
-				//				{
-				//Sometimes one paragraph also contains mix of styles which are not supported by hybrid labels, so, use the old style for all html labels
-				this.styleMap.put(mxConstants.STYLE_VERTICAL_ALIGN,
-						getAlignVertical());
-				this.styleMap.put(mxConstants.STYLE_ALIGN,
-						getHorizontalAlign("0", false));
-
-				return getHtmlTextContent(txtChildren);
-				//				}
-			}
-		}
-		else
-		{
-			String text = this.getText();
-
-			if (text == null && masterShape != null)
-			{
-				return masterShape.getText();
-			}
-			else
-			{
-				return text;
-			}
-		}
-
-		return null;
-	}
-
-	private String getIndex(Element elem)
-	{
-		String ix = elem.getAttribute("IX");
-		return ix.isEmpty()? "0" : ix;
-	}
-	
-	/**
-	 * Initialises the text labels
-	 * @param children the text Elements
-	 */
-	protected void initLabels(NodeList children)
-	{
-		// Lazy init
-		paragraphs = new LinkedHashMap<String, Paragraph>();
-		String ch = null;
-		String pg = null;
-		String fld = null;
-
-		for (int index = 0; index < children.getLength(); index++)
-		{
-			String value = null;
-			Node node = children.item(index);
-			String nodeName = node.getNodeName();
-
-			switch (nodeName)
-			{
-				case "cp":
-				{
-					Element elem = (Element) node;
-					ch = getIndex(elem);
-				}
-					break;
-				case "tp":
-				{
-					// TODO
-					Element elem = (Element) node;
-					getIndex(elem);
-				}
-					break;
-				case "pp":
-				{
-					Element elem = (Element) node;
-					pg = getIndex(elem);
-				}
-					break;
-				case "fld":
-				{
-					Element elem = (Element) node;
-					fld = getIndex(elem);
-					break;
-				}
-				case "#text":
-				{
-					value = node.getTextContent();//StringUtils.chomp(node.getTextContent());
-
-					// Assumes text is always last
-					// null key is allowed
-					Paragraph para = paragraphs.get(pg);
-
-					if (para == null)
-					{
-						para = new Paragraph(value, ch, pg, fld);
-						paragraphs.put(pg, para);
-					}
-					else
-					{
-						para.addText(value, ch, fld);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * 
-	 * @param index
-	 * @return
-	 */
-	protected String createHybridLabel(String index)
-	{
-		Paragraph para = this.paragraphs.get(index);
-
-		// Paragraph
-		this.styleMap.put(mxConstants.STYLE_ALIGN,
-				getHorizontalAlign(index, false));
-		this.styleMap.put(mxConstants.STYLE_SPACING_LEFT, getIndentLeft(index));
-		this.styleMap.put(mxConstants.STYLE_SPACING_RIGHT,
-				getIndentRight(index));
-		this.styleMap.put(mxConstants.STYLE_SPACING_TOP, getSpBefore(index));
-		this.styleMap.put(mxConstants.STYLE_SPACING_BOTTOM, getSpAfter(index));
-		//this.styleMap.put("text-indent", getIndentFirst(index));
-		this.styleMap.put(mxConstants.STYLE_VERTICAL_ALIGN, getAlignVertical());
-
-		this.styleMap.put("fontColor", getTextColor(index));
-		this.styleMap.put("fontSize", this.getTextSize(index));
-		this.styleMap.put("fontFamily", getTextFont(index));
-
-		// Character
-		int fontStyle = isBold(index) ? mxConstants.FONT_BOLD : 0;
-		fontStyle |= isItalic(index) ? mxConstants.FONT_ITALIC : 0;
-		fontStyle |= isUnderline(index) ? mxConstants.FONT_UNDERLINE : 0;
-		this.styleMap.put("fontStyle", String.valueOf(fontStyle));
-
-		//Commented out as the method getTextOpacity returns value between 0 and 1 instead of 0 - 100
-		//		this.styleMap.put(mxConstants.STYLE_TEXT_OPACITY, getTextOpacity(index));
-
-		int numValues = para.numValues();
-		String result = null;
-
-		for (int i = 0; i < numValues; i++)
-		{
-			String value = para.getValue(i);
-
-			if (value.isEmpty() && this.fields != null)
-			{
-				String fieldIx = para.getField(i);
-
-				if (fieldIx != null)
-				{
-					value = this.fields.get(fieldIx);
-
-					if (value == null && masterShape != null
-							&& masterShape.fields != null)
-					{
-						value = masterShape.fields.get(fieldIx);
-					}
-				}
-			}
-
-			if (value != null)
-			{
-				result = result == null ? value : result + value;
-			}
-		}
-
-		return result;
-	}
-
-	/**
-	 * Returns the text contained in the shape formated with tags html.<br/>
-	 * @return Text content in html.
-	 */
-	public String getHtmlTextContent(NodeList txtChildren)
-	{
-		String ret = "";
-		boolean first = true;
-
-		if (txtChildren != null && txtChildren.getLength() > 0)
-		{
-			for (int index = 0; index < txtChildren.getLength(); index++)
-			{
-				Node node = txtChildren.item(index);
-
-				if (node.getNodeName().equals("cp"))
-				{
-					Element elem = (Element) node;
-					cp = getIndex(elem);
-				}
-				else if (node.getNodeName().equals("tp"))
-				{
-					Element elem = (Element) node;
-					tp = getIndex(elem);
-				}
-				else if (node.getNodeName().equals("pp"))
-				{
-					Element elem = (Element) node;
-					pp = getIndex(elem);
-
-					if (first)
-					{
-						first = false;
-					}
-					else
-					{
-						ret += "</p>";
-					}
-
-					String para = "<p>";
-					ret += getTextParagraphFormated(para);
-				}
-				else if (node.getNodeName().equals("fld"))
-				{
-					Element elem = (Element) node;
-					fld = getIndex(elem);
-
-					String text = null;
-
-					if (this.fields != null)
-					{
-						text = this.fields.get(fld);
-					}
-
-					if (text == null && masterShape != null
-							&& masterShape.fields != null)
-					{
-						text = masterShape.fields.get(fld);
-					}
-
-					if (text != null)
-						ret += processLblTxt(text);
-				}
-				else if (node.getNodeName().equals("#text"))
-				{
-					String text = node.getTextContent();
-
-					// There's a case in master shapes where the text element has the raw value "N".
-					// The source tool doesn't render this. Example is ALM_Information_flow.vdx, the two label
-					// edges in the center
-					//					if (!masterShapeOnly || !text.equals("N"))
-					//					{
-					ret += processLblTxt(text);
-					//					}
-				}
-			}
-		}
-
-		String end = first ? "" : "</p>";
-		ret += end;
-		mxVsdxUtils.surroundByTags(ret, "div");
-
-		return ret;
-	}
-
-	private String processLblTxt(String text)
-	{
-		// It's HTML text, so escape it.
-		text = mxVsdxUtils.htmlEntities(text);
-
-		text = textToList(text, pp);
-
-		text = text.replaceAll("\n", "<br/>").replaceAll(UNICODE_LINE_SEP,
-				"<br/>");
-
-		return getTextCharFormated(text);
-	}
-
-	/**
-	 * Checks if a nameU is for big connectors.
-	 * @param nameU NameU attribute.
-	 * @return Returns <code>true</code> if a nameU is for big connectors.
-	 */
-	public boolean isConnectorBigNameU(String nameU)
-	{
-		return nameU.startsWith("60 degree single")
-				|| nameU.startsWith("45 degree single")
-				|| nameU.startsWith("45 degree double")
-				|| nameU.startsWith("60 degree double")
-				|| nameU.startsWith("45 degree  tail")
-				|| nameU.startsWith("60 degree  tail")
-				|| nameU.startsWith("45 degree tail")
-				|| nameU.startsWith("60 degree tail")
-				|| nameU.startsWith("Flexi-arrow 2")
-				|| nameU.startsWith("Flexi-arrow 1")
-				|| nameU.startsWith("Flexi-arrow 3")
-				|| nameU.startsWith("Double flexi-arrow")
-				|| nameU.startsWith("Fancy arrow");
-	}
-
-	/**
-	 * Checks if the shape represents a vertex.
-	 * @return Returns <code>true</code> if the shape represents a vertex.
-	 */
-	public boolean isVertex()
-	{
-		return vertex;
-	}
-
-	/**
-	 * Returns the coordinates of the top left corner of the Shape.
-	 * When a coordinate is not found, it is taken from masterShape.
-	 * @param parentHeight Height of the parent cell of the shape.
-	 * @param rotation whether to allow for cell rotation
-	 * @return mxPoint that represents the coordinates
-	 */
-	public mxPoint getOriginPoint(double parentHeight, boolean rotation)
-	{
-		double px = this.getPinX();
-		double py = this.getPinY();
-		double lpy = this.getLocPinY();
-		double lpx = this.getLocPinX();
-
-		double w = getScreenNumericalValue(
-				this.getShapeNode(mxVsdxConstants.WIDTH), 0);
-		double h = getScreenNumericalValue(
-				this.getShapeNode(mxVsdxConstants.HEIGHT), 0);
-
-		double x = px - lpx;
-		double y = parentHeight - ((py) + (h - lpy));
-
-		// If the location pins are not in the center of the vertex we
-		// need to translate the origin
-		if (rotation && (lpy != h / 2 || lpx != w / 2))
-		{
-			if (this.rotation != 0)
-			{
-				double vecX = w / 2 - lpx;
-				double vecY = lpy - h / 2;
-
-				double cos = Math.cos(Math.toRadians(360 - this.rotation));
-				double sin = Math.sin(Math.toRadians(360 - this.rotation));
-
-				return new mxPoint(x + vecX - (vecX * cos - vecY * sin),
-						(vecX * sin + vecY * cos) + y - vecY);
-			}
-		}
-
-		return new mxPoint(x, y);
-	}
-
-	/**
-	 * Returns the width and height of the Shape expressed like an mxPoint.<br/>
-	 * x = width<br/>
-	 * y = height<br/>
-	 * When a dimension is not found, it is taken from masterShape.
-	 * @return mxPoint that represents the dimensions of the shape.
-	 */
-	public mxPoint getDimensions()
-	{
-		double w = getScreenNumericalValue(
-				this.getShapeNode(mxVsdxConstants.WIDTH), 0);
-		double h = getScreenNumericalValue(
-				this.getShapeNode(mxVsdxConstants.HEIGHT), 0);
-
-		//some shapes has zero height/width while the other dimension is non-zero. Setting it to 1 fixed it.
-		return new mxPoint(w == 0 && h > 0 ? 1 : w, h == 0 && w > 0 ? 1 : h);
-	}
-
-	/**
-	 * Returns the value of the pinX element.
-	 * @return The shape pinX element
-	 */
-	public double getPinX()
-	{
-		return getScreenNumericalValue(this.getShapeNode(mxVsdxConstants.PIN_X),
-				0);
-	}
-
-	/**
-	 * Returns the value of the pinY element in pixels.
-	 * @return Numerical value of the pinY element.
-	 */
-	public double getPinY()
-	{
-		return getScreenNumericalValue(this.getShapeNode(mxVsdxConstants.PIN_Y),
-				0);
-	}
-
-	/**
-	 * Returns the value of the locPinX element in pixels.
-	 * @return Numerical value of the pinY element.
-	 */
-	public double getLocPinX()
-	{
-		return getScreenNumericalValue(
-				this.getShapeNode(mxVsdxConstants.LOC_PIN_X), 0);
-	}
-
-	/**
-	 * Returns the value of the locPinY element in pixels.
-	 * @return Numerical value of the locPinY element.
-	 */
-	public double getLocPinY()
-	{
-		return getScreenNumericalValue(
-				this.getShapeNode(mxVsdxConstants.LOC_PIN_Y), 0);
-
-	}
-
-	/**
-	 * Returns the opacity of the Shape.<br/>
-	 * @return Double in the range of (transparent = 0)..(100 = opaque)
-	 */
-	private double getOpacity(String key)
-	{
-		double opacity = 100;
-
-		if (this.isGroup())
-		{
-			opacity = 0;
-		}
-
-		opacity = getValueAsDouble(this.getCellElement(key), 0);
-
-		opacity = 100 - opacity * 100;
-		opacity = Math.max(opacity, 0);
-		opacity = Math.min(opacity, 100);
-
-		return opacity;
-	}
-
-	/**
-	 * Returns the background color for apply in the gradient.<br/>
-	 * If no gradient must be applicated, returns an empty string.
-	 * @return hexadecimal representation of the color.
-	 */
-	private String getGradient()
-	{
-		String fillGradientEnabled = this.getValue(this.getCellElement(mxVsdxConstants.FILL_GRADIENT_ENABLED), "0");
-		
-		if ("1".equals(fillGradientEnabled))
-		{
-			Section fillGradient = sections.get("FillGradient");
-			
-			if (fillGradient != null)
-			{
-				//find the last row. We approximate gradients with first and last color
-				ArrayList<Element> rows = mxVsdxUtils.getDirectChildNamedElements(fillGradient.elem, "Row");
-				
-				String color = this.getColor(fillGradient.getIndexedCell(rows.get(rows.size() - 1).getAttribute("IX"), "GradientStopColor"));
-				
-				if (color != null && !color.isEmpty()) return color;
-			}
-		}
-
-		String gradient = "";
-		String fillPattern = this.getValue(
-				this.getCellElement(mxVsdxConstants.FILL_PATTERN), "0");
-
-		//		if (fillPattern.equals("25") || fillPattern.equals("27") || fillPattern.equals("28") || fillPattern.equals("30"))
-		//approximate all gradients of vsdx with mxGraph one
-		if (Integer.parseInt(fillPattern) >= 25)
-		{
-			gradient = this
-					.getColor(this.getCellElement(mxVsdxConstants.FILL_BKGND));
-		}
-		else
-		{
-			mxVsdxTheme theme = getTheme();
-
-			if (theme != null)
-			{
-				Color gradColor = theme
-						.getFillGraientColor(getQuickStyleVals());
-				if (gradColor != null)
-					gradient = gradColor.toHexStr();
-			}
-		}
-
-		return gradient;
-	}
-
-	/**
-	 * Returns the direction of the gradient.<br/>
-	 * If no gradient has to be applied, returns an empty string.
-	 * @return Direction.(east, west, north or south)
-	 */
-	private String getGradientDirection()
-	{
-		String direction = "";
-		String fillPattern = this.getValue(
-				this.getCellElement(mxVsdxConstants.FILL_PATTERN), "0");
-
-		if (fillPattern.equals("25"))
-		{
-			direction = mxConstants.DIRECTION_EAST;
-		}
-		else if (fillPattern.equals("27"))
-		{
-			direction = mxConstants.DIRECTION_WEST;
-		}
-		else if (fillPattern.equals("28"))
-		{
-			direction = mxConstants.DIRECTION_SOUTH;
-		}
-		else if (fillPattern.equals("30"))
-		{
-			direction = mxConstants.DIRECTION_NORTH;
-		}
-
-		return direction;
-	}
-
-	/**
-	 * Returns the rotation of the shape.<br/>
-	 * @return Rotation of the shape in degrees.
-	 */
-	public double calcRotation()
-	{
-		double rotation = Double.valueOf(
-				this.getValue(this.getCellElement(mxVsdxConstants.ANGLE), "0"));
-
-		rotation = Math.toDegrees(rotation);
-		rotation = rotation % 360;
-		rotation = rotation * 100 / 100;
-
-		return 360 - rotation;
-	}
-
-	/**
-	 * Used to pass in a parents rotation to the child
-	 * @param parentRotation the rotation of the parent
-	 */
-	public void propagateRotation(double parentRotation)
-	{
-		this.rotation += parentRotation;
-		this.rotation %= 360;
-		this.rotation = this.rotation * 100 / 100;
-	}
-
-	/**
-	 * Returns the top spacing of the label in pixels.<br/>
-	 * The property may to be defined in master shape or text stylesheet.<br/>
-	 * @return Top spacing in double precision.
-	 */
-	public double getTopSpacing()
-	{
-		double topMargin = this.getTextTopMargin();
-		topMargin = (topMargin / 2 - 2.8) * 100 / 100;
-		return topMargin;
-	}
-
-	/**
-	 * Returns the bottom spacing of the label in pixels.<br/>
-	 * The property may to be defined in master shape or text stylesheet.<br/>
-	 * @return Bottom spacing in double precision.
-	 */
-	public double getBottomSpacing()
-	{
-		double bottomMargin = this.getTextBottomMargin();
-		bottomMargin = (bottomMargin / 2 - 2.8) * 100 / 100;
-		return bottomMargin;
-	}
-
-	/**
-	 * Returns the left spacing of the label in pixels.<br/>
-	 * The property may to be defined in master shape or text stylesheet.<br/>
-	 * @return Left spacing in double precision.
-	 */
-	public double getLeftSpacing()
-	{
-		double leftMargin = this.getTextLeftMargin();
-		leftMargin = (leftMargin / 2 - 2.8) * 100 / 100;
-		return leftMargin;
-	}
-
-	/**
-	 * Returns the right spacing of the label in pixels.<br/>
-	 * The property may to be defined in master shape or text stylesheet.<br/>
-	 * @return Right spacing in double precision.
-	 */
-	public double getRightSpacing()
-	{
-		double rightMargin = this.getTextRightMargin();
-		rightMargin = (rightMargin / 2 - 2.8) * 100 / 100;
-		return rightMargin;
-	}
-
-	/**
-	 * Checks if the label must be rotated.<br/>
-	 * The property may to be defined in master shape or text stylesheet.<br/>
-	 * @return Returns <code>true<code/> if the label should remain horizontal.
-	 */
-	public boolean getLabelRotation()
-	{
-		boolean hor = true;
-		//Defines rotation.
-		double rotation = this.calcRotation();
-		double angle = Double.valueOf(this
-				.getValue(this.getCellElement(mxVsdxConstants.TXT_ANGLE), "0"));
-
-		angle = Math.toDegrees(angle);
-		angle = angle - rotation;
-
-		if (!(Math.abs(angle) < 45 || Math.abs(angle) > 270))
-		{
-			hor = false;
-		}
-
-		return hor;
-	}
-
-	/**
-	 * Analyzes the shape and returns a string with the style.
-	 * @return style read from the shape.
-	 */
-	public Map<String, String> getStyleFromShape()
-	{
-		styleMap.put(mxVsdxConstants.VSDX_ID, this.getId().toString());
-
-		// Rotation.		
-		//		String labelRotation = getLabelRotation() ? "1" : "0";
-		this.rotation = Math.round(this.rotation);
-
-		//It gives wrong results, may be it is needed in other scenarios
-		//		if (!labelRotation.equals("1") && this.rotation != 90 && this.rotation != 270)
-		//		{
-		//			styleMap.put(mxConstants.STYLE_HORIZONTAL, labelRotation);
-		//		}
-
-		if (this.rotation != 0)
-		{
-			styleMap.put(mxConstants.STYLE_ROTATION,
-					Double.toString(this.rotation));
-		}
-
-		// Fill color
-		String fillcolor = getFillColor();
-
-		if (!fillcolor.equals(""))
-		{
-			styleMap.put(mxConstants.STYLE_FILLCOLOR, fillcolor);
-		}
-		else
-		{
-			styleMap.put(mxConstants.STYLE_FILLCOLOR, "none");
-		}
-
-		Integer id = this.getId();
-
-		this.styleDebug("ID = " + id + " , Fill Color = " + fillcolor);
-
-		//Defines gradient
-		String gradient = getGradient();
-
-		if (!gradient.equals(""))
-		{
-			styleMap.put(mxConstants.STYLE_GRADIENTCOLOR, gradient);
-			String gradientDirection = getGradientDirection();
-
-			if (!gradientDirection.equals("")
-					&& !gradientDirection.equals(mxConstants.DIRECTION_SOUTH))
-			{
-				styleMap.put(mxConstants.STYLE_GRADIENT_DIRECTION,
-						gradientDirection);
-			}
-		}
-		else
-		{
-			styleMap.put(mxConstants.STYLE_GRADIENTCOLOR, "none");
-		}
-
-		double opacity = this.getOpacity(mxVsdxConstants.FILL_FOREGND_TRANS);
-
-		if (opacity < 100)
-		{
-			styleMap.put(mxConstants.STYLE_FILL_OPACITY,
-					Double.toString(opacity));
-		}
-
-		opacity = this.getOpacity(mxVsdxConstants.LINE_COLOR_TRANS);
-
-		if (opacity < 100)
-		{
-			styleMap.put(mxConstants.STYLE_STROKE_OPACITY,
-					Double.toString(opacity));
-		}
-
-		Map<String, String> form = getForm();
-
-		if (form.containsKey(mxConstants.STYLE_SHAPE)
-				&& (form.get(mxConstants.STYLE_SHAPE).startsWith("image;")))
-		{
-			styleMap.put(mxConstants.STYLE_WHITE_SPACE, "wrap");
-		}
-
-		styleMap.putAll(form);
-
-		//Defines line Pattern
-		if (isDashed())
-		{
-			styleMap.put(mxConstants.STYLE_DASHED, "1");
-
-			String dashPattern = getDashPattern();
-
-			if (dashPattern != null)
-			{
-				styleMap.put(mxConstants.STYLE_DASH_PATTERN, dashPattern);
-			}
-		}
-
-		String color = getStrokeColor();
-		double tr = this.getStrokeTransparency();
-
-		this.styleDebug("ID = " + id + " , Color = " + color
-				+ " , stroke transparency = " + tr);
-
-		if (!color.equals("") && tr != 1)
-		{
-			styleMap.put(mxConstants.STYLE_STROKECOLOR, color);
-		}
-		else
-		{
-			//styleMap.put(mxConstants.STYLE_STROKECOLOR, "none");
-		}
-
-		//Defines the line width
-		int lWeight = (int) Math.round(getLineWidth());
-
-		if (lWeight != 1)
-		{
-			styleMap.put(mxConstants.STYLE_STROKEWIDTH,
-					Integer.toString(lWeight));
-		}
-
-		/** SHADOW **/
-		if (isShadow())
-		{
-			styleMap.put(mxConstants.STYLE_SHADOW, mxVsdxConstants.TRUE);
-		}
-
-		//Defines label top spacing
-		int topMargin = (int) Math.round(getTopSpacing());
-
-		if (topMargin != 0)
-		{
-			styleMap.put(mxConstants.STYLE_SPACING_TOP,
-					Integer.toString(topMargin));
-		}
-
-		//Defines label bottom spacing
-		int bottomMargin = (int) Math.round(getBottomSpacing());
-
-		if (bottomMargin != 0)
-		{
-			styleMap.put(mxConstants.STYLE_SPACING_BOTTOM,
-					Integer.toString(bottomMargin));
-		}
-
-		//Defines label left spacing
-		int leftMargin = (int) Math.round(getLeftSpacing());
-
-		if (leftMargin != 0)
-		{
-			styleMap.put(mxConstants.STYLE_SPACING_LEFT,
-					Integer.toString(leftMargin));
-		}
-
-		//Defines label right spacing
-		int rightMargin = (int) Math.round(getRightSpacing());
-
-		if (rightMargin != 0)
-		{
-			styleMap.put(mxConstants.STYLE_SPACING_RIGHT,
-					Integer.toString(rightMargin));
-		}
-
-		String direction = getDirection(form);
-
-		if (direction != mxConstants.DIRECTION_EAST)
-		{
-			styleMap.put(mxConstants.STYLE_DIRECTION, direction);
-		}
-
-		String flibX = getValue(this.getCellElement(mxVsdxConstants.FLIP_X),
-				"0");
-		String flibY = getValue(this.getCellElement(mxVsdxConstants.FLIP_Y),
-				"0");
-
-		if ("1".equals(flibX))
-		{
-			styleMap.put(mxConstants.STYLE_FLIPH, "1");
-		}
-
-		if ("1".equals(flibY))
-		{
-			styleMap.put(mxConstants.STYLE_FLIPV, "1");
-		}
-
-		resolveCommonStyles();
-
-		return this.styleMap;
-	}
-
-	private String getDashPattern()
-	{
-		ArrayList<Double> pattern = null;
-
-		String linePattern = this.getValue(
-				this.getCellElement(mxVsdxConstants.LINE_PATTERN), "0");
-
-		if (linePattern.equals("Themed"))
-		{
-			mxVsdxTheme theme = getTheme();
-
-			if (theme != null)
-			{
-				pattern = isVertex()
-						? theme.getLineDashPattern(getQuickStyleVals())
-						: theme.getConnLineDashPattern(getQuickStyleVals());
-			}
-		}
-		else
-		{
-			pattern = getLineDashPattern(Integer.parseInt(linePattern));
-		}
-
-		if (pattern != null && !pattern.isEmpty())
-		{
-			StringBuilder str = new StringBuilder();
-
-			for (Double len : pattern)
-			{
-				str.append(String.format("%.2f ", len));
-			}
-			return str.toString().trim();
-		}
-		return null;
-	}
-
-	/**
-	 * Checks if the lines of the shape are dashed.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * @return Returns <code>true</code> if the lines of the shape are dashed.
-	 */
-	public boolean isDashed()
-	{
-		String linePattern = this.getValue(
-				this.getCellElement(mxVsdxConstants.LINE_PATTERN), "0");
-
-		if (linePattern.equals("Themed"))
-		{
-			mxVsdxTheme theme = getTheme();
-
-			if (theme != null)
-			{
-				return isVertex() ? theme.isLineDashed(getQuickStyleVals())
-						: theme.isConnLineDashed(getQuickStyleVals());
-			}
-		}
-		else if (!(linePattern.equals("0") || linePattern.equals("1")))
-		{
-			return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 * Returns the line width.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * @return Line width in pixels.
-	 */
-	public double getLineWidth()
-	{
-		String lineWeight = getValue(
-				this.getCellElement(mxVsdxConstants.LINE_WEIGHT), "1");
-
-		double lWeight = 1;
-		try
-		{
-			if (lineWeight.equals("Themed"))
-			{
-				mxVsdxTheme theme = getTheme();
-
-				if (theme != null)
-				{
-					lWeight = (isVertex()
-							? theme.getLineWidth(getQuickStyleVals())
-							: theme.getConnLineWidth(getQuickStyleVals()))
-							/ 10000.0;
-				}
-			}
-			else
-			{
-				lWeight = Double.parseDouble(lineWeight);
-				lWeight = getScreenNumericalValue(lWeight);
-			}
-		}
-		catch (Exception e)
-		{
-			// ignore
-		}
-
-		//Value is fixed for weight < 1
-		if (lWeight < 1)
-		{
-			lWeight *= 2;
-		}
-
-		return lWeight;
-	}
-
-	/**
-	 * Returns the start arrow size.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * Determines the value in pixels of each arrow size category in .vdx.
-	 * @return Size in pixels.
-	 */
-	public float getStartArrowSize()
-	{
-		String baSize = getValue(
-				this.getCellElement(mxVsdxConstants.BEGIN_ARROW_SIZE), "4");
-
-		try
-		{
-			int size = 4;
-
-			if (baSize.equals("Themed"))
-			{
-				mxVsdxTheme theme = getTheme();
-
-				if (theme != null)
-				{
-					size = isVertex() ? theme.getStartSize(getQuickStyleVals())
-							: theme.getConnStartSize(getQuickStyleVals());
-				}
-			}
-			else
-			{
-				size = Integer.valueOf(baSize);
-			}
-
-			return VsdxShape.arrowSizes[size];
-		}
-		catch (Exception e)
-		{
-			// ignore
-		}
-
-		return 4;
-	}
-
-	/**
-	 * Returns the end arrow size.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * Determines the value in pixels of each arrow size category in .vdx.
-	 * @return Size in pixels.
-	 */
-	public float getFinalArrowSize()
-	{
-		String eaSize = getValue(
-				this.getCellElement(mxVsdxConstants.END_ARROW_SIZE), "4");
-
-		try
-		{
-			int size = 4;
-
-			if (eaSize.equals("Themed"))
-			{
-				mxVsdxTheme theme = getTheme();
-
-				if (theme != null)
-				{
-					size = isVertex() ? theme.getEndSize(getQuickStyleVals())
-							: theme.getConnEndSize(getQuickStyleVals());
-				}
-			}
-			else
-			{
-				size = Integer.valueOf(eaSize);
-			}
-
-			return VsdxShape.arrowSizes[size];
-		}
-		catch (Exception e)
-		{
-			// ignore
-		}
-
-		return 4;
-	}
-
-	/**
-	 * Returns whether the cell is Rounded.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * @return Returns <code>true</code> if the cell is Rounded.
-	 */
-	public boolean isRounded()
-	{
-		String val = getValue(this.getCellElement(mxVsdxConstants.ROUNDING),
-				"0");
-
-		if ("Themed".equals(val))
-		{
-			//TODO add theme support 
-			val = "0";
-		}
-		return Double.valueOf(val) > 0;
-	}
-
-	/**
-	 * Return if the line has shadow.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * @return Returns <code>mxVdxConstants.TRUE</code> if the line has shadow.
-	 */
-	public boolean isShadow()
-	{
-		// https://msdn.microsoft.com/en-us/library/office/jj230454.aspx TODO
-		// double shdwShow = this.getNumericalValue(this.getStyleNode(mxVdxConstants.SHDW_PATTERN), 0);
-
-		String shdw = this.getValue(
-				this.getCellElement(mxVsdxConstants.SHDW_PATTERN), "0");
-
-		if (shdw.equals("Themed"))
-		{
-			// TODO get value from theme
-		}
-		else if (!shdw.equals("0"))
-		{
-			return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 * Returns the style of the edge. (Orthogonal or straight)
-	 * @return Edge Style.
-	 */
-	public Map<String, String> getEdgeStyle(Map<String, String> edgeShape)
-	{
-		Map<String, String> result = new HashMap<String, String>();
-		String edgeName = edgeShape.get(mxConstants.STYLE_SHAPE);
-
-		if (edgeName.equals("mxgraph.lean_mapping.electronic_info_flow_edge"))
-		{
-			result.put(mxConstants.STYLE_EDGE, mxConstants.NONE);
-			return result;
-		}
-		else
-		{
-			result.put(mxConstants.STYLE_EDGE, mxConstants.EDGESTYLE_ELBOW);
-			return result;
-		}
-		//		else
-		//		{
-		//			result.put(mxConstants.STYLE_EDGE, mxConstants.NONE);
-		//			return result;
-		//		}
-	}
-
-	/**
-	 * Returns the master's Id of the Shape.
-	 * @return Master's ID of the shape, null if has not a master.
-	 */
-	public String getMasterId()
-	{
-		if (shape.hasAttribute(mxVsdxConstants.MASTER))
-		{
-			return shape.getAttribute(mxVsdxConstants.MASTER);
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	/**
-	 * Returns the masterShape's Id of the shape.
-	 * @return Master Shape's ID of the shape, null if has not a master shape.
-	 */
-	public String getShapeMasterId()
-	{
-		if (shape.hasAttribute(mxVsdxConstants.MASTER_SHAPE))
-		{
-			return shape.getAttribute(mxVsdxConstants.MASTER_SHAPE);
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	/**
-	 * Checks if a shape contains other shapes inside.
-	 * @return Returns <code>true</code> if a shape contains other shapes inside.
-	 */
-	public boolean isGroup()
-	{
-		return shape.getAttribute("Type").equals("Group");
-	}
-
-	/**
-	 * Checks if a shape contains other shapes inside.
-	 * @return Returns <code>true</code> if a shape contains other shapes inside.
-	 */
-	public static String getType(Element shape)
-	{
-		return shape.getAttribute("Type");
-	}
-
-	public mxVsdxMaster getMaster()
-	{
-		return master;
-	}
-
-	/**
-	 * Returns the NameU attribute.
-	 * @return Value of the NameU attribute.
-	 */
-	public String getNameU()
-	{
-		String result = shape.getAttribute(mxVsdxConstants.NAME_U);
-
-		if ((result == null || result.equals("")) && masterShape != null)
-		{
-			result = masterShape.getNameU();
-		}
-
-		return result;
-	}
-
-	/**
-	 * Returns the Name attribute.
-	 * @return Value of the Name attribute (Human readable name).
-	 */
-	public String getName()
-	{
-		String result = shape.getAttribute(mxVsdxConstants.NAME);
-
-		if ((result == null || result.equals("")) && masterShape != null)
-		{
-			result = masterShape.getName();
-		}
-
-		return result;
-	}
-
-	/**
-	 * Returns the master name of the shape
-	 * @return Master name of the shape
-	 */
-	public String getMasterName()
-	{
-		return shapeName;
-
-	}
-
-	public void setLabelOffset(mxCell vertex, String style)
-	{
-		String nameU = "";
-		String masterNameU = "";
-
-		if (shape.hasAttribute(mxVsdxConstants.NAME_U))
-		{
-			nameU = shape.getAttribute(mxVsdxConstants.NAME_U);
-		}
-
-		if (this.getMaster() != null
-				&& this.getMaster().getMasterElement() != null)
-		{
-			if (this.getMaster().getMasterElement()
-					.hasAttribute(mxVsdxConstants.NAME_U))
-			{
-				masterNameU = this.getMaster().getMasterElement()
-						.getAttribute(mxVsdxConstants.NAME_U);
-			}
-		}
-
-		//check for shape name/type, because of different (shape specific) treatment of each
-		if (nameU.startsWith("Organizational unit")
-				|| masterNameU.startsWith("Organizational unit"))
-		{
-			Element control = (Element) shape
-					.getElementsByTagName(mxVsdxConstants.CONTROL).item(0);
-
-			Element xEl = null;
-			String xS = "0.0";
-			Element yEl = null;
-			String yS = "-0.4";
-
-			if (control != null)
-			{
-				xEl = (Element) control.getElementsByTagName(mxVsdxConstants.X)
-						.item(0);
-
-				if (xEl.hasAttribute("F"))
-				{
-					xS = xEl.getAttribute("F");
-				}
-				else
-				{
-					xS = xEl.getTextContent();
-				}
-
-				yEl = (Element) control.getElementsByTagName(mxVsdxConstants.Y)
-						.item(0);
-
-				if (yEl.hasAttribute("F"))
-				{
-					yS = yEl.getAttribute("F");
-				}
-				else
-				{
-					yS = yEl.getTextContent();
-				}
-			}
-
-			mxGeometry geometry = vertex.getGeometry();
-
-			//clean the formula strings and hope it will work with a specific algorithm
-			xS = xS.replace("Width/2+", "");
-			xS = xS.replace("DL", "");
-			yS = yS.replace("Height*", "");
-
-			if (xS.equals("Inh"))
-			{
-				xS = "0.0";
-			}
-
-			if (yS.equals("Inh"))
-			{
-				yS = "-0.4";
-			}
-
-			if (yS.contains("txtHeight"))
-			{
-				yS = "-0.4";
-			}
-
-			String[] styleArray = style.split(";");
-			String tabHeight = "";
-
-			for (int i = 0; i < styleArray.length; i++)
-			{
-				String currStyle = styleArray[i];
-				currStyle = currStyle.trim();
-
-				if (currStyle.startsWith("tabHeight="))
-				{
-					tabHeight = currStyle.replace("tabHeight=", "");
-				}
-			}
-
-			if (tabHeight.equals(""))
-			{
-				tabHeight = "20";
-			}
-
-			Double tH = Double.valueOf(tabHeight);
-
-			Double x = Double.parseDouble(xS);
-			Double y = Double.parseDouble(yS);
-			Double h = geometry.getHeight();
-			Double xFinal = geometry.getWidth() * 0.1 + x * 100;
-			Double yFinal = h - h * y - tH / 2;
-			mxPoint offset = new mxPoint(xFinal, yFinal);
-			vertex.getGeometry().setOffset(offset);
-		}
-		else if (nameU.startsWith("Domain 3D")
-				|| masterNameU.startsWith("Domain 3D"))
-		{
-			Element control = (Element) shape
-					.getElementsByTagName(mxVsdxConstants.CONTROL).item(0);
-
-			Element xEl = null;
-			String xS = "0.0";
-			Element yEl = null;
-			String yS = "-0.4";
-
-			if (control != null)
-			{
-				xEl = (Element) control.getElementsByTagName(mxVsdxConstants.X)
-						.item(0);
-				xS = xEl.getAttribute("F");
-				yEl = (Element) control.getElementsByTagName(mxVsdxConstants.Y)
-						.item(0);
-				yS = yEl.getAttribute("F");
-			}
-
-			mxGeometry geometry = vertex.getGeometry();
-
-			//clean the formula strings and hope it will work with a specific algorithm
-			xS = xS.replace("Width/2+", "");
-			xS = xS.replace("DL", "");
-			yS = yS.replace("Height*", "");
-
-			if (xS.equals("Inh") || xS.equals(""))
-			{
-				xS = "0.0";
-			}
-
-			if (yS.equals("Inh") || yS.equals(""))
-			{
-				yS = "-0.4";
-			}
-
-			if (yS.contains("txtHeight"))
-			{
-				yS = "-0.4";
-			}
-
-			Double x = Double.parseDouble(xS);
-			Double y = Double.parseDouble(yS);
-			Double h = geometry.getHeight();
-			Double xFinal = geometry.getWidth() * 0.1 + x * 100;
-			Double yFinal = h - h * y;
-			mxPoint offset = new mxPoint(xFinal, yFinal);
-			vertex.getGeometry().setOffset(offset);
-		}
-	}
-
-	/**
-	 * Returns the constant that represents the Shape.
-	 * @return String that represent the form.
-	 */
-	public Map<String, String> getForm()
-	{
-		Map<String, String> result = new HashMap<String, String>();
-
-		this.styleDebug("Looking to match shape = " + shapeName);
-
-		if (shapeName != null && !shapeName.equals("")
-				&& VsdxShape.USE_SHAPE_MATCH)
-		{
-			String trans = null;// mxResources.get(shapeName);
-
-			if (trans != null && !trans.equals(""))
-			{
-				this.styleDebug("Translation = " + trans);
-				result.put(mxConstants.STYLE_SHAPE, trans);
-				return result;
-			}
-		}
-
-		if (this.isVertex())
-		{
-			try
-			{
-				String type = VsdxShape.getType(this.getShape());
-				// String foreignType = "";
-				this.styleDebug("shape type = " + type);
-
-				//The master may contain the foreign object data
-				if (this.imageData != null
-						|| (mxVsdxConstants.FOREIGN.equals(type)
-								&& masterShape != null
-								&& masterShape.imageData != null))
-				{
-					Map<String, String> imageData = this.imageData != null
-							? this.imageData : masterShape.imageData;
-
-					result.put("shape", "image");
-					result.put("aspect", "fixed");
-					String iType = imageData.get("iType");
-					String iData = imageData.get("iData");
-
-					result.put("image", "data:image/" + iType + "," + iData);
-					return result;
-				}
-
-				//Shape inherit master geometry and can change some of it or override it completely. So, no need to parse the master instead of the shape itself
-				String parsedGeom = this.parseGeom();
-
-				if (parsedGeom.equals(""))
-				{
-					this.styleDebug("No geom found");
-					return result;
-				}
-
-				String stencil = Utils.encodeURIComponent(parsedGeom, "UTF-8");
-
-				byte[] bytes = stencil.getBytes("UTF-8");
-				Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION,
-						true);
-				deflater.setInput(bytes);
-				ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-
-				deflater.finish();
-
-				byte[] buffer = new byte[1024];
-
-				while (!deflater.finished())
-				{
-					int count = deflater.deflate(buffer);
-					outputStream.write(buffer, 0, count);
-				}
-
-				try
-				{
-					outputStream.close();
-				}
-				catch (IOException e)
-				{
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-
-				byte[] output = outputStream.toByteArray();
-				deflater.end();
-
-				byte[] encoded = output;//Base64.encodeBase64(output);
-				String enc = new String(encoded, "UTF-8");
-
-				result.put(mxConstants.STYLE_SHAPE, "stencil(" + enc + ")");
-			}
-			catch (UnsupportedEncodingException e)
-			{
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-		}
-		else
-		{
-			return getEdgeStyle();
-		}
-
-		return result;
-	}
-
-	/**
-	 * Checks if a shape may to be imported like an Off page reference.
-	 * @return Returns <code>true</code> if a shape may to be imported like an Off page reference.
-	 */
-	public boolean isOff_page_reference()
-	{
-		String name = getNameU();
-
-		if (name.equals("Off-page reference")
-				|| name.equals("Lined/Shaded process"))
-		{
-			return true;
-		}
-
-		return false;
-	}
-
-	/**
-	 * Checks if a shape may to be imported like an External process.
-	 * @return Returns <code>true</code> if a shape may to be imported like an External process.
-	 */
-	public boolean isExternal_process()
-	{
-		return (shapeName.equals("External process"));
-	}
-
-	/**
-	 * Returns the direction of the shape.
-	 * @param form Form of the shape.
-	 * @return Direction(south, north, east and south)
-	 */
-	public String getDirection(Map<String, String> form)
-	{
-		String offsetS = null;//(String) mxResources.get("mxOffset" + shapeName);
-
-		if (offsetS == null || offsetS.equals("0") || offsetS.equals(""))
-		{
-			return mxConstants.DIRECTION_EAST;
-		}
-		else if (offsetS.equals("1"))
-		{
-			return mxConstants.DIRECTION_SOUTH;
-		}
-		else if (offsetS.equals("2"))
-		{
-			return mxConstants.DIRECTION_WEST;
-		}
-		else if (offsetS.equals("3"))
-		{
-			return mxConstants.DIRECTION_NORTH;
-		}
-
-		return mxConstants.DIRECTION_EAST;
-	}
-
-	/**
-	 * Checks if a shape may to be imported like a Sub-process.
-	 * This method is approximated.
-	 * @return Returns <code>true</code> if a shape may to be imported like a
-	 * Sub-process.
-	 */
-	public boolean isSubproces()
-	{
-		return shapeName.equals("Subproces");
-	}
-
-	/**
-	 * @return style map containing the proper shape and style (if needed) of a Visio "dynamic connector" edge
-	 */
-	public Map<String, String> getEdgeStyle()
-	{
-		Map<String, String> result = new HashMap<String, String>();
-
-		result.put("edgeStyle", "none");
-		return result;
-
-		//result.put("edgeStyle", "orthogonalEdgeStyle");
-		//return result;
-
-		//result.put("curved", "1");
-		//return result;
-
-		//return null;
-	}
-
-	public Map<Integer, VsdxShape> getChildShapes()
-	{
-		return childShapes;
-	}
-
-	public void setChildShapes(Map<Integer, VsdxShape> childShapes)
-	{
-		this.childShapes = childShapes;
-	}
-
-	public boolean isDisplacedLabel()
-	{
-		String txtPinXF = this.getAttribute(mxVsdxConstants.TXT_PIN_X, "F", "");
-		String txtPinYF = this.getAttribute(mxVsdxConstants.TXT_PIN_Y, "F", "");
-		String txtWidthF = this.getAttribute(mxVsdxConstants.TXT_WIDTH, "F",
-				"");
-		String txtHeightF = this.getAttribute(mxVsdxConstants.TXT_HEIGHT, "F",
-				"");
-
-		if (masterShape != null)
-		{
-			if (txtPinXF == "" || txtPinXF.toLowerCase().equals("inh"))
-			{
-				txtPinXF = masterShape.getAttribute(mxVsdxConstants.TXT_PIN_X,
-						"F", "");
-			}
-
-			if (txtPinYF == "" || txtPinYF.toLowerCase().equals("inh"))
-			{
-				txtPinYF = masterShape.getAttribute(mxVsdxConstants.TXT_PIN_Y,
-						"F", "");
-			}
-
-			if (txtWidthF == "" || txtWidthF.toLowerCase().equals("inh"))
-			{
-				txtWidthF = masterShape.getAttribute(mxVsdxConstants.TXT_WIDTH,
-						"F", "");
-			}
-
-			if (txtHeightF == "" || txtHeightF.toLowerCase().equals("inh"))
-			{
-				txtHeightF = masterShape
-						.getAttribute(mxVsdxConstants.TXT_HEIGHT, "F", "");
-			}
-		}
-
-		if (txtPinXF.toLowerCase().equals("width*0.5")
-				&& txtPinYF.toLowerCase().equals("height*0.5")
-				&& txtWidthF.toLowerCase().equals("width*1")
-				&& txtHeightF.toLowerCase().equals("height*1"))
-		{
-			return false;
-		}
-		else if (txtPinXF.toLowerCase().startsWith("width*")
-				&& txtPinYF.toLowerCase().startsWith("height*")
-				&& txtWidthF.toLowerCase().startsWith("width*")
-				&& txtHeightF.toLowerCase().startsWith("height*"))
-		//		else if (txtPinXF.toLowerCase().startsWith("width*") &&
-		//				txtPinYF.toLowerCase().startsWith("height*"))
-		{
-			return true;
-		}
-		else if (txtPinXF.toLowerCase().startsWith("controls.row_")
-				|| txtPinYF.toLowerCase().startsWith("controls.row_"))
-		{
-			return true;
-		}
-
-		return false;
-	}
-
-	public boolean isRotatedLabel()
-	{
-		String txtAngleValue = this.getAttribute(mxVsdxConstants.TXT_ANGLE, "V",
-				"");
-
-		if (masterShape != null)
-		{
-			if (txtAngleValue.equals(""))
-			{
-				txtAngleValue = masterShape
-						.getAttribute(mxVsdxConstants.TXT_ANGLE, "V", "");
-			}
-
-		}
-
-		if (!txtAngleValue.equals("0") && !txtAngleValue.equals("0.0")
-				&& !txtAngleValue.equals(""))
-		{
-			return true;
-		}
-
-		return false;
-	}
-
-	public void setRootShape(VsdxShape shape)
-	{
-		this.rootShape = shape;
-	}
-
-	public VsdxShape getRootShape()
-	{
-		return this.rootShape;
-	}
-
-	// Edge specific methods 
-
-	/**
-	 * Returns the coordinates of the begin point of an Edge Shape.
-	 * @param parentHeight Height of the parent of the shape.
-	 * @return mxPoint that represents the coordinates.
-	 */
-	public mxPoint getStartXY(double parentHeight)
-	{
-		double startX = Math.round(getScreenNumericalValue(
-				this.getCellElement(mxVsdxConstants.BEGIN_X), 0) * 100) / 100;
-		double startY = Math.round((parentHeight - getScreenNumericalValue(
-				this.getCellElement(mxVsdxConstants.BEGIN_Y), 0)) * 100) / 100;
-
-		return new mxPoint(startX, startY);
-	}
-
-	/**
-	 * Returns the coordinates of the end point of an Edge Shape.
-	 * @param parentHeight Height of the parent of the shape.
-	 * @return mxPoint that represents the coordinates.
-	 */
-	public mxPoint getEndXY(double parentHeight)
-	{
-		double endX = Math.round(getScreenNumericalValue(
-				this.getCellElement(mxVsdxConstants.END_X), 0) * 100) / 100;
-		double endY = Math.round((parentHeight - getScreenNumericalValue(
-				this.getCellElement(mxVsdxConstants.END_Y), 0)) * 100) / 100;
-
-		return new mxPoint(endX, endY);
-	}
-
-	/**
-	 * Returns the list of routing points of a edge shape.
-	 * @param parentHeight Height of the parent of the shape.
-	 * @return List of mxPoint that represents the routing points.
-	 */
-	public List<mxPoint> getRoutingPoints(double parentHeight,
-			mxPoint startPoint,
-			double rotation/*, boolean flipX, boolean flipY*/)
-	{
-		if (geomList != null)
-		{
-			return geomList.getRoutingPoints(parentHeight, startPoint,
-					rotation);
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the list of control points of a edge shape.
-	 * @param parentHeight Height of the parent of the shape.
-	 * @return List of mxPoint that represents the control points.
-	 */
-	public List<mxPoint> getControlPoints(double parentHeight)
-	{
-		mxPoint startXY = getStartXY(parentHeight);
-		mxPoint endXY = getEndXY(parentHeight);
-		ArrayList<mxPoint> pointList = new ArrayList<mxPoint>();
-
-		if (shape != null)
-		{
-			NodeList geomList = shape
-					.getElementsByTagName(mxVsdxConstants.GEOM);
-
-			if (geomList.getLength() > 0)
-			{
-				Element firstGeom = (Element) geomList.item(0);
-				Element firstNURBS = (Element) firstGeom
-						.getElementsByTagName(mxVsdxConstants.NURBS_TO).item(0);
-				Element firstE = (Element) firstNURBS.getElementsByTagName("E")
-						.item(0);
-
-				if (firstE != null)
-				{
-					String f = firstE.getAttribute("F");
-					f = f.replaceAll("NURBS\\(", "");
-					f = f.replaceAll("\\)", "");
-					f = f.replaceAll(",", " ");
-					f = f.replaceAll("\\s\\s", " ");
-					String[] pointsS = f.split(" ");
-					double[] pointsRaw = new double[pointsS.length];
-
-					for (int i = 0; i < pointsS.length; i++)
-					{
-						pointsRaw[i] = Double.parseDouble(pointsS[i]);
-					}
-
-					for (int i = 2; i + 4 < pointsS.length; i = i + 4)
-					{
-						mxPoint currPoint = new mxPoint();
-						double rawX = pointsRaw[i + 2];
-						double rawY = pointsRaw[i + 3];
-						double width = Math.abs(endXY.getX() - startXY.getX());
-						double widthFixed = Math.min(100, width);
-						double heightFixed = 100;
-						double finalX = 0;
-
-						finalX = startXY.getX() + widthFixed * rawX;
-						currPoint.setX(Math.round(finalX * 100) / 100);
-						currPoint.setY(Math.round((startXY.getY() - heightFixed * rawY) * 100) / 100);
-						pointList.add(currPoint);
-					}
-
-					return pointList;
-				}
-				else
-				{
-					return null;
-				}
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * Analyzes a edge shape and returns a string with the style.
-	 * @return style read from the edge shape.
-	 */
-	public Map<String, String> getStyleFromEdgeShape(double parentHeight)
-	{
-		styleMap.put(mxVsdxConstants.VSDX_ID, this.getId().toString());
-
-		// Rotation.
-		//		double rotation = this.getRotation();
-		//		rotation = Math.round(rotation);
-		//		
-		//		String rotationString = getLabelRotation() ? "1" : "0";
-		//
-		//		if (!rotationString.equals("1") && rotation != 90 && rotation != 270)
-		//		{
-		//			styleMap.put(mxConstants.STYLE_HORIZONTAL, rotationString);
-		//		}
-		//
-		//		if (rotation != 0 && rotation != 360)
-		//		{
-		//			rotation = rotation * 100/100;
-		//
-		//			styleMap.put(mxConstants.STYLE_ROTATION, Double.toString(rotation));
-		//		}
-
-		//Defines Edge Shape
-		Map<String, String> edgeShape = getForm();
-
-		if (edgeShape != null && !edgeShape.equals(""))
-		{
-			styleMap.putAll(edgeShape);
-		}
-
-		//Defines Pattern
-		if (isDashed())
-		{
-			styleMap.put(mxConstants.STYLE_DASHED, "1");
-
-			String dashPattern = getDashPattern();
-
-			if (dashPattern != null)
-			{
-				styleMap.put(mxConstants.STYLE_DASH_PATTERN, dashPattern);
-			}
-		}
-
-		//Defines Begin Arrow
-		String startArrow = getEdgeMarker(true);
-
-		if (startArrow != null)
-		{
-			if (startArrow.startsWith(ARROW_NO_FILL_MARKER))
-			{
-				startArrow = startArrow
-						.substring(ARROW_NO_FILL_MARKER.length());
-				styleMap.put(mxConstants.STYLE_STARTFILL, "0");
-			}
-			styleMap.put(mxConstants.STYLE_STARTARROW, startArrow);
-		}
-
-		//Defines End Arrow
-		String endArrow = getEdgeMarker(false);
-
-		if (endArrow != null)
-		{
-			if (endArrow.startsWith(ARROW_NO_FILL_MARKER))
-			{
-				endArrow = endArrow.substring(ARROW_NO_FILL_MARKER.length());
-				styleMap.put(mxConstants.STYLE_ENDFILL, "0");
-			}
-			styleMap.put(mxConstants.STYLE_ENDARROW, endArrow);
-		}
-
-		//Defines the start arrow size.
-		int saSize = (int) Math.round(getStartArrowSize());
-
-		if (saSize != 6)
-		{
-			styleMap.put(mxConstants.STYLE_STARTSIZE, Integer.toString(saSize));
-		}
-
-		//Defines the end arrow size.
-		int faSize = (int) Math.round(getFinalArrowSize());
-
-		if (faSize != 6)
-		{
-			styleMap.put(mxConstants.STYLE_ENDSIZE, Integer.toString(faSize));
-		}
-
-		//Defines the line width
-		int lWeight = (int) Math.round(getLineWidth());
-
-		if (lWeight != 1.0)
-		{
-			styleMap.put(mxConstants.STYLE_STROKEWIDTH,
-					Integer.toString(lWeight));
-		}
-
-		// Color
-		String color = getStrokeColor();
-
-		if (!color.equals(""))
-		{
-			styleMap.put(mxConstants.STYLE_STROKECOLOR, color);
-		}
-
-		// Shadow
-		if (isShadow())
-		{
-			styleMap.put(mxConstants.STYLE_SHADOW, mxVsdxConstants.TRUE);
-		}
-
-		if (isConnectorBigNameU(getNameU()))
-		{
-			styleMap.put(mxConstants.STYLE_SHAPE, mxConstants.SHAPE_ARROW);
-			String fillcolor = getFillColor();
-
-			if (!fillcolor.equals(""))
-			{
-				styleMap.put(mxConstants.STYLE_FILLCOLOR, fillcolor);
-			}
-		}
-
-		//Defines label top spacing
-		int topMargin = (int) Math.round(getTopSpacing());
-		styleMap.put(mxConstants.STYLE_SPACING_TOP, Integer.toString(topMargin));
-
-		//Defines label bottom spacing
-		int bottomMargin = (int) Math.round(getBottomSpacing());
-		styleMap.put(mxConstants.STYLE_SPACING_BOTTOM,
-				Integer.toString(bottomMargin));
-
-		//Defines label left spacing
-		int leftMargin = (int) Math.round(getLeftSpacing());
-		styleMap.put(mxConstants.STYLE_SPACING_LEFT,
-				Integer.toString(leftMargin));
-
-		//Defines label right spacing
-		int rightMargin = (int) Math.round(getRightSpacing());
-		styleMap.put(mxConstants.STYLE_SPACING_RIGHT,
-				Integer.toString(rightMargin));
-
-		//Defines label vertical align
-		String verticalAlign = getAlignVertical();
-		styleMap.put(mxConstants.STYLE_VERTICAL_ALIGN, verticalAlign);
-
-		//Defines Label Rotation
-		//		styleMap.put(mxConstants.STYLE_HORIZONTAL, getLabelRotation());
-
-		styleMap.put("html", "1");
-
-		resolveCommonStyles();
-		//		System.out.println(this.getId());
-		//		System.out.println(Arrays.toString(styleMap.entrySet().toArray()));
-
-		return this.styleMap;
-	}
-
-	/**
-	 * Analyzes a edge shape and returns a string with the style.
-	 * @return style read from the edge shape.
-	 */
-	public Map<String, String> resolveCommonStyles()
-	{
-		/** LABEL BACKGROUND COLOR **/
-		String lbkgnd = this.getTextBkgndColor(
-				this.getCellElement(mxVsdxConstants.TEXT_BKGND));
-
-		if (!lbkgnd.equals(""))
-		{
-			this.styleMap.put(mxConstants.STYLE_LABEL_BACKGROUNDCOLOR, lbkgnd);
-		}
-
-		/** ROUNDING **/
-		this.styleMap.put(mxConstants.STYLE_ROUNDED,
-				isRounded() ? mxVsdxConstants.TRUE : mxVsdxConstants.FALSE);
-
-		return styleMap;
-	}
-
-	/**
-	 * Returns the arrow of the line.
-	 * @return Type of arrow.
-	 */
-	public String getEdgeMarker(boolean start)
-	{
-		String marker = this.getValue(this.getCellElement(start
-				? mxVsdxConstants.BEGIN_ARROW : mxVsdxConstants.END_ARROW),
-				"0");
-
-		int val = 0;
-		try
-		{
-			if (marker.equals("Themed"))
-			{
-				mxVsdxTheme theme = getTheme();
-
-				if (theme != null)
-				{
-					val = isVertex()
-							? theme.getEdgeMarker(start, getQuickStyleVals())
-							: theme.getConnEdgeMarker(start,
-									getQuickStyleVals());
-
-				}
-			}
-			else
-			{
-				val = Integer.parseInt(marker);
-			}
-		}
-		catch (Exception e)
-		{
-			// ignore
-		}
-
-		String type = VsdxShape.arrowTypes.get(val);
-
-		if (val > 0 && type == null)
-		{
-			//if arrow  head type is not supported, use the open arrow instead
-			type = VsdxShape.arrowTypes.get(1);
-		}
-
-		return type;
-	}
-
-	/**
-	 * Locates the first entry for the specified style string in the style hierarchy.
-	 * The order is to look locally, then delegate the request to the relevant parent style
-	 * if it doesn't exist locally
-	 * @param key The key of the style to find
-	 * @return the Element that first resolves to that style key or null or none is found
-	 */
-	protected Element getCellElement(String key)
-	{
-		Element elem = super.getCellElement(key);
-
-		if (elem == null && this.masterShape != null)
-		{
-			return this.masterShape.getCellElement(key);
-		}
-
-		return elem;
-	}
-
-	protected Element getCellElement(String cellKey, String index,
-			String sectKey)
-	{
-		Element elem = super.getCellElement(cellKey, index, sectKey);
-
-		if (elem == null && this.masterShape != null)
-		{
-			return this.masterShape.getCellElement(cellKey, index, sectKey);
-		}
-
-		return elem;
-	}
-
-	/**
-	 * Creates a sub shape for <b>shape</b> that contains the label. Used internally, when the label is positioned by an anchor.
-	 * @param graph
-	 * @param shape the shape we want to create the label for
-	 * @param parent
-	 * @param parentHeight
-	 * @return label sub-shape
-	 */
-	public mxCell createLabelSubShape(/*mxGraph graph,*/ mxCell parent)
-	{
-		double txtWV = getScreenNumericalValue(
-				getShapeNode(mxVsdxConstants.TXT_WIDTH), getWidth());
-		double txtHV = getScreenNumericalValue(
-				getShapeNode(mxVsdxConstants.TXT_HEIGHT), getHeight());
-		double txtLocPinXV = getScreenNumericalValue(
-				getShapeNode(mxVsdxConstants.TXT_LOC_PIN_X), txtWV / 2.0);
-		double txtLocPinYV = getScreenNumericalValue(
-				getShapeNode(mxVsdxConstants.TXT_LOC_PIN_Y), txtHV / 2.0);
-		double txtPinXV = getScreenNumericalValue(
-				getShapeNode(mxVsdxConstants.TXT_PIN_X), txtLocPinXV);
-		double txtPinYV = getScreenNumericalValue(
-				getShapeNode(mxVsdxConstants.TXT_PIN_Y), txtLocPinYV);
-		double txtAngleV = getValueAsDouble(
-				getShapeNode(mxVsdxConstants.TXT_ANGLE), 0);
-
-		String textLabel = getTextLabel();
-
-		if (textLabel != null && !textLabel.isEmpty())
-		{
-			Map<String, String> styleMap = new HashMap<String, String>(
-					getStyleMap());
-			styleMap.put(mxConstants.STYLE_FILLCOLOR, mxConstants.NONE);
-			styleMap.put(mxConstants.STYLE_STROKECOLOR, mxConstants.NONE);
-			styleMap.put(mxConstants.STYLE_GRADIENTCOLOR, mxConstants.NONE);
-
-			//We don't need to override these attributes in order to properly align the text
-			if (!styleMap.containsKey("align"))
-				styleMap.put("align", "center");
-			if (!styleMap.containsKey("verticalAlign"))
-				styleMap.put("verticalAlign", "middle");
-			if (!styleMap.containsKey("whiteSpace"))
-				styleMap.put("whiteSpace", "wrap");
-
-			// Doesn't make sense to set a shape, it's not rendered and doesn't affect the text perimeter
-			styleMap.remove("shape");
-			//image should be set for the parent shape only
-			styleMap.remove("image");
-			//styleMap.put("html", "1");
-
-			double rotation = getRotation();
-
-			if (txtAngleV != 0)
-			{
-				double labRot = 360 - Math.toDegrees(txtAngleV);
-
-				labRot = Math.round(((labRot + rotation) % 360.0) * 100.0)
-						/ 100.0;
-
-				if (labRot != 0.0)
-				{
-					styleMap.put("rotation", Double.toString(labRot));
-				}
-			}
-
-			String style = "text;" + mxVsdxUtils.getStyleString(styleMap, "=");
-
-			double y = parent.getGeometry().getHeight()
-					- (txtPinYV + txtHV - txtLocPinYV);
-			double x = txtPinXV - txtLocPinXV;
-
-			if (rotation > 0)
-			{
-				mxGeometry tmpGeo = new mxGeometry(x, y, txtWV, txtHV);
-				mxGeometry pgeo = parent.getGeometry();
-				double hw = pgeo.getWidth() / 2, hh = pgeo.getHeight() / 2;
-				Utils.rotatedGeometry(tmpGeo, rotation, hw, hh);
-				x = tmpGeo.getX();
-				y = tmpGeo.getY();
-			}
-
-			mxCell v1 = null;
-//			(mxCell) graph.insertVertex(parent, null, textLabel,
-//				Math.round(x * 100) / 100, Math.round(y * 100) / 100,
-//				Math.round(txtWV * 100) / 100, Math.round(txtHV * 100) / 100,
-//				style + ";html=1;");
-
-			return v1;
-		}
-
-		return null;
-	}
-
-	public mxPoint getLblEdgeOffset(List<mxPoint> points)
-	{
-		if (points != null && points.size() > 1)
-		{
-			//find mxGraph label offset
-			//mxCellState state = new mxCellState();
-			//state.setAbsolutePoints(points);
-			//view.updateEdgeBounds(state);
-			mxPoint mxOffset = new mxPoint();//.getPoint(state);
-			mxPoint p0 = points.get(0);
-			mxPoint pe = points.get(points.size() - 1);
-
-			//Calculate the text offset
-			double txtWV = getScreenNumericalValue(
-					getShapeNode(mxVsdxConstants.TXT_WIDTH), getWidth());
-			double txtHV = getScreenNumericalValue(
-					getShapeNode(mxVsdxConstants.TXT_HEIGHT), getHeight());
-			double txtLocPinXV = getScreenNumericalValue(
-					getShapeNode(mxVsdxConstants.TXT_LOC_PIN_X), 0);
-			double txtLocPinYV = getScreenNumericalValue(
-					getShapeNode(mxVsdxConstants.TXT_LOC_PIN_Y), 0);
-			double txtPinXV = getScreenNumericalValue(
-					getShapeNode(mxVsdxConstants.TXT_PIN_X), 0);
-			double txtPinYV = getScreenNumericalValue(
-					getShapeNode(mxVsdxConstants.TXT_PIN_Y), 0);
-
-			double y = (getHeight() - (p0.getY() - pe.getY())) / 2 + p0.getY()
-					- mxOffset.getY() - (txtPinYV - txtLocPinYV + txtHV / 2);
-			double x = txtPinXV - txtLocPinXV + txtWV / 2
-					+ (p0.getX() - mxOffset.getX());
-
-			//FIXME one file has txtPinX/Y values extremely high which cause draw.io to hang
-			//			<Cell N='TxtPinX' V='-1.651384506429589E199' F='SETATREF(Controls.TextPosition)'/>
-			//			<Cell N='TxtPinY' V='1.183491078740126E185' F='SETATREF(Controls.TextPosition.Y)'/>
-			if (Math.abs(x) > 10e10)
-				return null;
-
-			return new mxPoint(Math.round(x * 100) / 100, Math.round(y * 100) / 100);
-		}
-		else
-		{
-			return null;
-		}
-	}
-
-	public int getShapeIndex()
-	{
-		return shapeIndex;
-	}
-
-	public void setShapeIndex(int shapeIndex)
-	{
-		this.shapeIndex = shapeIndex;
-	}
-
-	public mxCell createLabelSubShape(mxGraph graph, mxCell group) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	public mxPoint getLblEdgeOffset(Object view, List<mxPoint> points) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
\ No newline at end of file
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/ArcTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/ArcTo.java
deleted file mode 100644
index 60b120c0a388ed4d266de0e19c09f677207f18fc..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/ArcTo.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class ArcTo extends Row 
-{
-	public ArcTo(int index, Double x, Double y, Double a) 
-	{
-		super(index, x, y);
-		this.a = a;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null)
-		{
-			double h = shape.getHeight();
-			double w = shape.getWidth();
-			double x0 = Math.round(shape.getLastX() * w) / 100;
-			double y0 = Math.round(shape.getLastY() * h) / 100;
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			y = h - y;
-			
-			double a = this.a * mxVsdxUtils.conversionFactor;
-
-			double dx = Math.abs(x - x0);
-			double dy = Math.abs(y - y0);
-
-			double rx = (a * 0.5) + (dx * dx + dy * dy) / (8.0 * a);
-			double ry = rx;
-			double r0 = Math.abs(rx);
-			
-			rx = rx * 100 / w;
-			ry = ry * 100 / h;
-			x = x * 100 / w;
-			y = y * 100 / h;
-			rx = Math.round(rx * 100.0) / 100.0;
-			ry = Math.round(ry * 100.0) / 100.0;
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-
-			a = Math.round(a * 100.0) / 100.0;
-			rx = Math.abs(rx);
-			ry = Math.abs(ry);
-			
-			//determine sweep and large-arc flag
-			String sf = (a < 0) ? "1" : "0";
-			String laf = (r0 < Math.abs(a)) ? "1" : "0";
-
-			shape.setLastX(x);
-			shape.setLastY(y);
-
-			return "<arc" +
-					" rx=\"" + String.valueOf(rx) + 
-					"\" ry=\"" + String.valueOf(ry) + 
-					"\" x=\"" + String.valueOf(x) + 
-					"\" y=\"" + String.valueOf(y) + 
-					"\" x-axis-rotation=\"0" + 
-					"\" large-arc-flag=\"" + laf + 
-					"\" sweep-flag=\"" + sf + 
-					"\"/>";
-		}
-		
-		return "";
-
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/DelRow.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/DelRow.java
deleted file mode 100644
index 877f6cd4477a5c8b7803a600eaff59cfac320261..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/DelRow.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class DelRow extends Row{
-
-	public DelRow(int index) {
-		super(index, null, null);
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		//Nothing
-		return "";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/Ellipse.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/Ellipse.java
deleted file mode 100644
index 14000b0cfe046ce16c31331ab4e47616b42b146c..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/Ellipse.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class Ellipse extends Row 
-{
-	public Ellipse(int index, Double x, Double y, Double a, Double b, Double c, Double d) 
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-		this.c = c;
-		this.d = d;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-		{
-			double h = shape.getHeight();
-			double w = shape.getWidth();
-
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			y = h - y;
-			double a = this.a * mxVsdxUtils.conversionFactor;
-			double b = this.b * mxVsdxUtils.conversionFactor;
-			b = h - b;
-			double c = this.c * mxVsdxUtils.conversionFactor;
-			double d = this.d * mxVsdxUtils.conversionFactor;
-			d = h - d;
-			
-			double dx1 = Math.abs(a - x);
-			double dy1 = Math.abs(b - y);
-			double r1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);
-
-			double dx2 = Math.abs(c - x);
-			double dy2 = Math.abs(d - y);
-			double r2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);
-			double newX = x * 100 / w;
-			double newY = y * 100 / h;
-			double newW = (r1 * 100 / w)/2;
-			double newH = (r2 * 100 / h)/2;
-			newH = Math.round(newH * 100.0) / 100.0;
-			newW = Math.round(newW * 100.0) / 100.0;
-			double newX1 = Math.round((newX - 2 * newW) * 100.0) / 100.0;
-			double newX2 = Math.round((newX + 2 * newW) * 100.0) / 100.0;
-			newY = Math.round(newY * 100.0) / 100.0;
-			
-			
-			return  "<move x=\"" + String.valueOf(newX1) + "\" y=\"" + String.valueOf(newY) + "\"/>" +
-								"<arc" +
-								" rx=\"" + String.valueOf(newW) + 
-								"\" ry=\"" + String.valueOf(newH) + 
-								"\" x=\"" + String.valueOf(newX2) + 
-								"\" y=\"" + String.valueOf(newY) + 
-								"\" x-axis-rotation=\"0\" large-arc-flag=\"1\" sweep-flag=\"0\"/>" +
-								
-								"<arc" +
-								" rx=\"" + String.valueOf(newW) + 
-								"\" ry=\"" + String.valueOf(newH) + 
-								"\" x=\"" + String.valueOf(newX1) + 
-								"\" y=\"" + String.valueOf(newY) + 
-								"\" x-axis-rotation=\"0\" large-arc-flag=\"1\" sweep-flag=\"0\"/>";
-		}
-		
-		return "";
-	}
-	
-//	public String handle1(mxPoint p, Shape1 shape)
-//	{
-//		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-//		{
-//			double h = shape.getHeight();
-//			double w = shape.getWidth();
-//
-//			double x = this.x * mxVsdxUtils.conversionFactor;
-//			double y = this.y * mxVsdxUtils.conversionFactor;
-//			y = h - y;
-//			double a = this.a * mxVsdxUtils.conversionFactor;
-//			double b = this.b * mxVsdxUtils.conversionFactor;
-//			b = h - b;
-//			double c = this.c * mxVsdxUtils.conversionFactor;
-//			double d = this.d * mxVsdxUtils.conversionFactor;
-//			d = h - d;
-//			
-//			double dx1 = Math.abs(a - x);
-//			double dy1 = Math.abs(b - y);
-//			double r1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);
-//
-//			double dx2 = Math.abs(c - x);
-//			double dy2 = Math.abs(d - y);
-//			double r2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);
-//			double newX = x * 100 / w;
-//			double newY = y * 100 / h;
-//			double newW = (r1 * 100 / w)/2;
-//			double newH = (r2 * 100 / h)/2;
-//			newH = Math.round(newH * 100.0) / 100.0;
-//			newW = Math.round(newW * 100.0) / 100.0;
-//			double newX1 = Math.round((newX - 2 * newW) * 100.0) / 100.0;
-//			double newX2 = Math.round((newX + 2 * newW) * 100.0) / 100.0;
-//			newY = Math.round(newY * 100.0) / 100.0;
-//			
-//			
-//			return  "<move x=\"" + String.valueOf(newX1) + "\" y=\"" + String.valueOf(newY) + "\"/>" +
-//								"<arc" +
-//								" rx=\"" + String.valueOf(newW) + 
-//								"\" ry=\"" + String.valueOf(newH) + 
-//								"\" x=\"" + String.valueOf(newX2) + 
-//								"\" y=\"" + String.valueOf(newY) + 
-//								"\" x-axis-rotation=\"0\" large-arc-flag=\"1\" sweep-flag=\"0\"/>" +
-//								
-//								"<arc" +
-//								" rx=\"" + String.valueOf(newW) + 
-//								"\" ry=\"" + String.valueOf(newH) + 
-//								"\" x=\"" + String.valueOf(newX1) + 
-//								"\" y=\"" + String.valueOf(newY) + 
-//								"\" x-axis-rotation=\"0\" large-arc-flag=\"1\" sweep-flag=\"0\"/>";
-//		}
-//		
-//		return "";
-//	}
-//
-//	
-//	public String handle2(mxPoint p, Shape1 shape)
-//	{
-//		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-//		{
-//			double h = shape.getHeight();
-//			double w = shape.getWidth();
-//
-//			double x = this.x * mxVsdxUtils.conversionFactor;
-//			double y = this.y * mxVsdxUtils.conversionFactor;
-//			y = h - y;
-//			double a = this.a * mxVsdxUtils.conversionFactor;
-//			double b = this.b * mxVsdxUtils.conversionFactor;
-//			b = h - b;
-//			double c = this.c * mxVsdxUtils.conversionFactor;
-//			double d = this.d * mxVsdxUtils.conversionFactor;
-//			d = h - d;
-//			
-//			double dx1 = Math.abs(a - x);
-//			double dy1 = Math.abs(b - y);
-//			double r1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);
-//
-//			double dx2 = Math.abs(c - x);
-//			double dy2 = Math.abs(d - y);
-//			double r2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);
-//			double newX = (x - r1) * 100 / w;
-//			double newY = (y - r2) * 100 / h;
-//			double newW = 2 * r1 * 100 / w;
-//			double newH = 2 * r2 * 100 / h;
-//			newH = Math.round(newH * 100.0) / 100.0;
-//			newW = Math.round(newW * 100.0) / 100.0;
-//			newX = Math.round(newX * 100.0) / 100.0;
-//			newY = Math.round(newY * 100.0) / 100.0;
-//			
-//			return "<ellipse" + 
-//					" x=\"" + String.valueOf(newX) + 
-//					"\" y=\"" + String.valueOf(newY) + 
-//					"\" w=\"" + String.valueOf(newW) + 
-//					"\" h=\"" + String.valueOf(newH) + 
-//					"\"/>";
-//		}
-//		
-//		return "";
-//	}
-//	
-//	
-//	public static class Shape1 {
-//		double width, height;
-//
-//		public double getWidth() {
-//			return width;
-//		}
-//
-//		public double getHeight() {
-//			return height;
-//		}
-//
-//		public void setWidth(double width) {
-//			this.width = width;
-//		}
-//
-//		public void setHeight(double height) {
-//			this.height = height;
-//		}
-//
-//		public Shape1(double width, double height) {
-//			this.width = width;
-//			this.height = height;
-//		}
-//		
-//	}
-//	public static void main(String[] args) {
-//		Shape1 shape = new Shape1(160.91, 76.2);
-//		Ellipse ellipse = new Ellipse(0, 0.5, 0.1, 0.93, 0.1, 0.90, 0.50);
-//		System.out.println(ellipse.handle1(null, shape));
-//		System.out.println(ellipse.handle2(null, shape));
-//	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java
deleted file mode 100644
index bf312191a704d4e9f610384f1e4b08c5f41a2709..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class EllipticalArcTo extends Row 
-{
-	public EllipticalArcTo(int index, Double x, Double y, Double a, Double b, Double c, Double d) 
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-		this.c = c;
-		this.d = d;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-		{
-			double h = shape.getHeight();
-			double w = shape.getWidth();
-
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			y = h - y;
-			double a = this.a * mxVsdxUtils.conversionFactor;
-			double b = this.b * mxVsdxUtils.conversionFactor;
-			double c = this.c;
-			double d = this.d;
-
-			x = x * 100.0 / w;
-			y = y * 100.0 / h;
-			
-			double x1 = shape.getLastX() * w / 100.0;
-			double y1 = shape.getLastY() * h / 100.0;
-			
-			double x2 = x * w / 100.0;
-			double y2 = y * h / 100.0;
-			
-			double x3 = a;
-			double y3 = h - b;
-
-			double ang = -c;
-			
-			double p1x = Math.sqrt(x1 * x1 + y1 * y1) * Math.cos(Math.atan2(y1, x1) - ang);
-			double p1y = Math.sqrt(x1 * x1 + y1 * y1) * Math.sin(Math.atan2(y1, x1) - ang);
-            
-			double p2x = Math.sqrt(x2 * x2 + y2 * y2) * Math.cos(Math.atan2(y2, x2) - ang);
-			double p2y = Math.sqrt(x2 * x2 + y2 * y2) * Math.sin(Math.atan2(y2, x2) - ang);
-            
-			double p3x = Math.sqrt(x3 * x3 + y3 * y3) * Math.cos(Math.atan2(y3, x3) - ang);
-			double p3y = Math.sqrt(x3 * x3 + y3 * y3) * Math.sin(Math.atan2(y3, x3) - ang);
-			
-			double p0x = ((p1x-p2x)*(p1x+p2x)*(p2y-p3y)-(p2x-p3x)*(p2x+p3x)*(p1y-p2y)+d*d*(p1y-p2y)*(p2y-p3y)*(p1y-p3y))/(2*((p1x-p2x)*(p2y-p3y)-(p2x-p3x)*(p1y-p2y)));
-			double p0y = ((p1x-p2x)*(p2x-p3x)*(p1x-p3x)/(d*d)+(p2x-p3x)*(p1y-p2y)*(p1y+p2y)-(p1x-p2x)*(p2y-p3y)*(p2y+p3y))/(2*((p2x-p3x)*(p1y-p2y)-(p1x-p2x)*(p2y-p3y)));
-			
-			double newX = Math.sqrt(p0x * p0x + p0y * p0y) * Math.cos(Math.atan2(p0y, p0x) + ang);
-			double newY = Math.sqrt(p0x * p0x + p0y * p0y) * Math.sin(Math.atan2(p0y, p0x) + ang);
-			
-			newX = newX * w / 100.0;
-			newY = newY * h / 100.0;
-			
-			double dx = p1x - p0x;
-			double dy = p1y - p0y;
-			double rx = Math.sqrt(dx * dx + dy * dy * d * d);
-			double ry = rx / d;
-			double rot = Math.toDegrees(ang);
-			
-			rx = rx * 100.0 / w;
-			ry = ry * 100.0 / h;
-			
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-			rx = Math.round(rx * 100.0) / 100.0;
-			ry = Math.round(ry * 100.0) / 100.0;
-			rot = Math.round(rot * 100.0) / 100.0;
-
-			//determine sweep
-			//TODO fix rare error (file "1 Supported Forms" shape "storeddata" on page 5)
-			double sweep = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1); 
-			String sf = (sweep > 0) ? "0" : "1"; 
-			
-			//determine large arc flag
-			String laf = "0";
-
-			if (mxVsdxUtils.isInsideTriangle(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) && 
-					isReflexAngle(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y))
-			{
-				laf = "1";
-			}
-			
-			shape.setLastX(x);
-			shape.setLastY(y);
-			
-			return "<arc" + 
-			" rx=\"" + String.valueOf(rx) + 
-			"\" ry=\"" + String.valueOf(ry) + 
-			"\" x=\"" + String.valueOf(x) + 
-			"\" y=\"" + String.valueOf(y) + 
-			"\" x-axis-rotation=\"" + String.valueOf(rot) + 
-			"\" large-arc-flag=\"" + laf + 
-			"\" sweep-flag=\"" + sf + 
-			"\"/>";
-		}
-		
-		return "";
-	}
-
-	/**
-	 * @param x0 y0 center point of ellipse containing the arc
-	 * @param x1 y1 starting point of the arc
-	 * @param x2 y2 endpoint of the arc
-	 * @param x3 y3 control point
-	 * @return true if the start to end angle that contains the control point is a reflex angle 
-	 */
-	protected boolean isReflexAngle(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3)
-	{
-		x1 = x1 - x0;
-		y1 = y1 - y0;
-		x2 = x2 - x0;
-		y2 = y2 - y0;
-		x2 = x3 - x0;
-		y3 = y3 - y0;
-		x0 = 0;
-		y0 = 0;
-
-		double aStart = Math.toDegrees(Math.atan2(y1, x1) - Math.atan2(y0, x0));
-		double aEnd = Math.toDegrees(Math.atan2(y2, x2) - Math.atan2(y0, x0));
-		double aCP = Math.toDegrees(Math.atan2(y3, x3) - Math.atan2(y0, x0));
-		
-		aStart = (aStart - aCP) % 360;
-		aEnd = (aEnd - aCP) % 360;
-
-		if (aStart > 180)
-		{
-			aStart = aStart - 360;
-		}
-		else if (aStart < -180)
-		{
-			aStart = aStart + 360;
-		}
-		
-		if (aEnd > 180)
-		{
-			aEnd = aEnd - 360;
-		}
-		else if (aEnd < -180)
-		{
-			aEnd = aEnd + 360;
-		}
-		
-		if ((aStart > 0 && aEnd < 0) || (aStart < 0 && aEnd > 0))
-		{
-			if (Math.abs(aStart - aEnd) > 180)
-			{
-				return true;
-			}
-		}
-		
-		return false;
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/InfiniteLine.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/InfiniteLine.java
deleted file mode 100644
index 8e115685e2be006c73de18a127c2dd78f4a302a9..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/InfiniteLine.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class InfiniteLine extends Row 
-{
-	public InfiniteLine(int index, Double x, Double y, Double a, Double b) 
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		//TODO implement this!
-		return "";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/LineTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/LineTo.java
deleted file mode 100644
index fd8a33c35321f48f01b8377f71d9f1ea8d0287e4..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/LineTo.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class LineTo extends Row 
-{
-
-	public LineTo(int index, Double x, Double y)
-	{
-		super(index, x, y);
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		double x = p.getX(), y = p.getY();
-		double h = shape.getHeight();
-		double w = shape.getWidth();
-
-		if (this.x != null && this.y != null)
-		{
-			x = this.x * mxVsdxUtils.conversionFactor;
-			y = this.y * mxVsdxUtils.conversionFactor;
-		}			
-
-		x = x * 100.0 / w;
-		y = y * 100.0 / h;
-		y = 100 - y;
-
-		x = Math.round(x * 100.0) / 100.0;
-		y = Math.round(y * 100.0) / 100.0;
-		
-		p.setX(x);
-		p.setY(y);
-		shape.setLastX(x);
-		shape.setLastY(y);
-
-		return "<" + "line" + " x=\"" + String.valueOf(x) + "\" y=\"" + String.valueOf(y) + "\"/>";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/MoveTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/MoveTo.java
deleted file mode 100644
index 27bbd1b5315e1cb59262d4975188fff26273b4f9..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/MoveTo.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class MoveTo extends Row 
-{
-	public MoveTo(int index, Double x, Double y) 
-	{
-		super(index, x, y);
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		double x = p.getX(), y = p.getY();
-		double h = shape.getHeight();
-		double w = shape.getWidth();
-
-		if (this.x != null && this.y != null)
-		{
-			x = this.x * mxVsdxUtils.conversionFactor;
-			y = this.y * mxVsdxUtils.conversionFactor;
-		}
-		
-		x = x * 100.0 / w;
-		y = y * 100.0 / h;
-		y = 100 - y;
-
-		x = Math.round(x * 100.0) / 100.0;
-		y = Math.round(y * 100.0) / 100.0;
-		
-		p.setX(x);
-		p.setY(y);
-		shape.setLastX(x);
-		shape.setLastY(y);
-		shape.setLastMoveX(x);
-		shape.setLastMoveY(y);
-
-		return "<" + "move" + " x=\"" + String.valueOf(x) + "\" y=\"" + String.valueOf(y) + "\"/>";
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/NURBSTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/NURBSTo.java
deleted file mode 100644
index e931f2c3a6a97e3d3f58e31f4feab84613e94caa..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/NURBSTo.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class NURBSTo extends Row 
-{
-	public NURBSTo(int index, Double x, Double y, Double a, Double b, Double c, Double d, String e) 
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-		this.c = c;
-		this.d = d;
-		this.formulaE = e;
-	}
-
-	/**
-	 * Holds the NURBS array that is part of the VSDX NURBSTo element, together with some helper functions
-	 *
-	 */
-	private class Nurbs
-	{
-		
-		List<Double> nurbsValues = new ArrayList<Double>();
-		
-		public Nurbs(String s, double w, double h)
-		{
-			List<String> n = Arrays.asList(s.split("\\s*,\\s*"));
-			
-			for (int i = 0; i < n.size(); i++)
-			{
-				if ((i > 3) && (i % 4 == 0))
-				{
-					nurbsValues.add(Double.parseDouble(n.get(i)) * 100.0);
-				}
-				else if ((i > 3) && (i % 4 == 1))
-				{
-					nurbsValues.add(100 - Double.parseDouble(n.get(i)) * 100.0);
-				}
-				else
-				{
-					nurbsValues.add(Double.parseDouble(n.get(i)));
-				}
-			}
-		}
-		
-		/**
-		 * @param lastKnot the last knot outside of the nurbs string. Obtain it with this.getA() 
-		 * @return true if knots are ordered by sets of 3
-		 */
-		public boolean isOrderedByThree(double lastKnot)
-		{
-
-			for (int i = 0; i + 2 < (this.getSize()) ; i = i + 3)
-			{
-					double k = Math.round(this.getKnot((i)) * 100.0) / 100.0;
-					double k1 = Math.round(this.getKnot((i + 1)) * 100.0) / 100.0;
-					double k2 = Math.round(this.getKnot((i + 2)) * 100.0) / 100.0;
-
-					if (k != k1 || k != k2 || k1 != k2)
-					{
-						return false;
-					}
-			}
-			
-			double k = Math.round(this.getKnot((this.getSize() - 2)) * 10.0) / 10.0;
-			double k1 = Math.round(this.getKnot((this.getSize() - 1)) * 10.0) / 10.0;
-			double lk = Math.round(lastKnot * 10.0) / 10.0;
-			
-			if (k != k1 || k != lk || k1 != lk)
-			{
-				return false;
-			}
-			
-			return true;
-		}
-		
-		/**
-		 * @return number of points, not including the last one (which is outside of the nurbs string)
-		 */
-		public int getSize()
-		{
-			return ((nurbsValues.size() / 4) - 1);
-		}
-		
-		/**
-		 * @return last knot (element knotLast)
-		 */
-		public double getKnotLast()
-		{
-			return nurbsValues.get(0);
-		}
-		
-		/**
-		 * @return degree of the NURBS (element degree)
-		 */
-		public double getDegree()
-		{
-			return nurbsValues.get(1);
-		}
-		
-		/**
-		 * @return 0 if X is relative, otherwise X is in the coordinate system of the shape (element xType)
-		 */
-		public double getXType()
-		{
-			return nurbsValues.get(2);
-		}
-		
-		/**
-		 * @return 0 if Y is relative, otherwise Y is in the coordinate system of the shape (element yType)
-		 */
-		public double getYType()
-		{
-			return nurbsValues.get(3);
-		}
-		
-		/**
-		 * @return the i-th X coordinate
-		 */
-		public double getX(int i)
-		{
-			return nurbsValues.get((i + 1) * 4);
-		}
-		
-		/**
-		 * @return the i-th Y coordinate
-		 */
-		public double getY(int i)
-		{
-			return nurbsValues.get((i + 1) * 4 + 1);
-		}
-		
-		/**
-		 * @return the i-th knot
-		 */
-		public double getKnot(int i)
-		{
-			return nurbsValues.get((i + 1) * 4 + 2);
-		}
-		
-		/**
-		 * @return the i-th weight
-		 */
-		public double getWeight(int i)
-		{
-			return nurbsValues.get((i + 1) * 4 + 3);
-		}
-	}
-	
-	/**
-	 * Helper class for geometry
-	 *
-	 */
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.formulaE != null)
-		{
-			double h = shape.getHeight();
-			double w = shape.getWidth();
-
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			String eValue = this.formulaE.replace("NURBS(", "");
-			eValue = eValue.replace(")", "");
-			
-			Nurbs nurbs = new Nurbs(eValue, w, h);
-			
-			if (nurbs.getSize() >= 2)
-			{
-				double x1 = nurbs.getX(0);
-				double y1 = nurbs.getY(0);
-				double x2 = nurbs.getX(1);
-				double y2 = nurbs.getY(1);
-	
-				y = y * 100.0 / h;
-				x = x * 100.0 / w;
-				y = 100 - y;
-				x = Math.round(x * 100.0) / 100.0;
-				y = Math.round(y * 100.0) / 100.0;
-				
-				x1 = Math.round(x1 * 100.0) / 100.0;
-				y1 = Math.round(y1 * 100.0) / 100.0;
-				x2 = Math.round(x2 * 100.0) / 100.0;
-				y2 = Math.round(y2 * 100.0) / 100.0;
-	
-				shape.setLastX(x);
-				shape.setLastY(y);
-				
-				// solution for degree 3 rational b spline where knots are grouped by sets of 3
-				if (nurbs.getDegree() == 3 && nurbs.isOrderedByThree(this.getA()))
-				{
-					//first control points
-					List<mxPoint> cp1 = new ArrayList<mxPoint>();
-					//second control points
-					List<mxPoint> cp2 = new ArrayList<mxPoint>();
-					//nuts
-					List<mxPoint> nut = new ArrayList<mxPoint>();
-					int nurbsize = nurbs.getSize();
-					
-					for (int i = 0; i < nurbsize - 1; i = i + 3)
-					{
-						cp1.add(new mxPoint(nurbs.getX(i), nurbs.getY(i)));
-						cp2.add(new mxPoint(nurbs.getX(i + 1), nurbs.getY(i + 1)));
-						
-						if (i < nurbsize - 2)
-						{
-							nut.add(new mxPoint(nurbs.getX(i + 2), nurbs.getY(i + 2)));
-						}
-						else
-						{
-							nut.add(new mxPoint(x, y));
-						}
-					}
-					
-					//form path data
-					String result = "";
-
-					for (int i = 0; i < cp1.size(); i++)
-					{
-						result += "<curve x1=\"" + cp1.get(i).getX() + "\" y1=\"" + cp1.get(i).getY() + 
-							      "\" x2=\"" + cp2.get(i).getX() + "\" y2=\"" + cp2.get(i).getY() + 
-							      "\" x3=\"" + nut.get(i).getX() + "\" y3=\"" + nut.get(i).getY() + "\"/>\n";
-					}
-					
-					return result;
-				}
-				else
-				{
-					return "<curve x1=\"" + String.valueOf(x1) + "\" y1=\"" + String.valueOf(y1) + 
-						      "\" x2=\"" + String.valueOf(x2) + "\" y2=\"" + String.valueOf(y2) + 
-						      "\" x3=\"" + String.valueOf(x) + "\" y3=\"" + String.valueOf(y) + "\"/>";
-				}
-			}
-		}
-
-		return "";
-
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/PolylineTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/PolylineTo.java
deleted file mode 100644
index 8a390fefc49c3870595161283b5c073c4830966f..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/PolylineTo.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import java.util.Arrays;
-import java.util.LinkedList;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class PolylineTo extends Row 
-{
-	public PolylineTo(int index, Double x, Double y, String a) 
-	{
-		super(index, x, y);
-		this.formulaA = a;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		String result = "";
-		
-		if (this.x != null && this.y != null && this.formulaA != null)
-		{
-			double h = shape.getHeight();
-			double w = shape.getWidth();
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			x = x * 100.0 / w;
-			y = y * 100.0 / h;
-			y = 100 - y;
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-			
-			String aValue = this.formulaA.replaceAll("\\s","").toLowerCase().replaceAll("polyline\\(","").replaceAll("\\)", "");
-			
-			if (aValue.equals("inh"))
-			{
-				throw new IllegalArgumentException();
-			}
-			
-			LinkedList<String> polyEntriesList = new LinkedList<String>(Arrays.asList(aValue.split(",")));
-			
-			double xRel = Double.parseDouble(polyEntriesList.remove(0));
-			double yRel = Double.parseDouble(polyEntriesList.remove(0));
-			double currX = 0;
-			double currY = 0;
-
-			while (polyEntriesList.size() > 0)
-			{
-				currX = Double.valueOf(polyEntriesList.remove(0)) * mxVsdxUtils.conversionFactor;
-				currY = Double.valueOf(polyEntriesList.remove(0)) * mxVsdxUtils.conversionFactor;
-
-				if (xRel == 1)
-				{
-					currX = currX * 100.0 / w;
-				}
-				
-				if (xRel == 1)
-				{
-					currY = currY * 100.0 / h;
-				}
-				
-
-				currY = 100 - currY;
-				
-				currX = Math.round(currX * 100.0) / 100.0;
-				currY = Math.round(currY * 100.0) / 100.0;
-
-				shape.setLastX(currX);
-				shape.setLastY(currY);
-
-				result += "<line x=\"" + String.valueOf(currX) + "\" y=\"" + String.valueOf(currY) + "\"/>";
-			}
-
-			result += "<line x=\"" + String.valueOf(x) + "\" y=\"" + String.valueOf(y) + "\"/>";
-
-			if (shape.getLastMoveX() == x && shape.getLastMoveY() == y)
-			{
-				result += "<close/>";
-			}
-		}
-		
-		return result;
-
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java
deleted file mode 100644
index 95899be7cf3ecba235f74f2eab9374db36e260b4..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class RelCubBezTo extends Row 
-{
-	public RelCubBezTo(int index, Double x, Double y, Double a, Double b, Double c, Double d) 
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-		this.c = c;
-		this.d = d;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-		{
-			double x = this.x * 100;
-			double y = 100 - this.y * 100;
-			double x1 = this.a * 100.0;
-			double y1 = 100 - this.b * 100.0;
-			double x2 = this.c * 100.0;
-			double y2 = 100 - this.d * 100.0;
-
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-			x1 = Math.round(x1 * 100.0) / 100.0;
-			y1 = Math.round(y1 * 100.0) / 100.0;
-			x2 = Math.round(x2 * 100.0) / 100.0;
-			y2 = Math.round(y2 * 100.0) / 100.0;
-
-			shape.setLastX(x);
-			shape.setLastY(y);
-		
-			return "<curve x1=\"" + String.valueOf(x1) + "\" y1=\"" + String.valueOf(y1) + 
-					      "\" x2=\"" + String.valueOf(x2) + "\" y2=\"" + String.valueOf(y2) + 
-					      "\" x3=\"" + String.valueOf(x) + "\" y3=\"" + String.valueOf(y) + "\"/>";
-		}
-
-		return "";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java
deleted file mode 100644
index b939b9bedd0f34923e8ba4b2ba482959f3d0f7bf..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class RelEllipticalArcTo extends EllipticalArcTo 
-{
-	public RelEllipticalArcTo(int index, Double x, Double y, Double a, Double b, Double c, Double d) 
-	{
-		super(index, x, y, a, b, c, d);
-	}
-	
-	@Override
-	public String handle(mxPoint p, Shape shape) {
-		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-		{
-			double h = shape.getHeight() / mxVsdxUtils.conversionFactor;
-			double w = shape.getWidth() / mxVsdxUtils.conversionFactor;
-			this.x *= w;
-			this.y *= h;
-			this.a *= w;
-			this.b *= h;
-		}
-		return super.handle(p, shape);
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelLineTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelLineTo.java
deleted file mode 100644
index 2cb9223471245ca150199e222f7e71a4ab3197d6..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelLineTo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class RelLineTo extends Row 
-{
-
-	public RelLineTo(int index, Double x, Double y) 
-	{
-		super(index, x, y);
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		double x = p.getX(), y = p.getY();
-		
-		if (this.x != null && this.y != null)
-		{
-			x = this.x * 100;
-			y = 100 - this.y * 100;
-		}
-		
-		x = Math.round(x * 100.0) / 100.0;
-		y = Math.round(y * 100.0) / 100.0;
-		
-		p.setX(x);
-		p.setY(y);
-		shape.setLastX(x);
-		shape.setLastY(y);
-
-		return "<" + "line" + " x=\"" + String.valueOf(x) + "\" y=\"" + String.valueOf(y) + "\"/>";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelMoveTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelMoveTo.java
deleted file mode 100644
index 5dae093cee322abadb5498dab068a90997efc579..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelMoveTo.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class RelMoveTo extends Row 
-{
-
-	public RelMoveTo(int index, Double x, Double y) 
-	{
-		super(index, x, y);
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		double x = p.getX(), y = p.getY();
-		
-		if (this.x != null && this.y != null)
-		{
-			x = this.x * 100;
-			y = 100 - this.y * 100;
-		}
-		
-		x = Math.round(x * 100.0) / 100.0;
-		y = Math.round(y * 100.0) / 100.0;
-		
-		p.setX(x);
-		p.setY(y);
-		shape.setLastX(x);
-		shape.setLastY(y);
-		shape.setLastMoveX(x);
-		shape.setLastMoveY(y);
-
-		return "<" + "move" + " x=\"" + String.valueOf(x) + "\" y=\"" + String.valueOf(y) + "\"/>";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java
deleted file mode 100644
index bc94eb43251f80f0feabd71f5790da37f14bcbca..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class RelQuadBezTo extends Row 
-{
-	public RelQuadBezTo(int index, Double x, Double y, Double a, Double b)
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-	}
-
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null && this.b != null)
-		{
-			double x = this.x * 100;
-			double y = 100 - this.y * 100;
-			double x1 = this.a * 100.0;
-			double y1 = 100 - this.b * 100.0;
-
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-			x1 = Math.round(x1 * 100.0) / 100.0;
-			y1 = Math.round(y1 * 100.0) / 100.0;
-
-			shape.setLastX(x);
-			shape.setLastY(y);
-		
-			return "<quad x1=\"" + String.valueOf(x1) + "\" y1=\"" + String.valueOf(y1) + 
-					      "\" x2=\"" + String.valueOf(x) + "\" y2=\"" + String.valueOf(y) + "\"/>";
-		}
-
-		return "";
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/Row.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/Row.java
deleted file mode 100644
index 629690fdfad3753d4c8378308ed6454d9ab19f1d..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/Row.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public abstract class Row 
-{
-	protected Double x, y, a, b, c, d;
-	protected String formulaA, formulaE; 
-	protected int index;
-	
-	public Row(int index, Double x, Double y) 
-	{
-		this.index = index;
-		this.x = x;
-		this.y = y;
-	}
-
-	//TODO probably point p is not needed as the point from previous step is stored in lastP?
-	public abstract String handle(mxPoint p, Shape shape);
-
-	public Double getX() 
-	{
-		return x;
-	}
-
-	public Double getY() 
-	{
-		return y;
-	}
-
-	public Double getA() {
-		return a;
-	}
-
-	public Double getB() {
-		return b;
-	}
-
-	public Double getC() {
-		return c;
-	}
-
-	public Double getD() {
-		return d;
-	}
-
-	public String getFormulaA() {
-		return formulaA;
-	}
-
-	public String getFormulaE() {
-		return formulaE;
-	}
-
-	public int getIndex() 
-	{
-		return index;
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/SplineKnot.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/SplineKnot.java
deleted file mode 100644
index ff7fab8186e466292608e1d3b7a974d9c9645b82..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/SplineKnot.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class SplineKnot extends Row 
-{
-	public SplineKnot(int index, Double x, Double y, Double a)
-	{
-		super(index, x, y);
-		this.a = a;
-	}
-
-	//TODO Is this complete?
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null)
-		{
-			//double h = this.getHeight();
-			//double w = this.getWidth();
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			double a = this.a;
-
-			double knot = a;
-//				x = x * 100.0 / w;
-//				y = y * 100.0 / h;
-			y = 100 - y;
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-			knot = Math.round(knot * 100.0) / 100.0;
-			
-			shape.setLastX(x);
-			shape.setLastY(y);
-		}
-		
-		return "";
-
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/SplineStart.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/SplineStart.java
deleted file mode 100644
index 7b0677503b12cda68d9f8e9744f1f1335c9861f3..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/SplineStart.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import com.mxgraph.io.vsdx.Shape;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.io.vsdx.mxPoint;
-
-public class SplineStart extends Row 
-{
-	public SplineStart(int index, Double x, Double y, Double a, Double b, Double c, Double d) 
-	{
-		super(index, x, y);
-		this.a = a;
-		this.b = b;
-		this.c = c;
-		this.d = d;
-	}
-
-	//TODO Is this complete?
-	@Override
-	public String handle(mxPoint p, Shape shape)
-	{
-		if (this.x != null && this.y != null && this.a != null && this.b != null && this.c != null && this.d != null)
-		{
-			double h = shape.getHeight();
-			double w = shape.getWidth();
-
-			double x = this.x * mxVsdxUtils.conversionFactor;
-			double y = this.y * mxVsdxUtils.conversionFactor;
-			//double a = Double.parseDouble(aValue);
-			//double b = Double.parseDouble(bValue);
-			double c = this.c;
-			int d = this.d.intValue();
-
-			//double firstKnot = b;
-			//double secondKnot = a;
-			double lastKnot = c;
-			
-			shape.setLastKnot(lastKnot);
-			
-			int degree = d;
-//				x = x * 100.0 / w;
-//				y = y * 100.0 / h;
-			y = 100 - y;
-			x = Math.round(x * 100.0) / 100.0;
-			y = Math.round(y * 100.0) / 100.0;
-			lastKnot = Math.round(lastKnot * 100.0) / 100.0;
-			double x0 = shape.getLastX() * w / 100.0;
-			double y0 = shape.getLastY() * h / 100.0;
-
-			shape.setLastX(x);
-			shape.setLastY(y);
-
-			return "<curve ";
-		}
-		
-		return "";
-
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxCell.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxCell.java
deleted file mode 100644
index 72b3a29897a0b80faae5cf6b0d1369209b57cff9..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxCell.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/**
- * Copyright (c) 2007, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-/**
- * Cells are the elements of the graph model. They represent the state
- * of the groups, vertices and edges in a graph.
- *
- * <h4>Edge Labels</h4>
- * 
- * Using the x- and y-coordinates of a cell's geometry it is
- * possible to position the label on edges on a specific location
- * on the actual edge shape as it appears on the screen. The
- * x-coordinate of an edge's geometry is used to describe the
- * distance from the center of the edge from -1 to 1 with 0
- * being the center of the edge and the default value. The
- * y-coordinate of an edge's geometry is used to describe
- * the absolute, orthogonal distance in pixels from that
- * point. In addition, the mxGeometry.offset is used
- * as a absolute offset vector from the resulting point.
- * 
- * The width and height of an edge geometry are ignored.
- * 
- * To add more than one edge label, add a child vertex with
- * a relative geometry. The x- and y-coordinates of that
- * geometry will have the same semantiv as the above for
- * edge labels.
- */
-public class mxCell implements Cloneable, Serializable
-{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 910211337632342672L;
-
-	/**
-	 * Holds the Id. Default is null.
-	 */
-	protected String id;
-
-	/**
-	 * Holds the user object. Default is null.
-	 */
-	protected Object value;
-
-	/**
-	 * Holds the geometry. Default is null.
-	 */
-	protected mxGeometry geometry;
-
-	/**
-	 * Holds the style as a string of the form
-	 * stylename[;key=value]. Default is null.
-	 */
-	protected String style;
-
-	/**
-	 * Specifies whether the cell is a vertex or edge and whether it is
-	 * connectable, visible and collapsed. Default values are false, false,
-	 * true, true and false respectively.
-	 */
-	protected boolean vertex = false, edge = false, connectable = true,
-			visible = true, collapsed = false;
-
-
-	/**
-	 * Holds the child cells and connected edges.
-	 */
-	protected List<Object> children, edges;
-
-	/**
-	 * Constructs a new cell with an empty user object.
-	 */
-	public mxCell()
-	{
-		this(null);
-	}
-
-	/**
-	 * Constructs a new cell for the given user object.
-	 * 
-	 * @param value
-	 *   Object that represents the value of the cell.
-	 */
-	public mxCell(Object value)
-	{
-		this(value, null, null);
-	}
-
-	/**
-	 * Constructs a new cell for the given parameters.
-	 * 
-	 * @param value Object that represents the value of the cell.
-	 * @param geometry Specifies the geometry of the cell.
-	 * @param style Specifies the style as a formatted string.
-	 */
-	public mxCell(Object value, mxGeometry geometry, String style)
-	{
-		setValue(value);
-		setGeometry(geometry);
-		setStyle(style);
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#getId()
-	 */
-	public String getId()
-	{
-		return id;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setId(String)
-	 */
-	public void setId(String id)
-	{
-		this.id = id;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#getValue()
-	 */
-	public Object getValue()
-	{
-		return value;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setValue(Object)
-	 */
-	public void setValue(Object value)
-	{
-		this.value = value;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#getGeometry()
-	 */
-	public mxGeometry getGeometry()
-	{
-		return geometry;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setGeometry(com.mxgraph.model.mxGeometry)
-	 */
-	public void setGeometry(mxGeometry geometry)
-	{
-		this.geometry = geometry;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#getStyle()
-	 */
-	public String getStyle()
-	{
-		return style;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setStyle(String)
-	 */
-	public void setStyle(String style)
-	{
-		this.style = style;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#isVertex()
-	 */
-	public boolean isVertex()
-	{
-		return vertex;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setVertex(boolean)
-	 */
-	public void setVertex(boolean vertex)
-	{
-		this.vertex = vertex;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#isEdge()
-	 */
-	public boolean isEdge()
-	{
-		return edge;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setEdge(boolean)
-	 */
-	public void setEdge(boolean edge)
-	{
-		this.edge = edge;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#isConnectable()
-	 */
-	public boolean isConnectable()
-	{
-		return connectable;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setConnectable(boolean)
-	 */
-	public void setConnectable(boolean connectable)
-	{
-		this.connectable = connectable;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#isVisible()
-	 */
-	public boolean isVisible()
-	{
-		return visible;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setVisible(boolean)
-	 */
-	public void setVisible(boolean visible)
-	{
-		this.visible = visible;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#isCollapsed()
-	 */
-	public boolean isCollapsed()
-	{
-		return collapsed;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#setCollapsed(boolean)
-	 */
-	public void setCollapsed(boolean collapsed)
-	{
-		this.collapsed = collapsed;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#getChildCount()
-	 */
-	public int getChildCount()
-	{
-		return (children != null) ? children.size() : 0;
-	}
-
-	/* (non-Javadoc)
-	 * @see com.mxgraph.model.mxICell#getEdgeCount()
-	 */
-	public int getEdgeCount()
-	{
-		return (edges != null) ? edges.size() : 0;
-	}
-
-	/**
-	 * Returns the specified attribute from the user object if it is an XML
-	 * node.
-	 * 
-	 * @param name Name of the attribute whose value should be returned.
-	 * @return Returns the value of the given attribute or null.
-	 */
-	public String getAttribute(String name)
-	{
-		return getAttribute(name, null);
-	}
-
-	/**
-	 * Returns the specified attribute from the user object if it is an XML
-	 * node.
-	 * 
-	 * @param name Name of the attribute whose value should be returned.
-	 * @param defaultValue Default value to use if the attribute has no value.
-	 * @return Returns the value of the given attribute or defaultValue.
-	 */
-	public String getAttribute(String name, String defaultValue)
-	{
-		Object userObject = getValue();
-		String val = null;
-
-		if (userObject instanceof Element)
-		{
-			Element element = (Element) userObject;
-			val = element.getAttribute(name);
-		}
-
-		if (val == null)
-		{
-			val = defaultValue;
-		}
-
-		return val;
-	}
-
-	/**
-	 * Sets the specified attribute on the user object if it is an XML node.
-	 * 
-	 * @param name Name of the attribute whose value should be set.
-	 * @param value New value of the attribute.
-	 */
-	public void setAttribute(String name, String value)
-	{
-		Object userObject = getValue();
-
-		if (userObject instanceof Element)
-		{
-			Element element = (Element) userObject;
-			element.setAttribute(name, value);
-		}
-	}
-
-	/**
-	 * Returns a clone of the user object. This implementation clones any XML
-	 * nodes or otherwise returns the same user object instance.
-	 */
-	protected Object cloneValue()
-	{
-		Object value = getValue();
-
-		if (value instanceof Node)
-		{
-			value = ((Node) value).cloneNode(true);
-		}
-
-		return value;
-	}
-
-	public mxCell getChildAt(int i) {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxGeometry.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxGeometry.java
deleted file mode 100644
index 8c6d9d8eb3da7d0d7a269cdd46d6e68be025cce6..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxGeometry.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/**
- * Copyright (c) 2007, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * Represents the geometry of a cell. For vertices, the geometry consists
- * of the x- and y-location, as well as the width and height. For edges,
- * the geometry either defines the source- and target-terminal, or it
- * defines the respective terminal points.
- * 
- * For edges, if the geometry is relative (default), then the x-coordinate
- * is used to describe the distance from the center of the edge from -1 to 1
- * with 0 being the center of the edge and the default value, and the
- * y-coordinate is used to describe the absolute, orthogonal distance in
- * pixels from that point. In addition, the offset is used as an absolute
- * offset vector from the resulting point. 
- */
-public class mxGeometry extends mxRectangle
-{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 2649828026610336589L;
-
-	/**
-	 * Global switch to translate the points in translate. Default is true.
-	 */
-	public static transient boolean TRANSLATE_CONTROL_POINTS = true;
-
-	/**
-	 * Stores alternate values for x, y, width and height in a rectangle.
-	 * Default is null.
-	 */
-	protected mxRectangle alternateBounds;
-
-	/**
-	 * Defines the source- and target-point of the edge. This is used if the
-	 * corresponding edge does not have a source vertex. Otherwise it is
-	 * ignored. Default is null.
-	 */
-	protected mxPoint sourcePoint, targetPoint;
-
-	/**
-	 * List of mxPoints which specifies the control points along the edge.
-	 * These points are the intermediate points on the edge, for the endpoints
-	 * use targetPoint and sourcePoint or set the terminals of the edge to
-	 * a non-null value. Default is null.
-	 */
-	protected List<mxPoint> points;
-
-	/**
-	 * Holds the offset of the label for edges. This is the absolute vector
-	 * between the center of the edge and the top, left point of the label.
-	 * Default is null.
-	 */
-	protected mxPoint offset;
-
-	/**
-	 * Specifies if the coordinates in the geometry are to be interpreted as
-	 * relative coordinates. Default is false. This is used to mark a geometry
-	 * with an x- and y-coordinate that is used to describe an edge label
-	 * position, or a relative location with respect to a parent cell's
-	 * width and height.
-	 */
-	protected boolean relative = false;
-
-	/**
-	 * Constructs a new geometry at (0, 0) with the width and height set to 0.
-	 */
-	public mxGeometry()
-	{
-		this(0, 0, 0, 0);
-	}
-
-	/**
-	 * Constructs a geometry using the given parameters.
-	 * 
-	 * @param x X-coordinate of the new geometry.
-	 * @param y Y-coordinate of the new geometry.
-	 * @param width Width of the new geometry.
-	 * @param height Height of the new geometry.
-	 */
-	public mxGeometry(double x, double y, double width, double height)
-	{
-		super(x, y, width, height);
-	}
-
-	/**
-	 * Returns the alternate bounds.
-	 */
-	public mxRectangle getAlternateBounds()
-	{
-		return alternateBounds;
-	}
-
-	/**
-	 * Sets the alternate bounds to the given rectangle.
-	 * 
-	 * @param rect Rectangle to be used for the alternate bounds.
-	 */
-	public void setAlternateBounds(mxRectangle rect)
-	{
-		alternateBounds = rect;
-	}
-
-	/**
-	 * Returns the source point.
-	 * 
-	 * @return Returns the source point.
-	 */
-	public mxPoint getSourcePoint()
-	{
-		return sourcePoint;
-	}
-
-	/**
-	 * Sets the source point.
-	 * 
-	 * @param sourcePoint Source point to be used.
-	 */
-	public void setSourcePoint(mxPoint sourcePoint)
-	{
-		this.sourcePoint = sourcePoint;
-	}
-
-	/**
-	 * Returns the target point.
-	 * 
-	 * @return Returns the target point.
-	 */
-	public mxPoint getTargetPoint()
-	{
-		return targetPoint;
-	}
-
-	/**
-	 * Sets the target point.
-	 * 
-	 * @param targetPoint Target point to be used.
-	 */
-	public void setTargetPoint(mxPoint targetPoint)
-	{
-		this.targetPoint = targetPoint;
-	}
-
-	/**
-	 * Returns the list of control points.
-	 */
-	public List<mxPoint> getPoints()
-	{
-		return points;
-	}
-
-	/**
-	 * Sets the list of control points to the given list.
-	 * 
-	 * @param value List that contains the new control points.
-	 */
-	public void setPoints(List<mxPoint> value)
-	{
-		points = value;
-	}
-
-	/**
-	 * Returns the offset.
-	 */
-	public mxPoint getOffset()
-	{
-		return offset;
-	}
-
-	/**
-	 * Sets the offset to the given point.
-	 * 
-	 * @param offset Point to be used for the offset.
-	 */
-	public void setOffset(mxPoint offset)
-	{
-		this.offset = offset;
-	}
-
-	/**
-	 * Returns true of the geometry is relative.
-	 */
-	public boolean isRelative()
-	{
-		return relative;
-	}
-
-	/**
-	 * Sets the relative state of the geometry.
-	 * 
-	 * @param value Boolean value to be used as the new relative state.
-	 */
-	public void setRelative(boolean value)
-	{
-		relative = value;
-	}
-
-	/**
-	 * Swaps the x, y, width and height with the values stored in
-	 * alternateBounds and puts the previous values into alternateBounds as
-	 * a rectangle. This operation is carried-out in-place, that is, using the
-	 * existing geometry instance. If this operation is called during a graph
-	 * model transactional change, then the geometry should be cloned before
-	 * calling this method and setting the geometry of the cell using
-	 * mxGraphModel.setGeometry.
-	 */
-	public void swap()
-	{
-		if (alternateBounds != null)
-		{
-			mxRectangle old = new mxRectangle(getX(), getY(), getWidth(),
-					getHeight());
-
-			x = alternateBounds.getX();
-			y = alternateBounds.getY();
-			width = alternateBounds.getWidth();
-			height = alternateBounds.getHeight();
-
-			alternateBounds = old;
-		}
-	}
-
-	/**
-	 * Returns the point representing the source or target point of this edge.
-	 * This is only used if the edge has no source or target vertex.
-	 * 
-	 * @param isSource Boolean that specifies if the source or target point
-	 * should be returned.
-	 * @return Returns the source or target point.
-	 */
-	public mxPoint getTerminalPoint(boolean isSource)
-	{
-		return (isSource) ? sourcePoint : targetPoint;
-	}
-
-	/**
-	 * Sets the sourcePoint or targetPoint to the given point and returns the
-	 * new point.
-	 * 
-	 * @param point Point to be used as the new source or target point.
-	 * @param isSource Boolean that specifies if the source or target point
-	 * should be set.
-	 * @return Returns the new point.
-	 */
-	public mxPoint setTerminalPoint(mxPoint point, boolean isSource)
-	{
-		if (isSource)
-		{
-			sourcePoint = point;
-		}
-		else
-		{
-			targetPoint = point;
-		}
-
-		return point;
-	}
-
-	/**
-	 * Translates the geometry by the specified amount. That is, x and y of the
-	 * geometry, the sourcePoint, targetPoint and all elements of points are
-	 * translated by the given amount. X and y are only translated if the
-	 * geometry is not relative. If TRANSLATE_CONTROL_POINTS is false, then
-	 * are not modified by this function.
-	 * 
-	 * @param dx Integer that specifies the x-coordinate of the translation.
-	 * @param dy Integer that specifies the y-coordinate of the translation.
-	 */
-	public void translate(double dx, double dy)
-	{
-		// Translates the geometry
-		if (!isRelative())
-		{
-			x += dx;
-			y += dy;
-		}
-
-		// Translates the source point
-		if (sourcePoint != null)
-		{
-			sourcePoint.setX(sourcePoint.getX() + dx);
-			sourcePoint.setY(sourcePoint.getY() + dy);
-		}
-
-		// Translates the target point
-		if (targetPoint != null)
-		{
-			targetPoint.setX(targetPoint.getX() + dx);
-			targetPoint.setY(targetPoint.getY() + dy);
-		}
-
-		// Translate the control points
-		if (TRANSLATE_CONTROL_POINTS && points != null)
-		{
-			int count = points.size();
-
-			for (int i = 0; i < count; i++)
-			{
-				mxPoint pt = points.get(i);
-
-				pt.setX(pt.getX() + dx);
-				pt.setY(pt.getY() + dy);
-			}
-		}
-	}
-
-	/**
-	 * Returns a clone of the cell.
-	 */
-	public Object clone()
-	{
-		mxGeometry clone = (mxGeometry) super.clone();
-
-		clone.setX(getX());
-		clone.setY(getY());
-		clone.setWidth(getWidth());
-		clone.setHeight(getHeight());
-		clone.setRelative(isRelative());
-
-		List<mxPoint> pts = getPoints();
-
-		if (pts != null)
-		{
-			clone.points = new ArrayList<mxPoint>(pts.size());
-
-			for (int i = 0; i < pts.size(); i++)
-			{
-				clone.points.add((mxPoint) pts.get(i).clone());
-			}
-		}
-
-		mxPoint tp = getTargetPoint();
-
-		if (tp != null)
-		{
-			clone.setTargetPoint((mxPoint) tp.clone());
-		}
-
-		mxPoint sp = getSourcePoint();
-
-		if (sp != null)
-		{
-			setSourcePoint((mxPoint) sp.clone());
-		}
-
-		mxPoint off = getOffset();
-
-		if (off != null)
-		{
-			clone.setOffset((mxPoint) off.clone());
-		}
-
-		mxRectangle alt = getAlternateBounds();
-
-		if (alt != null)
-		{
-			setAlternateBounds((mxRectangle) alt.clone());
-		}
-
-		return clone;
-	}
-
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxPoint.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxPoint.java
deleted file mode 100644
index 7d329f328dc03d8e9c4e6c3cac302e999c829a91..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxPoint.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.io.Serializable;
-
-/**
- * Implements a 2-dimensional point with double precision coordinates.
- */
-public class mxPoint implements Serializable, Cloneable
-{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 6554231393215892186L;
-
-	/**
-	 * Holds the x- and y-coordinates of the point. Default is 0.
-	 */
-	protected double x, y;
-
-	/**
-	 * Constructs a new point at (0, 0).
-	 */
-	public mxPoint()
-	{
-		this(0, 0);
-	}
-
-	/**
-	 * Constructs a new point at the location of the given point.
-	 * 
-	 * @param point Point that specifies the location.
-	 */
-	public mxPoint(mxPoint point)
-	{
-		this(point.getX(), point.getY());
-	}
-
-	/**
-	 * Constructs a new point at (x, y).
-	 * 
-	 * @param x X-coordinate of the point to be created.
-	 * @param y Y-coordinate of the point to be created.
-	 */
-	public mxPoint(double x, double y)
-	{
-		setX(x);
-		setY(y);
-	}
-
-	/**
-	 * Returns the x-coordinate of the point.
-	 * 
-	 * @return Returns the x-coordinate.
-	 */
-	public double getX()
-	{
-		return x;
-	}
-
-	/**
-	 * Sets the x-coordinate of the point.
-	 * 
-	 * @param value Double that specifies the new x-coordinate.
-	 */
-	public void setX(double value)
-	{
-		x = value;
-	}
-
-	/**
-	 * Returns the x-coordinate of the point.
-	 * 
-	 * @return Returns the x-coordinate.
-	 */
-	public double getY()
-	{
-		return y;
-	}
-
-	/**
-	 * Sets the y-coordinate of the point.
-	 * 
-	 * @param value Double that specifies the new x-coordinate.
-	 */
-	public void setY(double value)
-	{
-		y = value;
-	}
-
-	/**
-	 * 
-	 * Returns true if the given object equals this rectangle.
-	 */
-	public boolean equals(Object obj)
-	{
-		if (obj instanceof mxPoint)
-		{
-			mxPoint pt = (mxPoint) obj;
-
-			return pt.getX() == getX() && pt.getY() == getY();
-		}
-
-		return false;
-	}
-
-	/**
-	 * Returns a new instance of the same point.
-	 */
-	public Object clone()
-	{
-		mxPoint clone;
-
-		try
-		{
-			clone = (mxPoint) super.clone();
-		}
-		catch (CloneNotSupportedException e)
-		{
-			clone = new mxPoint();
-		}
-
-		clone.setX(getX());
-		clone.setY(getY());
-
-		return clone;
-	}
-
-	/**
-	 * Returns a <code>String</code> that represents the value
-	 * of this <code>mxPoint</code>.
-	 * @return a string representation of this <code>mxPoint</code>.
-	 */
-	public String toString()
-	{
-		return getClass().getName() + "[" + x + ", " + y + "]";
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxRectangle.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxRectangle.java
deleted file mode 100644
index 7c047c5cd57f031958627ad3fbe12ebf895c709a..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxRectangle.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * Copyright (c) 2007-2010, Gaudenz Alder, David Benson
- */
-package com.mxgraph.io.vsdx;
-
-import java.awt.Rectangle;
-import java.awt.geom.Rectangle2D;
-
-/**
- * Implements a 2-dimensional rectangle with double precision coordinates.
- */
-public class mxRectangle extends mxPoint
-{
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -3793966043543578946L;
-
-	/**
-	 * Holds the width and the height. Default is 0.
-	 */
-	protected double width, height;
-
-	/**
-	 * Constructs a new rectangle at (0, 0) with the width and height set to 0.
-	 */
-	public mxRectangle()
-	{
-		this(0, 0, 0, 0);
-	}
-
-	/**
-	 * Constructs a copy of the given rectangle.
-	 * 
-	 * @param rect Rectangle to construct a copy of.
-	 */
-	public mxRectangle(Rectangle2D rect)
-	{
-		this(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
-	}
-
-	/**
-	 * Constructs a copy of the given rectangle.
-	 * 
-	 * @param rect Rectangle to construct a copy of.
-	 */
-	public mxRectangle(mxRectangle rect)
-	{
-		this(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
-	}
-
-	/**
-	 * Constructs a rectangle using the given parameters.
-	 * 
-	 * @param x X-coordinate of the new rectangle.
-	 * @param y Y-coordinate of the new rectangle.
-	 * @param width Width of the new rectangle.
-	 * @param height Height of the new rectangle.
-	 */
-	public mxRectangle(double x, double y, double width, double height)
-	{
-		super(x, y);
-
-		setWidth(width);
-		setHeight(height);
-	}
-
-	/**
-	 * Returns the width of the rectangle.
-	 * 
-	 * @return Returns the width.
-	 */
-	public double getWidth()
-	{
-		return width;
-	}
-
-	/**
-	 * Sets the width of the rectangle.
-	 * 
-	 * @param value Double that specifies the new width.
-	 */
-	public void setWidth(double value)
-	{
-		width = value;
-	}
-
-	/**
-	 * Returns the height of the rectangle.
-	 * 
-	 * @return Returns the height.
-	 */
-	public double getHeight()
-	{
-		return height;
-	}
-
-	/**
-	 * Sets the height of the rectangle.
-	 * 
-	 * @param value Double that specifies the new height.
-	 */
-	public void setHeight(double value)
-	{
-		height = value;
-	}
-
-	/**
-	 * Sets this rectangle to the specified values
-	 * 
-	 * @param x the new x-axis position
-	 * @param y the new y-axis position
-	 * @param w the new width of the rectangle
-	 * @param h the new height of the rectangle
-	 */
-	public void setRect(double x, double y, double w, double h)
-	{
-	    this.x = x;
-	    this.y = y;
-	    this.width = w;
-	    this.height = h;
-	}
-
-	/**
-	 * Adds the given rectangle to this rectangle.
-	 */
-	public void add(mxRectangle rect)
-	{
-		if (rect != null)
-		{
-			double minX = Math.min(x, rect.x);
-			double minY = Math.min(y, rect.y);
-			double maxX = Math.max(x + width, rect.x + rect.width);
-			double maxY = Math.max(y + height, rect.y + rect.height);
-
-			x = minX;
-			y = minY;
-			width = maxX - minX;
-			height = maxY - minY;
-		}
-	}
-
-	/**
-	 * Returns the x-coordinate of the center.
-	 * 
-	 * @return Returns the x-coordinate of the center.
-	 */
-	public double getCenterX()
-	{
-		return getX() + getWidth() / 2;
-	}
-
-	/**
-	 * Returns the y-coordinate of the center.
-	 * 
-	 * @return Returns the y-coordinate of the center.
-	 */
-	public double getCenterY()
-	{
-		return getY() + getHeight() / 2;
-	}
-
-	/**
-	 * Grows the rectangle by the given amount, that is, this method subtracts
-	 * the given amount from the x- and y-coordinates and adds twice the amount
-	 * to the width and height.
-	 *
-	 * @param amount Amount by which the rectangle should be grown.
-	 */
-	public void grow(double amount)
-	{
-		x -= amount;
-		y -= amount;
-		width += 2 * amount;
-		height += 2 * amount;
-	}
-
-	/**
-	 * Returns true if the given point is contained in the rectangle.
-	 * 
-	 * @param x X-coordinate of the point.
-	 * @param y Y-coordinate of the point.
-	 * @return Returns true if the point is contained in the rectangle.
-	 */
-	public boolean contains(double x, double y)
-	{
-		return (this.x <= x && this.x + width >= x && this.y <= y && this.y
-				+ height >= y);
-	}
-
-
-	/**
-	 * Returns the bounds as a new rectangle.
-	 * 
-	 * @return Returns a new rectangle for the bounds.
-	 */
-	public Rectangle getRectangle()
-	{
-		int ix = (int) Math.round(x);
-		int iy = (int) Math.round(y);
-		int iw = (int) Math.round(width - ix + x);
-		int ih = (int) Math.round(height - iy + y);
-
-		return new Rectangle(ix, iy, iw, ih);
-	}
-
-	/**
-	 * 
-	 * Returns true if the given object equals this rectangle.
-	 */
-	public boolean equals(Object obj)
-	{
-		if (obj instanceof mxRectangle)
-		{
-			mxRectangle rect = (mxRectangle) obj;
-
-			return rect.getX() == getX() && rect.getY() == getY()
-					&& rect.getWidth() == getWidth()
-					&& rect.getHeight() == getHeight();
-		}
-
-		return false;
-	}
-
-	/**
-	 * Returns a new instance of the same rectangle.
-	 */
-	public Object clone()
-	{
-		mxRectangle clone = (mxRectangle) super.clone();
-
-		clone.setWidth(getWidth());
-		clone.setHeight(getHeight());
-
-		return clone;
-	}
-
-	/**
-	 * Returns the <code>String</code> representation of this
-	 * <code>mxRectangle</code>.
-	 * @return a <code>String</code> representing this
-	 * <code>mxRectangle</code>.
-	 */
-	public String toString()
-	{
-		return getClass().getName() + "[x=" + x + ",y=" + y + ",w=" + width
-				+ ",h=" + height + "]";
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometry.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometry.java
deleted file mode 100644
index 56642836c166fb11e7f88a7dcd8b36d49ba74d3c..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometry.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.geometry.Row;
-import com.mxgraph.io.vsdx.geometry.RowFactory;
-
-public class mxVsdxGeometry {
-	private int index;
-	
-	private boolean noFill = false, noLine = false, noShow = false, noSnap = false, noQuickDrag = false;
-	
-	private ArrayList<Row> rows = null;
-	
-	private int getIndex(Element elem)
-	{
-		try
-		{
-			return Integer.parseInt(elem.getAttribute("IX"));
-		}
-		catch (Exception e)
-		{
-			//Some non-standard visio file omit the index when it is zero 
-			return 0;
-		}
-	}
-	
-	public mxVsdxGeometry(Element elem)
-	{
-		index = getIndex(elem);
-		processGeoElem(elem);
-	}
-
-	public mxVsdxGeometry(Element elem, List<mxVsdxGeometry> parentGeo)
-	{
-		index = getIndex(elem);
-		if (parentGeo != null && index < parentGeo.size())
-		{
-			//inherit all parent values including 
-			this.inheritGeo(parentGeo.get(index));			
-		}
-		processGeoElem(elem);
-	}
-
-	private void processGeoElem(Element elem)
-	{		
-		ArrayList<Element> cellElems = mxVsdxUtils.getDirectChildNamedElements(elem, "Cell");
-		ArrayList<Element> rowElems = mxVsdxUtils.getDirectChildNamedElements(elem, "Row");
-		
-		if (rows == null)
-		{
-			rows = new ArrayList<>(rowElems.size());
-			
-			//set the list size to row size
-			for (int i = 0; i < rowElems.size(); i++)
-			{
-				rows.add(null);
-			}
-		}
-		
-		for (Element cellElem : cellElems)
-		{
-			String name = cellElem.getAttribute("N");
-			String val =  cellElem.getAttribute("V");
-			switch (name)
-			{
-				case "NoFill":
-					noFill = "1".equals(val);
-				break;
-				case "NoLine":
-					noLine = "1".equals(val);
-				break;
-				case "NoShow":
-					noShow = "1".equals(val);
-				break;
-				case "NoSnap":
-					noSnap = "1".equals(val);
-				break;
-				case "NoQuickDrag":
-					noQuickDrag = "1".equals(val);
-				break;
-			}
-		}
-		
-		int rowsLen = rows.size();
-		boolean sortNeeded = false;
-		
-		for (Element rowElem : rowElems)
-		{
-			Row row = RowFactory.getRowObj(rowElem, rows);
-			
-			//this can happen when child geo has more rows than parent
-			if (row.getIndex() > rowsLen)
-			{
-				rows.add(row);
-				sortNeeded = true;
-			}
-			else
-			{
-				rows.set(row.getIndex() - 1, row);
-			}
-		}
-		
-		if (sortNeeded)
-		{
-			Collections.sort(rows, new Comparator<Row>() 
-			{
-				@Override
-				public int compare(Row r1, Row r2) 
-				{
-					return r1.getIndex() - r2.getIndex();
-				}
-			});
-		}
-	}
-	
-	private void inheritGeo(mxVsdxGeometry parent)
-	{
-		this.noFill = parent.noFill;
-		this.noLine = parent.noLine;
-		this.noShow = parent.noShow;
-		this.noSnap = parent.noSnap;
-		this.noQuickDrag = parent.noQuickDrag;
-		rows = new ArrayList<>();
-		this.rows.addAll(parent.rows);
-	}
-
-	public int getIndex() 
-	{
-		return index;
-	}
-
-	public boolean isNoFill() 
-	{
-		return noFill;
-	}
-
-	public boolean isNoLine() 
-	{
-		return noLine;
-	}
-
-	public boolean isNoShow() 
-	{
-		return noShow;
-	}
-
-	public boolean isNoSnap() 
-	{
-		return noSnap;
-	}
-
-	public boolean isNoQuickDrag() 
-	{
-		return noQuickDrag;
-	}
-
-	public ArrayList<Row> getRows() 
-	{
-		return rows;
-	}
-
-	public String getPathXML(mxPoint p, Shape shape)
-	{
-		if (noShow) return "";
-		
-		StringBuilder geomElemParsed = new StringBuilder();
-		
-		for (Row row : rows)
-		{
-			geomElemParsed.append(row.handle(p, shape));
-		}
-		
-		return geomElemParsed.toString();
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometryList.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometryList.java
deleted file mode 100644
index 14eea8e0966955608a81c9a1c3984432ebe4df5a..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometryList.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.geometry.LineTo;
-import com.mxgraph.io.vsdx.geometry.MoveTo;
-import com.mxgraph.io.vsdx.geometry.Row;
-
-public class mxVsdxGeometryList 
-{
-	private List<mxVsdxGeometry> geomList = new ArrayList<>();
-	private List<mxVsdxGeometry> parentGeomList = null;
-	private boolean sortNeeded = false;
-	
-	public mxVsdxGeometryList(mxVsdxGeometryList parentGeoList) 
-	{
-		if (parentGeoList != null)
-		{
-			parentGeomList = parentGeoList.geomList;
-			geomList.addAll(parentGeoList.geomList);
-		}
-	}
-
-	public void addGeometry(Element geoElem)
-	{
-		mxVsdxGeometry geo = new mxVsdxGeometry(geoElem, parentGeomList);
-		
-		if (geo.getIndex() < geomList.size())
-		{
-			geomList.set(geo.getIndex(), geo);
-		}
-		else
-		{
-			geomList.add(geo);
-			sortNeeded = true;
-		}
-	}
-	
-	private void sort()
-	{
-		if (sortNeeded)
-		{
-			Collections.sort(geomList, new Comparator<mxVsdxGeometry>() 
-			{
-				@Override
-				public int compare(mxVsdxGeometry g1, mxVsdxGeometry g2) {
-					return g1.getIndex() - g2.getIndex();
-				}
-			});
-			sortNeeded = false;
-		}
-	}
-	
-	public boolean isNoShow()
-	{
-		for (mxVsdxGeometry geo : geomList)
-		{
-			if (!geo.isNoShow()) return false;
-		}
-		return true;
-	}
-
-	public boolean isNoFill()
-	{
-		for (mxVsdxGeometry geo : geomList)
-		{
-			if (!(geo.isNoShow() || geo.isNoFill())) return false;
-		}
-		return true;
-	}
-	
-	public boolean isNoLine()
-	{
-		for (mxVsdxGeometry geo : geomList)
-		{
-			if (!(geo.isNoShow() || geo.isNoLine())) return false;
-		}
-		return true;
-	}
-
-	public boolean hasGeom()
-	{
-		return !geomList.isEmpty();
-	}
-	
-	private void rotatedPoint(mxPoint pt, double cos, double sin)
-	{
-		double x1 = pt.getX() * cos - pt.getY() * sin;
-		double y1 = pt.getY() * cos + pt.getX() * sin;
-
-		pt.setX(x1);
-		pt.setY(y1);
-	}
-
-	/**
-	 * Returns the list of routing points of a edge shape.
-	 * @param parentHeight Height of the parent of the shape.
-	 * @return List of mxPoint that represents the routing points.
-	 */
-	public List<mxPoint> getRoutingPoints(double parentHeight, mxPoint startPoint, double rotation)
-	{
-		sort();
-		
-		List<mxPoint> points = new ArrayList<mxPoint>();
-		
-		//Adding the starting point as a routing point instead of setting the entryX/Y
-		points.add(new mxPoint(startPoint));
-		
-		double offsetX = 0;
-		double offsetY = 0;
-		
-		for (mxVsdxGeometry geo : geomList)
-		{
-			if (!geo.isNoShow())
-			{
-				ArrayList<Row> rows = geo.getRows();
-				
-				for (Row row : rows)
-				{
-					if (row instanceof MoveTo)
-					{
-						offsetX = row.getX() != null? row.getX() : 0;
-						offsetY = row.getY() != null? row.getY() : 0;
-					}
-					else if (row instanceof LineTo)
-					{
-						
-						double x = row.getX() != null? row.getX() : 0, y = row.getY() != null? row.getY() : 0;
-
-						mxPoint p = new mxPoint(x, y);
-						if (rotation != 0)
-						{
-							rotation = Math.toRadians(360 - rotation);
-							rotatedPoint(p, Math.cos(rotation), Math.sin(rotation));
-						}
-
-						x = (p.getX() - offsetX) * mxVsdxUtils.conversionFactor;
-						x += startPoint.getX();
-
-						y = ((p.getY() - offsetY) * mxVsdxUtils.conversionFactor) * -1;
-						y += startPoint.getY();
-
-						x = Math.round(x * 100.0) / 100.0;
-						y = Math.round(y * 100.0) / 100.0;
-						
-						p.setX(x);
-						p.setY(y);
-						points.add(p);						
-					}
-				}
-			}
-		}
-
-		return points;
-	}
-
-	public String getShapeXML(Shape shape)
-	{
-		mxPoint p = new mxPoint(0, 0);
-
-		StringBuilder parsedGeom = new StringBuilder("<shape strokewidth=\"inherit\"><foreground>");
-		int initSize = parsedGeom.length();
-		
-		int lastGeoStyle = -1;
-
-		//first all geo with fill then without
-		lastGeoStyle = processGeo(shape, p, parsedGeom, lastGeoStyle, true);
-
-		lastGeoStyle = processGeo(shape, p, parsedGeom, lastGeoStyle, false);
-
-		if (parsedGeom.length() == initSize)
-		{
-			return "";
-		}
-		else
-		{
-			closePath(parsedGeom, lastGeoStyle);
-		}
-		
-		//System.out.println(parsedGeom);
-		
-		parsedGeom.append("</foreground></shape>");
-		return parsedGeom.toString();
-	}
-
-	private int processGeo(Shape shape, mxPoint p, StringBuilder parsedGeom, int lastGeoStyle, boolean withFill) {
-		for (mxVsdxGeometry geo : geomList)
-		{
-			
-			if (withFill == geo.isNoFill()) continue;
-			
-			String str = geo.getPathXML(p, shape);
-			
-			if (!str.isEmpty())
-			{
-				int geoStyle = getGeoStyle(geo);
-				 
-				if (lastGeoStyle == -1) //first one
-				{
-					parsedGeom.append("<path>");
-					parsedGeom.append(str);
-				}
-				else if (lastGeoStyle != geoStyle) 
-				{
-					closePath(parsedGeom, lastGeoStyle);
-					parsedGeom.append("<path>");
-					parsedGeom.append(str);
-				}
-				else
-				{
-					//parsedGeom.append("<close/>");
-					parsedGeom.append(str);
-				}
-				lastGeoStyle = geoStyle;
-			}
-		}
-		return lastGeoStyle;
-	}
-
-	private int getGeoStyle(mxVsdxGeometry geo) 
-	{
-		int geoStyle = 0;
-		if (!geo.isNoLine() && !geo.isNoFill())
-		{
-			geoStyle = 1;
-		}
-		else if (!geo.isNoFill())
-		{
-			geoStyle = 2;
-		}
-		else if (!geo.isNoLine())
-		{
-			geoStyle = 3;
-		}
-		return geoStyle;
-	}
-
-	private void closePath(StringBuilder parsedGeom, int geoStyle) 
-	{
-		parsedGeom.append("</path>");
-		if (geoStyle == 1)
-		{
-			parsedGeom.append("<fillstroke/>");
-		}
-		else if (geoStyle == 2)
-		{
-			parsedGeom.append("<fill/>");
-		}
-		else if (geoStyle == 3)
-		{
-			parsedGeom.append("<stroke/>");
-		}
-	}
-	
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxPage.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxPage.java
deleted file mode 100644
index 360795c013d737d2c7375822a92ad107ab41f73b..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxPage.java
+++ /dev/null
@@ -1,413 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.mxgraph.io.mxVsdxCodec;
-
-public class mxVsdxPage {
-
-	/**
-	 * Unique ID of the element within its parent element
-	 */
-	protected Integer Id = null;
-	
-	/**
-	 * Name of the page taken from the "name" attribute of the page element
-	 */
-	protected String pageName = null;
-	
-	protected boolean isBackground = false;
-	
-	protected Integer backPageId = null;
-	
-	protected mxVsdxPage backPage = null;
-	
-	protected Element pageElement = null;
-	
-	protected Element pageSheet = null;
-	
-	protected mxVsdxModel model = null;
-	
-	protected Map<Integer, VsdxShape> shapes = new LinkedHashMap<Integer, VsdxShape>();
-
-	protected Map<Integer, mxVsdxConnect> connects = new LinkedHashMap<Integer, mxVsdxConnect>();
-
-	// cell in the PageSheet
-	protected Map<String, Element> cellElements = new HashMap<String, Element>();
-
-	public mxVsdxPage(Element pageElem, mxVsdxModel model) {
-		this.model = model;
-		this.pageElement = pageElem;
-
-		String backGround = pageElem.getAttribute(mxVsdxConstants.BACKGROUND);
-		this.isBackground = (backGround != null && backGround.equals(mxVsdxConstants.TRUE)) ? true : false;
-		String back = pageElem.getAttribute(mxVsdxConstants.BACK_PAGE);
-		
-		if (!isBackground && back != null && back.length() > 0)
-		{
-			this.backPageId = Integer.valueOf(back);
-		}
-
-		this.Id = Integer.valueOf(pageElem.getAttribute(mxVsdxConstants.ID));
-		this.pageName = pageElem.getAttribute(mxVsdxConstants.NAME);
-				
-		ArrayList<Element> pageSheets = mxVsdxUtils.getDirectChildNamedElements(pageElem, "PageSheet");
-		
-		if (pageSheets.size() > 0)
-		{
-			Element pageSheet = pageSheets.get(0);
-			ArrayList<Element> cells = mxVsdxUtils.getDirectChildNamedElements(pageSheet, "Cell");
-			
-			for (Element cellElem : cells)
-			{
-				String n = cellElem.getAttribute("N");
-				this.cellElements.put(n, cellElem);		
-			}
-		}
-		
-		parseNodes(pageElem, model, "pages");
-	}
-
-	/**
-	 * Parses the child nodes of the given element
-	 * @param pageElem the parent whose children to parse
-	 * @param model the model of the vsdx file
-	 * @param pageName page information is split across pages.xml and pageX.xml where X is any number. We have to know which we're currently parsing to use the correct relationships file.
-	 */
-	protected void parseNodes(Node pageElem, mxVsdxModel model, String pageName)
-	{
-		Node pageChild = pageElem.getFirstChild();
-		
-		while (pageChild != null)
-		{
-			if (pageChild instanceof Element)
-			{
-				Element pageChildElem = (Element) pageChild;
-				String childName = pageChildElem.getNodeName();
-				
-				if (childName.equals("Rel"))
-				{
-					resolveRel(pageChildElem, model, pageName);
-				}
-				else if (childName.equals("Shapes"))
-				{
-					this.shapes = parseShapes(pageChildElem, null, false);
-				}
-				else if (childName.equals("Connects"))
-				{
-					NodeList connectList = pageChildElem.getElementsByTagName(mxVsdxConstants.CONNECT);
-					Node connectNode = (connectList != null && connectList.getLength() > 0) ? connectList.item(0) : null;
-					//mxVdxConnect currentConnect = null;
-		
-					while (connectNode != null)
-					{
-						if (connectNode instanceof Element)
-						{
-							Element connectElem = (Element) connectNode;
-							mxVsdxConnect connect = new mxVsdxConnect(connectElem);
-							Integer fromSheet = connect.getFromSheet();
-							mxVsdxConnect previousConnect = (fromSheet != null && fromSheet > -1) ? connects.get(fromSheet) : null;
-							
-							if (previousConnect != null)
-							{
-								previousConnect.addConnect(connectElem);
-							}
-							else
-							{
-								connects.put(connect.getFromSheet(), connect);
-							}
-						}
-						
-						connectNode = connectNode.getNextSibling();	
-					}
-				}
-				else if (childName.equals("PageSheet"))
-				{
-					this.pageSheet = pageChildElem;
-				}
-			}
-			
-			pageChild = pageChild.getNextSibling();
-		}
-	}
-
-	/**
-	 * 
-	 * @param relNode
-	 * @param model
-	 * @param pageName
-	 */
-	protected void resolveRel(Element relNode, mxVsdxModel model, String pageName)
-	{
-		Element relElem = model.getRelationship(relNode.getAttribute("r:id"), mxVsdxCodec.vsdxPlaceholder + "/pages/" + "_rels/" + pageName + ".xml.rels");
-		
-		String target = relElem.getAttribute("Target");
-		String type = relElem.getAttribute("Type");
-		
-		if (String.valueOf(type).endsWith("page"))
-		{
-			Document pageDoc = null;
-			
-			if (type != null && type.endsWith("page"))
-			{
-				pageDoc = model.getXmlDoc(mxVsdxCodec.vsdxPlaceholder + "/pages/" + target);
-			}
-			
-			if (pageDoc != null)
-			{
-				Node child = pageDoc.getFirstChild();
-				
-				while (child != null)
-				{
-					if (child instanceof Element && ((Element)child).getTagName().equals("PageContents"))
-					{
-						int index = target.indexOf('.');
-						
-						if (index != -1)
-						{
-							parseNodes(child, model, target.substring(0, index));
-						}
-
-						break;
-					}
-					
-					child = child.getNextSibling();
-				}
-			}
-		}
-	}
-	
-	public Map<Integer, VsdxShape> parseShapes(Element shapesElement, mxVsdxMaster master, boolean recurse)
-	{
-		Map<Integer, VsdxShape> shapes = new LinkedHashMap<Integer, VsdxShape>();
-		NodeList shapeList = shapesElement.getElementsByTagName(mxVsdxConstants.SHAPE);
-
-		Node shapeNode = (shapeList != null && shapeList.getLength() > 0) ? shapeList.item(0) : null;
-
-		while (shapeNode != null)
-		{
-			if (shapeNode instanceof Element)
-			{
-				Element shapeElem = (Element) shapeNode;
-				mxVsdxMaster masterTmp = master;
-
-				// Work out node type
-				if (masterTmp == null)
-				{
-					//If the shape has the Master attribute the master shape is the first
-					//shape of the master element.
-					String masterId = shapeElem.getAttribute(mxVsdxConstants.MASTER);
-					
-					if (masterId != null && !masterId.equals(""))
-					{
-						masterTmp = model.getMaster(masterId);
-					}
-				}
-				
-				boolean isEdge = isEdge(shapeElem);
-				
-				// If the master of the shape has an xform1D, it's an edge
-				if (!isEdge && masterTmp != null)
-				{
-					String masterId = shapeElem.getAttribute(mxVsdxConstants.MASTER_SHAPE);
-
-					Element elem = masterTmp.getMasterElement();
-					if (masterId != null && !masterId.equals(""))
-					{
-						elem = masterTmp.getSubShape(masterId).getShape();
-					}
-					isEdge = isEdge(elem);
-				}
-				
-				//String type = mxVdxShape.getType(shapeElem);
-				
-				VsdxShape shape = this.createCell(shapeElem, !isEdge, masterTmp);
-				
-				shapes.put(shape.getId(), shape);
-			}
-
-			shapeNode = shapeNode.getNextSibling();
-		}
-		
-		return shapes;
-	}
-
-	protected VsdxShape createCell(Element shapeElem, boolean vertex, mxVsdxMaster masterTmp)
-	{
-		return new VsdxShape(this, shapeElem, vertex, this.model.getMasterShapes(), masterTmp, this.model);
-	}
-
-	public boolean isEdge(Element shape)
-	{
-		if (shape != null)
-		{
-			NodeList children = shape.getChildNodes();
-			
-			if (children != null)
-			{
-				Node childNode = children.item(0);
-				
-				while (childNode != null)
-				{
-					if (childNode instanceof Element)
-					{
-						Element childElem = (Element) childNode;
-
-						if (childElem.getNodeName().equals("Cell"))
-						{
-							String n = childElem.getAttribute("N");
-							
-							if (n.equals("BeginX") || n.equals("BeginY") || n.equals("EndY") || n.equals("EndX"))
-							{
-								return true;
-							}
-						}
-					}
-					
-					childNode = childNode.getNextSibling();
-				}
-			}
-		}
-
-		return false;
-	}
-
-	/**
-	 * Returns the width and height of a Page expressed as an mxPoint.
-	 * @return mxPoint that represents the dimensions of the page
-	 */
-	public mxPoint getPageDimensions()
-	{
-		double pageH = 0;
-		double pageW = 0;
-
-		Element height = this.cellElements.get("PageHeight");
-		Element width = this.cellElements.get("PageWidth");
-		
-		if (height != null)
-		{
-			pageH = Double.valueOf(height.getAttribute("V")) * mxVsdxUtils.conversionFactor;
-			pageH = Math.round(pageH * 100.0) / 100.0;
-		}
-		
-		if (width != null)
-		{
-			pageW = Double.valueOf(width.getAttribute("V")) * mxVsdxUtils.conversionFactor;
-			pageW = Math.round(pageW * 100.0) / 100.0;
-		}
-
-		return new mxPoint(pageW, pageH);
-	}
-	
-	/**
-	 * Returns the drawing scale attribute of this page
-	 * @return the DrawingScale
-	 */
-	public double getDrawingScale()
-	{
-		Element scale = this.cellElements.get("DrawingScale");
-		
-		if (scale != null)
-		{
-			return Double.valueOf(scale.getAttribute("V")) * mxVsdxUtils.conversionFactor;
-		}
-		
-		return 1;
-	}
-	
-
-	/**
-	 * Returns the page scale attribute of this page
-	 * @return the PageScale
-	 */
-	public double getPageScale()
-	{
-		Element scale = this.cellElements.get("PageScale");
-		
-		if (scale != null)
-		{
-			return Double.valueOf(scale.getAttribute("V")) * mxVsdxUtils.conversionFactor;
-		}
-		
-		return 1;
-	}
-
-	public String getCellValue(String cellName)
-	{
-		Element cell = this.cellElements.get(cellName);
-		
-		if (cell != null)
-		{
-			return cell.getAttribute("V");
-		}
-		
-		return null;		
-	}
-	
-	public int getCellIntValue(String cellName, int defVal)
-	{
-		String val = getCellValue(cellName);
-		
-		if (val != null)
-		{
-			return Integer.parseInt(val);
-		}
-		
-		return defVal;
-	}
-	
-	/**
-	 * Returns the ID of the page
-	 * @return the ID of the page
-	 */
-	public Integer getId()
-	{
-		return this.Id;
-	}
-	public String getPageName()
-	{
-		return this.pageName;
-	}
-	
-	public Map<Integer, VsdxShape> getShapes()
-	{
-		return this.shapes;
-	}
-	
-	public Map<Integer, mxVsdxConnect> getConnects()
-	{
-		return this.connects;
-	}
-	
-	public boolean isBackground()
-	{
-		return this.isBackground;
-	}
-	
-	/**
-	 * Returns the background page ID, if any
-	 * @return the ID of any background page or null for no background page
-	 */
-	public Integer getBackPageId()
-	{
-		return this.backPageId;
-	}
-	
-	public void setBackPage(mxVsdxPage page)
-	{
-		this.backPage = page;
-	}
-	
-	public mxVsdxPage getBackPage()
-	{
-		return this.backPage;
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxUtils.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxUtils.java
deleted file mode 100644
index add337de3c2a5801485f6b314e35fb64e8ac36ff..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxUtils.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import com.mxgraph.util.mxConstants;
-
-/**
- * General utilities for .vdx format support
- */
-public class mxVsdxUtils
-{
-	private static double screenCoordinatesPerCm = 40;
-
-	private static final double CENTIMETERS_PER_INCHES = 2.54;
-	
-	public static final double conversionFactor = screenCoordinatesPerCm * CENTIMETERS_PER_INCHES;
-	
-	private static final Logger log = Logger.getLogger(mxVsdxUtils.class.getName());
-
-	/**
-	 * Returns a collection of direct child Elements that match the specified tag name
-	 * @param parent the parent whose direct children will be processed
-	 * @param name the child tag name to match
-	 * @return a collection of matching Elements
-	 */
-	public static ArrayList<Element> getDirectChildNamedElements(Element parent, String name)
-	{
-		ArrayList<Element> result = new ArrayList<Element>();
-
-		for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
-		{
-			if (child instanceof Element && name.equals(child.getNodeName())) 
-			{
-				result.add((Element)child);
-			}
-	    }
-
-	    return result;
-	}
-
-	/**
-	 * Returns a collection of direct child Elements
-	 * @param parent the parent whose direct children will be processed
-	 * @return a collection of all child Elements
-	 */
-	public static ArrayList<Element> getDirectChildElements(Element parent)
-	{
-		ArrayList<Element> result = new ArrayList<Element>();
-
-		for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
-		{
-			if (child instanceof Element) 
-			{
-				result.add((Element)child);
-			}
-	    }
-
-	    return result;
-	}
-
-	/**
-	 * Returns the first direct child Element
-	 * @param parent the parent whose direct first child will be processed
-	 * @return the first child Element
-	 */
-	public static Element getDirectFirstChildElement(Element parent)
-	{
-		for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling())
-		{
-			if (child instanceof Element) 
-			{
-				return (Element)child;
-			}
-	    }
-
-	    return null;
-	}
-
-	/**
-	 * Return the value of an integer attribute or the default value
-	 * @param elem Element
-	 * @param attName Attribute name
-	 * @param defVal default value
-	 * @return the parsed attribute value or the default value
-	 */
-	public static int getIntAttr(Element elem, String attName, int defVal)
-	{
-		try 
-		{
-			String val = elem.getAttribute(attName);
-			if (val != null)
-			{
-				return Integer.parseInt(val);
-			}
-		}
-		catch (NumberFormatException e) 
-		{
-			//nothing, just return the default value
-		}
-		return defVal;
-	}
-	
-	/**
-	 * Return the value of an integer attribute or zero
-	 * @param elem Element
-	 * @param attName Attribute name
-	 * @return the parsed attribute value or zero
-	 */
-	public static int getIntAttr(Element elem, String attName)
-	{
-		return getIntAttr(elem, attName, 0);
-	}
-	
-	/**
-	 * Returns the string that represents the content of a given style map.
-	 * @param styleMap Map with the styles values
-	 * @return string that represents the style.
-	 */
-	public static String getStyleString(Map<String, String> styleMap, String asig)
-	{
-		String style = "";
-		Iterator<String> it = styleMap.values().iterator();
-		Iterator<String> kit = styleMap.keySet().iterator();
-
-		while (kit.hasNext())
-		{
-			String key = kit.next();
-			Object value = it.next();
-
-			if(!key.equals(mxConstants.STYLE_SHAPE) || (!styleMap.get(key).startsWith("image") && !styleMap.get(key).startsWith("rounded=")))
-			{
-				try
-				{
-					style = style + key + asig;
-				}
-				catch (Exception e)
-				{
-					log.log(Level.SEVERE, "mxVsdxUtils.getStyleString," + e.toString() + ",style.length=" + style.length() +
-							",key.length=" + key.length() + ",asig.length=" + asig.length());
-				}
-			}
-
-			style = style + value + ";";
-		}
-
-		return style;
-	}
-
-	/**
-	 * Returns a text surrounded by tags html.
-	 * @param text Text to be surrounded.
-	 * @param tag Name of the tag.
-	 * @return &lt tag &gt text &lt /tag &gt
-	 */
-	public static String surroundByTags(String text, String tag)
-	{
-		return "<" + tag + ">" + text + "</" + tag + ">";
-	}
-
-	
-	/**
-	 * Converts the ampersand, quote, prime, less-than and greater-than
-	 * characters to their corresponding HTML entities in the given string.
-	 * 
-	 * Note: this is the same method of mxUtils but we cannot use it as it is not compatible with google app engine
-	 */
-	public static String htmlEntities(String text)
-	{
-		return text.replaceAll("&", "&amp;").replaceAll("\"", "&quot;")
-				.replaceAll("'", "&prime;").replaceAll("<", "&lt;")
-				.replaceAll(">", "&gt;");
-	}
-	
-	/**
-	 * Converts the initial letter  of each word in text to uppercase
-	 * @param text Text to be transformed.
-	 * @return Text with initial capitals.
-	 */
-	public static String toInitialCapital(String text)
-	{
-		String[] words = text.split(" ");
-		String ret = "";
-
-		for (String word : words)
-		{
-			String begin = word.substring(0, 1);
-			word = word.substring(1);
-			begin = begin.toUpperCase();
-			ret += begin + word;
-		}
-
-		return ret.substring(0, ret.length());
-	}
-
-	/**
-	 * Trnsforms each lower case letter in text to small capital.
-	 * @param text Text to be transformed.
-	 * @param size Size of the original text.
-	 * @return Text in small capitals.
-	 */
-	public static String toSmallCaps(String text, String size)
-	{
-		String ret = "";
-
-		if (!size.equals(ret))
-		{
-			char a = 'a';
-			char z = 'z';
-			char[] letters = text.toCharArray();
-
-			for (char c : letters)
-			{
-				if (c >= a && c <= z)
-				{
-					String s = String.valueOf(c);
-					s = s.toUpperCase();
-					ret += "<font style=\"font-size:" + Double.valueOf(size) / 1.28 + "px\">" + s + "</font>";
-				}
-				else
-				{
-					ret += c;
-				}
-			}
-		}
-		else
-		{
-			ret = text;
-		}
-
-		return ret;
-	}
-
-	/**
-	 * Create a style map from a String with style definitions.
-	 * @param style Definition of the style.
-	 * @param asig Asignation simbol used in 'style'.
-	 * @return Map with the style properties.
-	 */
-	public static HashMap<String, Object> getStyleMap(String style, String asig)
-	{
-		HashMap<String, Object> styleMap = new HashMap<String, Object>();
-
-		String[] entries = style.split(";");
-
-		for (String entry : entries)
-		{
-			int index = entry.indexOf(asig);
-			String key = entry.substring(0, index);
-			String value = entry.substring(index + 1);
-			styleMap.put(key, value);
-		}
-
-		return styleMap;
-	}
-
-	public static boolean isInsideTriangle(double x, double y, double ax, double ay, double bx, double by, double cx,  double cy)
-	{
-		bx = bx - ax;
-		by = by - ay;
-		cx = cx - ax;
-		cy = cy - ay;
-		ax = 0;
-		ay = 0;
-		
-		double d = bx * cy - cx * by;
-		double wa = (x * (by - cy) + y * (cx - bx) + bx * cy - cx * by) / d;
-		double wb = (x * cy - y * cx) / d;
-		double wc = (y * bx - x * by) / d;
-		
-		if(wa > 0 && wa < 1 && wb > 0 && wb < 1 && wc > 0 && wc < 1)
-		{
-			return true;
-		}
-		
-		return false;
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/online/Utils.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/online/Utils.java
deleted file mode 100644
index 6cccb4494f7dd6be2ec701ce909585ef10e4ab7e..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/online/Utils.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.online;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.zip.Deflater;
-import java.util.zip.Inflater;
-import java.util.zip.InflaterInputStream;
-
-import com.mxgraph.io.vsdx.mxGeometry;
-import com.mxgraph.io.vsdx.mxPoint;
-
-/**
- * 
- * String/byte array encoding/manipulation utilities
- *
- */
-public class Utils
-{
-
-	/**
-	 * 
-	 */
-	public static String CHARSET_FOR_URL_ENCODING = "ISO-8859-1";
-
-	/**
-	 * 
-	 */
-	protected static final int IO_BUFFER_SIZE = 4 * 1024;
-
-	/**
-	 * Applies a standard inflate algo to the input byte array
-	 * @param binary the byte array to inflate
-	 * @return the inflated String
-	 * 
-	 */
-	public static String inflate(byte[] binary) throws IOException
-	{
-		StringBuffer result = new StringBuffer();
-		InputStream in = new InflaterInputStream(
-				new ByteArrayInputStream(binary), new Inflater(true));
-
-		while (in.available() != 0)
-		{
-			byte[] buffer = new byte[IO_BUFFER_SIZE];
-			int len = in.read(buffer, 0, IO_BUFFER_SIZE);
-
-			if (len <= 0)
-			{
-				break;
-			}
-
-			result.append(new String(buffer, 0, len));
-		}
-
-		in.close();
-
-		return result.toString();
-	}
-
-	/**
-	 * Applies a standard deflate algo to the input String
-	 * @param inString the String to deflate
-	 * @return the deflated byte array
-	 * 
-	 */
-	public static byte[] deflate(String inString) throws IOException
-	{
-		Deflater deflater = new Deflater(Deflater.DEFAULT_COMPRESSION, true);
-		byte[] inBytes = inString.getBytes("UTF-8");
-		deflater.setInput(inBytes);
-
-		ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
-				inBytes.length);
-		deflater.finish();
-		byte[] buffer = new byte[IO_BUFFER_SIZE];
-
-		while (!deflater.finished())
-		{
-			int count = deflater.deflate(buffer); // returns the generated code... index  
-			outputStream.write(buffer, 0, count);
-		}
-
-		outputStream.close();
-		byte[] output = outputStream.toByteArray();
-
-		return output;
-	}
-
-	/**
-	 * Copies the input stream to the output stream using the default buffer size
-	 * @param in the input stream
-	 * @param out the output stream
-	 * @throws IOException
-	 */
-	public static void copy(InputStream in, OutputStream out) throws IOException
-	{
-		copy(in, out, IO_BUFFER_SIZE);
-	}
-
-	/**
-	 * Copies the input stream to the output stream using the specified buffer size
-	 * @param in the input stream
-	 * @param out the output stream
-	 * @param bufferSize the buffer size to use when copying
-	 * @throws IOException
-	 */
-	public static void copy(InputStream in, OutputStream out, int bufferSize)
-			throws IOException
-	{
-		byte[] b = new byte[bufferSize];
-		int read;
-
-		while ((read = in.read(b)) != -1)
-		{
-			out.write(b, 0, read);
-		}
-	}
-
-	/**
-	 * Reads an input stream and returns the result as a String
-	 * @param stream the input stream to read
-	 * @return a String representation of the input stream
-	 * @throws IOException
-	 */
-	public static String readInputStream(InputStream stream) throws IOException
-	{
-		BufferedReader reader = new BufferedReader(
-				new InputStreamReader(stream));
-		StringBuffer result = new StringBuffer();
-		String tmp = reader.readLine();
-
-		while (tmp != null)
-		{
-			result.append(tmp + "\n");
-			tmp = reader.readLine();
-		}
-
-		reader.close();
-
-		return result.toString();
-	}
-
-	/**
-	  * Encodes the passed String as UTF-8 using an algorithm that's compatible
-	  * with JavaScript's <code>encodeURIComponent</code> function. Returns
-	  * <code>null</code> if the String is <code>null</code>.
-	  * 
-	  * @param s The String to be encoded
-	  * @param charset the character set to base the encoding on
-	  * @return the encoded String
-	  */
-	public static String encodeURIComponent(String s, String charset)
-	{
-		if (s == null)
-		{
-			return null;
-		}
-		else
-		{
-			String result;
-
-			try
-			{
-				result = URLEncoder.encode(s, charset).replaceAll("\\+", "%20")
-						.replaceAll("\\%21", "!").replaceAll("\\%27", "'").replaceAll("\\%28", "(")
-						.replaceAll("\\%29", ")").replaceAll("\\%7E", "~");
-			}
-			catch (UnsupportedEncodingException e)
-			{
-				// This exception should never occur
-				result = s;
-			}
-
-			return result;
-		}
-	}
-
-	/**
-	 * Rotates the given point by the given cos and sin.
-	 */
-	public static mxPoint getRotatedPoint(mxPoint pt, double cos, double sin,
-			mxPoint c)
-	{
-		double x = pt.getX() - c.getX();
-		double y = pt.getY() - c.getY();
-
-		double x1 = x * cos - y * sin;
-		double y1 = y * cos + x * sin;
-
-		return new mxPoint(x1 + c.getX(), y1 + c.getY());
-	}
-
-	/**
-	 * Rotates the given geometry (in place) by the given rotation (in degrees).
-	 */
-	public static void rotatedGeometry(mxGeometry geo, double rotation,
-			double cx, double cy)
-	{
-		rotation = Math.toRadians(rotation);
-		double cos = Math.cos(rotation), sin = Math.sin(rotation);
-
-		double x = geo.getCenterX() - cx;
-		double y = geo.getCenterY() - cy;
-
-		double x1 = x * cos - y * sin;
-		double y1 = y * cos + x * sin;
-
-		geo.setX(Math.round(x1 + cx - geo.getWidth() / 2));
-		geo.setY(Math.round(y1 + cy - geo.getHeight() / 2));
-	}
-}
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/util/mxConstants.java b/etc/vsdxJava2JS/src/main/java/com/mxgraph/util/mxConstants.java
deleted file mode 100644
index 9419ff2e3157a5feca2d08d81e3c99b2007129f0..0000000000000000000000000000000000000000
--- a/etc/vsdxJava2JS/src/main/java/com/mxgraph/util/mxConstants.java
+++ /dev/null
@@ -1,1261 +0,0 @@
-/**
- * Copyright (c) 2007-2012, JGraph Ltd
- */
-package com.mxgraph.util;
-
-/**
- * Contains all global constants.
- */
-public class mxConstants
-{
-	/**
-	 * Defines the number of radians per degree.
-	 */
-	public static double RAD_PER_DEG = 0.0174532;
-
-	/**
-	 * Defines the number of degrees per radian.
-	 */
-	public static double DEG_PER_RAD = 57.2957795;
-
-	/**
-	 * Defines the minimum scale at which rounded polylines should be painted.
-	 * Default is 0.05.
-	 */
-	public static double MIN_SCALE_FOR_ROUNDED_LINES = 0.05;
-
-	/**
-	 * Defines the portion of the cell which is to be used as a connectable
-	 * region. Default is 0.3.
-	 */
-	public static double DEFAULT_HOTSPOT = 0.3;
-
-	/**
-	 * Defines the minimum size in pixels of the portion of the cell which is
-	 * to be used as a connectable region. Default is 8.
-	 */
-	public static int MIN_HOTSPOT_SIZE = 8;
-
-	/**
-	 * Defines the maximum size in pixels of the portion of the cell which is
-	 * to be used as a connectable region. Use 0 for no maximum. Default is 0.
-	 */
-	public static int MAX_HOTSPOT_SIZE = 0;
-
-	/**
-	 * Defines the SVG namespace.
-	 */
-	public static String NS_SVG = "http://www.w3.org/2000/svg";
-
-	/**
-	 * Defines the XHTML namespace.
-	 */
-	public static String NS_XHTML = "http://www.w3.org/1999/xhtml";
-
-	/**
-	 * Defines the XLink namespace.
-	 */
-	public static String NS_XLINK = "http://www.w3.org/1999/xlink";
-
-	/**
-	 * Comma separated list of default fonts for CSS properties.
-	 * And the default font family value for new image export.
-	 * Default is Arial, Helvetica.
-	 */
-	public static String DEFAULT_FONTFAMILIES = "Arial,Helvetica";
-
-	/**
-	 * Defines the default font family. Default is "Dialog". (To be replaced
-	 * with Font.DIALOG after EOL of Java 1.5.)
-	 */
-	public static String DEFAULT_FONTFAMILY = "Dialog";
-
-	/**
-	 * Defines the default font size (in px). Default is 11.
-	 */
-	public static int DEFAULT_FONTSIZE = 11;
-
-	/**
-	 * Defines the default start size for swimlanes. Default is 40.
-	 */
-	public static int DEFAULT_STARTSIZE = 40;
-
-	/**
-	 * Default line height for text output. Default is 1.2. This is ignored for HTML in
-	 * the current version of Java. See
-	 * http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html
-	 */
-	public static float LINE_HEIGHT = 1.2f;
-
-	/**
-	 * Specifies if absolute line heights should be used (px) in CSS. Default
-	 * is false. Set this to true for backwards compatibility.
-	 */
-	public static boolean ABSOLUTE_LINE_HEIGHT = false;
-
-	/**
-	 * Specifies the line spacing. Default is 0.
-	 */
-	public static int LINESPACING = 0;
-
-	/**
-	 * Whether or not to split whole words when applying word wrapping in mxUtils.wordWrap.
-	 */
-	public static boolean SPLIT_WORDS = true;
-
-	/**
-	 * Defines the inset in absolute pixels between the label bounding box and
-	 * the label text. Default is 3.
-	 */
-	public static int LABEL_INSET = 3;
-
-	/**
-	 * Multiplier to the width that is passed into the word wrapping calculation
-	 * See mxUtils.wordWrap for details
-	 */
-	public static double LABEL_SCALE_BUFFER = 0.9;
-
-	/**
-	 * Defines the default marker size. Default is 6.
-	 */
-	public static int DEFAULT_MARKERSIZE = 6;
-
-	/**
-	 * Defines the default image size. Default is 24.
-	 */
-	public static int DEFAULT_IMAGESIZE = 24;
-
-	/**
-	 * Defines the default opacity for stencils shadows. Default is 1.
-	 */
-	public static int STENCIL_SHADOW_OPACITY = 1;
-
-	/**
-	 * Defines the default shadow color for stencils. Default is "gray".
-	 */
-	public static String STENCIL_SHADOWCOLOR = "gray";
-
-	/**
-	 * Defines the x-offset to be used for shadows. Default is 2.
-	 */
-	public static int SHADOW_OFFSETX = 2;
-
-	/**
-	 * Defines the y-offset to be used for shadows. Default is 3.
-	 */
-	public static int SHADOW_OFFSETY = 3;
-
-	/**
-	 * Defines the color to be used to draw shadows in W3C standards. Default
-	 * is gray.
-	 */
-	public static String W3C_SHADOWCOLOR = "gray";
-
-	/**
-	 * Defines the transformation used to draw shadows in SVG.
-	 */
-	public static String SVG_SHADOWTRANSFORM = "translate(2 3)";
-
-	/**
-	 * Specifies the default dash pattern, 3 pixels solid, 3 pixels clear.
-	 */
-	public static float[] DEFAULT_DASHED_PATTERN = new float[] {3.0f , 3.0f};
-
-	/**
-	 * Specifies the default distance at 1.0 scale that the label curve is 
-	 * created from its base curve
-	 */
-	public static double DEFAULT_LABEL_BUFFER = 12.0;
-
-	/**
-	 * Defines the handle size. Default is 7.
-	 */
-	public static int HANDLE_SIZE = 7;
-
-	/**
-	 * Defines the handle size. Default is 4.
-	 */
-	public static int LABEL_HANDLE_SIZE = 4;
-
-	/**
-	 * Defines the default value for the connect handle. Default is false.
-	 */
-	public static boolean CONNECT_HANDLE_ENABLED = false;
-
-	/**
-	 * Defines the connect handle size. Default is 8.
-	 */
-	public static int CONNECT_HANDLE_SIZE = 8;
-
-	/**
-	 * Defines the length of the horizontal segment of an Entity Relation.
-	 * This can be overridden using mxConstants.STYLE_SEGMENT style.
-	 * Default is 30.
-	 */
-	public static int ENTITY_SEGMENT = 30;
-
-	/**
-	 * Defines the rounding factor for rounded rectangles in percent between
-	 * 0 and 1. Values should be smaller than 0.5. Default is 0.15.
-	 */
-	public static double RECTANGLE_ROUNDING_FACTOR = 0.15;
-
-	/**
-	 * Defines the size of the arcs for rounded edges. Default is 10.
-	 */
-	public static double LINE_ARCSIZE = 10;
-
-	/**
-	 * Defines the spacing between the arrow shape and its terminals. Default
-	 * is 10.
-	 */
-	public static int ARROW_SPACING = 10;
-
-	/**
-	 * Defines the width of the arrow shape. Default is 30.
-	 */
-	public static int ARROW_WIDTH = 30;
-
-	/**
-	 * Defines the size of the arrowhead in the arrow shape. Default is 30.
-	 */
-	public static int ARROW_SIZE = 30;
-
-	/**
-	 * Defines the value for none. Default is "none".
-	 */
-	public static String NONE = "none";
-
-	/**
-	 * Defines the key for the perimeter style.
-	 * This is a function that defines the perimeter around a particular shape.
-	 * Possible values are the functions defined in mxPerimeter that use the 
-	 * <code>mxPerimeterFunction</code> interface. Alternatively, the constants
-	 * in this class that start with <code>PERIMETER_</code> may be used to 
-	 * access perimeter styles in <code>mxStyleRegistry</code>.
-	 */
-	public static String STYLE_PERIMETER = "perimeter";
-
-	/**
-	 * Defines the ID of the cell that should be used for computing the
-	 * perimeter point of the source for an edge. This allows for graphically
-	 * connecting to a cell while keeping the actual terminal of the edge.
-	 */
-	public static String STYLE_SOURCE_PORT = "sourcePort";
-
-	/**
-	 * Defines the ID of the cell that should be used for computing the
-	 * perimeter point of the target for an edge. This allows for graphically
-	 * connecting to a cell while keeping the actual terminal of the edge.
-	 */
-	public static String STYLE_TARGET_PORT = "targetPort";
-
-	/**
-	 * Defines the direction(s) that edges are allowed to connect to cells in.
-	 * Possible values are <code>DIRECTION_NORTH, DIRECTION_SOUTH, 
-	 * DIRECTION_EAST</code> and <code>DIRECTION_WEST</code>.
-	 * 
-	 */
-	public static String STYLE_PORT_CONSTRAINT = "portConstraint";
-
-	/**
-	 * Defines the key for the opacity style. The type of the value is 
-	 * <code>float</code> and the possible range is 0-100.
-	 */
-	public static String STYLE_OPACITY = "opacity";
-
-	/**
-	 * Defines the key for the fill opacity style. The type of the value is 
-	 * <code>float</code> and the possible range is 0-100.
-	 */
-	public static String STYLE_FILL_OPACITY = "fillOpacity";
-
-	/**
-	 * Defines the key for the stroke opacity style. The type of the value is 
-	 * <code>float</code> and the possible range is 0-100.
-	 */
-	public static String STYLE_STROKE_OPACITY = "strokeOpacity";
-
-	/**
-	 * Defines the key for the text opacity style. The type of the value is 
-	 * <code>float</code> and the possible range is 0-100.
-	 */
-	public static String STYLE_TEXT_OPACITY = "textOpacity";
-
-	/**
-	 * Defines the key for the overflow style. Possible values are "visible",
-	 * "hidden" and "fill". The default value is "visible". This value
-	 * specifies how overlapping vertex labels are handles. A value of
-	 * "visible" will show the complete label. A value of "hidden" will clip
-	 * the label so that it does not overlap the vertex bounds. A value of
-	 * "fill" will use the vertex bounds for the label.
-	 * 
-	 * @see com.mxgraph.view.mxGraph#isLabelClipped(Object)
-	 */
-	public static String STYLE_OVERFLOW = "overflow";
-
-	/**
-	* Defines if the connection points on either end of the edge should be
-	* computed so that the edge is vertical or horizontal if possible and
-	* if the point is not at a fixed location. Default is false. This is
-	* used in mxGraph.isOrthogonal, which also returns true if the edgeStyle
-	* of the edge is an elbow or entity.
-	*/
-	public static String STYLE_ORTHOGONAL = "orthogonal";
-
-	/**
-	* Defines the key for the horizontal relative coordinate connection point
-	* of an edge with its source terminal.
-	*/
-	public static String STYLE_EXIT_X = "exitX";
-
-	/**
-	* Defines the key for the vertical relative coordinate connection point
-	* of an edge with its source terminal.
-	*/
-	public static String STYLE_EXIT_Y = "exitY";
-
-	/**
-	* Defines if the perimeter should be used to find the exact entry point
-	* along the perimeter of the source. Possible values are 0 (false) and
-	* 1 (true). Default is 1 (true).
-	*/
-	public static String STYLE_EXIT_PERIMETER = "exitPerimeter";
-
-	/**
-	* Defines the key for the horizontal relative coordinate connection point
-	* of an edge with its target terminal.
-	*/
-	public static String STYLE_ENTRY_X = "entryX";
-
-	/**
-	* Defines the key for the vertical relative coordinate connection point
-	* of an edge with its target terminal.
-	*/
-	public static String STYLE_ENTRY_Y = "entryY";
-
-	/**
-	* Defines if the perimeter should be used to find the exact entry point
-	* along the perimeter of the target. Possible values are 0 (false) and
-	* 1 (true). Default is 1 (true).
-	*/
-	public static String STYLE_ENTRY_PERIMETER = "entryPerimeter";
-
-	/**
-	 * Defines the key for the white-space style. Possible values are "nowrap"
-	 * and "wrap". The default value is "nowrap". This value specifies how
-	 * white-space inside a HTML vertex label should be handled. A value of
-	 * "nowrap" means the text will never wrap to the next line until a
-	 * linefeed is encountered. A value of "wrap" means text will wrap when
-	 * necessary.
-	 */
-	public static String STYLE_WHITE_SPACE = "whiteSpace";
-
-	/**
-	 * Defines the key for the rotation style. The type of the value is 
-	 * <code>double</code> and the possible range is 0-360.
-	 */
-	public static String STYLE_ROTATION = "rotation";
-
-	/**
-	 * Defines the key for the fill color of the swimlane background.
-	 * The value is a string expression supported by mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_SWIMLANE_FILLCOLOR = "swimlaneFillColor";
-
-	/**
-	 * Defines the key for the fillColor style. The value is a string
-	 * expression supported by mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_FILLCOLOR = "fillColor";
-
-	/**
-	 * Defines the key for the gradientColor style. The value is a string
-	 * expression supported by mxUtils.parseColor. This is ignored if no fill
-	 * color is defined.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_GRADIENTCOLOR = "gradientColor";
-
-	/**
-	 * Defines the key for the gradient direction. Possible values are
-	 * <code>DIRECTION_EAST</code>, <code>DIRECTION_WEST</code>,
-	 * <code>DIRECTION_NORTH</code> and <code>DIRECTION_SOUTH</code>. Default
-	 * is <code>DIRECTION_SOUTH</code>. Generally, and by default in mxGraph,
-	 * gradient painting is done from the value of <code>STYLE_FILLCOLOR</code>
-	 * to the value of <code>STYLE_GRADIENTCOLOR</code>. Taking the example of
-	 * <code>DIRECTION_NORTH</code>, this means <code>STYLE_FILLCOLOR</code>
-	 * color at the bottom of paint pattern and
-	 * <code>STYLE_GRADIENTCOLOR</code> at top, with a gradient in-between.
-	 */
-	public static String STYLE_GRADIENT_DIRECTION = "gradientDirection";
-
-	/**
-	 * Defines the key for the strokeColor style. The value is a string
-	 * expression supported by mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_STROKECOLOR = "strokeColor";
-
-	/**
-	 * Defines the key for the separatorColor style. The value is a string
-	 * expression supported by mxUtils.parseColor. This style is only used
-	 * for SHAPE_SWIMLANE shapes.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_SEPARATORCOLOR = "separatorColor";
-
-	/**
-	 * Defines the key for the strokeWidth style. The type of the value is
-	 * <code>float</code> and the possible range is any non-negative value.
-	 * The value reflects the stroke width in pixels.
-	 */
-	public static String STYLE_STROKEWIDTH = "strokeWidth";
-
-	/**
-	 * Defines the key for the align style. Possible values are
-	 * <code>ALIGN_LEFT</code>, <code>ALIGN_CENTER</code> and
-	 * <code>ALIGN_RIGHT</code>. This value defines how the lines of the label
-	 * are horizontally aligned. <code>ALIGN_LEFT</code> mean label text lines
-	 * are aligned to left of the label bounds, <code>ALIGN_RIGHT</code> to the
-	 * right of the label bounds and <code>ALIGN_CENTER</code> means the
-	 * center of the text lines are aligned in the center of the label bounds.
-	 * Note this value doesn't affect the positioning of the overall label
-	 * bounds relative to the vertex, to move the label bounds horizontally, use
-	 * <code>STYLE_LABEL_POSITION</code>.
-	 */
-	public static String STYLE_ALIGN = "align";
-
-	/**
-	 * Defines the key for the verticalAlign style. Possible values are
-	 * <code>ALIGN_TOP</code>, <code>ALIGN_MIDDLE</code> and
-	 * <code>ALIGN_BOTTOM</code>. This value defines how the lines of the label
-	 * are vertically aligned. <code>ALIGN_TOP</code> means the topmost label
-	 * text line is aligned against the top of the label bounds,
-	 * <code>ALIGN_BOTTOM</code> means the bottom-most label text line is
-	 * aligned against the bottom of the label bounds and
-	 * <code>ALIGN_MIDDLE</code> means there is equal spacing between the
-	 * topmost text label line and the top of the label bounds and the
-	 * bottom-most text label line and the bottom of the label bounds. Note
-	 * this value doesn't affect the positioning of the overall label bounds
-	 * relative to the vertex, to move the label bounds vertically, use
-	 * <code>STYLE_VERTICAL_LABEL_POSITION</code>.
-	 */
-	public static String STYLE_VERTICAL_ALIGN = "verticalAlign";
-
-	/**
-	 * Defines the key for the horizontal label position of vertices. Possible
-	 * values are <code>ALIGN_LEFT</code>, <code>ALIGN_CENTER</code> and
-	 * <code>ALIGN_RIGHT</code>. Default is <code>ALIGN_CENTER</code>. The
-	 * label align defines the position of the label relative to the cell.
-	 * <code>ALIGN_LEFT</code> means the entire label bounds is placed
-	 * completely just to the left of the vertex, <code>ALIGN_RIGHT</code>
-	 * means adjust to the right and <code>ALIGN_CENTER</code> means the label
-	 * bounds are vertically aligned with the bounds of the vertex. Note this
-	 * value doesn't affect the positioning of label within the label bounds,
-	 * to move the label horizontally within the label bounds, use
-	 * <code>STYLE_ALIGN</code>.
-	 */
-	public static String STYLE_LABEL_POSITION = "labelPosition";
-
-	/**
-	 * Defines the key for the vertical label position of vertices. Possible
-	 * values are <code>ALIGN_TOP</code>, <code>ALIGN_BOTTOM</code> and
-	 * <code>ALIGN_MIDDLE</code>. Default is <code>ALIGN_MIDDLE</code>. The
-	 * label align defines the position of the label relative to the cell.
-	 * <code>ALIGN_TOP</code> means the entire label bounds is placed
-	 * completely just on the top of the vertex, <code>ALIGN_BOTTOM</code>
-	 * means adjust on the bottom and <code>ALIGN_MIDDLE</code> means the label
-	 * bounds are horizontally aligned with the bounds of the vertex. Note
-	 * this value doesn't affect the positioning of label within the label
-	 * bounds, to move the label vertically within the label bounds, use
-	 * <code>STYLE_VERTICAL_ALIGN</code>.
-	 */
-	public static String STYLE_VERTICAL_LABEL_POSITION = "verticalLabelPosition";
-
-	/**
-	 * Defines the key for the align style. Possible values are
-	 * <code>ALIGN_LEFT</code>, <code>ALIGN_CENTER</code> and
-	 * <code>ALIGN_RIGHT</code>. The value defines how any image in the vertex
-	 * label is aligned horizontally within the label bounds of a SHAPE_LABEL
-	 * shape.
-	 */
-	public static String STYLE_IMAGE_ALIGN = "imageAlign";
-
-	/**
-	 * Defines the key for the verticalAlign style. Possible values are
-	 * <code>ALIGN_TOP</code>, <code>ALIGN_MIDDLE</code> and
-	 * <code>ALIGN_BOTTOM</code>. The value defines how any image in the vertex
-	 * label is aligned vertically within the label bounds of a SHAPE_LABEL
-	 * shape.
-	 */
-	public static String STYLE_IMAGE_VERTICAL_ALIGN = "imageVerticalAlign";
-
-	/**
-	 * Defines the key for the glass style. Possible values are 0 (disabled) and
-	 * 1(enabled). The default value is 0. This is used in mxLabel.
-	 */
-	public static String STYLE_GLASS = "glass";
-
-	/**
-	 * Defines the key for the image style. Possible values are any image URL,
-	 * registered key in mxImageResources or short data URI as defined in
-	 * mxImageBundle.
-	 * The type of the value is <code>String</code>. This is the path to the
-	 * image to image that is to be displayed within the label of a vertex. See
-	 * mxGraphics2DCanvas.getImageForStyle, loadImage and setImageBasePath on
-	 * how the image URL is resolved. Finally, mxUtils.loadImage is used for
-	 * loading the image for a given value.
-	 */
-	public static String STYLE_IMAGE = "image";
-
-	/**
-	 * Defines the key for the imageWidth style. The type of this value is
-	 * <code>int</code>, the value is the image width in pixels and must be
-	 * greated than 0.
-	 */
-	public static String STYLE_IMAGE_WIDTH = "imageWidth";
-
-	/**
-	 * Defines the key for the imageHeight style The type of this value is
-	 * <code>int</code>, the value is the image height in pixels and must be
-	 * greater than 0.
-	 */
-	public static String STYLE_IMAGE_HEIGHT = "imageHeight";
-
-	/**
-	 * Defines the key for the image background color. This style is only used
-	 * for image shapes. Possible values are all HTML color names or HEX codes.
-	 */
-	public static String STYLE_IMAGE_BACKGROUND = "imageBackground";
-
-	/**
-	 * Defines the key for the image border color. This style is only used for
-	 * image shapes. Possible values are all HTML color names or HEX codes.
-	 */
-	public static String STYLE_IMAGE_BORDER = "imageBorder";
-
-	/**
-	 * Defines the key for the horizontal image flip. This style is only used
-	 * in mxImageShape. Possible values are 0 and 1. Default is 0.
-	 */
-	public static String STYLE_IMAGE_FLIPH = "imageFlipH";
-
-	/**
-	 * Defines the key for the vertical image flip. This style is only used
-	 * in mxImageShape. Possible values are 0 and 1. Default is 0.
-	 */
-	public static String STYLE_IMAGE_FLIPV = "imageFlipV";
-
-	/**
-	 * Defines the key for the horizontal stencil flip. This style is only used
-	 * for <mxStencilShape>. Possible values are 0 and 1. Default is 0.
-	 */
-	public static String STYLE_STENCIL_FLIPH = "stencilFlipH";
-
-	/**
-	 * Defines the key for the vertical stencil flip. This style is only used
-	 * for <mxStencilShape>. Possible values are 0 and 1. Default is 0.
-	 */
-	public static String STYLE_STENCIL_FLIPV = "stencilFlipV";
-
-
-	/**
-	 * Defines the key for the horizontal image flip. This style is only used
-	 * in <mxImageShape>. Possible values are 0 and 1. Default is 0.
-	 */
-	public static String STYLE_FLIPH = "flipH";
-
-	/**
-	 * Variable: STYLE_FLIPV
-	 * 
-	 * Defines the key for the vertical flip. Possible values are 0 and 1.
-	 * Default is 0.
-	 */
-	public static String STYLE_FLIPV = "flipV";
-
-	/**
-	 * Defines the key for the noLabel style. If this is
-	 * true then no label is visible for a given cell.
-	 * Possible values are true or false (1 or 0).
-	 * Default is false.
-	 */
-	public static String STYLE_NOLABEL = "noLabel";
-
-	/**
-	 * Defines the key for the noEdgeStyle style. If this is
-	 * true then no edge style is applied for a given edge.
-	 * Possible values are true or false (1 or 0).
-	 * Default is false.
-	 */
-	public static String STYLE_NOEDGESTYLE = "noEdgeStyle";
-
-	/**
-	 * Defines the key for the label background color. The value is a string
-	 * expression supported by mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_LABEL_BACKGROUNDCOLOR = "labelBackgroundColor";
-
-	/**
-	 * Defines the key for the label border color. The value is a string
-	 * expression supported by mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_LABEL_BORDERCOLOR = "labelBorderColor";
-
-	/**
-	 * Defines the key for the indicatorShape style.
-	 * Possible values are any of the SHAPE_*
-	 * constants.
-	 */
-	public static String STYLE_INDICATOR_SHAPE = "indicatorShape";
-
-	/**
-	 * Defines the key for the indicatorImage style.
-	 * Possible values are any image URL, the type of the value is
-	 * <code>String</code>.
-	 */
-	public static String STYLE_INDICATOR_IMAGE = "indicatorImage";
-
-	/**
-	 * Defines the key for the indicatorColor style. The value is a string
-	 * expression supported by mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_INDICATOR_COLOR = "indicatorColor";
-
-	/**
-	 * Defines the key for the indicatorGradientColor style. The value is a
-	 * string expression supported by mxUtils.parseColor. This style is only
-	 * supported in SHAPE_LABEL shapes.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_INDICATOR_GRADIENTCOLOR = "indicatorGradientColor";
-
-	/**
-	 * Defines the key for the indicatorSpacing style (in px).
-	 */
-	public static String STYLE_INDICATOR_SPACING = "indicatorSpacing";
-
-	/**
-	 * Defines the key for the indicatorWidth style (in px).
-	 */
-	public static String STYLE_INDICATOR_WIDTH = "indicatorWidth";
-
-	/**
-	 * Defines the key for the indicatorHeight style (in px).
-	 */
-	public static String STYLE_INDICATOR_HEIGHT = "indicatorHeight";
-
-	/**
-	 * Defines the key for the shadow style. The type of the value is
-	 * <code>boolean</code>. This style applies to vertices and arrow style
-	 * edges.
-	 */
-	public static String STYLE_SHADOW = "shadow";
-
-	/**
-	 * Defines the key for the segment style. The type of this value is
-	 * <code>float</code> and the value represents the size of the horizontal
-	 * segment of the entity relation style. Default is ENTITY_SEGMENT.
-	 */
-	public static String STYLE_SEGMENT = "segment";
-
-	/**
-	 * Defines the key for the endArrow style.
-	 * Possible values are all constants in this
-	 * class that start with ARROW_. This style is
-	 * supported in the <code>mxConnector</code> shape.
-	 */
-	public static String STYLE_ENDARROW = "endArrow";
-
-	/**
-	 * Defines the key for the startArrow style.
-	 * Possible values are all constants in this
-	 * class that start with ARROW_.
-	 * See STYLE_ENDARROW.
-	 * This style is supported in the mxConnector shape.
-	 */
-	public static String STYLE_STARTARROW = "startArrow";
-
-	/**
-	 * Defines the key for the endSize style. The type of this value is 
-	 * <code>float</code> and the value represents the size of the end 
-	 * marker in pixels.
-	 */
-	public static String STYLE_ENDSIZE = "endSize";
-
-	/**
-	 * Defines the key for the startSize style. The type of this value is
-	 * <code>float</code> and the value represents the size of the start marker
-	 * or the size of the swimlane title region depending on the shape it is
-	 * used for.
-	 */
-	public static String STYLE_STARTSIZE = "startSize";
-
-	/**
-	 * Defines the key for the swimlaneLine style. This style specifies whether
-	 * the line between the title regio of a swimlane should be visible. Use 0
-	 * for hidden or 1 (default) for visible. Value is "swimlaneLine".
-	 */
-	public static String STYLE_SWIMLANE_LINE = "swimlaneLine";
-	
-	/**
-	 * Defines the key for the endFill style. Use 0 for no fill or 1
-	 * (default) for fill. (This style is only exported via <mxImageExport>.)
-	 */
-	public static String STYLE_ENDFILL = "endFill";
-
-	/**
-	 * Defines the key for the startFill style. Use 0 for no fill or 1
-	 * (default) for fill. (This style is only exported via <mxImageExport>.)
-	 */
-	public static String STYLE_STARTFILL = "startFill";
-
-	/**
-	 * Defines the key for the dashed style. The type of this value is
-	 * <code>boolean</code> and the value determines whether or not an edge or
-	 * border is drawn with a dashed pattern along the line.
-	 */
-	public static String STYLE_DASHED = "dashed";
-
-	/**
-	 * Defines the key for the dashed pattern style. The type of this value
-	 * is <code>float[]</code> and the value specifies the dashed pattern 
-	 * to apply to edges drawn with this style. This style allows the user
-	 * to specify a custom-defined dash pattern. This is done using a series
-	 * of numbers. Dash styles are defined in terms of the length of the dash
-	 * (the drawn part of the stroke) and the length of the space between the
-	 * dashes. The lengths are relative to the line width: a length of "1" is
-	 * equal to the line width.
-	 */
-	public static String STYLE_DASH_PATTERN = "dashPattern";
-
-	/**
-	 * Defines the key for the rounded style. The type of this value is
-	 * <code>boolean</code>. For edges this determines whether or not joins
-	 * between edges segments are smoothed to a rounded finish. For vertices
-	 * that have the rectangle shape, this determines whether or not the
-	 * rectangle is rounded.
-	 */
-	public static String STYLE_ROUNDED = "rounded";
-
-	/**
-	 * Defines the rounding factor for a rounded rectangle in percent (without
-	 * the percent sign). Possible values are between 0 and 100. If this value
-	 * is not specified then RECTANGLE_ROUNDING_FACTOR * 100 is used. For
-	 * edges, this defines the absolute size of rounded corners in pixels. If
-	 * this values is not specified then LINE_ARCSIZE is used.
-	 * (This style is only exported via <mxImageExport>.) Value is "arcSize".
-	 */
-	public static String STYLE_ARCSIZE = "arcSize";
-
-	/**
-	 * Defines the key for the source perimeter spacing. The type of this value
-	 * is <code>double</code>. This is the distance between the source
-	 * connection point of an edge and the perimeter of the source vertex in
-	 * pixels. This style only applies to edges.
-	 */
-	public static String STYLE_SOURCE_PERIMETER_SPACING = "sourcePerimeterSpacing";
-
-	/**
-	 * Defines the key for the target perimeter spacing. The type of this value
-	 * is <code>double</code>. This is the distance between the target
-	 * connection point of an edge and the perimeter of the target vertex in
-	 * pixels. This style only applies to edges.
-	 */
-	public static String STYLE_TARGET_PERIMETER_SPACING = "targetPerimeterSpacing";
-
-	/**
-	 * Defines the key for the perimeter spacing. This is the distance between
-	 * the connection point and the perimeter in pixels. When used in a vertex
-	 * style, this applies to all incoming edges to floating ports (edges that
-	 * terminate on the perimeter of the vertex). When used in an edge style,
-	 * this spacing applies to the source and target separately, if they
-	 * terminate in floating ports (on the perimeter of the vertex).
-	 */
-	public static String STYLE_PERIMETER_SPACING = "perimeterSpacing";
-
-	/**
-	 * Defines the key for the spacing. The value represents the spacing, in
-	 * pixels, added to each side of a label in a vertex (style applies to
-	 * vertices only).
-	 */
-	public static String STYLE_SPACING = "spacing";
-
-	/**
-	 * Defines the key for the spacingTop style. The value represents the
-	 * spacing, in pixels, added to the top side of a label in a vertex (style
-	 * applies to vertices only).
-	 */
-	public static String STYLE_SPACING_TOP = "spacingTop";
-
-	/**
-	 * Defines the key for the spacingLeft style. The value represents the
-	 * spacing, in pixels, added to the left side of a label in a vertex (style
-	 * applies to vertices only).
-	 */
-	public static String STYLE_SPACING_LEFT = "spacingLeft";
-
-	/**
-	 * Defines the key for the spacingBottom style The value represents the
-	 * spacing, in pixels, added to the bottom side of a label in a vertex
-	 * (style applies to vertices only).
-	 */
-	public static String STYLE_SPACING_BOTTOM = "spacingBottom";
-
-	/**
-	 * Defines the key for the spacingRight style The value represents the
-	 * spacing, in pixels, added to the right side of a label in a vertex (style
-	 * applies to vertices only).
-	 */
-	public static String STYLE_SPACING_RIGHT = "spacingRight";
-
-	/**
-	 * Defines the key for the horizontal style. Possible values are
-	 * <code>true</code> or <code>false</code>. This value only applies to
-	 * vertices. If the <code>STYLE_SHAPE</code> is <code>SHAPE_SWIMLANE</code>
-	 * a value of <code>false</code> indicates that the swimlane should be drawn
-	 * vertically, <code>true</code> indicates to draw it horizontally. If the
-	 * shape style does not indicate that this vertex is a swimlane, this value
-	 * affects only whether the label is drawn horizontally or vertically.
-	 */
-	public static String STYLE_HORIZONTAL = "horizontal";
-
-	/**
-	 * Defines the key for the direction style. The direction style is used to
-	 * specify the direction of certain shapes (eg. <code>mxTriangle</code>).
-	 * Possible values are <code>DIRECTION_EAST</code> (default),
-	 * <code>DIRECTION_WEST</code>, <code>DIRECTION_NORTH</code> and
-	 * <code>DIRECTION_SOUTH</code>. This value only applies to vertices.
-	 */
-	public static String STYLE_DIRECTION = "direction";
-
-	/**
-	 * Defines the key for the elbow style. Possible values are
-	 * <code>ELBOW_HORIZONTAL</code> and <code>ELBOW_VERTICAL</code>. Default is
-	 * <code>ELBOW_HORIZONTAL</code>. This defines how the three segment
-	 * orthogonal edge style leaves its terminal vertices. The vertical style
-	 * leaves the terminal vertices at the top and bottom sides.
-	 */
-	public static String STYLE_ELBOW = "elbow";
-
-	/**
-	 * Defines the key for the fontColor style. The value is type
-	 * <code>String</code> and of the expression supported by
-	 * mxUtils.parseColor.
-	 * 
-	 * @see com.mxgraph.util.mxUtils#parseColor(String)
-	 */
-	public static String STYLE_FONTCOLOR = "fontColor";
-
-	/**
-	 * Defines the key for the fontFamily style. Possible values are names such
-	 * as Arial; Dialog; Verdana; Times New Roman. The value is of type
-	 * <code>String</code>.
-	 */
-	public static String STYLE_FONTFAMILY = "fontFamily";
-
-	/**
-	 * Defines the key for the fontSize style (in px). The type of the value
-	 * is <code>int</code>.
-	 */
-	public static String STYLE_FONTSIZE = "fontSize";
-
-	/**
-	 * Defines the key for the fontStyle style. Values may be any logical AND
-	 * (sum) of FONT_BOLD, FONT_ITALIC and FONT_UNDERLINE. The type
-	 * of the value is <code>int</code>.
-	 */
-	public static String STYLE_FONTSTYLE = "fontStyle";
-
-	/**
-	 * Defines the key for the autosize style. This specifies if a cell should be
-	 * resized automatically if the value has changed. Possible values are 0 or 1.
-	 * Default is 0. See mxGraph.isAutoSizeCell. This is normally combined with
-	 * STYLE_RESIZABLE to disable manual sizing.
-	 */
-	public static String STYLE_AUTOSIZE = "autosize";
-
-	/**
-	 * Defines the key for the foldable style. This specifies if a cell is foldable
-	 * using a folding icon. Possible values are 0 or 1. Default is 1. See
-	 * mxGraph.isCellFoldable.
-	 */
-	public static String STYLE_FOLDABLE = "foldable";
-
-	/**
-	 * Defines the key for the editable style. This specifies if the value of
-	 * a cell can be edited using the in-place editor. Possible values are 0 or
-	 * 1. Default is 1. See mxGraph.isCellEditable.
-	 */
-	public static String STYLE_EDITABLE = "editable";
-
-	/**
-	 * Defines the key for the bendable style. This specifies if the control
-	 * points of an edge can be moved. Possible values are 0 or 1. Default is
-	 * 1. See mxGraph.isCellBendable.
-	 */
-	public static String STYLE_BENDABLE = "bendable";
-
-	/**
-	 * Defines the key for the movable style. This specifies if a cell can
-	 * be moved. Possible values are 0 or 1. Default is 1. See
-	 * mxGraph.isCellMovable.
-	 */
-	public static String STYLE_MOVABLE = "movable";
-
-	/**
-	 * Defines the key for the resizable style. This specifies if a cell can
-	 * be resized. Possible values are 0 or 1. Default is 1. See
-	 * mxGraph.isCellResizable.
-	 */
-	public static String STYLE_RESIZABLE = "resizable";
-
-	/**
-	 * Defines the key for the cloneable style. This specifies if a cell can
-	 * be cloned. Possible values are 0 or 1. Default is 1. See
-	 * mxGraph.isCellCloneable.
-	 */
-	public static String STYLE_CLONEABLE = "cloneable";
-
-	/**
-	 * Defines the key for the deletable style. This specifies if a cell can be
-	 * deleted. Possible values are 0 or 1. Default is 1. See
-	 * mxGraph.isCellDeletable.
-	 */
-	public static String STYLE_DELETABLE = "deletable";
-
-	/**
-	 * Defines the key for the shape style.
-	 * Possible values are any of the SHAPE_*
-	 * constants.
-	 */
-	public static String STYLE_SHAPE = "shape";
-
-	/**
-	 * Takes a function that creates points. Possible values are the
-	 * functions defined in mxEdgeStyle.
-	 */
-	public static String STYLE_EDGE = "edgeStyle";
-
-	/**
-	 * Defines the key for the loop style. Possible values are the
-	 * functions defined in mxEdgeStyle.
-	 */
-	public static String STYLE_LOOP = "loopStyle";
-
-	/**
-	 * Defines the key for the horizontal routing center. Possible values are
-	 * between -0.5 and 0.5. This is the relative offset from the center used
-	 * for connecting edges. The type of this value is <code>float</code>.
-	 */
-	public static String STYLE_ROUTING_CENTER_X = "routingCenterX";
-
-	/**
-	 * Defines the key for the vertical routing center. Possible values are
-	 * between -0.5 and 0.5. This is the relative offset from the center used
-	 * for connecting edges. The type of this value is <code>float</code>.
-	 */
-	public static String STYLE_ROUTING_CENTER_Y = "routingCenterY";
-
-	/**
-	 * FONT_BOLD
-	 */
-	public static final int FONT_BOLD = 1;
-
-	/**
-	 * FONT_ITALIC
-	 */
-	public static final int FONT_ITALIC = 2;
-
-	/**
-	 * FONT_UNDERLINE
-	 */
-	public static final int FONT_UNDERLINE = 4;
-
-	/**
-	 * SHAPE_RECTANGLE
-	 */
-	public static final String SHAPE_RECTANGLE = "rectangle";
-
-	/**
-	 * SHAPE_ELLIPSE
-	 */
-	public static final String SHAPE_ELLIPSE = "ellipse";
-
-	/**
-	 * SHAPE_DOUBLE_RECTANGLE
-	 */
-	public static final String SHAPE_DOUBLE_RECTANGLE = "doubleRectangle";
-
-	/**
-	 * SHAPE_DOUBLE_ELLIPSE
-	 */
-	public static final String SHAPE_DOUBLE_ELLIPSE = "doubleEllipse";
-
-	/**
-	 * SHAPE_RHOMBUS
-	 */
-	public static final String SHAPE_RHOMBUS = "rhombus";
-
-	/**
-	 * SHAPE_LINE
-	 */
-	public static final String SHAPE_LINE = "line";
-
-	/**
-	 * SHAPE_IMAGE
-	 */
-	public static final String SHAPE_IMAGE = "image";
-
-	/**
-	 * SHAPE_ARROW
-	 */
-	public static final String SHAPE_ARROW = "arrow";
-
-	/**
-	 * SHAPE_ARROW
-	 */
-	public static final String SHAPE_CURVE = "curve";
-
-	/**
-	 * SHAPE_LABEL
-	 */
-	public static final String SHAPE_LABEL = "label";
-
-	/**
-	 * SHAPE_CYLINDER
-	 */
-	public static final String SHAPE_CYLINDER = "cylinder";
-
-	/**
-	 * SHAPE_SWIMLANE
-	 */
-	public static final String SHAPE_SWIMLANE = "swimlane";
-
-	/**
-	 * SHAPE_CONNECTOR
-	 */
-	public static final String SHAPE_CONNECTOR = "connector";
-
-	/**
-	 * SHAPE_ACTOR
-	 */
-	public static final String SHAPE_ACTOR = "actor";
-
-	/**
-	 * SHAPE_CLOUD
-	 */
-	public static final String SHAPE_CLOUD = "cloud";
-
-	/**
-	 * SHAPE_TRIANGLE
-	 */
-	public static final String SHAPE_TRIANGLE = "triangle";
-
-	/**
-	 * SHAPE_HEXAGON
-	 */
-	public static final String SHAPE_HEXAGON = "hexagon";
-
-	/**
-	 * ARROW_CLASSIC
-	 */
-	public static final String ARROW_CLASSIC = "classic";
-
-	/**
-	 * ARROW_BLOCK
-	 */
-	public static final String ARROW_BLOCK = "block";
-
-	/**
-	 * ARROW_OPEN
-	 */
-	public static final String ARROW_OPEN = "open";
-
-	/**
-	 * ARROW_BLOCK
-	 */
-	public static final String ARROW_OVAL = "oval";
-
-	/**
-	 * ARROW_OPEN
-	 */
-	public static final String ARROW_DIAMOND = "diamond";
-
-	/**
-	 * ALIGN_LEFT
-	 */
-	public static final String ALIGN_LEFT = "left";
-
-	/**
-	 * ALIGN_CENTER
-	 */
-	public static final String ALIGN_CENTER = "center";
-
-	/**
-	 * ALIGN_RIGHT
-	 */
-	public static final String ALIGN_RIGHT = "right";
-
-	/**
-	 * ALIGN_TOP
-	 */
-	public static final String ALIGN_TOP = "top";
-
-	/**
-	 * ALIGN_MIDDLE
-	 */
-	public static final String ALIGN_MIDDLE = "middle";
-
-	/**
-	 * ALIGN_BOTTOM
-	 */
-	public static final String ALIGN_BOTTOM = "bottom";
-
-	/**
-	 * DIRECTION_NORTH
-	 */
-	public static final String DIRECTION_NORTH = "north";
-
-	/**
-	 * DIRECTION_SOUTH
-	 */
-	public static final String DIRECTION_SOUTH = "south";
-
-	/**
-	 * DIRECTION_EAST
-	 */
-	public static final String DIRECTION_EAST = "east";
-
-	/**
-	 * DIRECTION_WEST
-	 */
-	public static final String DIRECTION_WEST = "west";
-
-	/**
-	 * DIRECTION_MASK_NONE
-	 */
-	public static final int DIRECTION_MASK_NONE = 0x00;
-
-	/**
-	 * DIRECTION_MASK_WEST
-	 */
-	public static final int DIRECTION_MASK_WEST = 0x01;
-	
-	/**
-	 * DIRECTION_MASK_NORTH
-	 */
-	public static final int DIRECTION_MASK_NORTH = 0x02;
-
-	/**
-	 * DIRECTION_MASK_SOUTH
-	 */
-	public static final int DIRECTION_MASK_SOUTH = 0x04;
-
-	/**
-	 * DIRECTION_MASK_EAST
-	 */
-	public static final int DIRECTION_MASK_EAST = 0x08;
-	
-	/**
-	 * DIRECTION_MASK_EAST
-	 */
-	public static final int DIRECTION_MASK_ALL = 0x0F;
-
-	/**
-	 * ELBOW_VERTICAL
-	 */
-	public static final String ELBOW_VERTICAL = "vertical";
-
-	/**
-	 * ELBOW_HORIZONTAL
-	 */
-	public static final String ELBOW_HORIZONTAL = "horizontal";
-
-	/**
-	 * Name of the elbow edge style. Can be used as a string value
-	 * for the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_ELBOW = "elbowEdgeStyle";
-
-	/**
-	 * Name of the entity relation edge style. Can be used as a string value
-	 * for the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_ENTITY_RELATION = "entityRelationEdgeStyle";
-
-	/**
-	 * Name of the loop edge style. Can be used as a string value
-	 * for the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_LOOP = "loopEdgeStyle";
-
-	/**
-	 * Name of the side to side edge style. Can be used as a string value
-	 * for the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_SIDETOSIDE = "sideToSideEdgeStyle";
-
-	/**
-	 * Name of the top to bottom edge style. Can be used as a string value
-	 * for the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_TOPTOBOTTOM = "topToBottomEdgeStyle";
-	
-	/**
-	 * Name of the orthogonal edge style. Can be used as a string value for
-	 * the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_ORTHOGONAL = "orthogonalEdgeStyle";
-
-	/**
-	 * Name of the generic segment edge style. Can be used as a string value
-	 * for the STYLE_EDGE style.
-	 */
-	public static final String EDGESTYLE_SEGMENT = "segmentEdgeStyle";
- 
-	/**
-	 * Name of the ellipse perimeter. Can be used as a string value
-	 * for the STYLE_PERIMETER style.
-	 */
-	public static final String PERIMETER_ELLIPSE = "ellipsePerimeter";
-
-	/**
-	 * Name of the rectangle perimeter. Can be used as a string value
-	 * for the STYLE_PERIMETER style.
-	 */
-	public static final String PERIMETER_RECTANGLE = "rectanglePerimeter";
-
-	/**
-	 * Name of the rhombus perimeter. Can be used as a string value
-	 * for the STYLE_PERIMETER style.
-	 */
-	public static final String PERIMETER_RHOMBUS = "rhombusPerimeter";
-
-	/**
-	 * Name of the triangle perimeter. Can be used as a string value
-	 * for the STYLE_PERIMETER style.
-	 */
-	public static final String PERIMETER_TRIANGLE = "trianglePerimeter";
-
-	/**
-	 * Name of the hexagon perimeter. Can be used as a string value
-	 * for the STYLE_PERIMETER style.
-	 */
-	public static final String PERIMETER_HEXAGON  = "hexagonPerimeter";
-
-}
diff --git a/src/com/mxgraph/io/gliffy/model/LinkMap.java b/src/com/mxgraph/io/gliffy/model/LinkMap.java
deleted file mode 100644
index 44bbc69c93f472410e812d886c8a39d30ebba460..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/gliffy/model/LinkMap.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.mxgraph.io.gliffy.model;
-
-public class LinkMap {
-
-	public String url;
-
-	public LinkMap() {
-		super();
-	}
-	
-	
-}
diff --git a/src/com/mxgraph/io/vsdx/Paragraph.java b/src/com/mxgraph/io/vsdx/Paragraph.java
deleted file mode 100644
index 37d49e64f8850641113e2c9b527c466f69665f4e..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/Paragraph.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-
-/**
- * Represents a single formatted section of text
- *
- */
-public class Paragraph
-{
-	protected ArrayList<String> values;
-	
-	protected ArrayList<String> charIndices;
-	
-	protected ArrayList<String> fields;
-	
-	protected String paraIndex;
-	
-	public Paragraph(String val, String ch, String pg, String field)
-	{
-		this.values = new ArrayList<String>();
-		this.values.add(val);
-		this.charIndices = new ArrayList<String>();
-		this.charIndices.add(ch);
-		this.fields = new ArrayList<String>();
-		this.fields.add(field);
-		this.paraIndex = pg;
-	}
-	
-	public void addText(String val, String ch, String field)
-	{
-		this.values.add(val);
-		this.charIndices.add(ch);
-		this.fields.add(field);
-	}
-	
-	public String getParagraphIndex()
-	{
-		return this.paraIndex;
-	}
-	
-	public String getValue(int index)
-	{
-		return values.get(index);
-	}
-	
-	public int numValues()
-	{
-		return this.values.size();
-	}
-	
-	public String getChar(int index)
-	{
-		return charIndices.get(index);
-	}
-	
-	public String getField(int index)
-	{
-		return fields.get(index);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/Section.java b/src/com/mxgraph/io/vsdx/Section.java
deleted file mode 100644
index 4a24da15341fff9eba791845d1af208e7c1d12e1..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/Section.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-
-import org.w3c.dom.Element;
-
-/**
- * Wrapper for a Section element https://msdn.microsoft.com/en-us/library/office/jj684189.aspx
- *
- */
-public class Section
-{
-	/**
-	 * The section element
-	 */
-	protected Element elem = null;
-	
-	/**
-	 * Constructs a new Section
-	 * @param elem the Element to wrap
-	 */
-	public Section(Element elem)
-	{
-		this.elem = elem;
-	}
-	
-	/**
-	 * Return the specified cell by key by row index, if it exists
-	 * @param index the row index to search
-	 * @param cellKey the name of the Cell to search for
-	 * @return the Element of the specified Cell, if null if it doesn't exist
-	 */
-	public Element getIndexedCell(String index, String cellKey)
-	{
-		ArrayList<Element> rows = mxVsdxUtils.getDirectChildNamedElements(this.elem, "Row");
-		
-		for (int i=0; i < rows.size(); i++)
-		{
-			Element row = rows.get(i);
-			String n = row.getAttribute("IX");
-			
-			// If index is null always match. For example, you can have a shape text with no paragraph index.
-			// When it checks the master shape the first paragraph should be used (or maybe the lowest index?)
-			if (n.equals(index) || index == null)
-			{
-				ArrayList<Element> cells = mxVsdxUtils.getDirectChildNamedElements(row, "Cell");
-				
-				for (int j=0; j < cells.size(); j++)
-				{
-					Element cell = cells.get(j);
-					n = cell.getAttribute("N");
-
-					if (n.equals(cellKey))
-					{
-						return cell;
-					}
-				}
-			}
-		}
-		
-		return null;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/ShapePageId.java b/src/com/mxgraph/io/vsdx/ShapePageId.java
deleted file mode 100644
index a423aea05131d2e737f64a7b2c8c0cfe36d17ab3..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/ShapePageId.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Copyright (c) 2010-2016, JGraph Ltd
- * Copyright (c) 2010-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-/**
- * Wraps the page and shape ID within that page to create a unique ID
- */
-public class ShapePageId
-{
-	private int pageNumber;
-
-	private int Id;
-
-	public ShapePageId(int pageNumber, int Id)
-	{
-		this.pageNumber = pageNumber;
-		this.Id = Id;
-	}
-
-	public int getId()
-	{
-		return Id;
-	}
-
-	public int getPageNumber()
-	{
-		return pageNumber;
-	}
-
-	@Override
-	public boolean equals(Object obj)
-	{
-		if (obj == null || getClass() != obj.getClass())
-		{
-			return false;
-		}
-		
-		final ShapePageId other = (ShapePageId) obj;
-		
-		if (this.pageNumber != other.pageNumber || this.Id != other.Id)
-		{
-			return false;
-		}
-		
-		return true;
-	}
-
-	@Override
-	public int hashCode()
-	{
-		return 100000 * this.pageNumber + this.Id;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/Style.java b/src/com/mxgraph/io/vsdx/Style.java
deleted file mode 100644
index 6f2421bb3a11775d54a083b1c5b197a533b161d1..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/Style.java
+++ /dev/null
@@ -1,1114 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.logging.Logger;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.mxgraph.io.vsdx.theme.Color;
-import com.mxgraph.io.vsdx.theme.QuickStyleVals;
-import com.mxgraph.util.mxConstants;
-
-/**
- * This class is a general wrapper for one Shape Element.<br/>
- * Provides a set of methods for retrieving the value of different properties
- * stored in the shape element.<br/>
- * References to other shapes or style-sheets are not considered.
- */
-public class Style
-{
-	protected Element shape;
-	
-	protected Integer Id;
-	
-	// .vsdx cells elements that contain one style each
-	protected Map<String, Element> cellElements = new HashMap<String, Element>();
-	
-	protected Map<String, Section> sections = new HashMap<String, Section>();
-
-	protected mxPropertiesManager pm;
-	
-	/**
-	 * Mapping of line,text and fill styles to the style parents
-	 */
-	protected Map<String, Style> styleParents = new HashMap<String, Style>();
-	
-	protected Style style;
-	
-	private final static Logger LOGGER = Logger.getLogger(Style.class.getName());
-	
-	public static boolean vsdxStyleDebug = false;
-	
-	protected static Map<String, String> styleTypes = new HashMap<String, String>();
-	
-	static
-	{
-		styleTypes.put(mxVsdxConstants.FILL, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.FILL_BKGND, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.FILL_BKGND_TRANS, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.FILL_FOREGND, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.FILL_FOREGND_TRANS, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.FILL_PATTERN , mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.SHDW_PATTERN, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put(mxVsdxConstants.FILL_STYLE, mxVsdxConstants.FILL_STYLE);
-		styleTypes.put("QuickStyleFillColor", mxVsdxConstants.FILL_STYLE);
-		styleTypes.put("QuickStyleFillMatrix", mxVsdxConstants.FILL_STYLE);
-		
-		styleTypes.put(mxVsdxConstants.BEGIN_ARROW, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.END_ARROW, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.LINE_PATTERN, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.LINE_COLOR, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.LINE_COLOR_TRANS, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.LINE_WEIGHT, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put("QuickStyleLineColor", mxVsdxConstants.LINE_STYLE);
-		styleTypes.put("QuickStyleLineMatrix", mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.BEGIN_ARROW_SIZE, mxVsdxConstants.LINE_STYLE);
-		styleTypes.put(mxVsdxConstants.END_ARROW_SIZE, mxVsdxConstants.LINE_STYLE);
-		
-		styleTypes.put(mxVsdxConstants.TEXT_BKGND, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put(mxVsdxConstants.BOTTOM_MARGIN, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put(mxVsdxConstants.LEFT_MARGIN, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put(mxVsdxConstants.RIGHT_MARGIN, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put(mxVsdxConstants.TOP_MARGIN, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put(mxVsdxConstants.PARAGRAPH, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put(mxVsdxConstants.CHARACTER, mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put("QuickStyleFontColor", mxVsdxConstants.TEXT_STYLE);
-		styleTypes.put("QuickStyleFontMatrix", mxVsdxConstants.TEXT_STYLE);		
-	};
-	
-	/**
-	 * Create a new instance of mxGeneralShape
-	 * @param shape Shape Element to be wrapped.
-	 */
-	public Style(Element shape, mxVsdxModel model)
-	{
-		this.shape = shape;
-		this.pm = model.getPropertiesManager();
-		
-		String Id = shape.getAttribute(mxVsdxConstants.ID);
-		
-		try
-		{
-			this.Id = (Id != null && !Id.isEmpty()) ? Integer.valueOf(Id) : -1;
-		}
-		catch (Exception e)
-		{
-			// TODO handle exception correctly
-			//For numbers outside Integer range (usually unused/deleted shape), we just set the id to -1
-			this.Id = -1;
-		}
-		
-		cacheCells(model);
-		stylesheetRefs(model);
-	}
-
-	public mxVsdxTheme getTheme()
-	{
-		return null;
-	}
-	
-	public QuickStyleVals getQuickStyleVals()
-	{
-		return null;
-	}
-	
-	public boolean isVertex()
-	{
-		return false;
-	}
-	
-	public void styleDebug(String debug)
-	{
-		if (vsdxStyleDebug)
-		{
-			System.out.println(debug);
-		}
-	}
-
-	public void stylesheetRefs(mxVsdxModel model)
-	{
-		styleParents.put(mxVsdxConstants.FILL_STYLE, model.getStylesheet(shape.getAttribute(mxVsdxConstants.FILL_STYLE)));
-		styleParents.put(mxVsdxConstants.LINE_STYLE, model.getStylesheet(shape.getAttribute(mxVsdxConstants.LINE_STYLE)));
-		styleParents.put(mxVsdxConstants.TEXT_STYLE, model.getStylesheet(shape.getAttribute(mxVsdxConstants.TEXT_STYLE)));
-		
-		Style style = model.getStylesheet("0");
-		this.style = style;
-	}
-
-	/**
-	 * Checks if the shape Element has a children with tag name = 'tag'.
-	 * @param tag Name of the Element to be found.
-	 * @return Returns <code>true</code> if the shape Element has a children with tag name = 'tag'
-	 */
-	protected void cacheCells(mxVsdxModel model)
-	{
-		if (shape != null)
-		{
-			NodeList children = shape.getChildNodes();
-			
-			if (children != null)
-			{
-				Node childNode = children.item(0);
-				
-				while (childNode != null)
-				{
-					if (childNode instanceof Element)
-					{
-						parseShapeElem((Element)childNode, model);
-					}
-					
-					childNode = childNode.getNextSibling();
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Caches the specified element
-	 * @param elem the element to cache
-	 */
-	protected void parseShapeElem(Element elem, mxVsdxModel model)
-	{
-		String childName = elem.getNodeName();
-
-		if (childName.equals("Cell"))
-		{
-			this.cellElements.put(elem.getAttribute("N"), elem);
-		}
-		else if (childName.equals("Section"))
-		{
-			this.parseSection(elem);
-		}
-	}
-
-	/**
-	 * Caches the specific section element
-	 * @param elem the element to cache
-	 */
-	protected void parseSection(Element elem)
-	{
-		Section sect = new Section(elem);
-		this.sections.put(elem.getAttribute("N"), sect);
-	}
-
-	/**
-	 * Checks if the 'primary' Element has a child with tag name = 'tag'.
-	 * @param tag Name of the Element to be found.
-	 * @return Returns <code>true</code> if the 'primary' Element has a child with tag name = 'tag'.
-	 */
-	protected boolean hasProperty(String nodeName, String tag)
-	{
-		return this.cellElements.containsKey(tag);
-	}
-	
-	/**
-	 * Returns the value of the element
-	 * @param elem The element whose value is to be found
-	 * @param defaultValue the value to return if there is no value attribute
-	 * @return String value of the element, or the default value if no value found
-	 */
-	protected String getValue(Element elem, String defaultValue)
-	{
-		if (elem != null)
-		{
-			return elem.getAttribute("V");
-		}
-		
-		return defaultValue;
-	}
-
-	/**
-	 * Returns the value of the element as a double
-	 * @param elem The element whose value is to be found
-	 * @param defaultValue the value to return if there is no value attribute
-	 * @return double value of the element, or the default value if no value found
-	 */
-	protected double getValueAsDouble(Element cell, double defaultValue)
-	{
-		if (cell != null)
-		{
-			String value = cell.getAttribute("V");
-
-			if (value != null)
-			{
-				if (value.equals("Themed"))
-				{
-					return 0;
-				}
-
-				try
-				{
-					double parsedValue = Double.parseDouble(value);
-					
-					String units = cell.getAttribute("U");
-					
-					if (units.equals("PT"))
-					{
-						// Convert from points to pixels
-						parsedValue = parsedValue * mxVsdxUtils.conversionFactor;
-					}
-					
-					return Math.round(parsedValue * 100.0) / 100.0;
-				}
-				catch (NumberFormatException e)
-				{
-					e.printStackTrace();
-				}
-			}
-		}
-
-		return defaultValue;
-	}
-
-	//if (!tag.equals(mxVdxConstants.FILL_BKGND_TRANS) && !tag.equals(mxVdxConstants.FILL_FOREGND_TRANS) && !tag.equals(mxVdxConstants.LINE_COLOR_TRANS) && !tag.equals(mxVdxConstants.NO_LINE))
-
-	/**
-	 * Returns the value of the element as a double
-	 * @param elem The element whose value is to be found
-	 * @param defaultValue the value to return if there is no value attribute
-	 * @return double value of the element, or the default value if no value found
-	 */
-	protected double getScreenNumericalValue(Element cell, double defaultValue)
-	{
-		if (cell != null)
-		{
-			String value = cell.getAttribute("V");
-
-			if (value != null)
-			{
-				try
-				{
-					double parsedValue = Double.parseDouble(value);
-					
-					return getScreenNumericalValue(parsedValue);
-				}
-				catch (NumberFormatException e)
-				{
-					e.printStackTrace();
-				}
-			}
-		}
-
-		return defaultValue;
-	}
-
-	protected double getScreenNumericalValue(double val)
-	{
-		double conVal = val * mxVsdxUtils.conversionFactor;
-		return conVal;
-	}
-
-	/**
-	 * Returns the value of the attribute of the element with tag name = 'tag' in the children
-	 * of the shape element<br/>
-	 * @param tag Name of the Element to be found.
-	 * @return Numerical value of the element.
-	 */
-	public String getAttribute(String tag, String attribute, String defaultValue)
-	{
-		String result = defaultValue;
-		Element cell = this.cellElements.get(tag);
-		
-		if (cell != null)
-		{
-			result = cell.getAttribute(attribute);
-		}
-
-		return result;
-	}
-	
-	protected Map <String, String> getChildValues(Element parent, Map<String, String> requiredValues)
-	{
-		Map <String, String> result = new HashMap<String, String>();
-		
-		Node child = parent.getFirstChild();
-		
-		while (child != null)
-		{
-			if (child instanceof Element)
-			{
-				Element childElem = (Element)child;
-				String childName = childElem.getNodeName();
-				String name = null;
-				String nodeValue = null;
-				
-				if (childName.equals("Cell"))
-				{
-					name = childElem.getAttribute("N");
-					nodeValue = childElem.getAttribute("V");
-				}
-				else
-				{
-					name = childElem.getNodeName();
-					nodeValue = childElem.getTextContent();
-				}
-				
-				if (requiredValues != null)
-				{
-					String nodeOverride = requiredValues.get(name);
-					
-					if (nodeOverride != null)
-					{
-						nodeValue = childElem.getAttribute(nodeOverride);
-					}
-				}
-				
-				result.put(name, nodeValue);
-			}
-			
-			child = child.getNextSibling();
-		}
-		
-		return result;
-	}
-
-	protected Element getCellElement(String cellKey, String index, String sectKey)
-	{
-		Section sect = this.sections.get(sectKey);
-		Element elem = null;
-		boolean inherit = false;
-
-		if (sect != null)
-		{
-			elem = sect.getIndexedCell(index, cellKey);
-		}
-		
-		if (elem != null)
-		{
-			String form = elem.getAttribute("F");
-			String value = elem.getAttribute("V");
-			
-			if (form != null && value != null)
-			{
-				if (form.equals("Inh") && value.equals("Themed"))
-				{
-					inherit = true;
-				}
-				else if (form.equals("THEMEVAL()") && value.equals("Themed") && style != null)
-				{
-					//Handle theme here
-					//FIXME this is a very hacky way to test themes until fully integrating themes
-					if (mxVsdxConstants.COLOR.equals(cellKey)) return elem;
-
-					// Use "no style" style
-					Element themeElem = style.getCellElement(cellKey, index, sectKey);
-					
-					if (themeElem != null)
-					{
-						return themeElem;
-					}
-				}
-			}
-		}
-
-		if (elem == null || inherit)
-		{
-			String styleType = Style.styleTypes.get(sectKey);
-			Style parentStyle = this.styleParents.get(styleType);
-			
-			if (parentStyle != null)
-			{
-				Element parentElem = parentStyle.getCellElement(cellKey, index, sectKey);
-				
-				if (parentElem != null)
-				{
-					// Only return if non-null. Just in case (and not sure if that's valid) there is an
-					// inherit formula that doesn't resolve to anything
-					return parentElem;
-				}
-			}
-		}
-		
-		return elem;
-	}
-
-	/**
-	 * Locates the first entry for the specified style string in the style hierarchy.
-	 * The order is to look locally, then delegate the request to the relevant parent style
-	 * if it doesn't exist locally
-	 * @param key The key of the cell to find
-	 * @return the Element that first resolves to that style key or null or none is found
-	 */
-	protected Element getCellElement(String key)
-	{
-		Element elem = this.cellElements.get(key);
-		boolean inherit = false;
-		
-		if (elem != null)
-		{
-			String form = elem.getAttribute("F");
-			String value = elem.getAttribute("V");
-			
-			if (form != null && value != null)
-			{
-				if (form.equals("Inh") && value.equals("Themed"))
-				{
-					inherit = true;
-				}
-				else if (form.contains("THEMEVAL()") && value.equals("Themed") && style != null)
-				{
-					//Handle theme here
-					//FIXME this is a very hacky way to test themes until fully integrating themes
-					if ("FillForegnd".equals(key) || mxVsdxConstants.LINE_COLOR.equals(key) || mxVsdxConstants.LINE_PATTERN.equals(key) 
-							|| mxVsdxConstants.BEGIN_ARROW_SIZE.equals(key) || mxVsdxConstants.END_ARROW_SIZE.equals(key)
-							|| mxVsdxConstants.BEGIN_ARROW.equals(key) || mxVsdxConstants.END_ARROW.equals(key)
-							|| mxVsdxConstants.LINE_WEIGHT.equals(key)) return elem;
-					
-					// Use "no style" style
-					Element themeElem = style.getCellElement(key);
-					
-					if (themeElem != null)
-					{
-						return themeElem;
-					}
-				}
-			}
-		}
-		
-		if (elem == null || inherit)
-		{
-			String styleType = Style.styleTypes.get(key);
-			Style parentStyle = this.styleParents.get(styleType);
-			
-			if (parentStyle != null)
-			{
-				Element parentElem = parentStyle.getCellElement(key);
-				
-				if (parentElem != null)
-				{
-					// Only return if non-null. Just in case (and not sure if that's valid) there is an
-					// inherit formula that doesn't resolve to anything
-					return parentElem;
-				}
-			}
-		}
-		
-		return elem;
-	}
-
-	/**
-	 * Returns the line color.<br/>
-	 * The property may to be defined in master shape or line stylesheet.<br/>
-	 * @return hexadecimal representation of the color.
-	 */
-	public String getStrokeColor()
-	{
-		String color = "";
-
-		if (this.getValue(this.getCellElement(mxVsdxConstants.LINE_PATTERN), "1").equals("0"))
-		{
-			color = "none";
-		}
-		else
-		{
-			color = this.getColor(this.getCellElement(mxVsdxConstants.LINE_COLOR));
-			
-			if ("Themed".equals(color))
-			{
-				mxVsdxTheme theme = getTheme();
-				
-				if (theme != null)
-				{
-					Color colorObj = isVertex()? theme.getLineColor(getQuickStyleVals()) : theme.getConnLineColor(getQuickStyleVals());
-					color = colorObj.toHexStr();
-				}
-				else
-				{
-					color = "";
-				}				
-			}
-		}
-
-		return color;
-	}
-
-	/**
-	 * Returns the shape's color.
-	 * The property may to be defined in master shape or fill stylesheet.
-	 * If the color is the background or the fore color, it depends on the pattern.
-	 * For simple gradients and solid, returns the fore color, else return the
-	 * background color.
-	 * @return hexadecimal representation of the color.
-	 */
-	protected String getFillColor()
-	{
-		String fillGradientEnabled = this.getValue(this.getCellElement(mxVsdxConstants.FILL_GRADIENT_ENABLED), "0");
-		
-		if ("1".equals(fillGradientEnabled))
-		{
-			Section fillGradient = sections.get("FillGradient");
-			
-			if (fillGradient != null)
-			{
-				String color = this.getColor(fillGradient.getIndexedCell("0", "GradientStopColor"));
-				
-				if (color != null && !color.isEmpty()) return color;
-			}
-		}
-
-		String fillForeColor = this.getColor(this.getCellElement(mxVsdxConstants.FILL_FOREGND));
-		
-		if ("Themed".equals(fillForeColor))
-		{
-			mxVsdxTheme theme = getTheme();
-			
-			if (theme != null)
-			{
-				Color color = theme.getFillColor(getQuickStyleVals());
-				fillForeColor = color.toHexStr();
-			}
-			else
-			{
-				//One sample file has fill color as white when no theme is used and value is Themed!
-				fillForeColor = "#FFFFFF";
-			}
-		}
-
-		String fillPattern = this.getValue(this.getCellElement(mxVsdxConstants.FILL_PATTERN), "0");
-		
-		if (fillPattern != null && fillPattern.equals("0"))
-		{
-			return "none";
-		}
-		else
-		{
-			return fillForeColor;
-		}
-	}
-
-	protected String getColor(Element elem)
-	{
-		String color = this.getValue(elem, "");
-
-		if (!"Themed".equals(color) && !color.startsWith("#"))
-		{
-			color = pm.getColor(color);
-		}
-		
-		return color;
-	}
-
-	/**
-	 * The TextBkgnd cell can have any value from 0 through 24, or 255. The values 0 and 255 (visTxtBlklOpaque) both indicate a transparent text background.
-	 * To enter a custom color, use the RGB or HSL function plus one—for example, RGB(255,127,255)+1. The value of a custom color is its RGB color, and RGB(r, g, b)+1, 
-	 * rather than a number, will be shown in the ShapeSheet window. When used in numeric operations, custom colors have values of 25 and above.
-	 * You can set the transparency of the text background color in the TextBkgndTrans cell.
-	 */
-	protected String getTextBkgndColor(Element elem)
-	{
-		String color = this.getValue(elem, "");
-
-		if (!color.startsWith("#"))
-		{
-			if (color.equals("0") || color.equals("255") || color.isEmpty())
-			{
-				return "none";
-			}
-
-			return pm.getColor(String.valueOf(Integer.parseInt(color) - 1));
-		}
-		
-		return color;
-	}
-	
-	/**
-	 * Returns the line weight of the shape in pixels
-	 * @return Numerical value of the LineWeight element.
-	 */
-	public double getLineWeight()
-	{
-		return getScreenNumericalValue(this.getCellElement(mxVsdxConstants.LINE_WEIGHT), 0);
-	}
-
-	/**
-	 * Returns the level of transparency of the Shape.
-	 * @return double in range (opaque = 0)..(100 = transparent)
-	 */
-	public double getStrokeTransparency()
-	{
-		return getValueAsDouble(this.getCellElement(mxVsdxConstants.LINE_COLOR_TRANS), 0);
-	}
-
-	/**
-	 * Returns the NameU attribute.
-	 * @return Value of the NameU attribute.
-	 */
-	public String getNameU()
-	{
-		return shape.getAttribute(mxVsdxConstants.NAME_U);
-	}
-
-	/**
-	 * Returns the Name attribute.
-	 * @return Value of the Name attribute (Human readable name).
-	 */
-	public String getName()
-	{
-		return shape.getAttribute(mxVsdxConstants.NAME);
-	}
-
-	/**
-	 * Returns the UniqueID attribute.
-	 * @return Value of the UniqueID attribute.
-	 */
-	public String getUniqueID()
-	{
-		return shape.getAttribute(mxVsdxConstants.UNIQUE_ID);
-	}
-
-	/**
-	 * Returns the value of the Id attribute.
-	 * @return Value of the Id attribute.
-	 */
-	public Integer getId()
-	{
-		return this.Id;
-	}
-
-	/**
-	 * Returns the color of one text fragment
-	 * @param charIX IX attribute of Char element
-	 * @return Text color in hexadecimal representation.
-	 */
-	public String getTextColor(String index)
-	{
-		Element colorElem = getCellElement(mxVsdxConstants.COLOR, index, mxVsdxConstants.CHARACTER);
-		String color = getValue(colorElem, "#000000");
-
-		if ("Themed".equals(color))
-		{
-			mxVsdxTheme theme = getTheme();
-			
-			if (theme != null)
-			{
-				Color colorObj = isVertex()? theme.getFontColor(getQuickStyleVals()) : theme.getConnFontColor(getQuickStyleVals());
-				color = colorObj.toHexStr();
-			}
-			else
-			{
-				color = "#000000";
-			}				
-		}
-		else if (!color.startsWith("#"))
-		{
-			color = pm.getColor(color);
-		}
-
-		return color;
-	}
-
-	/**
-	 * Returns the top margin of text in pixels.
-	 * @return Numerical value of the TopMargin element
-	 */
-	public double getTextTopMargin()
-	{
-		return getScreenNumericalValue(this.getCellElement(mxVsdxConstants.TOP_MARGIN), 0);
-	}
-
-	/**
-	 * Returns the bottom margin of text in pixels.
-	 * @return Numerical value of the BottomMargin element.
-	 */
-	public double getTextBottomMargin()
-	{
-		return getScreenNumericalValue(this.getCellElement(mxVsdxConstants.BOTTOM_MARGIN), 0);
-	}
-
-	/**
-	 * Returns the left margin of text in pixels.
-	 * @return Numerical value of the LeftMargin element.
-	 */
-	public double getTextLeftMargin()
-	{
-		return getScreenNumericalValue(this.getCellElement(mxVsdxConstants.LEFT_MARGIN), 0);
-	}
-
-	/**
-	 * Returns the right margin of text in pixels.
-	 * @return Numerical value of the RightMargin element.
-	 */
-	public double getTextRightMargin()
-	{
-		return getScreenNumericalValue(this.getCellElement(mxVsdxConstants.RIGHT_MARGIN), 0);
-	}
-
-	/**
-	 * Returns the style of one text fragment.
-	 * @param charIX IX attribute of Char element
-	 * @return String value of the Style element.
-	 */
-	public String getTextStyle(String index)
-	{
-		Element styleElem = getCellElement(mxVsdxConstants.STYLE, index, mxVsdxConstants.CHARACTER);
-		return getValue(styleElem, "");
-	}
-
-	/**
-	 * Returns the font of one text fragment
-	 * @param charIX IX attribute of Char element
-	 * @return Name of the font.
-	 */
-	public String getTextFont(String index)
-	{
-		Element fontElem = getCellElement(mxVsdxConstants.FONT, index, mxVsdxConstants.CHARACTER);
-		return getValue(fontElem, "");
-	}
-
-	/**
-	 * Returns the position of one text fragment
-	 * @param charIX IX attribute of Char element
-	 * @return Integer value of the Pos element.
-	 */
-	public String getTextPos(String index)
-	{
-		Element posElem = getCellElement(mxVsdxConstants.POS, index, mxVsdxConstants.CHARACTER);
-		return getValue(posElem, "");
-	}
-
-	/**
-	 * Checks if one text fragment is Strikethru
-	 * @param charIX IX attribute of Char element
-	 * @return Returns <code>true</code> if one text fragment is Strikethru
-	 */
-	public boolean getTextStrike(String index)
-	{
-		Element strikeElem = getCellElement(mxVsdxConstants.STRIKETHRU, index, mxVsdxConstants.CHARACTER);
-		return getValue(strikeElem, "").equals("1");
-	}
-
-	/**
-	 * Returns the case property of one text fragment
-	 * @param charIX IX attribute of Char element
-	 * @return Integer value of the Case element
-	 */
-	public String getTextCase(String index)
-	{
-		Element caseElem = getCellElement(mxVsdxConstants.CASE, index, mxVsdxConstants.CHARACTER);
-		return getValue(caseElem, "");
-	}
-
-	/**
-	 * Returns the horizontal align property of a paragraph
-	 * @param index IX attribute of Para element
-	 * @param html whether to return the html values or mxGraph values
-	 * @return String value of the HorizontalAlign element.
-	 */
-	public String getHorizontalAlign(String index, boolean html)
-	{
-		String ret = "center";
-		Element horAlign = getCellElement(mxVsdxConstants.HORIZONTAL_ALIGN, index, mxVsdxConstants.PARAGRAPH);
-		String align = getValue(horAlign, "");
-		
-		switch (align)
-		{
-			case "0":
-				ret = html ? "left" : mxConstants.ALIGN_LEFT;
-				break;
-			case "2":
-				ret = html ? "right" : mxConstants.ALIGN_RIGHT;
-				break;
-			case "3":
-			case "4":
-				ret = html ? "justify" : mxConstants.ALIGN_CENTER;
-				break;
-			default:
-				ret = html ? "center" : mxConstants.ALIGN_CENTER;
-		}
-		
-		return ret;
-	}
-
-	/**
-	 * Returns the first indent of one paragraph in pixels.
-	 * @param paraIX IX attribute of Para element
-	 * @return String representation of the numerical value of the IndentFirst element.
-	 */
-	public String getIndentFirst(String index)
-	{
-		Element indentFirstElem = getCellElement(mxVsdxConstants.INDENT_FIRST, index, mxVsdxConstants.PARAGRAPH);
-		return String.valueOf(getScreenNumericalValue(indentFirstElem, 0));
-	}
-
-	/**
-	 * Returns the indent to left of one paragraph
-	 * @param paraIX IX attribute of Para element
-	 * @return String representation of the numerical value of the IndentLeft element.
-	 */
-	public String getIndentLeft(String index)
-	{
-		Element indentLeftElem = getCellElement(mxVsdxConstants.INDENT_LEFT, index, mxVsdxConstants.PARAGRAPH);
-		return String.valueOf((int) Math.round(getScreenNumericalValue(indentLeftElem, 0)));
-	}
-
-	/**
-	 * Returns the indent to right of one paragraph
-	 * @param paraIX IX attribute of Para element
-	 * @return String representation of the numerical value of the IndentRight element.
-	 */
-	public String getIndentRight(String index)
-	{
-		Element indentRightElem = getCellElement(mxVsdxConstants.INDENT_RIGHT, index, mxVsdxConstants.PARAGRAPH);
-		return String.valueOf((int) Math.round(getScreenNumericalValue(indentRightElem, 0)));
-	}
-
-	/**
-	 * Returns the space before one paragraph.
-	 * @param paraIX IX attribute of Para element
-	 * @return String representation of the numerical value of the SpBefore element.
-	 */
-	public String getSpBefore(String index)
-	{
-		Element spBeforeElem = getCellElement(mxVsdxConstants.SPACE_BEFORE, index, mxVsdxConstants.PARAGRAPH);
-		return String.valueOf((int) Math.round(getScreenNumericalValue(spBeforeElem, 0)));
-	}
-
-	/**
-	 * Returns the space after one paragraph
-	 * @param paraIX IX attribute of Para element
-	 * @return String representation of the numerical value of the SpAfter element.
-	 */
-	public String getSpAfter(String index)
-	{
-		Element spAfterElem = getCellElement(mxVsdxConstants.SPACE_AFTER, index, mxVsdxConstants.PARAGRAPH);
-		return String.valueOf((int) Math.round(getScreenNumericalValue(spAfterElem, 0)));
-	}
-
-	/**
-	 * Returns the space between lines in one paragraph.
-	 * @param paraIX IX attribute of Para element.
-	 * @return Double representation of the value of the SpLine element.
-	 */
-	public double getSpLine(String index)
-	{
-		Element spLineElem = getCellElement(mxVsdxConstants.SPACE_LINE, index, mxVsdxConstants.PARAGRAPH);
-		String val = getValue(spLineElem, "");
-
-		if (!val.equals(""))
-		{
-			return Double.parseDouble(val);
-		}
-
-		return 0;
-	}
-
-	/**
-	 * Returns the flags of one paragraph.
-	 * @param paraIX IX attribute of Para element.
-	 * @return String value of the Flags element.
-	 */
-	public String getFlags(String index)
-	{
-		Element flagsElem = getCellElement(mxVsdxConstants.FLAGS, index, mxVsdxConstants.PARAGRAPH);
-		return getValue(flagsElem, "0");
-	}
-
-	/**
-	 * Returns the space between characters in one text fragment.
-	 * @param paraIX IX attribute of Para element.
-	 * @return String representation of the numerical value of the Letterspace element.
-	 */
-	public String getLetterSpace(String index)
-	{
-		Element letterSpaceElem = getCellElement(mxVsdxConstants.LETTER_SPACE, index, mxVsdxConstants.PARAGRAPH);
-		return String.valueOf(getScreenNumericalValue(letterSpaceElem, 0));
-	}
-
-	/**
-	 * Returns the bullet element value.
-	 * @param paraIX IX attribute of Para element.
-	 * @return String value of the Bullet element.
-	 */
-	public String getBullet(String index)
-	{
-		Element bulletElem = getCellElement(mxVsdxConstants.BULLET, index, mxVsdxConstants.PARAGRAPH);
-		return getValue(bulletElem, "0");
-	}
-	
-	public Element getShape() {
-		return shape;
-	}
-
-	public void setShape(Element shape) {
-		this.shape = shape;
-	}
-	
-	private final static double SPACE = 4.0, SHORT_SPACE = 2.0, LONG_SPACE = 6.0, DOT = 1.0, DASH = 8.0, LONG_DASH = 12.0, SHORT_DASH = 4.0, XLONG_DASH = 20.0, XSHORT_DASH = 2.0;
-	private final static ArrayList<ArrayList<Double>> lineDashPatterns = new ArrayList<>();   
-	
-	static
-	{
-		//0 no pattern, 1 solid, 2 similar to mxGraph default dash 
-		lineDashPatterns.add(new ArrayList<Double>());
-		lineDashPatterns.add(new ArrayList<Double>());
-		lineDashPatterns.add(new ArrayList<Double>());
-		//3
-		ArrayList<Double> lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//4
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//5
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//6
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//7
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//8
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//9
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//10
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//11
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//12
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//13
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//14
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//15
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPattern.add(SHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//16
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//17
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//18
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//19
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//20
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(LONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DOT);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//21
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(XLONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//22
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(XLONG_DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPattern.add(DASH);
-		lineDashPattern.add(LONG_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-		//23
-		lineDashPattern = new ArrayList<>();
-		lineDashPattern.add(XSHORT_DASH);
-		lineDashPattern.add(SHORT_SPACE);
-		lineDashPatterns.add(lineDashPattern);
-	}
-	public static ArrayList<Double> getLineDashPattern(int pattern)
-	{
-		if (pattern >= 0 && pattern <= 23)
-			return lineDashPatterns.get(pattern);
-		else
-			return lineDashPatterns.get(0);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/export/ModelExtAttrib.java b/src/com/mxgraph/io/vsdx/export/ModelExtAttrib.java
deleted file mode 100644
index ab104b18b54a67ae832352410852b0f8048c05cf..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/export/ModelExtAttrib.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.mxgraph.io.vsdx.export;
-
-public class ModelExtAttrib 
-{
-	private double pageScale = 1, 
-			pageWidth = 839, pageHeight = 1188, //A4 size in pixels as a default
-			gridSize = 10;
-	private boolean pageVisible = true, gridEnabled = true, guidesEnabled = true, foldingEnabled = true, 
-			shadowVisible = false, tooltips = true, connect = true, arrows = true, mathEnabled = true;
-	private String backgroundClr = "#FFFFFF";
-	//TODO add backgroundImage support
-	
-	public double getPageScale() {
-		return pageScale;
-	}
-	public double getPageWidth() {
-		return pageWidth;
-	}
-	public double getPageHeight() {
-		return pageHeight;
-	}
-	public double getGridSize() {
-		return gridSize;
-	}
-	public boolean isPageVisible() {
-		return pageVisible;
-	}
-	public boolean isGridEnabled() {
-		return gridEnabled;
-	}
-	public boolean isGuidesEnabled() {
-		return guidesEnabled;
-	}
-	public boolean isFoldingEnabled() {
-		return foldingEnabled;
-	}
-	public boolean isShadowVisible() {
-		return shadowVisible;
-	}
-	public boolean isTooltips() {
-		return tooltips;
-	}
-	public boolean isConnect() {
-		return connect;
-	}
-	public boolean isArrows() {
-		return arrows;
-	}
-	public boolean isMathEnabled() {
-		return mathEnabled;
-	}
-	public String getBackgroundClr() {
-		return backgroundClr;
-	}
-	public void setPageScale(double pageScale) {
-		this.pageScale = pageScale;
-	}
-	public void setPageWidth(double pageWidth) {
-		this.pageWidth = pageWidth;
-	}
-	public void setPageHeight(double pageHeight) {
-		this.pageHeight = pageHeight;
-	}
-	public void setGridSize(double gridSize) {
-		this.gridSize = gridSize;
-	}
-	public void setPageVisible(boolean pageVisible) {
-		this.pageVisible = pageVisible;
-	}
-	public void setGridEnabled(boolean gridEnabled) {
-		this.gridEnabled = gridEnabled;
-	}
-	public void setGuidesEnabled(boolean guidesEnabled) {
-		this.guidesEnabled = guidesEnabled;
-	}
-	public void setFoldingEnabled(boolean foldingEnabled) {
-		this.foldingEnabled = foldingEnabled;
-	}
-	public void setShadowVisible(boolean shadowVisible) {
-		this.shadowVisible = shadowVisible;
-	}
-	public void setTooltips(boolean tooltips) {
-		this.tooltips = tooltips;
-	}
-	public void setConnect(boolean connect) {
-		this.connect = connect;
-	}
-	public void setArrows(boolean arrows) {
-		this.arrows = arrows;
-	}
-	public void setMathEnabled(boolean mathEnabled) {
-		this.mathEnabled = mathEnabled;
-	}
-	public void setBackgroundClr(String backgroundClr) {
-		this.backgroundClr = backgroundClr;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/export/mxVsdxExporter.java b/src/com/mxgraph/io/vsdx/export/mxVsdxExporter.java
deleted file mode 100644
index c0031e4af89973d2d8bc2943c9c90c2e4b813bd6..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/export/mxVsdxExporter.java
+++ /dev/null
@@ -1,553 +0,0 @@
-package com.mxgraph.io.vsdx.export;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map.Entry;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.TransformerFactoryConfigurationError;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.mxCodec;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-import com.mxgraph.model.mxCell;
-import com.mxgraph.model.mxGeometry;
-import com.mxgraph.model.mxGraphModel;
-import com.mxgraph.online.Utils;
-import com.mxgraph.online.mxBase64;
-import com.mxgraph.util.mxXmlUtils;
-import com.mxgraph.view.mxGraph;
-import com.mxgraph.view.mxGraphHeadless;
-
-public class mxVsdxExporter 
-{
-	private static final String PAGES_TYPE = "http://schemas.microsoft.com/visio/2010/relationships/page";
-	private static final String RELS_XMLNS = "http://schemas.openxmlformats.org/package/2006/relationships";
-	private static final String XML_SPACE = "preserve";
-	private static final String XMLNS_R = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
-	private static final String XMLNS = "http://schemas.microsoft.com/office/visio/2012/main";
-	private static final String VISIO_PAGES = "visio/pages/";
-	private static final String PREFEX = "com/mxgraph/io/vsdx/resources/export/";
-	private static final String VSDX_ENC = "ISO-8859-1";
-	private static final String OVERRIDE = "Override";
-	private static final String PART_NAME = "PartName";
-	private static final String DOC_PROPS_CUSTOM_XML = "docProps/custom.xml";
-	private static final String DOC_PROPS_CORE_XML = "docProps/core.xml";
-	private static final String DOC_PROPS_APP_XML = "docProps/app.xml";
-	private static final String _RELS_RELS_FILE = "_rels/.rels";
-	private static final String CONTENT_TYPES_XML = "[Content_Types].xml";
-	private static final String VISIO_MASTERS_RELS_MASTERS_XML_RELS = "visio/masters/_rels/masters.xml.rels";
-	private static final String VISIO_MASTERS_MASTERS_XML = "visio/masters/masters.xml";
-	private static final String VISIO_RELS_DOCUMENT_XML_RELS = "visio/_rels/document.xml.rels";
-	private static final String VISIO_WINDOWS_XML = "visio/windows.xml";
-	private static final String VISIO_DOCUMENT_XML = "visio/document.xml";
-	private static final String VISIO_PAGES_RELS = "visio/pages/_rels/";
-	
-	private static byte[] documentFile;
-	private static byte[] windowsFile;
-	private static byte[] visioRelsFile;
-	private static byte[] mastersFile;
-	private static byte[] mastersRelsFile;
-	private static byte[] contentTypeFile;
-	private static byte[] _relsFile;
-	private static byte[] appFile;
-	private static byte[] coreFile;
-	private static byte[] customFile;
-	private static byte[] pageRelFile;
-	
-	//Load the constant vsdx files statically so it can be used faster for all export operations 
-	static 
-	{
-	    try 
-	    {
-		    ClassLoader classLoader = mxVsdxExporter.class.getClassLoader();
-		    
-		    String file = PREFEX + VISIO_DOCUMENT_XML;
-		    int size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    InputStream in = classLoader.getResourceAsStream(file);
-		    
-		    documentFile = new byte[size];
-		    in.read(documentFile);
-		    
-		    file = PREFEX + VISIO_WINDOWS_XML;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    windowsFile = new byte[size];
-		    in.read(windowsFile);
-
-		    file = PREFEX + VISIO_RELS_DOCUMENT_XML_RELS;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    visioRelsFile = new byte[size];
-		    in.read(visioRelsFile);
-		    
-		    file = PREFEX + VISIO_MASTERS_MASTERS_XML;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    mastersFile = new byte[size];
-		    in.read(mastersFile);
-		    
-		    file = PREFEX + VISIO_MASTERS_RELS_MASTERS_XML_RELS;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    mastersRelsFile = new byte[size];
-		    in.read(mastersRelsFile);
-		    
-		    file = PREFEX + CONTENT_TYPES_XML;
-		    size = (int) new File(URLDecoder.decode(classLoader.getResource(file).getFile(), "UTF8")).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    contentTypeFile = new byte[size];
-		    in.read(contentTypeFile);
-		    
-		    file = PREFEX + _RELS_RELS_FILE;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    _relsFile = new byte[size];
-		    in.read(_relsFile);
-		    
-		    file = PREFEX + DOC_PROPS_APP_XML;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    appFile = new byte[size];
-		    in.read(appFile);
-		    
-		    file = PREFEX + DOC_PROPS_CORE_XML;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    coreFile = new byte[size];
-		    in.read(coreFile);
-
-		    file = PREFEX + DOC_PROPS_CUSTOM_XML;
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    customFile = new byte[size];
-		    in.read(customFile);
-		    
-		    file = PREFEX + VISIO_PAGES_RELS + "page1.xml.rels";
-		    size = (int) new File(classLoader.getResource(file).getFile()).length();
-		    in = classLoader.getResourceAsStream(file);
-		    
-		    pageRelFile = new byte[size];
-		    in.read(pageRelFile);		    
-	    } 
-	    catch (Exception e) //We shouldn't get any exception as long as files exist. 
-	    {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Fill the required files in vsdx format which are constants in our exporter
-	 * @param zip ZipOutputStream of vsdx file
-	 * @param pageCount The number of pages in the mxFile
-	 * @throws IOException
-	 */
-	private void createVsdxSkeleton(ZipOutputStream zip, int pageCount) throws IOException
-	{
-    	zip.putNextEntry(new ZipEntry(VISIO_PAGES_RELS + "page1.xml.rels"));
-    	zip.write(pageRelFile);
-
-		if (pageCount == 1)
-	    {
-	    	zip.putNextEntry(new ZipEntry(CONTENT_TYPES_XML));
-	    	zip.write(contentTypeFile);
-	    }
-	    else
-	    {
-	    	//Add the remaining pages
-	    	Document doc = mxXmlUtils.parseXml(new String(contentTypeFile));
-	    	Element root = doc.getDocumentElement();
-	    	
-	    	ArrayList<Element> overrides = mxVsdxUtils.getDirectChildNamedElements(root, OVERRIDE);
-	    	Element page1 = null;
-
-	    	for (Element override : overrides)
-	    	{
-	    		if ("/visio/pages/page1.xml".equals(override.getAttribute(PART_NAME)))
-	    		{
-	    			page1 = override;
-	    		}
-	    	}
-	    	
-	    	for (int i = 2; i <= pageCount; i++)
-	    	{
-	        	zip.putNextEntry(new ZipEntry(VISIO_PAGES_RELS + "page" + i + ".xml.rels"));
-	        	zip.write(pageRelFile);
-
-	        	Element newPage = (Element) page1.cloneNode(false);
-	    		newPage.setAttribute(PART_NAME, "/visio/pages/page" + i + ".xml");
-	    		root.appendChild(newPage);
-	    	}
-	    	
-	    	zip.putNextEntry(new ZipEntry(CONTENT_TYPES_XML));
-	    	zip.write(("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + mxXmlUtils.getXml(doc)).getBytes(VSDX_ENC));
-	    }
-	    
-	    
-	    
-	    zip.putNextEntry(new ZipEntry(_RELS_RELS_FILE));
-	    zip.write(_relsFile);
-	    
-	    zip.putNextEntry(new ZipEntry(DOC_PROPS_APP_XML));
-	    zip.write(appFile);
-	    
-	    zip.putNextEntry(new ZipEntry(DOC_PROPS_CORE_XML));
-	    zip.write(coreFile);
-
-	    zip.putNextEntry(new ZipEntry(DOC_PROPS_CUSTOM_XML));
-	    zip.write(customFile);
-	    
-	    zip.putNextEntry(new ZipEntry(VISIO_DOCUMENT_XML));
-	    zip.write(documentFile);
-
-	    zip.putNextEntry(new ZipEntry(VISIO_WINDOWS_XML));
-	    zip.write(windowsFile);
-
-	    zip.putNextEntry(new ZipEntry(VISIO_RELS_DOCUMENT_XML_RELS));
-	    zip.write(visioRelsFile);
-
-	    zip.putNextEntry(new ZipEntry(VISIO_MASTERS_MASTERS_XML));
-	    zip.write(mastersFile);
-
-	    zip.putNextEntry(new ZipEntry(VISIO_MASTERS_RELS_MASTERS_XML_RELS));
-	    zip.write(mastersRelsFile);
-
-	    zip.flush();
-	}
-	
-	/**
-	 * 
-	 * Convert mxFile into a vdsx file
-	 * @param mxFileXML mxFile xml string
-	 * @param out output stream where vsdx file is written to
-	 * @return true if successful, false otherwise (stream should be discarded and closed)
-	 */
-	public boolean exportMxFile(String mxFileXML, OutputStream out) 
-	{
-		try 
-		{
-		    ZipOutputStream zip = new ZipOutputStream(out);
-			DocumentBuilder docBuilder = mxXmlUtils.getDocumentBuilder();
-			LinkedHashMap<String, Document> pages = new LinkedHashMap<>();
-			LinkedHashMap<String, ModelExtAttrib> modelsAttr = new LinkedHashMap<>();
-			
-			Document doc = mxXmlUtils.parseXml(mxFileXML);
-			ArrayList<Element> diagrams = mxVsdxUtils.getDirectChildNamedElements(doc.getDocumentElement(), "diagram");
-			mxCodec codec = new mxCodec();
-	
-			for (Element diagram : diagrams)
-			{
-				String diagramName = diagram.getAttribute("name");
-				String diagramB64 = diagram.getFirstChild().getTextContent();
-				byte[] deflated = mxBase64.decodeFast(diagramB64);
-				String uriEncoded = Utils.inflate(deflated);
-				String xml = URLDecoder.decode(uriEncoded, Utils.CHARSET_FOR_URL_ENCODING);
-				Element modelNode = mxXmlUtils.parseXml(xml).getDocumentElement();
-				ModelExtAttrib modelAttrib = getModelExtAttributes(modelNode);
-				mxGraphModel model = (mxGraphModel) codec.decode(modelNode);
-				pages.put(diagramName, convertMxModel2Page(docBuilder, model, diagramName, modelAttrib));
-				modelsAttr.put(diagramName, modelAttrib);
-			}
-			
-			createVsdxSkeleton(zip, pages.size());
-			
-			addPagesXML(docBuilder, zip, pages, modelsAttr);
-			
-			zip.close();
-			return true;
-		}
-		catch(Exception e) 
-		{
-			e.printStackTrace();
-			return false;
-		}
-	}		
-	
-	private Double getDouble(String val)
-	{
-		try
-		{
-			if (val != null && !val.isEmpty())
-			{
-				return Double.valueOf(val);
-			}
-		}
-		catch (Exception e) 
-		{
-			//fallback to null
-		}
-		return null;
-	}
-	
-	private ModelExtAttrib getModelExtAttributes(Element modelNode) 
-	{
-		ModelExtAttrib attr = new ModelExtAttrib();
-		
-		try
-		{
-			String grid = modelNode.getAttribute("grid");
-			if (!grid.isEmpty()) attr.setGridEnabled("1".equals(grid));
-			
-			Double gridSize = getDouble(modelNode.getAttribute("gridSize"));
-			if (gridSize != null) attr.setGridSize(gridSize);
-			
-			String guides = modelNode.getAttribute("guides");
-			if (!guides.isEmpty()) attr.setGuidesEnabled("1".equals(guides));
-
-			String page = modelNode.getAttribute("page");
-			if (!page.isEmpty()) attr.setPageVisible("1".equals(page));
-			
-			Double pageScale = getDouble(modelNode.getAttribute("pageScale"));
-			if (pageScale != null) attr.setPageScale(pageScale);
-			
-			Double pageWidth = getDouble(modelNode.getAttribute("pageWidth"));
-			if (pageWidth != null) attr.setPageWidth(pageWidth);
-
-			Double pageHeight = getDouble(modelNode.getAttribute("pageHeight"));
-			if (pageHeight != null) attr.setPageHeight(pageHeight);
-
-			String background = modelNode.getAttribute("background");
-			if (!background.isEmpty()) attr.setBackgroundClr(background);
-
-			String math = modelNode.getAttribute("math");
-			if (!math.isEmpty()) attr.setMathEnabled("1".equals(math));
-
-			String shadow = modelNode.getAttribute("shadow");
-			if (!shadow.isEmpty()) attr.setShadowVisible("1".equals(shadow));
-
-			//these most probably not needed in vsdx
-			String tooltips = modelNode.getAttribute("tooltips");
-			if (!tooltips.isEmpty()) attr.setTooltips("1".equals(tooltips));
-			
-			String connect = modelNode.getAttribute("connect");
-			if (!connect.isEmpty()) attr.setConnect("1".equals(connect));
-			
-			String arrows = modelNode.getAttribute("arrows");
-			if (!arrows.isEmpty()) attr.setArrows("1".equals(arrows));
-			
-			String fold = modelNode.getAttribute("fold");
-			if (!fold.isEmpty()) attr.setFoldingEnabled("1".equals(fold));
-		}
-		catch(Exception e)
-		{
-			//nothing, fallback to defaults
-		}
-		return attr;
-	}
-
-	private void addPagesXML(DocumentBuilder docBuilder, ZipOutputStream zip, LinkedHashMap<String, Document> pages, LinkedHashMap<String, ModelExtAttrib> modelsAttr) 
-			throws TransformerFactoryConfigurationError, TransformerException, IOException 
-	{
-        Document pagesXmlDoc = docBuilder.newDocument();
-        Document pagesRelsXmlDoc = docBuilder.newDocument();
-        
-        Element pagesRoot = pagesXmlDoc.createElement("Pages");
-        pagesRoot.setAttribute("xmlns", XMLNS);
-        pagesRoot.setAttribute("xmlns:r", XMLNS_R);
-        pagesRoot.setAttribute("xml:space", XML_SPACE);
-		
-        Element pagesRelsRoot = pagesRelsXmlDoc.createElement("Relationships");
-        pagesRelsRoot.setAttribute("xmlns", RELS_XMLNS);
-
-        int i = 1;
-		for (Entry<String, Document> pair : pages.entrySet()) 
-		{
-			String name = pair.getKey();
-			String pageName = "page" + i + ".xml";
-			
-			Element pageE = pagesXmlDoc.createElement("Page");
-			pageE.setAttribute("ID", String.valueOf(i-1));
-			pageE.setAttribute("NameU", name);
-			pageE.setAttribute("Name", name);
-
-			Element pageSheet = pagesXmlDoc.createElement("PageSheet");
-
-			ModelExtAttrib modelAttr = modelsAttr.get(name);
-			
-			pageSheet.appendChild(createCellElemScaled("PageWidth", modelAttr.getPageWidth(), pagesXmlDoc));
-			pageSheet.appendChild(createCellElemScaled("PageHeight", modelAttr.getPageHeight(), pagesXmlDoc));
-			pageSheet.appendChild(createCellElem("PageScale", modelAttr.getPageScale(), pagesXmlDoc));
-			pageSheet.appendChild(createCellElem("DrawingScale", 1, pagesXmlDoc));
-		
-			Element relE = pagesXmlDoc.createElement("Rel");
-			relE.setAttribute("r:id", "rId" + i);
-			
-			pageE.appendChild(pageSheet);
-			pageE.appendChild(relE);
-			pagesRoot.appendChild(pageE);
-			
-			Element relationship = pagesRelsXmlDoc.createElement("Relationship");
-			relationship.setAttribute("Id", "rId" + i);
-			relationship.setAttribute("Type", PAGES_TYPE);
-			relationship.setAttribute("Target", pageName);
-			pagesRelsRoot.appendChild(relationship);
-			
-			//Note:Each page rels is created with the skeleton as they are constants
-			
-			//write the page docs
-			Document xmlDoc = pair.getValue();
-			writeXmlDoc2Zip(zip, VISIO_PAGES + pageName, xmlDoc);
-			i++;
-		}
-		
-		pagesXmlDoc.appendChild(pagesRoot);
-		pagesRelsXmlDoc.appendChild(pagesRelsRoot);
-		writeXmlDoc2Zip(zip, VISIO_PAGES + "pages.xml", pagesXmlDoc);
-		writeXmlDoc2Zip(zip, VISIO_PAGES + "_rels/pages.xml.rels", pagesRelsXmlDoc);
-	}
-
-	private void writeXmlDoc2Zip(ZipOutputStream zip, String name, Document xmlDoc)
-			throws IOException, UnsupportedEncodingException, TransformerConfigurationException,
-			TransformerFactoryConfigurationError, TransformerException {
-		zip.putNextEntry(new ZipEntry(name));
-		
-		Source source = new DOMSource(xmlDoc);
-		StreamResult result = new StreamResult(new OutputStreamWriter(zip, VSDX_ENC));
-		Transformer xformer = TransformerFactory.newInstance().newTransformer();
-		xformer.transform(source, result);
-	}
-
-	private Element createCellElemScaled(String name, double val, Document xmlDoc)
-	{
-		return createCellElem(name, val / mxVsdxUtils.conversionFactor, xmlDoc);
-	}
-
-	private Element createCellElem(String name, double val, Document xmlDoc)
-	{
-		Element cell = xmlDoc.createElement("Cell");
-		cell.setAttribute("N", name);
-		cell.setAttribute("V", String.valueOf(val));
-		return cell;
-	}
-
-	protected Element createRow(String type, String index, double x, double y, Document xmlDoc) 
-	{
-		Element row = xmlDoc.createElement("Row");
-		row.setAttribute("T", type);
-		row.setAttribute("IX", index);
-		row.appendChild(createCellElem("X", x, xmlDoc));
-		row.appendChild(createCellElem("Y", y, xmlDoc));
-		return row;
-	}
-
-	private Element createGeoElem(mxCell cell, Document xmlDoc)
-	{
-		Element geoSec = xmlDoc.createElement("Section");
-		
-		geoSec.setAttribute("N", "Geometry");
-		geoSec.setAttribute("IX", "0");
-		
-		//now just create a rectangle
-		geoSec.appendChild(createRow("MoveTo", "1", 0, 0, xmlDoc));
-		geoSec.appendChild(createRow("RelLineTo", "2", 1, 0, xmlDoc));
-		geoSec.appendChild(createRow("RelLineTo", "3", 1, 1, xmlDoc));
-		geoSec.appendChild(createRow("RelLineTo", "4", 0, 1, xmlDoc));
-		geoSec.appendChild(createRow("RelLineTo", "5", 0, 0, xmlDoc));
-		
-		return geoSec;
-	}
-
-	private Element convertMxCell2Shape(mxCell cell, mxGraphModel model, Document xmlDoc, double parentHeight)
-	{
-		mxGeometry geo = model.getGeometry(cell);
-		
-		if (geo != null)
-		{
-			Element shape = xmlDoc.createElement("Shape");
-			
-			shape.setAttribute("ID", cell.getId());
-			shape.setAttribute("NameU", "NotYet");
-			shape.setAttribute("Type", "Shape");
-			
-			double hw = geo.getWidth()/2, hh = geo.getHeight()/2;
-			
-			shape.appendChild(createCellElemScaled("PinX", geo.getX() + hw, xmlDoc));
-			shape.appendChild(createCellElemScaled("PinY", parentHeight - geo.getY() - hh, xmlDoc));
-			shape.appendChild(createCellElemScaled("Width", geo.getWidth(), xmlDoc));
-			shape.appendChild(createCellElemScaled("Height", geo.getHeight(), xmlDoc));
-			shape.appendChild(createCellElemScaled("LocPinX", hw, xmlDoc));
-			shape.appendChild(createCellElemScaled("LocPinY", hh, xmlDoc));
-			
-			shape.appendChild(createGeoElem(cell, xmlDoc));
-
-			return shape;
-		}
-		
-		return null;
-	}
-	
-	private Document convertMxModel2Page(DocumentBuilder docBuilder, mxGraphModel model, String name, ModelExtAttrib modelAttrib)
-	{
-        Document xmlDoc = docBuilder.newDocument();
-
-        Element root = xmlDoc.createElement("PageContents");
-        root.setAttribute("xmlns", XMLNS);
-        root.setAttribute("xmlns:r", XMLNS_R);
-        root.setAttribute("xml:space", XML_SPACE);
-        
-        Element shapes = xmlDoc.createElement("Shapes");
-        root.appendChild(shapes);
-
-		mxGraph graph = new mxGraphHeadless(model);
-		Object defParent = graph.getDefaultParent();
-		
-		for (Object c : model.getCells().values()) 
-		{
-			//top-most cells
-			if (model.getParent(c) == defParent)
-			{
-				Element shape = convertMxCell2Shape((mxCell) c, model, xmlDoc, modelAttrib.getPageHeight());
-				
-				if (shape != null)
-					shapes.appendChild(shape);
-			}
-		}
-		
-		xmlDoc.appendChild(root);
-		return xmlDoc;
-	}
-	
-//	public static void main(String[] args) 
-//	{
-//		try {
-//			String mxFileXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><mxfile><diagram name=\"Page-1\">7ZZbk5owFMc/DTPtixPC/VG87G697Ky43t4CREgFwkAE3E/fIFGhzs5uO+1Lpzij8sv/5JCT849KyiCuHjKUhjPq40iCwK8kZShBKMtA5x81OTVEM60GBBnxhegGHPKGBQSCHomP846QURoxknahR5MEe6zDUJbRsivb06ibNUUBvgOOh6J7uiY+C6/rAreBR0yCUKQ2NTHgIu8QZPSYiHwSVPbnqxmO0XWuBuQh8mnZoPMUykgCfan+DiRlkFHKOugyEFcDHNU1v5SzyT/+nPi6vAwn7DfioXh4droULMiQT/hkAxrR7IwURTFN1ZUUe0+iqMVVzdV1lfMi96unIYcyv4mQiyP7Wr2LPqEJz2DzMqV1ppzhxCPRl2I1tod0Fowey/miohPzZbPmTx/Pl6vTOtqGO2Tt8Xg6cR/SiRcXnvL81lfdRRrow+EgBIN0ZPK+cRf549bRBugtf3aG2/jbqPy+nMtamRqmBystIX1jpmTqCmhbPJKg7a/mxgId1xqkQXZUx0cHLYnMVnHKk2+exjO222/lV6Iux/bhwANesgV/n9q41KitR88HDS4T6lS76fYVeX6xKGweaShF/4XrNpa10wyiFRs9n0RjL4cJ/lqvnmX0gFsl5IZyFViPpMgjSTDF+3obQQ9A0Llk8yayKWM0/lC2EF39jipkcSS2TAQsafq+/LyZuG4b3kh2GRKGHR5W72XJj47r4i4uk3sW0Di9b1DRswXOGK5a6L5hb237gGmMWXbi95cQaDTznC4HjtzTrNYl0pQ312vAbFjYMrxhGj1VnDfirAmuyd41Ut2ijZc+ZTPlQ5sJe/zkMAMgXzXaDoP/HfZrDrPOr3/RYaCnK3/TYYYs92DHYzqwuh67s1jtQv3eZFDXe8YfMtmZt35Oha71/+XMfwA=</diagram><diagram name=\"Page-2\">nZTbkqIwEIafhqrdGwuIEbwUlJldD1Mjjqe7CAGyBkKFCDhPv0HigbWmdmtzofD132nS6W4NuGn9wlGezFmIqWbqYa2BsWaahqEP5F9Dzi2B9rAFMSehEt2BTz6xgrqiJxLioiMUjFFB8i4MWJbhQHQY4pxVXVnEaDdqjmL8BPwA0We6IaFIbufS74ZXTOJEhbahMhxQcIw5O2UqnmaC6LJac4pue7WgSFDIqhZdtgATTR9pzbOuAZczJjroakhrF9Mm59d0tvG9fxPfjsdxJv7D31QfL87XhMUchURu5jLKuEQZy6TFiQilVyRTcQBRKFMBnLII6x9jCQ35QtEBU+eWuD+2kBnKmyCFwFlA6Ldy7TljNo8nr9ViWbOp/b7dyA9PF6v1eUN3yR4NI+zNpoeXfBqkZQDePkf9wzKPB+Oxm+huPrFlyRyWxevOhy76LN788S79Oal+rRYGrHLLDswaZmRkzQHvr3W4wxPNdML1wlqi0waaLOanvnfy0YoYYp3mMvj2hzcX+2hnfJD+ynOOR+nwzpfyd+bgCjJnQN+O0FxlzK/3s90HCsJyWTrS0wLl6F3qtsPhHloElttBMaVeUJgZ/t6cXnB2xA8pBBjacNhYchSQLJ7hqLlBvaebemcZ9l3kMCFY+lfZUhX0F6pEpFRdmXJYsfxr+eUycVMxsoacKiEC+9KtuctKTo3b4a4NZvSgbUGJn4tT1WuJucD1A3ou1nvJvmCWYsHP8v3qYlk9u91JjSUDmj0wfFjKXN17HkDYU8MseWh4s2/0gJo3atbEt4BfNlJTp20vddtc8odOV7qH0XrhvwE=</diagram><diagram name=\"Page-3\">7VhZc6pIFP41Vs08jNWs4qMgCmJwwS2+ITTQgjQiCvjrp1GMEuNNcm9y52EuVZb0x1n6LN9hqTHSJuvGZuQ9YRsGNRrYWY1p12iaEliG/BVIfkaaAn0G3BjZpdAVMNARliAo0T2y4a4imGAcJCiqghYOQ2glFcyMY5xWxRwcVL1GpgvvAMMyg3t0juzEK1EKgOsFBSLXK10LXHlhZVq+G+N9WPqr0YxzOs6XN+aLrTOw80wbp2foZIKRa6BVK85BjZFijJMKdLmwySQYFDm/pPPsv/Mx4ZfwYhgmP6FfFnOX5JeEubFpI2JMwgGOCRTikFwRHRQEr6DDzs7UNllTZBGYKxiILzl7JbpLYuzD12BkWih0+9Apdv4PXQdNtnlzCFcZEScJ3rwnNS7L+EOhCY4einjJJijjOUUBiyyRvImphxJoEANFklLClJeYLk1F1Rs8Ae/LUVboAOMEZjfQfXmuRepCvIFJnJN1qUIas87dbrdxNluyssHXqdtYyrKm147naFAvdbybdqd5UGe4km4l1dwX7w/7iOBlK32oy5if6TJCOAbwvMXcthr9fqt5ZlQ42SUwtFDw1/Q4o/s7Tu3L3kyfqLiPQu0I2OQI0iiftSg7kKmnXfyUAzfJUSruAkNfzOZ6aA9zRPUniMTa6wuU6pITtSf7Mh5pZMrRnXZ3LIlTw3GXrGioNVocj4zplklpNJCsYxtsMm2kzAiuAlqX2rrVOlLbp+d11JXNiewfFQpwviqrvanbUoW95+XeSBLVVbZlW3/fkYakg6ZYpmH9fubc0OIDJPoy5tC/xpySGjxXBwK4HtRHqUExoE4J300N9suowXyaGsms329jNZWHualsQjP2XBIvqUQHDccuBjN/O98e1kwnsRR52PUTet7dQMr3hC4fL8brjdhLRoqQdri9gnbdrjZfxPm2pVtzLV2uWvthDxvEmBkO+NVhTM6W5Ne0h5OQ2crrcGxIiOKDrDcf6a1+vt5nKlZkZ75Ie67U7LmtZicKPQ1trXgiA8VsRLLdWOqgZdmxRvbZcxqdwTO9MfZtNQol1ul1lCRbehvCJsjP06bRnhdVojvhYDO2nhcsyIxlkOtPPmg6WVM9tqC0h+CoUz0rRkvF97I5Bm1nciDWQ01YeAtrIg18q6kc+hPWN1WjGAKr7uk2z7T/kPSXSVqqNKk6Rd+QlLkjKcMIdZb/r25g3JexlP80S8OlMpax6spy0c2eb1miMuMTco6HvaC7lHr5DBzIHBFNzbfC+cZkomXjSE8XAfb4xmDuSl24Fhl77tOcMBEMaGlcEoN2Yyp2MlXr7RXTHTD6lIYi5/e6OmWtbDZlc07bESeaun1m9/zAeOLMLGL6sqt3aHmBls6JgiwEqUYdJW2BRlZf6SM3ygzlyDUODkmA2PQKNUXacf2Yo/S+LR/lddQZgaHZJQ2rdeJ1pBupbw9U7KwF29zr6WxaBOfM9i4eNzrPlvKHZ/8XnvHf+fzMVx6ZKZaq08JNufjvDq7xXcFRdPVtgOGZOsf8ztCEu/n4MvAapJ1hePkyQB7GHg/A6yt2QQszTlrFB4CbF06SJkRe7VsBckMCb5BtF/4K+xfRVYAt/615QTU5brW6mxegDm4JUTwgvjUwHokVu6yE9mqGPNCDtguNMlllcI/mygML1cHyeojQp6xnKFmcLZSr58pqCGNE+gDGpRHSlXF+o1Asn6vLqsqjdt7hfWzBCqNJnlyYVHhQ5ODzLR/DwEzQofp1563GfmTvYpU0jJnf6EYYhcnufc3rroaFxk+MmLcY9yEPr3l+st/8Wpun2cF+yOZpSpzT+J7g1W3phvQUuLlZChTN0tVaYsfZkY758UbKQfXSHx8fZSf85qPcxdL1K+gJ/xc=</diagram></mxfile>"; 
-//					//"<?xml version=\"1.0\" encoding=\"UTF-8\"?><mxfile><diagram name=\"Page-1\">7VhZk6JIEP41Ruw+jFEUp4+CKFfjgVf7hlAcghQiCvjrt1C7G7XdmZ7Y2d2HIcKIyqzKrDy+ryhs0dK2HGR2GrxgF8UtCPZ5FaMW3WtB6CLPPsT5t7MKEkWLllu0lGGcX0bbUkJxbRS6FwtQL4L9J7PUeRakdoaS/EcM4KPB1UcjSj+z3ZDMSzjGGVElOCEzohfG8Z3quHdLtUdkigixvUaxaDuRn+FD4t4t3ecZjtC9MrWdMPEN5NXBfINt0GE6jUf4WCPiPMfb762ahH7wXVdTnD5dEuTb+JrPOQtUFw4QqQjCHFnEQV2kgvT3PadF6OZBbdPmOaK8lPOIshyVjQpf+zFAeIvyrCJL7P213O+q2jBA1xTqbnGgTbMXfXHdhUgsBG3+or3uAKHQZpupXKeryzTPtalmnrCJETK4wuRzyNCPkIE/A5kWpGnAcQ7dxA38Pm4CO6032ecoccL4j9lpDo09qxpyMDenKjbCRD8BJj+BIq3mXcqNZepln71UwM+rsBD3sWUu5wszcUdVSBnTkOSrGQKl+mSganIk47F+QkToDSaSOLM8f8WIltqC4mRszXZ0AcOh5Jx6YFvqY2VO9CqAptQzne6J2r28btKBbE/l6KRQgI1UWdVmflcVDkFQBWNJVNfljun++cAAUg5IMTTv/Ps0aGD8Bxjx39OAokGbEv6OBlecc2wbCODjob6Cc+ZX4pz+Ms7zuWH0sFrIo8pWtomdBT4pASlrPxxNfAzm0W6xO27ofu4o8mgQ5XAx2CIqCoQBly0nm62o5WNFKPrsQQn3g4G+WGbVrms6C71YrbuHkYYt4sxOhtz6OCGjFfl13NE0oXfyJplYUkhxcaktxmbXqDaHUsWK7C2WheZLHc3vdvppEujhzsmmMlBsPpVdfmWCruNmOolT8/j+8BVurUNPTROJ8bS+kperYEuogbhF0bF6i7o1sJ8MtxPndcmA0lrFlfkSgY5XdtRTF0kHBE4mpTlZuFKioFxg0POmR+I90YVlsHSm0jByOsrRmDKRrVo1o9eDou4B3fvNuH/+xUPTQpvhbt48HapNwQbl6K9Qjv2VlOO+TLlkpUxkrPqyXEMziBxHVOZcTsZ4pMWDlaRVc3Ak54Ro65GTLLY2na74E5wtYxxw/HDhSwO0EWl3EUFWmAoWcnQ2z0CPn4n9UtW1g2L7Q9qcQSSykTYwKWftMgVTsfqebKKru1fmwA2tF9YuU9qQfbMP5WW48s58YhAodOok6ctw7BiKEfppaSknlj96pABiJ6jNFGnPGhlLmYYrn+RN2h+DkT0g6NP72SY1rSJyhyr2NoJrH8xiPquT8+YHH0/4/quj/CbN/5803NMr/E9n0bhFcjcvVIqh2lBoVJr7SqT8L4uUgnwb3ERKc3Sbpb8aKXJ9dBPYW+jC8+8kfMgcdNOKxmH1fvrwBFsoca3wVM+Qe8nz04hQzDs/Z4zaWd7NMlw0PrJIsULHjrtx6CdEvQ1dt96v9v+2dB1jJ/qMvFSHZdfrB/KCNmgCsL4rfcbeZ8vqKG9SuyP0E7u63Na1WNfknpH8iYdblt8zGp6rXob58uLhKr3eSCOUhQRRKLs6IQ3OqoZBLb7eircm556TCvgob+D8RxGcodjOw2MTdmdT0km7aZXiMMn3Dc+jWvHzZH1w8Mihs4POF43OxGPuyHZJ5s7FW2bY8/akdE0npNagcaILFGQev1HfS/sZpYn48S/KZfnHfzC0/Bc=</diagram><diagram name=\"Page-2\">jVPbcpswEP0aZtqHMiBZBj+am5P6NsHENn6TQVxqgRiQAefrKwxOaDtpqwcNe3bPrpY9K0EzaxclLpI1CwmVgFLxGyUStCQAQhLhK+Xf7hAQgARtCZolY7z/ylqT0I6Uhj1D6YKA84lXvXuVApck5/9DAH8ShhyjV8YlDlPhNxllpYBylguPEaWUPiAJwDOMwigSeF2F7bMlQFUYFJ8JNXBwiUt2zcPfUlQJLroiFSd5kNIv9d4xLLaO7adm47Zsqb8cD+Lx2cbb3w7UT054FhFntTwvimWQ1QHcvs0nZ7eIp5ZlJopZ2HpOgrNbPfk7ZOK3aruz/Oy73fzwNipqCk0PQIvydK6tYTnZK8gntgSMcL/RXHw9IMDi8jpxrjvspSrfZ4Uofnx21vwU+eprOvEc43IRhJfSFffKIA1ixpRuLwh4Odu1p5X/ioOwdmtDMDVYz19E3HE2OyEtRfVxWi2pE1QgJ1+77nnJLmT0CyFBOpp1ngIHaR6vSNQNRZEVoPxyVP0jyGCcs+yfYW4aJ39JlvCMDiMbCB4rPg+/D5N0IlKE1SQpJztB62bZCK2/N3dIQ550eWWka0jAvbhqUnLSjvQ2qHNBWEZ4eRMhuBrE9w51xIQMbXTanagy7OFmKCMsiJA87dFHAU2T9R65DQgCMpyNjj5ekk5w/Z48zI99vPtG2wztnw==</diagram><diagram name=\"Page-3\">7VVdb5swFP01SNvDkLExkMdCQtvloypJ8/VmwAEWgxE4QPrraxLaknXtPrSnaSAh7rn3+HLxObKCnLS5LkgeT3lImQJBKY6MKmioQBjSHTkw8eUEQQkoaKQgp+BcnN/SxqGsJSXhmQHaIui+k9VOWZCTgmbiVwjwLaFbo/eVUUHCROYdznhxghBClqX7CrJ3CWM9XMe+YegSr8qwuR1KUJMBIz5lNgn2UcEPWfhcn/FMdrDLmORtp1LQLEjYp2rp2kM+jUY39cxr+Ni6X6/kBOlssTyu2CbeksGOupOxf52Pg7QK0N3jle57eWQMh04MnHxkZTTwvfJmM8cOeSzv5sNN+nVUf1vMNFznphXABmfJlTlFhb4EeENHCrTD5cz0yGGFIY+Kg+4e5mSRaGKZ5rL5+tadiu1uoz0k+sK193tJuC88+ZzYtMbcNtjdHsNFxufNdrJ5IEFYeZUtmSaqru5l3Xow2GIzwdXaKMfMDUqY0c/t9KLge9r7hRBiH8E2k5MgyaIJ3bU7A1QAwcWlWa9FNheCpz8t85Io/mCxWKSs27KOsOD5++WnzaStkoCM6jgRdC5p7V7WUvAvw62SUMTtuuoAYImeBVbRQtCmp7lOodeUp1QUR1lCyk6AL1BLjGk3hQxNy1T1M1x3XWSEgaWedQ+eG0DzGTl2CNBUPOhdWt8ord7OXvmxb9Cf+KbT+3eWMQEJdbNvGfjfMr9nmcHp/hctA1QD/WXLQMNQzTeWae1gXFjG1DQVXljGAINLy3zgGBm+nmKnXO8MRKMn</diagram></mxfile>"; 
-//					//"<?xml version=\"1.0\" encoding=\"UTF-8\"?><mxfile><diagram name=\"Page-1\">3ZZZs6JGFMc/za1KHnKLfXkEAUFARAWFN5Zm33f89Gm8zuROMpOkUqk8BAW7/6fP6fX85A3flcu+85pEr0NQvGFIP6wFeMOFNwwLQeSNxfDLU8Kg8IaLb/iuq+vho1QuO1BsTmn44YFsjTDpB1b0aUUarwPV8HccsD86vGJ8GmXceWEK7bu6qDsoVXUFLXyUFsUX6Q3DSZ/1QxLqUx8uigBFFFa8Io0rWA6gP4At+cLzQcF7QR539ViFv4vZJ16z9doPoArS4qfFjvy86WfhhHhyaywH6Q3jo4Gd4JQcrc4dt91nokFjNNQnCz1eS7Ng1W52L46XYaRUQ92w4cMv2dCEv5uwjFLHshSMkQGwPz1sERaje7DcSb0h3GiPE6TQifQCZJq9wBWUcLaVSXBC/ChbgH6UpzZIEEO/tC7rOpxSs+i0GuGIM9Z0WfoKmEFWBv5B5ptGzIlcTmCvqv3YC7orH+oTjNjRiklmBiz5whH0dquu7HCSLTlUZIEJNUC21u0ORy7RdOffsQMjJOKgHsx4tTSTS82M3x1NpbG7khKQWbLqW2jVgqPiXGsJdYzySpKOTIJyTmcCru8vXNcX59jrdemguvbtyvkP/VifQqE8OiRfHw0uX4z97pAHaCCwfY6t1NX3Zt3d7bk1MClG6rFh9ru2nKvcDQrK4ps41B4VHOMycZla9L3icLs7rAOBW3NR5JMRmcXGw7RoyeZg9K4SemEjD4ujc3y1b2fQEPA4SuQSw+dcZEb/yNhjEmlV7sGtlrDHzRlb/WjpqMcYN7iK8HtDcHdiKftKc0KRnpSbJ9/4WbFPkxg+WiM0DuZhCbJhVr26uw/VDg+sjrfo6SF2F9ViuSATH3xzjgKqHU/xeTUIRqDsoxLu+KwtTgEIkGoRb6mnsIdJOsAuO31YdZXRBs0FnoY6Gv2IHCDZV7xciT5BWpk952m2nZRJ6LR5Swlc+HnLBtANaeAV3CsRyjQMi+dRH7o6B58SiH1+NkvjBWkVayDaUhJ5RzDkmwtlfmvE18NQl3/Z7JzGyZ8ES4ayeCXsy+FaNz9u/sxcsCEEgbU5SQdwgW5b4s6QdF8nd0vDIXmGoaH2wZXJK8YXV14CXCCwfGLPi1R7UJdg6FbYxOtfIPoqbY4JeE0KVgkWfUfoD31+9QprNE69Ux/qlx4o8h1hP10vp/XFQ4x5J9lP88U/4xMWXgT9Pk3xf0JTuPNU4LNR9EekRiCKnvpXpGL/HUHJPOVliWSyfUWRFTv4KLmjMlwmsA7H/Q2rJGExR+vOsCEtRghVJShkZ5af+mslE1GFa9O2dIMCH4cFOmQ+A7RHojxguVJCIVPszdYzomgZFE7eDeMZ904q6HVSDHOGNd3K5hkpPccUZlpSyYovd1WOyDTCInqwVH6fYBOmooILsCprr2N+esyBBj3RJij9DUY+3vkQUrzLXAuIUN6MU1MzzXFDqG4qhSUPvdiYYLz0ZXsuc3PirVo+88OO1/jgeJ84Xs3YM+9kieBoV3F1lNvZSseuNB+x6wcuLTvOTGl3T+cPqS7yF2LpyapymqHAsNuSuRdR46w5QWs5YqpD16t0G2YH0nAVo+Cd+hTBUTbwXp3YWvsu4ySTqRlZmXtX2guOkB6T0fekaF0Iwz01RXHGATvsQLcryzxmPSaHzhKYtz21VvlmUdtfDLhdUD8jKiwf2v4AEXqBotr5QGPtbbulc2GNM9dYZ3JHXyjT4NIDS2dBm1WXi7UL7godqGWropU7D0ihzrZBM4uqp8XJlJVFnz3rjoytM7S5aJyxIjZcC0kQZT+2FouS2gXkZ+9YC6sN9lfY3c29lg46295tZRCNhRDFXQcc7WvVzoSe4O2VPOdrw8A0kk619vP3IEkQNMFG/0dIQoBRv1Hy34AiiqBf6PeJiSiJvRPfMJFgyXf8GwwSGPlOkH+Cvu0F5utL6tP26RUXF38F</diagram></mxfile>";
-//
-//			FileOutputStream fileWriter = null;
-//		    fileWriter = new FileOutputStream("g:/work/test.vsdx");
-//			
-//		    new mxVsdxExporter().exportMxFile(mxFileXML, fileWriter);
-//		} catch (Exception e) {
-//			e.printStackTrace();
-//		}
-//	}
-}
diff --git a/src/com/mxgraph/io/vsdx/geometry/RowFactory.java b/src/com/mxgraph/io/vsdx/geometry/RowFactory.java
deleted file mode 100644
index 51f377a4fa97c34a72f9ad4d223c773d24c72b8c..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/geometry/RowFactory.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.mxgraph.io.vsdx.geometry;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class RowFactory 
-{
-	private static int getIndex(Element elem)
-	{
-		try
-		{
-			return Integer.parseInt(elem.getAttribute("IX"));
-		}
-		catch (Exception e)
-		{
-			//Some non-standard visio file omit the index when it is one 
-			return 1;
-		}
-	}
-	
-	private static Double getDoubleVal(String val)
-	{
-		try
-		{
-			if (val != null && !val.isEmpty())
-			{
-				return Double.valueOf(val);
-			}
-		}
-		catch (Exception e) 
-		{
-			//nothing
-		}
-		return null;
-	}
-	
-	public static Row getRowObj(Element elem, List<Row> pRows) 
-	{
-		String rowType = elem.getAttribute("T");
-		int index = getIndex(elem);
-		String del = elem.getAttribute("Del");
-		if (!del.equals("1"))
-		{
-			Row parentObj = null;
-			
-			if (index <= pRows.size())
-			{
-				parentObj = pRows.get(index - 1);
-			}
-			
-			Double x = null, y = null, a = null, b = null, c = null, d = null;
-			String formulaE = null, formulaA = null;
-			
-			if (parentObj != null)
-			{
-				x = parentObj.getX();
-				y = parentObj.getY();
-				a = parentObj.getA();
-				b = parentObj.getB();
-				c = parentObj.getC();
-				d = parentObj.getD();
-				formulaA = parentObj.getFormulaA();
-				formulaE = parentObj.getFormulaE();
-			}
-			
-			ArrayList<Element> cells = mxVsdxUtils.getDirectChildElements(elem);
-			
-			for (Element cell : cells)
-			{
-				String name = cell.getAttribute("N");
-				String val = cell.getAttribute("V");
-				
-				switch (name)
-				{
-					case "X":
-						x = getDoubleVal(val);
-					break;
-					case "Y":
-						y = getDoubleVal(val);
-					break;
-					case "A":
-						a = getDoubleVal(val);
-						//TODO check the reason for this
-						//Special case for PolylineTo where we need the F attribute instead of V
-						formulaA = cell.getAttribute("V");
-					break;
-					case "B":
-						b = getDoubleVal(val);
-					break;
-					case "C":
-						c = getDoubleVal(val);
-					break;
-					case "D":
-						d = getDoubleVal(val);
-					break;
-					case "E":
-						formulaE = val;
-					break;
-				}
-			}
-			
-			switch (rowType)
-			{
-				case "MoveTo":
-					return new MoveTo(index, x, y);
-				case "LineTo":
-					return new LineTo(index, x, y);
-				case "ArcTo":
-					return new ArcTo(index, x, y, a);
-				case "Ellipse":
-					return new Ellipse(index, x, y, a, b, c, d);
-				case "EllipticalArcTo":
-					return new EllipticalArcTo(index, x, y, a, b, c, d);
-				case "InfiniteLine":
-					return new InfiniteLine(index, x, y, a, b);
-				case "NURBSTo":
-					return new NURBSTo(index, x, y, a, b, c, d, formulaE);
-				case "PolylineTo":
-					return new PolylineTo(index, x, y, formulaA);
-				case "RelCubBezTo":
-					return new RelCubBezTo(index, x, y, a, b, c, d);
-				case "RelEllipticalArcTo":
-					return new RelEllipticalArcTo(index, x, y, a, b, c, d);
-				case "RelLineTo":
-					return new RelLineTo(index, x, y);
-				case "RelMoveTo":
-					return new RelMoveTo(index, x, y);
-				case "RelQuadBezTo":
-					return new RelQuadBezTo(index, x, y, a, b);
-				case "SplineKnot":
-					return new SplineKnot(index, x, y, a);
-				case "SplineStart":
-					return new SplineStart(index, x, y, a, b, c, d);
-			}
-		}
-		return new DelRow(index);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/mxPropertiesManager.java b/src/com/mxgraph/io/vsdx/mxPropertiesManager.java
deleted file mode 100644
index b24e201a2fa730dec75e314ff297a61c8d90e520..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/mxPropertiesManager.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- * This is a singleton class that stores various global properties to document.<br/>
- * The properties are:
- * <ul>
- * <li>
- * document's colors
- * </li>
- * <li>
- * document's fonts
- * </li>
- * <li>
- * default text style
- * </li>
- * <li>
- * default line style
- * </li>
- * <li>
- * default fill style
- * </li>
- * </ul>
- */
-public class mxPropertiesManager
-{
-	/**
-	 * Map with the document's colors.<br/>
-	 * The key is the index number and the value is the hex representation of the color.
-	 */
-	private HashMap<String, String> colorElementMap = new HashMap<String, String>();
-
-	/**
-	 * Map with the document's fonts.<br/>
-	 * The key is the ID and the value is the name of the font.
-	 */
-	private HashMap<String, String> fontElementMap = new HashMap<String, String>();
-
-	/**
-	 * Best guess at default colors if 0-23 are missing in the document (seems to always be the case for vsdx)
-	 */
-	private static final Map<String, String> defaultColors = new HashMap<String, String>();
-	
-	static
-	{
-		defaultColors.put("0", "#000000");
-		defaultColors.put("1", "#FFFFFF");
-		defaultColors.put("2", "#FF0000");
-		defaultColors.put("3", "#00FF00");
-		defaultColors.put("4", "#0000FF");
-		defaultColors.put("5", "#FFFF00");
-		defaultColors.put("6", "#FF00FF");
-		defaultColors.put("7", "#00FFFF");
-		defaultColors.put("8", "#800000");
-		defaultColors.put("9", "#008000");
-		defaultColors.put("10", "#000080");
-		defaultColors.put("11", "#808000");
-		defaultColors.put("12", "#800080");
-		defaultColors.put("13", "#008080");
-		defaultColors.put("14", "#C0C0C0");
-		defaultColors.put("15", "#E6E6E6");
-		defaultColors.put("16", "#CDCDCD");
-		defaultColors.put("17", "#B3B3B3");
-		defaultColors.put("18", "#9A9A9A");
-		defaultColors.put("19", "#808080");
-		defaultColors.put("20", "#666666");
-		defaultColors.put("21", "#4D4D4D");
-		defaultColors.put("22", "#333333");
-		defaultColors.put("23", "#1A1A1A");
-	}
-	
-	/**
-	 * Loads the properties of the document.
-	 * @param doc Document with the properties.
-	 */
-	public void initialise(Element elem, mxVsdxModel model)
-	{
-		//Loads the colors
-		if (elem != null)
-		{
-			NodeList vdxColors = elem.getElementsByTagName(mxVsdxConstants.COLORS);
-	
-			if (vdxColors.getLength() > 0)
-			{
-				Element colors = (Element) vdxColors.item(0);
-				NodeList colorList = colors.getElementsByTagName(mxVsdxConstants.COLOR_ENTRY);
-				int colorLength = colorList.getLength();
-	
-				for (int i = 0; i < colorLength; i++)
-				{
-					Element color = (Element) colorList.item(i);
-					String colorId = color.getAttribute(mxVsdxConstants.INDEX);
-					String colorValue = color.getAttribute(mxVsdxConstants.RGB);
-					colorElementMap.put(colorId, colorValue);
-				}
-			}
-	
-			//Loads the fonts
-			NodeList vdxFonts = elem.getElementsByTagName(mxVsdxConstants.FACE_NAMES);
-	
-			if (vdxFonts.getLength() > 0)
-			{
-				Element fonts = (Element) vdxFonts.item(0);
-				NodeList fontList = fonts.getElementsByTagName(mxVsdxConstants.FACE_NAME);
-				int fontLength = fontList.getLength();
-	
-				for (int i = 0; i < fontLength; i++)
-				{
-					Element font = (Element) fontList.item(i);
-					String fontId = font.getAttribute(mxVsdxConstants.ID);
-					String fontValue = font.getAttribute(mxVsdxConstants.FONT_NAME);
-					fontElementMap.put(fontId, fontValue);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Returns the color of index indicated in 'ix'.
-	 * @param ix Index of the color.
-	 * @return Hexadecimal representation of the color.
-	 */
-	public String getColor(String ix)
-	{
-		String color = colorElementMap.get(ix);
-		
-		if (color == null)
-		{
-			color = mxPropertiesManager.defaultColors.get(ix);
-			
-			if (color == null)
-			{
-				return "";
-			}
-		}
-
-		return color;
-	}
-
-	/**
-	 * Returns the font of id indicated in 'id'
-	 * @param id font's ID
-	 * @return Name of the font.
-	 */
-	public String getFont(String id)
-	{
-		String font = fontElementMap.get(id);
-		
-		if (font == null)
-		{
-			return "";
-		}
-		else
-		{
-			return font;
-		}
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxConnect.java b/src/com/mxgraph/io/vsdx/mxVsdxConnect.java
deleted file mode 100644
index 9cf6d23b394b12c04b3697ec559fb190b944b7a5..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/mxVsdxConnect.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import org.w3c.dom.Element;
-
-/**
- * Wrapper for connect element
- * See https://msdn.microsoft.com/en-us/library/office/ff768299%28v=office.14%29.aspx
- *
- */
-public class mxVsdxConnect
-{
-	protected Element endShape;
-	
-	/**
-	 * ID of edge
-	 */
-	protected Integer fromSheet = null;
-
-	/**
-	 * ID of source
-	 */
-	protected Integer sourceToSheet = null;
-	
-	/**
-	 * Where connection is made to source
-	 */
-	protected Integer sourceToPart = -1;
-	
-	/**
-	 * ID of target
-	 */
-	protected Integer targetToSheet = null;
-	
-	/**
-	 * Where connection is made to target
-	 */
-	protected Integer targetToPart = -1;
-	
-	protected String fromCell = null;
-
-	public mxVsdxConnect(Element connectElem)
-	{
-		String fromSheet = connectElem.getAttribute(mxVsdxConstants.FROM_SHEET);
-		this.fromSheet = (fromSheet != null && !fromSheet.isEmpty()) ? Integer.valueOf(fromSheet) : -1;
-		
-		String fromCell = connectElem.getAttribute(mxVsdxConstants.FROM_CELL);
-		addFromCell(connectElem, fromCell);
-	}
-
-	protected void addFromCell(Element connectElem, String fromCell)
-	{
-		String toSheet = connectElem.getAttribute(mxVsdxConstants.TO_SHEET);
-		boolean source = true;
-
-		if (fromCell != null && fromCell.equals(mxVsdxConstants.BEGIN_X))
-		{
-			this.sourceToSheet = (toSheet != null && !toSheet.isEmpty()) ? Integer.valueOf(toSheet) : -1;
-			source = true;
-		}
-		else if (fromCell != null && fromCell.equals(mxVsdxConstants.END_X))
-		{
-			this.targetToSheet = (toSheet != null && !toSheet.isEmpty()) ? Integer.valueOf(toSheet) : -1;
-			source = false;
-		}
-		else if (this.sourceToSheet == null)
-		{
-			this.sourceToSheet = (toSheet != null && !toSheet.isEmpty()) ? Integer.valueOf(toSheet) : -1;
-			source = true;
-		}
-		else if (this.targetToSheet == null)
-		{
-			this.targetToSheet = (toSheet != null && !toSheet.isEmpty()) ? Integer.valueOf(toSheet) : -1;
-			source = false;
-		}
-		
-		findToPart(connectElem, source);
-	}
-	
-	protected void findToPart(Element connectElem, boolean source)
-	{
-		String toPartString = connectElem.getAttribute(mxVsdxConstants.TO_PART);
-		Integer toPart = (toPartString != null && !toPartString.isEmpty()) ? Integer.valueOf(toPartString) : -1;
-		
-		if (source)
-		{
-			sourceToPart = toPart;
-		}
-		else
-		{
-			targetToPart = toPart;
-		}
-	}
-
-	public Integer getFromSheet()
-	{
-		return this.fromSheet;
-	}
-	
-	public Integer getSourceToSheet()
-	{
-		return this.sourceToSheet;
-	}
-	
-	public Integer getTargetToSheet()
-	{
-		return this.targetToSheet;
-	}
-	
-	public Integer getSourceToPart()
-	{
-		return this.sourceToPart;
-	}
-	
-	public Integer getTargetToPart()
-	{
-		return this.targetToPart;
-	}
-
-	/**
-	 * 
-	 * @param connectElem
-	 */
-	public void addConnect(Element connectElem)
-	{
-		this.endShape = connectElem;
-		String fromCell = connectElem.getAttribute(mxVsdxConstants.FROM_CELL);
-		addFromCell(connectElem, fromCell);
-	}
-
-}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxConstants.java b/src/com/mxgraph/io/vsdx/mxVsdxConstants.java
deleted file mode 100644
index 7465433b0fccae360bc03d38aef5bd5cea2dcedc..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/mxVsdxConstants.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * This class contains constants used in the Import of .vdx documents.
- */
-public class mxVsdxConstants
-{
-	public static String ANGLE = "Angle";
-	public static String ARC_TO = "ArcTo";
-	public static String BACKGROUND = "Background";
-	public static String BACK_PAGE = "BackPage";
-	public static String BEGIN_ARROW = "BeginArrow";
-	public static String BEGIN_ARROW_SIZE = "BeginArrowSize";
-	public static String BEGIN_X = "BeginX";
-	public static String BEGIN_Y = "BeginY";
-	public static String BOTTOM_MARGIN = "BottomMargin";
-	public static String BULLET = "Bullet";
-	public static String CASE = "Case";
-	public static String CHARACTER = "Character";
-	public static String COLOR = "Color";
-	public static String COLOR_ENTRY = "ColorEntry";
-	public static String COLORS = "Colors";
-	
-	/**
-	 * Specifies the color transparency used for characters in a text run.
-	 * The value is normalized such that a value of 1 corresponds to 100 percent.
-	 * A value of zero specifies that the color is completely opaque;
-	 * a value of one specifies that the color is completely transparent.
-	 */
-	public static String COLOR_TRANS = "ColorTrans";
-	public static String CONNECT = "Connect";
-	public static String CONNECTS = "Connects";
-	public static String CONNECTION = "Connection";
-	public static String CONTROL = "Control";
-	public static String DELETED = "Del";
-	public static String DOCUMENT_SHEET = "DocumentSheet";
-	public static String ELLIPSE = "Ellipse";
-	public static String ELLIPTICAL_ARC_TO = "EllipticalArcTo";
-	public static String END_ARROW = "EndArrow";
-	public static String END_ARROW_SIZE = "EndArrowSize";
-	public static String END_X = "EndX";
-	public static String END_Y = "EndY";
-	public static String FACE_NAME = "FaceName";
-	public static String FACE_NAMES = "FaceNames";
-	public static String FALSE = "0";
-	public static String FILL = "Fill";
-	public static String FILL_BKGND = "FillBkgnd";
-	public static String FILL_BKGND_TRANS = "FillBkgndTrans";
-	public static String FILL_FOREGND = "FillForegnd";
-	public static String FILL_FOREGND_TRANS = "FillForegndTrans";
-	public static String FILL_PATTERN = "FillPattern";
-	public static String FILL_STYLE = "FillStyle";
-	public static String FILL_GRADIENT_ENABLED = "FillGradientEnabled";
-	public static String FLAGS = "Flags";
-	public static String FLIP_X = "FlipX";
-	public static String FLIP_Y = "FlipY";
-	public static String FONT = "Font";
-	public static String FONT_NAME = "Name";
-	public static String FOREIGN = "Foreign";
-	public static String FROM_CELL = "FromCell";
-	public static String FROM_SHEET = "FromSheet";
-	public static String GEOM = "Geom";
-	public static String HEIGHT = "Height";
-	public static String HORIZONTAL_ALIGN = "HorzAlign";
-	public static String ID = "ID";
-	public static String INDENT_FIRST = "IndFirst";
-	public static String INDENT_LEFT = "IndLeft";
-	public static String INDENT_RIGHT = "IndRight";
-	public static String INDEX = "IX";
-	public static String LEFT_MARGIN = "LeftMargin";
-	public static String LETTER_SPACE = "Letterspace";
-	public static String LINE = "Line";
-	public static String LINE_COLOR = "LineColor";
-	public static String LINE_COLOR_TRANS = "LineColorTrans";
-	public static String LINE_PATTERN = "LinePattern";
-	public static String LINE_STYLE = "LineStyle";
-	public static String LINE_TO = "LineTo";
-	public static String LINE_WEIGHT = "LineWeight";
-	public static String LOC_PIN_X = "LocPinX";
-	public static String LOC_PIN_Y = "LocPinY";
-	public static String MASTER = "Master";
-	public static String MASTER_SHAPE = "MasterShape";
-	public static String MASTERS = "Masters";
-	public static String MOVE_TO = "MoveTo";
-	public static String NAME = "Name";
-	public static String NAME_U = "NameU";
-	public static String NO_LINE = "NoLine";
-	public static String NURBS_TO = "NURBSTo";
-	public static String PAGE = "Page";
-	public static String PAGE_HEIGHT = "PageHeight";
-	public static String PAGE_WIDTH = "PageWidth";
-	public static String PAGES = "Pages";
-	public static String PARAGRAPH = "Paragraph";
-	public static String PIN_X = "PinX";
-	public static String PIN_Y = "PinY";
-	public static String POS = "Pos";
-	public static String RGB = "RGB";
-	public static String RIGHT_MARGIN = "RightMargin";
-	public static String ROUNDING = "Rounding";
-	public static String RTL_TEXT = "RTLText";
-	public static String SIZE = "Size";
-	public static String SHAPE = "Shape";
-	public static String SHAPES = "Shapes";
-	public static String SHAPE_SHDW_SHOW = "ShapeShdwShow";
-	public static String SHDW_PATTERN = "ShdwPattern";
-	public static String SPACE_AFTER = "SpAfter";
-	public static String SPACE_BEFORE = "SpBefore";
-	public static String SPACE_LINE = "SpLine";
-	public static String STRIKETHRU = "Strikethru";
-	public static String STYLE = "Style";
-	public static String STYLE_SHEET = "StyleSheet";
-	public static String STYLE_SHEETS = "StyleSheets";
-	public static String TEXT = "Text";
-	public static String TEXT_BKGND = "TextBkgnd";
-	public static String TEXT_BLOCK = "TextBlock";
-	public static String TEXT_STYLE = "TextStyle";
-	public static String TO_PART = "ToPart";
-	public static String TO_SHEET = "ToSheet";
-	public static String TOP_MARGIN = "TopMargin";
-	public static String TRUE = "1";
-	public static String TXT_ANGLE = "TxtAngle";
-	public static String TXT_HEIGHT = "TxtHeight";
-	public static String TXT_LOC_PIN_X = "TxtLocPinX";
-	public static String TXT_LOC_PIN_Y = "TxtLocPinY";
-	public static String TXT_PIN_X = "TxtPinX";
-	public static String TXT_PIN_Y = "TxtPinY";
-	public static String TXT_WIDTH = "TxtWidth";
-	public static String TYPE = "Type";
-	public static String TYPE_GROUP = "Group";
-	public static String TYPE_SHAPE = "Shape";
-	public static String UNIQUE_ID = "UniqueID";
-	public static String VERTICAL_ALIGN = "VerticalAlign";
-	public static String WIDTH = "Width";
-	public static String X_CON = "XCon";
-	public static String X_DYN = "XDyn";
-	public static String X = "X";
-	public static String Y_CON = "YCon";
-	public static String Y_DYN = "YDyn";
-	public static String Y = "Y";
-	public static String HIDE_TEXT = "HideText";
-	
-	public static String VSDX_ID = "vsdxID";
-	
-	public static int CONNECT_TO_PART_WHOLE_SHAPE = 3;
-	
-	public static final String[] SET_VALUES = new String[] { "a", "b" };
-	public static final Set<String> MY_SET = new HashSet<String>(Arrays.asList(SET_VALUES));
-}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxMaster.java b/src/com/mxgraph/io/vsdx/mxVsdxMaster.java
deleted file mode 100644
index 77490c18d9dc2105df8a0bed189182e5082ac6e5..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/mxVsdxMaster.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.HashMap;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import com.mxgraph.io.mxVsdxCodec;
-
-/**
- * This class is a wrapper for a Master element.<br/>
- * Contains a map with the shapes contained in the Master element
- * and allows access these by ID.
- */
-public class mxVsdxMaster
-{
-	protected Element master;
-	
-	/**
-	 * Unique ID of the element within its parent element
-	 */
-	protected String Id = null;
-	
-	protected Shape masterShape = null;
-	
-	/*
-	 * Map that contains the shapes in Master element wrapped for instances of mxDelegateShape.
-	 * The key is the shape's ID.
-	 */
-	protected HashMap<String, Shape> childShapes = new HashMap<String, Shape>();
-
-	/**
-	 * Create a new instance of mxMasterElement and retrieves all the shapes contained
-	 * in the Master element.
-	 * @param m Master Element to be wrapped.
-	 */
-	public mxVsdxMaster(Element m, mxVsdxModel model)
-	{
-		this.master = m;
-		this.Id = m.getAttribute(mxVsdxConstants.ID);
-		processMasterShapes(model);
-	}
-
-	/**
-	 * Retrieves and wraps all the shapes contained in the 'shape' param.<br/>
-	 * This method is recursive, it retrieves the subshapes of the shapes too.
-	 * @param shape Shape from which the subshapes are retrieved.
-	 * @return Map with the shapes wrapped in instances of mxMasterShape.
-	 */
-	protected void processMasterShapes(mxVsdxModel model)
-	{
-		Node child = this.master.getFirstChild();
-		
-		while (child != null)
-		{
-			if (child instanceof Element && ((Element)child).getNodeName().equals("Rel"))
-			{
-				Element relElem = model.getRelationship(((Element) child).getAttribute("r:id"), mxVsdxCodec.vsdxPlaceholder + "/masters/" + "_rels/masters.xml.rels");
-				String target = relElem.getAttribute("Target");
-				String type = relElem.getAttribute("Type");
-				Document masterDoc = null;
-				
-				if (type != null && type.endsWith("master"))
-				{
-					masterDoc = model.getXmlDoc(mxVsdxCodec.vsdxPlaceholder + "/masters/" + target);
-				}
-
-				if (masterDoc != null)
-				{
-					Node masterChild = masterDoc.getFirstChild();
-					
-					while (masterChild != null)
-					{
-						if (masterChild instanceof Element && ((Element)masterChild).getNodeName().equals("MasterContents"))
-						{
-							processMasterShape((Element)masterChild, model);
-							break;
-						}
-						
-						masterChild = masterChild.getNextSibling();
-					}
-				}
-			}
-			
-			child = child.getNextSibling();
-		}
-	}
-
-	/**
-	 * Retrieves and wraps all the shapes contained in the 'shape' param.<br/>
-	 * This method is recursive, it retrieves the subshapes of the shapes too.
-	 * @param shape Shape from which the subshapes are retrieved.
-	 * @return Map with the shapes wrapped in instances of mxMasterShape.
-	 */
-	protected void processMasterShape(Element shapeElem, mxVsdxModel model)
-	{
-		Node shapeChild = shapeElem.getFirstChild();
-		
-		while (shapeChild != null)
-		{
-			if (shapeChild instanceof Element && ((Element)shapeChild).getNodeName().equals("Shapes"))
-			{
-				Node shapesChild = shapeChild.getFirstChild();
-
-				while (shapesChild != null)
-				{
-					if (shapesChild instanceof Element && ((Element)shapesChild).getNodeName().equals("Shape"))
-					{
-						Element shape = (Element)shapesChild;
-						String shapeId = shape.getAttribute("ID");
-						Shape masterShape = new Shape(shape, model);
-						this.masterShape = (this.masterShape == null) ? masterShape : this.masterShape;
-						childShapes.put(shapeId, masterShape);
-						processMasterShape(shape, model);
-					}
-					
-					shapesChild = shapesChild.getNextSibling();
-				}
-				
-				break;
-			}
-			
-			shapeChild = shapeChild.getNextSibling();
-		}
-	}
-
-	/**
-	 * Returns the first shape in the Master
-	 * @return First shape in the Master wrapped in a instance of mxMasterShape
-	 */
-	public Shape getMasterShape()
-	{
-		return this.masterShape;
-	}
-
-	/**
-	 * Returns the shape in the master element with ID = 'id'.
-	 * @param id Shape's ID
-	 * @return The shape in the master element with ID = 'id' wrapped in a instance of mxMasterShape
-	 */
-	public Shape getSubShape(String id)
-	{
-		return childShapes.get(id);
-	}
-
-	/**
-	 * Returns the NameU attribute.
-	 * @return Value of the NameU attribute.
-	 */
-	public String getNameU()
-	{
-		return master.getAttribute("NameU");
-	}
-
-	/**
-	 * Returns the NameU attribute.
-	 * @return Value of the NameU attribute.
-	 */
-	public String getName()
-	{
-		return master.getAttribute("Name");
-	}
-
-	/**
-	 * Returns the UniqueID attribute.
-	 * @return Value of the UniqueID attribute.
-	 */
-	public String getUniqueID()
-	{
-		String uniqueID = "";
-		
-		if (master.hasAttribute("UniqueID"))
-		{
-			uniqueID = master.getAttribute("UniqueID");
-		}
-		
-		return uniqueID;
-	}
-
-	public String getId()
-	{
-		return this.Id;
-	}
-	
-	public Element getMasterElement()
-	{
-		return master;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxModel.java b/src/com/mxgraph/io/vsdx/mxVsdxModel.java
deleted file mode 100644
index 1f76b77a8437c99343694f01d95ca216a58ab094..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/mxVsdxModel.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/**
- * Copyright (c) 2006-2016, JGraph Ltd
- * Copyright (c) 2006-2016, Gaudenz Alder
- */
-package com.mxgraph.io.vsdx;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.mxgraph.io.mxVsdxCodec;
-
-/**
- * 
- * A model representing vsdx files. As well as being a programmatic model, the XML DOMs of the unzipped
- * files are held to enable round-tripping
- *
- */
-public class mxVsdxModel {
-
-	/**
-	 * A map of Documents created by reading the XML files, indexed by the path to those files
-	 */
-	protected Map<String, Document> xmlDocs = null;
-	
-	/**
-	 * Collection of media files encoded in Base64, indexed by the path to those files
-	 */
-	protected Map<String, String> media = null;
-
-	/**
-	 * The document from .../document.xml
-	 */
-	protected Element rootElement;
-	
-	/**
-	 * Map of page objects indexed by their ID.
-	 */
-	protected Map<Integer, mxVsdxPage> pages = null;
-
-	/**
-	 * Map of master objects indexed by their ID. Before you think you're being clever by making
-	 * the index an Integer as for pages, don't, there are reasons.
-	 */
-	protected Map<String, mxVsdxMaster> masters = new HashMap<String, mxVsdxMaster>();
-	
-	/**
-	 * Map stylesheets indexed by their ID
-	 */
-	protected Map<String, Style> stylesheets = new HashMap<String, Style>();
-	
-	/**
-	 * Map themes indexed by their index
-	 */
-	protected Map<Integer, mxVsdxTheme> themes = new HashMap<>();	
-	
-	mxPropertiesManager pm;
-
-	public mxVsdxModel(Document doc, Map<String, Document> docData, Map<String, String> mediaData)
-	{
-		this.xmlDocs = docData;
-		this.media = mediaData;
-	
-		Node childNode = doc.getFirstChild();
-		
-		while (childNode != null)
-		{
-			if (childNode instanceof Element && ((Element)childNode).getTagName().toLowerCase().equals(mxVsdxCodec.vsdxPlaceholder + "document"))
-			{
-				this.rootElement = (Element)childNode;
-				break;
-			}
-			
-			childNode = childNode.getNextSibling();
-		}
-	
-		this.pm = new mxPropertiesManager();
-		this.pm.initialise(rootElement, this);
-		initStylesheets();
-		initThemes();
-		initMasters();
-		initPages();
-	}
-
-	/**
-	 * Initialize theme objects from the XML files
-	 */
-	private void initThemes() 
-	{
-		// Lazy build up the master structure
-		if (this.xmlDocs != null)
-		{
-			boolean more = true;
-			int index = 1;
-			
-			while (more)
-			{
-				String path = mxVsdxCodec.vsdxPlaceholder + "/theme/theme"+ index +".xml";
-				Document themeDoc = this.xmlDocs.get(path);
-	
-				if (themeDoc != null)
-				{
-					Node child = themeDoc.getFirstChild();
-					
-					while (child != null)
-					{
-						if (child instanceof Element && ((Element)child).getTagName().equals("a:theme"))
-						{
-							mxVsdxTheme theme = new mxVsdxTheme((Element) child);
-							
-							
-							if (theme.getThemeIndex() < 0)
-							{
-								//theme index cannot be determined unless the theme is parsed
-								theme.processTheme();
-							}
-							
-							//TODO having two theme files with the same id still requires more handling
-							//		probably we need to merge the similar parts (has same theme name)
-							mxVsdxTheme existingTheme = themes.get(theme.getThemeIndex());
-							if (existingTheme == null || !existingTheme.isPure())
-							{
-								themes.put(theme.getThemeIndex(), theme);
-							}
-							
-							break;
-						}
-						
-						child = child.getNextSibling();
-					}
-					index++;
-				}
-				else
-				{
-					more = false;
-				}
-			}
-		}
-	}
-
-	/**
-	 * Load the map with the stylesheets elements in the document.<br/>
-	 * The masters are wrapped for instances of mxStyleSheet.
-	 * @param doc Document with the stylesheets.
-	 */
-	public void initStylesheets()
-	{
-		NodeList vdxSheets = rootElement.getElementsByTagName(mxVsdxConstants.STYLE_SHEETS);
-
-		if (vdxSheets.getLength() > 0)
-		{
-			Element sheets = (Element) vdxSheets.item(0);
-			NodeList sheetList = sheets.getElementsByTagName(mxVsdxConstants.STYLE_SHEET);
-			int sheetLength = sheetList.getLength();
-
-			for (int i = 0; i < sheetLength; i++)
-			{
-				Element sheet = (Element) sheetList.item(i);
-				String sheetId = sheet.getAttribute(mxVsdxConstants.ID);
-				Style sheetElement = new Style(sheet, this);
-				stylesheets.put(sheetId, sheetElement);
-			}
-		}
-		
-		Collection <Style> sheets = stylesheets.values();
-		Iterator<Style> iter = sheets.iterator();
-		
-		while (iter.hasNext())
-		{
-			Style sheet = iter.next();
-			sheet.stylesheetRefs(this);
-		}
-	}
-
-	/**
-	 * Initialize master objects from the XML files
-	 */
-	public void initMasters()
-	{
-		// Lazy build up the master structure
-		if (this.xmlDocs != null)
-		{
-			String path = mxVsdxCodec.vsdxPlaceholder + "/masters/masters.xml";
-			Document masterDoc = this.xmlDocs.get(path);
-
-			if (masterDoc != null)
-			{
-				Node child = masterDoc.getFirstChild();
-				
-				while (child != null)
-				{
-					if (child instanceof Element && ((Element)child).getTagName().equals(mxVsdxConstants.MASTERS))
-					{
-						Node grandChild = child.getFirstChild();
-						
-						while (grandChild != null)
-						{
-							if (grandChild instanceof Element && ((Element)grandChild).getTagName().equals("Master"))
-							{
-								Element masterElement = (Element)grandChild;
-								mxVsdxMaster master = new mxVsdxMaster(masterElement, this);
-								this.masters.put(master.getId(), master);
-							}
-							
-							grandChild = grandChild.getNextSibling();
-						}
-						
-						break;
-
-					}
-					
-					child = child.getNextSibling();
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Initialize page objects from the XML files
-	 */
-	public void initPages()
-	{
-		// Lazy build up the pages structure
-		if (this.xmlDocs != null)
-		{
-			String path = mxVsdxCodec.vsdxPlaceholder + "/pages/pages.xml";
-			Document pageDoc = this.xmlDocs.get(path);
-
-			if (pageDoc != null)
-			{
-				Node child = pageDoc.getFirstChild();
-				
-				while (child != null)
-				{
-					if (child instanceof Element && ((Element)child).getTagName().equals(mxVsdxConstants.PAGES))
-					{
-						Element pages = (Element)child;
-						
-						NodeList pageList = pages.getElementsByTagName(mxVsdxConstants.PAGE);
-						
-						if (pageList != null && pageList.getLength() > 0)
-						{
-							this.pages = new LinkedHashMap<Integer, mxVsdxPage>();
-							
-							HashMap<Integer, mxVsdxPage> backgroundMap = new HashMap<Integer, mxVsdxPage>();
-							int pageListLen = pageList.getLength();
-							
-							//Find the background pages while creating all the pages
-							for (int i = 0; i < pageListLen; i++)
-							{
-								Element pageEle = (Element) pageList.item(i);
-								mxVsdxPage page = createPage(pageEle);
-								
-								if (page.isBackground())
-								{
-									backgroundMap.put(page.getId(), page);
-								}
-								
-								this.pages.put(page.getId(), page);
-							}
-		
-							// Iterate again, assigning background pages
-							for (Map.Entry<Integer, mxVsdxPage> entry : this.pages.entrySet())
-							{
-								mxVsdxPage page = entry.getValue();
-		
-								if (!page.isBackground())
-								{
-									Integer backId = page.getBackPageId();
-		
-									if (backId != null)
-									{
-										//Import the background.
-										mxVsdxPage background = backgroundMap.get(backId);
-										page.setBackPage(background);;
-									}
-								}
-							}
-						}
-
-						break; // MS defines there can only be 0 or 1 PAGES element, don't process second
-					}
-					
-					child = child.getNextSibling();
-				}
-			}
-		}
-	}
-	
-	public Map<Integer, mxVsdxPage> getPages()
-	{
-		return this.pages;
-	}
-
-	public Map<Integer, mxVsdxTheme> getThemes()
-	{
-		return this.themes;
-	}
-
-	protected Element getRelationship(String rid, String path)
-	{
-		Document relsDoc = this.xmlDocs.get(path);
-
-		if (relsDoc == null || rid == null || rid.isEmpty())
-		{
-			// Valid to not have a rels for an XML file
-			return null;
-		}
-		
-		NodeList rels = relsDoc.getElementsByTagName("Relationship");
-
-		for (int i = 0; i < rels.getLength(); i++)
-		{
-			Element currElem = (Element) rels.item(i);
-			String id = currElem.getAttribute("Id");
-
-			if (id.equals(rid))
-			{
-				return currElem;
-			}
-		}
-
-		return null;
-	}
-
-	public mxVsdxMaster getMaster(String masterId)
-	{
-		return this.masters.get(masterId);
-	}
-
-	protected mxVsdxPage createPage(Element pageEle)
-	{
-		return new mxVsdxPage(pageEle, this);
-	}
-	
-	public mxPropertiesManager getPropertiesManager() {
-		return pm;
-	}
-
-	public void setPropertiesManager(mxPropertiesManager pm) {
-		this.pm = pm;
-	}
-
-	public Map<String, mxVsdxMaster> getMasterShapes() {
-		return masters;
-	}
-
-	public void setMasterShapes(Map<String, mxVsdxMaster> mm) {
-		this.masters = mm;
-	}
-	
-	/**
-	 * Returns the wrapper of the stylesheet element with id indicated by 'id'
-	 * @param id StyleSheet's ID.
-	 * @return StyleSheet element with id = 'id' wrapped in an instance of mxStyleSheet.
-	 */
-	public Style getStylesheet(String id)
-	{
-		return stylesheets.get(id);
-	}
-	
-	public Document getXmlDoc(String path)
-	{
-		return this.xmlDocs.get(path);
-	}
-	
-	public String getMedia(String path)
-	{
-		return this.media.get(path);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxTheme.java b/src/com/mxgraph/io/vsdx/mxVsdxTheme.java
deleted file mode 100644
index a7c1784273fe5ada331956bd3dfbf25c4889df3e..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/mxVsdxTheme.java
+++ /dev/null
@@ -1,973 +0,0 @@
-package com.mxgraph.io.vsdx;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import com.mxgraph.io.vsdx.theme.Color;
-import com.mxgraph.io.vsdx.theme.FillStyle;
-import com.mxgraph.io.vsdx.theme.FillStyleFactory;
-import com.mxgraph.io.vsdx.theme.GradFill;
-import com.mxgraph.io.vsdx.theme.HSLColor;
-import com.mxgraph.io.vsdx.theme.LineStyle;
-import com.mxgraph.io.vsdx.theme.LineStyleExt;
-import com.mxgraph.io.vsdx.theme.OoxmlColor;
-import com.mxgraph.io.vsdx.theme.OoxmlColorFactory;
-import com.mxgraph.io.vsdx.theme.QuickStyleVals;
-
-//Holds office 2013 theme data which applies to all office file formats
-public class mxVsdxTheme 
-{
-	//Theme names to ID mapping
-	private static Map<String, Integer> themesIds = new HashMap<>();
-	
-	//Theme index can be found deep inside the theme file, so this is faster for standard 2013 format
-	static 
-	{
-		themesIds.put("Office", 33);
-		themesIds.put("Linear", 34);
-		themesIds.put("Zephyr", 35);
-		themesIds.put("Integral", 36);
-		themesIds.put("Simple", 37);
-		themesIds.put("Whisp", 38);
-		themesIds.put("Daybreak", 39);
-		themesIds.put("Parallel", 40);
-		themesIds.put("Sequence", 41);
-		themesIds.put("Slice", 42);
-		themesIds.put("Ion", 43);
-		themesIds.put("Retrospect", 44);
-		themesIds.put("Organic", 45);
-		themesIds.put("Bubble", 46);
-		themesIds.put("Clouds", 47);
-		themesIds.put("Gemstone", 48);
-		themesIds.put("Lines", 49);
-		themesIds.put("Facet", 50);
-		themesIds.put("Prominence", 51);
-		themesIds.put("Smoke", 52);
-		themesIds.put("Radiance", 53);
-		themesIds.put("Shade", 54);
-		themesIds.put("Pencil", 55);
-		themesIds.put("Pen", 56);
-		themesIds.put("Marker", 57);
-		themesIds.put("Whiteboard", 58);
-	}
-	
-	//color id to color name
-	private static Map<Integer, String> colorIds = new HashMap<>();
-	
-	//https://msdn.microsoft.com/en-us/library/hh661351%28v=office.12%29.aspx
-	//There are non standard values of 200 -> 206 also which are handled the same as 100 -> 106
-	static
-	{
-		colorIds.put(0, "dk1");
-		colorIds.put(1, "lt1");
-		colorIds.put(2, "accent1");
-		colorIds.put(3, "accent2");
-		colorIds.put(4, "accent3");
-		colorIds.put(5, "accent4");
-		colorIds.put(6, "accent5");
-		colorIds.put(7, "accent6");
-	}
-	
-	private Element theme;
-	
-	private int themeIndex = -1;
-	
-	private int themeVariant = 0;
-	
-	//colors handling
-	private Map<String, OoxmlColor> baseColors = new HashMap<>();
-	
-	//Dynamic background color (index 8)
-	private OoxmlColor bkgndColor;
-	
-	//Variant colors
-	private OoxmlColor[][] variantsColors = new OoxmlColor[4][7];
-	
-	private boolean[] isMonotoneVariant = new boolean[4];
-	
-	private Color defaultClr = new Color(255, 255, 255);
-	private Color defaultLineClr = new Color(0, 0, 0);
-	
-	private LineStyle defaultLineStyle = new LineStyle();
-	
-	//fill styles
-	private ArrayList<FillStyle> fillStyles = new ArrayList<>(6);
-
-	//connector fill styles
-	//TODO what is the use of it?
-	private ArrayList<FillStyle> connFillStyles = new ArrayList<>(6);
-
-	//line styles
-	private ArrayList<LineStyle> lineStyles = new ArrayList<>(6);
-	
-	//cpnector line styles
-	private ArrayList<LineStyle> connLineStyles = new ArrayList<>(6);
-
-	//line styles extensions
-	private ArrayList<LineStyleExt> lineStylesExt = new ArrayList<>(7);
-	
-	//connector line styles extensions
-	private ArrayList<LineStyleExt> connLineStylesExt = new ArrayList<>(7);
-	
-	//connector font color & styles
-	private ArrayList<OoxmlColor> connFontColors = new ArrayList<>(6);
-	private ArrayList<Integer> connFontStyles = new ArrayList<>(6);
-	
-	//font color & styles
-	private ArrayList<OoxmlColor> fontColors = new ArrayList<>(6);
-	private ArrayList<Integer> fontStyles = new ArrayList<>(6);
-	
-	private int[] variantEmbellishment = new int[4];
-	private int[][] variantFillIdx = new int[4][4];
-	private int[][] variantLineIdx = new int[4][4];
-	private int[][] variantEffectIdx = new int[4][4];
-	private int[][] variantFontIdx = new int[4][4];
-	
-	private boolean isProcessed = false;
-	
-	//flag to indicate that some parts of the theme has different name
-	private boolean isPure = true;
-	private String name;
-	
-	public mxVsdxTheme(Element theme) 
-	{
-		this.theme = theme;
-		this.name = theme.getAttribute("name");
-		
-		Integer themeId = themesIds.get(this.name);
-		
-		if (themeId != null) 
-		{
-			themeIndex = themeId;
-		}
-	}
-	
-	public int getThemeIndex() 
-	{
-		return themeIndex;
-	}
-	
-	public void setVariant(int variant) 
-	{
-		themeVariant = variant;
-	}
-	
-	public boolean isPure()
-	{
-		return isPure;
-	}
-	
-	public void processTheme() 
-	{
-		if (isProcessed) return;
-		
-		try
-		{
-			Node child = theme.getFirstChild();
-			
-			while (child != null)
-			{
-				if (child instanceof Element && ((Element)child).getNodeName().equals("a:themeElements"))
-				{
-					Node child2 = child.getFirstChild();
-					while (child2 != null)
-					{
-						if (child2 instanceof Element)
-						{
-							Element elem = (Element)child2;
-							String nodeName = elem.getNodeName();
-							if (nodeName.equals("a:clrScheme")) 
-							{
-								if (!this.name.equals(elem.getAttribute("name")))
-								{
-									isPure = false;
-								}
-								//Process the color scheme
-								processColors(elem);
-							}
-							else if (nodeName.equals("a:fontScheme")) 
-							{
-								if (!this.name.equals(elem.getAttribute("name")))
-								{
-									isPure = false;
-								}
-								//Process the font scheme
-								processFonts(elem);
-							}
-							else if (nodeName.equals("a:fmtScheme")) 
-							{
-								if (!this.name.equals(elem.getAttribute("name")))
-								{
-									isPure = false;
-								}
-								//Process the format scheme
-								processFormats(elem);
-							}
-							else if (nodeName.equals("a:extLst"))
-							{
-								//Process the extra list
-								processExtras(elem);							
-							}
-						}
-						child2 = child2.getNextSibling();
-					}
-				}
-				child = child.getNextSibling();
-			}
-		}
-		catch (Exception e)
-		{
-			//cannot parse the theme format, probably it has non-standard format
-			e.printStackTrace();
-		}
-		isProcessed = true;
-	}
-	
-	private void processExtras(Element element) 
-	{
-		ArrayList<Element> exts = mxVsdxUtils.getDirectChildElements(element);
-		
-		for (Element ext : exts)
-		{
-			Element vt = mxVsdxUtils.getDirectFirstChildElement(ext);
-			switch (vt.getNodeName())
-			{
-				case "vt:fmtConnectorScheme":
-					if (!this.name.equals(vt.getAttribute("name")))
-					{
-						isPure = false;
-					}
-					ArrayList<Element> connSchemes = mxVsdxUtils.getDirectChildElements(vt);
-					
-					for (Element scheme : connSchemes)
-					{
-						String name = scheme.getNodeName();
-						
-						switch (name)
-						{
-							case "a:fillStyleLst":
-								ArrayList<Element> fillStyleElems = mxVsdxUtils.getDirectChildElements(scheme);
-								for (Element fillStyle : fillStyleElems)
-								{
-									connFillStyles.add(FillStyleFactory.getFillStyle(fillStyle));
-								}
-							break;
-							case "a:lnStyleLst":
-								ArrayList<Element> lineStyleElems = mxVsdxUtils.getDirectChildElements(scheme);
-								for (Element lineStyle : lineStyleElems)
-								{
-									connLineStyles.add(new LineStyle(lineStyle));
-								}
-							break;
-						}
-					}
-				break;
-				case "vt:lineStyles":
-					ArrayList<Element> styles = mxVsdxUtils.getDirectChildElements(vt);
-					
-					for (Element style : styles)
-					{
-						String name = style.getNodeName();
-						
-						switch (name)
-						{
-							case "vt:fmtConnectorSchemeLineStyles":
-								ArrayList<Element> connStylesElems = mxVsdxUtils.getDirectChildElements(style);
-								for (Element connStyle : connStylesElems)
-								{
-									connLineStylesExt.add(new LineStyleExt(connStyle));
-								}
-							break;
-							case "vt:fmtSchemeLineStyles":
-								ArrayList<Element> schemeStyleElems = mxVsdxUtils.getDirectChildElements(style);
-								for (Element schemeStyle : schemeStyleElems)
-								{
-									lineStylesExt.add(new LineStyleExt(schemeStyle));
-								}
-							break;
-						}
-					}
-				break;
-				case "vt:fontStylesGroup":
-					ArrayList<Element> fontStyleElems = mxVsdxUtils.getDirectChildElements(vt);
-					
-					for (Element fontStyle : fontStyleElems)
-					{
-						String name = fontStyle.getNodeName();
-						
-						switch (name)
-						{
-							case "vt:connectorFontStyles":
-								fillFontStyles(fontStyle, connFontColors, connFontStyles);
-							break;
-							case "vt:fontStyles":
-								fillFontStyles(fontStyle, fontColors, fontStyles);
-							break;
-						}
-					}
-				break;
-				case "vt:variationStyleSchemeLst":
-					ArrayList<Element> varStyleSchemes = mxVsdxUtils.getDirectChildElements(vt);
-					
-					int i=0;
-					for (Element varStyleScheme : varStyleSchemes)
-					{
-						variantEmbellishment[i] = mxVsdxUtils.getIntAttr(varStyleScheme, "embellishment");
-						
-						ArrayList<Element> varStyles = mxVsdxUtils.getDirectChildElements(varStyleScheme);
-						int j = 0;
-						for (Element varStyle : varStyles)
-						{
-							variantFillIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "fillIdx");
-							variantLineIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "lineIdx");
-							variantEffectIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "effectIdx");
-							variantFontIdx[i][j] = mxVsdxUtils.getIntAttr(varStyle, "fontIdx");
-							j++;
-						}
-						i++;
-					}
-				break;
-			}
-		}
-	}
-
-	private void fillFontStyles(Element fontStyle, ArrayList<OoxmlColor> fontColors, ArrayList<Integer> fontStyles) {
-		ArrayList<Element> fontProps = mxVsdxUtils.getDirectChildElements(fontStyle);
-		
-		for (Element fontProp : fontProps)
-		{
-			fontStyles.add(mxVsdxUtils.getIntAttr(fontProp, "style"));
-			
-			Element color = mxVsdxUtils.getDirectFirstChildElement(fontProp);
-			if (color != null)
-				fontColors.add(
-						OoxmlColorFactory.getOoxmlColor(
-								mxVsdxUtils.getDirectFirstChildElement(color)));
-		}
-	}
-
-	private void processFormats(Element element) 
-	{
-		ArrayList<Element> styles = mxVsdxUtils.getDirectChildElements(element);
-		for (Element style : styles)
-		{
-			String name = style.getNodeName();
-			switch (name)
-			{
-				case "a:fillStyleLst":
-					ArrayList<Element> fillStyleElems = mxVsdxUtils.getDirectChildElements(style);
-					for (Element fillStyle : fillStyleElems)
-					{
-						fillStyles.add(FillStyleFactory.getFillStyle(fillStyle));
-					}
-				break;
-				case "a:lnStyleLst":
-					ArrayList<Element> lineStyleElems = mxVsdxUtils.getDirectChildElements(style);
-					for (Element lineStyle : lineStyleElems)
-					{
-						lineStyles.add(new LineStyle(lineStyle));
-					}					
-				break;
-				case "a:effectStyleLst":
-					//TODO effects most probably are not used by vsdx
-				break;
-				case "a:bgFillStyleLst":
-					//TODO background effects most probably are not used by vsdx
-				break;
-			}
-		}
-	}
-
-	private void processFonts(Element element) {
-		// TODO Fonts has only the name of the font for each language. It looks not important
-	}
-
-	private void processColors(Element element) 
-	{
-		Node child = element.getFirstChild();
-		
-		while (child != null)
-		{
-			if (child instanceof Element)
-			{
-				Element elem = (Element)child;
-				String nodeName = elem.getNodeName();
-				ArrayList<Element> children = mxVsdxUtils.getDirectChildElements(elem);
-				if (nodeName.equals("a:extLst"))
-				{
-					if (children.size() == 3) //the format has three a:ext nodes
-					{
-						if (themeIndex < 0)
-						{
-							extractThemeIndex(children.get(0));
-						}
-						addBkgndColor(children.get(1));
-						addVariantColors(children.get(2));
-					}
-				} 
-				else 
-				{
-					String clrName = nodeName.substring(2);
-					
-					if (children.size() > 0)
-					{
-						addBasicColor(clrName, children.get(0));
-					}
-				}
-			}
-			child = child.getNextSibling();
-		}
-	}
-
-	private void addVariantColors(Element element) 
-	{
-		Element parent = mxVsdxUtils.getDirectFirstChildElement(element);
-		
-		if (parent != null)
-		{
-			ArrayList<Element> variants = mxVsdxUtils.getDirectChildElements(parent);
-			int i = 0;
-			for (Element variant : variants)
-			{
-				addVariantColorsSet(i++, variant);
-			}
-		}
-	}
-
-	private void addVariantColorsSet(int index, Element variant) 
-	{
-		ArrayList<Element> colors = mxVsdxUtils.getDirectChildElements(variant);
-		
-		isMonotoneVariant[index] = variant.hasAttribute("monotone");
-		
-		for (Element color : colors)
-		{
-			String name = color.getNodeName();
-			switch (name)
-			{
-				case "vt:varColor1":
-					variantsColors[index][0] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-				case "vt:varColor2":
-					variantsColors[index][1] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-				case "vt:varColor3":
-					variantsColors[index][2] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-				case "vt:varColor4":
-					variantsColors[index][3] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-				case "vt:varColor5":
-					variantsColors[index][4] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-				case "vt:varColor6":
-					variantsColors[index][5] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-				case "vt:varColor7":
-					variantsColors[index][6] = OoxmlColorFactory.getOoxmlColor(
-							mxVsdxUtils.getDirectFirstChildElement(color));
-				break;
-			}
-		}		
-	}
-
-	private void addBkgndColor(Element element) 
-	{
-		Element elem = mxVsdxUtils.getDirectFirstChildElement(element);
-		
-		if (elem != null)
-		{
-			bkgndColor = OoxmlColorFactory.getOoxmlColor(mxVsdxUtils.getDirectFirstChildElement(elem));
-		}
-	}
-
-	private void extractThemeIndex(Element element) 
-	{
-		Element elem = mxVsdxUtils.getDirectFirstChildElement(element);
-		
-		if (elem != null)
-		{
-			themeIndex = Integer.parseInt(elem.getAttribute("schemeEnum"));
-		}
-	}
-
-	private void addBasicColor(String clrName, Element element) 
-	{
-		baseColors.put(clrName, OoxmlColorFactory.getOoxmlColor(element));
-	}
-
-	public Color getSchemeColor(String val) 
-	{
-		processTheme();
-		
-		OoxmlColor color = baseColors.get(val);
-		
-		return color != null? color.getColor(this) : defaultClr;
-	}
-	
-	//	QuickStyleFillColor
-	public Color getStyleColor(int styleColor) 
-	{
-		processTheme();
-		
-		if (styleColor < 8)
-		{
-			OoxmlColor color = baseColors.get(colorIds.get(styleColor));
-			if (color != null)
-			{
-				return color.getColor(this);
-			}
-		}
-		else if (styleColor == 8)
-		{
-			if (bkgndColor != null)
-			{
-				return bkgndColor.getColor(this);
-			}
-		}
-		else
-		{
-			OoxmlColor color = null;
-			int clrIndex = 0;
-			
-			if (styleColor >= 200) //200-206
-			{
-				clrIndex = styleColor - 200; 
-			}
-			else if (styleColor >= 100) //100-106
-			{
-				clrIndex = styleColor - 100;
-			}
-			if (clrIndex >= 0 && clrIndex <= 6) //0 - 6
-			{
-				color = variantsColors[themeVariant][clrIndex];
-			}
-			
-			if (color != null)
-			{
-				return color.getColor(this);
-			}
-		}
-		return defaultClr;
-	}
-
-	
-	public Color getFillGraientColor(QuickStyleVals quickStyleVals)
-	{
-		return getFillColor(quickStyleVals, true);
-	}
-	
-	public Color getFillColor(QuickStyleVals quickStyleVals)
-	{
-		return getFillColor(quickStyleVals, false);
-	}
-
-	//Get fill color based on QuickStyleFillColor & QuickStyleFillMatrix
-	private Color getFillColor(QuickStyleVals quickStyleVals, boolean getGradient)
-	{
-		processTheme();
-		
-		int fillColorStyle = quickStyleVals.getQuickStyleFillColor();
-		FillStyle fillStyle = null;
-		switch (quickStyleVals.getQuickStyleFillMatrix())
-		{
-			case 1:
-			case 2:
-			case 3:
-			case 4:
-			case 5:
-			case 6:
-				fillStyle = fillStyles.get(quickStyleVals.getQuickStyleFillMatrix() - 1);
-			break;
-			case 100:
-			case 101:
-			case 102:
-			case 103:
-				if (isMonotoneVariant[themeVariant]) fillColorStyle = 100;
-				
-				int index = quickStyleVals.getQuickStyleFillMatrix() - 100;
-				//get style index of variants
-				fillStyle = fillStyles.get(variantFillIdx[themeVariant][index] - 1);
-			break;
-		}
-		
-		Color retColor;
-		if (fillStyle != null)
-		{
-			if (getGradient)
-			{
-				retColor = (fillStyle instanceof GradFill)? fillStyle.applyStyle(fillColorStyle, this).getGradientClr() : null;
-			}
-			else
-			{
-				retColor = fillStyle.applyStyle(fillColorStyle, this);
-			}
-		}
-		else
-		{
-			if (getGradient)
-			{
-				retColor = null;
-			}
-			else
-			{
-				retColor = getStyleColor(fillColorStyle);
-			}
-		}
-		
-		int styleVariation = quickStyleVals.getQuickStyleVariation();
-		
-		//TODO using the line color does not cover all the cases but works with most of the sample files
-		if (retColor != null && (styleVariation & 8) > 0)
-		{
-			retColor = getLineColor(quickStyleVals);
-		}
-		
-		return retColor;
-	}
-	
-	//Get line style based on QuickStyleLineMatrix
-	private LineStyle getLineStyle(int quickStyleLineMatrix, ArrayList<LineStyle> lineStyles)
-	{
-		processTheme();
-		
-		LineStyle lineStyle = null;
-		switch (quickStyleLineMatrix)
-		{
-			case 1:
-			case 2:
-			case 3:
-			case 4:
-			case 5:
-			case 6:
-				lineStyle = lineStyles.get(quickStyleLineMatrix - 1);
-			break;
-			case 100:
-			case 101:
-			case 102:
-			case 103:
-				int index = quickStyleLineMatrix - 100;
-				//get style index of variants
-				//Edges should not has these values
-				if (lineStyles == this.lineStyles)
-				{
-					lineStyle = this.lineStyles.get(variantLineIdx[themeVariant][index] - 1);
-				}
-				else
-				{
-					lineStyle = defaultLineStyle;
-				}
-			break;
-		}
-			
-		return lineStyle;
-	}
-
-	private LineStyleExt getLineStyleExt(int quickStyleLineMatrix, ArrayList<LineStyleExt> lineStylesExt) 
-	{
-		processTheme();
-		
-		LineStyleExt lineStyleExt = null;
-		switch (quickStyleLineMatrix)
-		{
-			case 0:	
-			case 1:
-			case 2:
-			case 3:
-			case 4:
-			case 5:
-			case 6:
-				lineStyleExt = lineStylesExt.get(quickStyleLineMatrix);
-			break;
-		}
-			
-		return lineStyleExt;
-	}
-	
-	//Get line color based on QuickStyleLineColor & QuickStyleLineMatrix
-	private Color getLineColor(QuickStyleVals quickStyleVals, ArrayList<LineStyle> lineStyles)
-	{
-		processTheme();
-		
-		int lineColorStyle = quickStyleVals.getQuickStyleLineColor();
-		LineStyle lineStyle = getLineStyle(quickStyleVals.getQuickStyleLineMatrix(), lineStyles);
-		switch (quickStyleVals.getQuickStyleLineMatrix())
-		{
-			case 100:
-			case 101:
-			case 102:
-			case 103:
-				if (isMonotoneVariant[themeVariant]) lineColorStyle = 100;
-			break;
-		}
-		
-		Color lineClr;
-		
-		if (lineStyle != null)
-		{
-			lineClr = lineStyle.getLineColor(lineColorStyle, this);
-		}
-		else
-		{
-			lineClr = getStyleColor(lineColorStyle);
-		}
-		
-		int styleVariation = quickStyleVals.getQuickStyleVariation();
-		
-		//TODO using the fill color does not cover all the cases but works with most of the sample files
-		if ((styleVariation & 4) > 0)
-		{
-			lineClr = getFillColor(quickStyleVals);
-		}
-		return lineClr;
-	}
-
-	//Get line color based on QuickStyleLineColor & QuickStyleLineMatrix
-	public Color getLineColor(QuickStyleVals quickStyleVals)
-	{
-		return getLineColor(quickStyleVals, lineStyles);
-	}
-	
-	//Get connection line color based on QuickStyleLineColor & QuickStyleLineMatrix
-	public Color getConnLineColor(QuickStyleVals quickStyleVals)
-	{
-		return getLineColor(quickStyleVals, connLineStyles);
-	}
-
-	
-	public Color getDefaultLineClr() 
-	{
-		return defaultLineClr;
-	}
-
-	private boolean isLineDashed(QuickStyleVals quickStyleVals, ArrayList<LineStyleExt> lineStylesExt, ArrayList<LineStyle> lineStyles) 
-	{
-		LineStyleExt lineStyleExt = getLineStyleExt(quickStyleVals.getQuickStyleLineMatrix(), lineStylesExt);
-		
-		if (lineStyleExt != null)
-		{
-			return lineStyleExt.isDashed();
-		}
-		else
-		{
-			LineStyle lineStyle = getLineStyle(quickStyleVals.getQuickStyleLineMatrix(), lineStyles);
-			return lineStyle != null? lineStyle.isDashed() : false;			
-		}
-	}
-
-	public boolean isLineDashed(QuickStyleVals quickStyleVals)
-	{
-		return isLineDashed(quickStyleVals, lineStylesExt, lineStyles);
-	}
-	
-	public boolean isConnLineDashed(QuickStyleVals quickStyleVals) 
-	{
-		return isLineDashed(quickStyleVals, connLineStylesExt, connLineStyles);
-	}
-
-	private ArrayList<Double> getLineDashPattern(QuickStyleVals quickStyleVals, ArrayList<LineStyleExt> lineStylesExt, ArrayList<LineStyle> lineStyles) 
-	{
-		LineStyleExt lineStyleExt = getLineStyleExt(quickStyleVals.getQuickStyleLineMatrix(), lineStylesExt);
-		
-		if (lineStyleExt != null)
-		{
-			return lineStyleExt.getLineDashPattern();
-		}
-		else
-		{
-			LineStyle lineStyle = getLineStyle(quickStyleVals.getQuickStyleLineMatrix(), lineStyles);
-			return lineStyle != null? lineStyle.getLineDashPattern() : null;
-		}
-	}
-
-	public ArrayList<Double> getLineDashPattern(QuickStyleVals quickStyleVals) 
-	{
-		return getLineDashPattern(quickStyleVals, lineStylesExt, lineStyles);
-	}
-	
-	public ArrayList<Double> getConnLineDashPattern(QuickStyleVals quickStyleVals) 
-	{
-		return getLineDashPattern(quickStyleVals, connLineStylesExt, connLineStyles);
-	}
-
-	private int getArrowSize(QuickStyleVals quickStyleVals, boolean isStart, ArrayList<LineStyleExt> lineStylesExt, ArrayList<LineStyle> lineStyles) 
-	{
-		LineStyleExt lineStyleExt = getLineStyleExt(quickStyleVals.getQuickStyleLineMatrix(), lineStylesExt);
-		
-		if (lineStyleExt != null)
-		{
-			return isStart? lineStyleExt.getStartSize() : lineStyleExt.getEndSize();
-		}
-		else
-		{
-			LineStyle lineStyle = getLineStyle(quickStyleVals.getQuickStyleLineMatrix(), lineStyles);
-			return lineStyle != null? (isStart? lineStyle.getStartSize() : lineStyle.getEndSize()) : 4;
-		}
-	}
-
-	public int getStartSize(QuickStyleVals quickStyleVals) 
-	{
-		return getArrowSize(quickStyleVals, true, lineStylesExt, lineStyles);
-	}
-	
-	public int getConnStartSize(QuickStyleVals quickStyleVals) 
-	{
-		return getArrowSize(quickStyleVals, true, connLineStylesExt, connLineStyles);
-	}
-	
-	public int getEndSize(QuickStyleVals quickStyleVals) 
-	{
-		return getArrowSize(quickStyleVals, false, lineStylesExt, lineStyles);
-	}
-	
-	public int getConnEndSize(QuickStyleVals quickStyleVals) 
-	{
-		return getArrowSize(quickStyleVals, false, connLineStylesExt, connLineStyles);
-	}
-	
-	//Get font color based on QuickStyleFontColor & QuickStyleFontMatrix
-	private Color getFontColor(QuickStyleVals quickStyleVals, ArrayList<OoxmlColor> fontColors)
-	{
-		processTheme();
-		
-		int fontColorStyle = quickStyleVals.getQuickStyleFontColor();
-		OoxmlColor fontColor = null;
-		switch (quickStyleVals.getQuickStyleFontMatrix())
-		{
-			case 1:
-			case 2:
-			case 3:
-			case 4:
-			case 5:
-			case 6:
-				fontColor = fontColors.get(quickStyleVals.getQuickStyleFontMatrix() - 1);
-			break;
-			case 100:
-			case 101:
-			case 102:
-			case 103:
-				if (isMonotoneVariant[themeVariant]) fontColorStyle = 100;
-				
-				int index = quickStyleVals.getQuickStyleFontMatrix() - 100;
-				//get style index of variants
-				//If an edge has a non-standard value, use the dark color
-				if (fontColors != this.fontColors)
-				{
-					fontColor = this.baseColors.get("dk1");
-				}
-				else
-				{
-					fontColor = fontColors.get(variantFontIdx[themeVariant][index] - 1);
-				}
-			break;
-		}
-		
-		Color txtColor;
-		
-		if (fontColor != null)
-		{
-			txtColor = fontColor.getColor(fontColorStyle, this);
-		}
-		else
-		{
-			txtColor = getStyleColor(fontColorStyle);
-		}
-		
-		int styleVariation = quickStyleVals.getQuickStyleVariation();
-		
-		//TODO The formula in the documentation doesn't match how vsdx viewer works. Simply using the fill/line color works!
-		//		Note: Using the fill/line color does not cover all the cases but works with most of the sample files
-		if ((styleVariation & 2) > 0)
-		{
-			Color fillColor = getFillColor(quickStyleVals);
-			HSLColor fillHSLClr = fillColor.toHsl();
-//			HSLColor txtColorHSL = txtColor.toHsl();
-//			if (Math.abs(fillHSLClr.getLum() - txtColorHSL.getLum()) < 0.1616)
-//			{
-//				if (fillHSLClr.getLum() < 0.7292)
-//				{
-//					txtColor = new Color(255, 255, 255);
-//				}
-//				else
-//				{
-					Color lineClr = getLineColor(quickStyleVals);
-					HSLColor lineHSLClr = lineClr.toHsl();
-					if (fillHSLClr.getLum() < lineHSLClr.getLum())
-					{
-						txtColor = fillColor;
-					}
-					else
-					{
-						txtColor = lineClr;
-					}
-//				}
-//			}
-		}
-		
-		return txtColor;
-	}
-
-	//Get font color based on QuickStyleFontColor & QuickStyleFontMatrix
-	public Color getFontColor(QuickStyleVals quickStyleVals)
-	{
-		return getFontColor(quickStyleVals, fontColors);
-	}
-	
-	//Get connection font color based on QuickStyleFontColor & QuickStyleFontMatrix
-	public Color getConnFontColor(QuickStyleVals quickStyleVals)
-	{
-		return getFontColor(quickStyleVals, connFontColors);
-	}
-
-	private int getArrowType(QuickStyleVals quickStyleVals, boolean isStart, ArrayList<LineStyleExt> lineStylesExt, ArrayList<LineStyle> lineStyles) 
-	{
-		LineStyleExt lineStyleExt = getLineStyleExt(quickStyleVals.getQuickStyleLineMatrix(), lineStylesExt);
-		
-		if (lineStyleExt != null)
-		{
-			return isStart? lineStyleExt.getStart() : lineStyleExt.getEnd();
-		}
-		else
-		{
-			LineStyle lineStyle = getLineStyle(quickStyleVals.getQuickStyleLineMatrix(), lineStyles);
-			return lineStyle != null? (isStart? lineStyle.getStart() : lineStyle.getEnd()) : 0;
-		}
-	}
-
-	public int getEdgeMarker(boolean isStart, QuickStyleVals quickStyleVals) 
-	{
-		return getArrowType(quickStyleVals, isStart, lineStylesExt, lineStyles);
-	}
-
-	public int getConnEdgeMarker(boolean isStart, QuickStyleVals quickStyleVals) 
-	{
-		return getArrowType(quickStyleVals, isStart, connLineStylesExt, connLineStyles);
-	}
-
-	
-	private int getLineWidth(QuickStyleVals quickStyleVals, ArrayList<LineStyle> lineStyles) 
-	{
-		LineStyle lineStyle = getLineStyle(quickStyleVals.getQuickStyleLineMatrix(), lineStyles);
-		return lineStyle != null? lineStyle.getLineWidth() : 0;			
-	}
-
-	public int getLineWidth(QuickStyleVals quickStyleVals) 
-	{
-		return getLineWidth(quickStyleVals, lineStyles);
-	}
-	
-	public int getConnLineWidth(QuickStyleVals quickStyleVals) 
-	{
-		return getLineWidth(quickStyleVals, connLineStyles);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/resources/edgeNameU.properties b/src/com/mxgraph/io/vsdx/resources/edgeNameU.properties
deleted file mode 100644
index 08bb686d24ccdc292cc2939a657925c6a7b7b2e8..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/edgeNameU.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-Comm-link=mxgraph.lean_mapping.comm_link_edge
-Comm-link\ 1=mxgraph.lean_mapping.comm_link_edge
-Comm-link\ 2=mxgraph.lean_mapping.comm_link_edge
-Electronic\ information=mxgraph.lean_mapping.electronic_info_flow_edge
-Generalization=connector;endArrow\=block;endSize\=16;endFill\=0
diff --git a/src/com/mxgraph/io/vsdx/resources/export/[Content_Types].xml b/src/com/mxgraph/io/vsdx/resources/export/[Content_Types].xml
deleted file mode 100644
index 20329e0d07f2b19da2dc1113bf03847dfd77c452..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/[Content_Types].xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns='http://schemas.openxmlformats.org/package/2006/content-types'><Default Extension='emf' ContentType='image/x-emf' /><Default Extension='rels' ContentType='application/vnd.openxmlformats-package.relationships+xml' /><Default Extension='xml' ContentType='application/xml' /><Override PartName='/docProps/app.xml' ContentType='application/vnd.openxmlformats-officedocument.extended-properties+xml' /><Override PartName='/docProps/core.xml' ContentType='application/vnd.openxmlformats-package.core-properties+xml' /><Override PartName='/docProps/custom.xml' ContentType='application/vnd.openxmlformats-officedocument.custom-properties+xml' /><Override PartName='/visio/document.xml' ContentType='application/vnd.ms-visio.drawing.main+xml' /><Override PartName='/visio/masters/masters.xml' ContentType='application/vnd.ms-visio.masters+xml' /><Override PartName='/visio/pages/page1.xml' ContentType='application/vnd.ms-visio.page+xml' /><Override PartName='/visio/pages/pages.xml' ContentType='application/vnd.ms-visio.pages+xml' /><Override PartName='/visio/windows.xml' ContentType='application/vnd.ms-visio.windows+xml' /></Types>
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/_rels/.rels b/src/com/mxgraph/io/vsdx/resources/export/_rels/.rels
deleted file mode 100644
index d17b8053f72b56a111f0ce63b51f97d7f7f01ae3..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/_rels/.rels
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships'><Relationship Id='rId1' Type='http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties' Target='docProps/core.xml' /><Relationship Id='rId2' Type='http://schemas.microsoft.com/visio/2010/relationships/document' Target='visio/document.xml' /><Relationship Id='rId3' Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties' Target='docProps/custom.xml' /><Relationship Id='rId4' Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties' Target='docProps/app.xml' /></Relationships>
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/docProps/app.xml b/src/com/mxgraph/io/vsdx/resources/export/docProps/app.xml
deleted file mode 100644
index 364db2d1a951a9b0d2ac42075372cec18ef15be9..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/docProps/app.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Properties xmlns='http://schemas.openxmlformats.org/officeDocument/2006/extended-properties' xmlns:vt='http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'><Application>Microsoft Visio</Application><AppVersion>15.0000</AppVersion><Template /><Manager /><Company /><HyperlinkBase /></Properties>
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/docProps/core.xml b/src/com/mxgraph/io/vsdx/resources/export/docProps/core.xml
deleted file mode 100644
index c7e51089b6c91a15e415ac976ff6be3891ce71c5..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/docProps/core.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cp:coreProperties xmlns:cp='http://schemas.openxmlformats.org/package/2006/metadata/core-properties' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:dcterms='http://purl.org/dc/terms/' xmlns:dcmitype='http://purl.org/dc/dcmitype/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><dc:title /><dc:subject /><dc:creator /><cp:keywords /><dc:description /><cp:category /><dc:language>en-US</dc:language></cp:coreProperties>
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/docProps/custom.xml b/src/com/mxgraph/io/vsdx/resources/export/docProps/custom.xml
deleted file mode 100644
index 3502ae93fabdaf8e01198c84427cda99fec6158c..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/docProps/custom.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Properties xmlns='http://schemas.openxmlformats.org/officeDocument/2006/custom-properties' xmlns:vt='http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes' />
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/visio/_rels/document.xml.rels b/src/com/mxgraph/io/vsdx/resources/export/visio/_rels/document.xml.rels
deleted file mode 100644
index e92b2ea44c2a31122c4ac379e23b59f99e1d0ffd..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/visio/_rels/document.xml.rels
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships'><Relationship Id='rId1' Type='http://schemas.microsoft.com/visio/2010/relationships/masters' Target='masters/masters.xml' /><Relationship Id='rId2' Type='http://schemas.microsoft.com/visio/2010/relationships/pages' Target='pages/pages.xml' /><Relationship Id='rId3' Type='http://schemas.microsoft.com/visio/2010/relationships/windows' Target='windows.xml' /></Relationships>
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/visio/document.xml b/src/com/mxgraph/io/vsdx/resources/export/visio/document.xml
deleted file mode 100644
index 98fef37f3ec855032f8868bce3a94f8b7a0b9969..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/visio/document.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><VisioDocument xmlns='http://schemas.microsoft.com/office/visio/2012/main' xmlns:r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' xml:space='preserve'><DocumentSettings><CustomMenusFile /><CustomToolbarsFile /></DocumentSettings><Colors><ColorEntry IX='0' RGB='#000000' /><ColorEntry IX='1' RGB='#FFFFFF' /><ColorEntry IX='2' RGB='#FF0000' /><ColorEntry IX='3' RGB='#00FF00' /><ColorEntry IX='4' RGB='#0000FF' /><ColorEntry IX='5' RGB='#FFFF00' /><ColorEntry IX='6' RGB='#FF00FF' /><ColorEntry IX='7' RGB='#00FFFF' /><ColorEntry IX='8' RGB='#800000' /><ColorEntry IX='9' RGB='#008000' /><ColorEntry IX='10' RGB='#000080' /><ColorEntry IX='11' RGB='#808000' /><ColorEntry IX='12' RGB='#800080' /><ColorEntry IX='13' RGB='#008080' /><ColorEntry IX='14' RGB='#C0C0C0' /><ColorEntry IX='15' RGB='#E6E6E6' /><ColorEntry IX='16' RGB='#CDCDCD' /><ColorEntry IX='17' RGB='#B3B3B3' /><ColorEntry IX='18' RGB='#9A9A9A' /><ColorEntry IX='19' RGB='#808080' /><ColorEntry IX='20' RGB='#666666' /><ColorEntry IX='21' RGB='#4D4D4D' /><ColorEntry IX='22' RGB='#333333' /><ColorEntry IX='23' RGB='#1A1A1A' /><ColorEntry IX='24' RGB='#000000' /><ColorEntry IX='25' RGB='#FFFFFF' /><ColorEntry IX='26' RGB='#FF0000' /><ColorEntry IX='27' RGB='#00FF00' /><ColorEntry IX='28' RGB='#0000FF' /><ColorEntry IX='29' RGB='#FFFF00' /><ColorEntry IX='30' RGB='#FF00FF' /><ColorEntry IX='31' RGB='#00FFFF' /><ColorEntry IX='32' RGB='#800000' /><ColorEntry IX='33' RGB='#008000' /><ColorEntry IX='34' RGB='#000080' /><ColorEntry IX='35' RGB='#808000' /><ColorEntry IX='36' RGB='#800080' /><ColorEntry IX='37' RGB='#008080' /><ColorEntry IX='38' RGB='#C0C0C0' /><ColorEntry IX='39' RGB='#E6E6E6' /><ColorEntry IX='40' RGB='#CDCDCD' /><ColorEntry IX='41' RGB='#B3B3B3' /><ColorEntry IX='42' RGB='#9A9A9A' /><ColorEntry IX='43' RGB='#808080' /><ColorEntry IX='44' RGB='#666666' /><ColorEntry IX='45' RGB='#4D4D4D' /><ColorEntry IX='46' RGB='#333333' /><ColorEntry IX='47' RGB='#1A1A1A' /></Colors><FaceNames><FaceName ID='0' NameU='Arial Unicode MS' Name='Arial Unicode MS' /><FaceName ID='1' NameU='Symbol' Name='Symbol' /><FaceName ID='2' NameU='Wingdings' Name='Wingdings' /><FaceName ID='3' NameU='Arial' Name='Arial' /><FaceName ID='4' NameU='SimSun' Name='SimSun' /><FaceName ID='5' NameU='PMingLiU' Name='PMingLiU' /><FaceName ID='6' NameU='MS PGothic' Name='MS PGothic' /><FaceName ID='7' NameU='Dotum' Name='Dotum' /><FaceName ID='8' NameU='Sylfaen' Name='Sylfaen' /><FaceName ID='9' NameU='Estrangelo Edessa' Name='Estrangelo Edessa' /><FaceName ID='10' NameU='Vrinda' Name='Vrinda' /><FaceName ID='11' NameU='Shruti' Name='Shruti' /><FaceName ID='12' NameU='Mangal' Name='Mangal' /><FaceName ID='13' NameU='Tunga' Name='Tunga' /><FaceName ID='14' NameU='Sendnya' Name='Sendnya' /><FaceName ID='15' NameU='Raavi' Name='Raavi' /><FaceName ID='16' NameU='Dhenu' Name='Dhenu' /><FaceName ID='17' NameU='Latha' Name='Latha' /><FaceName ID='18' NameU='Gautami' Name='Gautami' /><FaceName ID='19' NameU='Cordia New' Name='Cordia New' /><FaceName ID='20' NameU='MS Farsi' Name='MS Farsi' /><FaceName ID='21' NameU='Gulim' Name='Gulim' /><FaceName ID='22' NameU='Times New Roman' Name='Times New Roman' /></FaceNames><StyleSheets><StyleSheet ID='0' Name='No Style' NameU='No Style'><Cell N='EnableLineProps' V='1' /><Cell N='EnableFillProps' V='1' /><Cell N='EnableTextProps' V='1' /><Cell N='LineWeight' V='0.01' /><Cell N='LineColor' V='0' /><Cell N='LinePattern' V='1' /><Cell N='Rounding' V='0' /><Cell N='EndArrowSize' V='2' /><Cell N='BeginArrow' V='0' /><Cell N='EndArrow' V='0' /><Cell N='BeginArrowSize' V='2' /><Cell N='LineColorTrans' V='0' /><Cell N='FillForegnd' V='1' /><Cell N='FillBkgnd' V='0' /><Cell N='FillPattern' V='1' /><Cell N='ShdwForegnd' V='0' /><Cell N='ShdwBkgnd' V='1' /><Cell N='ShdwPattern' V='0' /><Cell N='FillForegndTrans' V='0' /><Cell N='FillBkgndTrans' V='0' /><Cell N='ShdwForegndTrans' V='0' /><Cell N='ShdwBkgndTrans' V='1' /><Cell N='ShapeShdwType' V='0' /><Cell N='ShapeShdwOffsetX' V='0' /><Cell N='ShapeShdwOffsetY' V='0' /><Cell N='ShapeShdwObliqueAngle' V='0' /><Cell N='ShapeShdwScaleFactor' V='0' /><Cell N='LeftMargin' V='0' /><Cell N='RightMargin' V='0' /><Cell N='TopMargin' V='0' /><Cell N='BottomMargin' V='0' /><Cell N='VerticalAlign' V='1' /><Cell N='TextBkgnd' V='0' /><Cell N='DefaultTabStop' V='0.5905511811023622' /><Cell N='TextDirection' V='0' /><Cell N='TextBkgndTrans' V='0' /><Section N='Character'><Row IX='0'><Cell N='Color' V='0' /><Cell N='Style' V='0' /><Cell N='FontScale' V='1' /><Cell N='Size' V='0.1666666666666667' /><Cell N='LangID' V='1033' /></Row></Section><Section N='Paragraph'><Row IX='0'><Cell N='IndLeft' V='0' /><Cell N='IndRight' V='0' /><Cell N='SpLine' V='-1.2' /><Cell N='HorzAlign' V='1' /></Row></Section></StyleSheet></StyleSheets><DocumentSheet Name='TheDoc' NameU='TheDoc'><Cell N='DocLangID' V='en-US' /></DocumentSheet><HeaderFooter HeaderFooterColor='#000000'><HeaderFooterFont CharSet='0' OutPrecision='0' ClipPrecision='0' Quality='0' PitchAndFamily='0' /><HeaderMargin>0</HeaderMargin><FooterMargin>0</FooterMargin><HeaderLeft /><HeaderCenter /><HeaderRight /><FooterLeft /><FooterCenter /><FooterRight /></HeaderFooter></VisioDocument>
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/visio/masters/_rels/masters.xml.rels b/src/com/mxgraph/io/vsdx/resources/export/visio/masters/_rels/masters.xml.rels
deleted file mode 100644
index e32eeb01e27eda6da45b7620d966b449bc3dcedc..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/visio/masters/_rels/masters.xml.rels
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships' />
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/visio/masters/masters.xml b/src/com/mxgraph/io/vsdx/resources/export/visio/masters/masters.xml
deleted file mode 100644
index e8f244a09312e635ae4a626ae3442b78efd3a3e2..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/visio/masters/masters.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><Masters xmlns='http://schemas.microsoft.com/office/visio/2012/main' xmlns:r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' xml:space='preserve' />
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/visio/pages/_rels/page1.xml.rels b/src/com/mxgraph/io/vsdx/resources/export/visio/pages/_rels/page1.xml.rels
deleted file mode 100644
index b6896d6fd3101c060bdcf68e5eb8e2076eb01a73..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/visio/pages/_rels/page1.xml.rels
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships' />
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/export/visio/windows.xml b/src/com/mxgraph/io/vsdx/resources/export/visio/windows.xml
deleted file mode 100644
index 7e2b55b410a2a195b9804d15df59329f175e7504..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/export/visio/windows.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Windows ClientWidth='0' ClientHeight='0' xmlns='http://schemas.microsoft.com/office/visio/2012/main' xmlns:r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' xml:space='preserve' />
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/resources/nameU.properties b/src/com/mxgraph/io/vsdx/resources/nameU.properties
deleted file mode 100644
index 513178f083014e06b80f25b36de807cc4a62e050..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/nameU.properties
+++ /dev/null
@@ -1,207 +0,0 @@
-Swimlane=swimlane;horizontal\=0;
-#new additions for custom Electrical set from here
-#Fundamental Items
-Resistor=mxgraph.electrical.resistors.resistor_1
-Capacitor=mxgraph.electrical.capacitors.capacitor_1
-AC source=mxgraph.electrical.signal_sources.ac_source
-DC source=mxgraph.electrical.signal_sources.dc_source_3
-Equipotentiality=mxgraph.electrical.signal_sources.signal_ground
-Ground=mxgraph.electrical.signal_sources.protective_earth
-Inductor=mxgraph.electrical.inductors.inductor
-Crystal=mxgraph.electrical.miscellaneous.crystal_1;direction=south
-Antenna=mxgraph.electrical.radio.aerial_-_antenna_2
-Chassis=mxgraph.electrical.miscellaneous.chassis
-Circuit breaker=mxgraph.electrical.miscellaneous.circuit_breaker;direction=south
-Ideal source=mxgraph.electrical.signal_sources.ideal_source
-Generic component=mxgraph.electrical.miscellaneous.generic_component
-Accumulator=mxgraph.electrical.miscellaneous.monocell_battery
-Alternating pulse=mxgraph.electrical.waveforms.sine_wave
-Half inductor=mxgraph.electrical.inductors.half_inductor
-Explosive squib=mxgraph.electrical.signal_sources.explosive_squib
-Ferrite core=mxgraph.electrical.inductors.ferrite_core
-Fuse=mxgraph.electrical.miscellaneous.fuse_4;direction=south
-Permanent magnet=mxgraph.electrical.miscellaneous.permanent_magnet
-Bell=mxgraph.electrical.electro-mechanical.bell
-Magnet core=mxgraph.electrical.inductors.magnetic_core;direction=south
-Thermal element=mxgraph.electrical.miscellaneous.thermal_element
-Saw tooth=mxgraph.electrical.waveforms.sawtooth
-Igniter plug=mxgraph.electrical.miscellaneous.igniter_plug
-Loop antenna=mxgraph.electrical.miscellaneous.loop_antenna
-Microphone 2=mxgraph.electrical.radio.microphone_2
-Oscillator=mxgraph.electrical.signal_sources.ac_source
-Pickup head=mxgraph.electrical.abstract.dac;flipH=1
-Squib ignitor=mxgraph.electrical.miscellaneous.squib_ignitor
-Battery=mxgraph.electrical.miscellaneous.monocell_battery;flipH=1
-Pulse=mxgraph.electrical.waveforms.pulse_1
-Speaker=mxgraph.electrical.electro-mechanical.loudspeaker
-Transducer=mxgraph.electrical.miscellaneous.transducer
-Transducer 2=mxgraph.electrical.miscellaneous.transducer_2
-Thermocouple=mxgraph.electrical.miscellaneous.thermocouple
-Thermopile=mxgraph.electrical.miscellaneous.thermopile
-Lamp=mxgraph.electrical.opto_electronics.lamp
-Lamp 2=mxgraph.electrical.miscellaneous.light_bulb
-Indicator=mxgraph.electrical.miscellaneous.indicator
-Surge protectors=mxgraph.electrical.miscellaneous.surge_protector
-Surge protectors 2=mxgraph.electrical.miscellaneous.surge_protector_2
-Material=rect
-Sensing link squib=mxgraph.electrical.miscellaneous.sensing_link_squib
-Fluorescent lamp=mxgraph.electrical.miscellaneous.flourescent_lamp
-Delay element=mxgraph.electrical.miscellaneous.delay_element
-Microphone=mxgraph.electrical.radio.microphone_1;flipH=1
-Step function=mxgraph.electrical.waveforms.step_1
-Buzzer=mxgraph.electrical.radio.buzzer
-Current controlled current source=mxgraph.electrical.signal_sources.dependent_source_2;flipV=1
-Voltage controlled current source=mxgraph.electrical.signal_sources.dependent_source_2;flipV=1
-Current controlled voltage source=mxgraph.electrical.signal_sources.dependent_source_3
-Voltage controlled voltage source=mxgraph.electrical.signal_sources.dependent_source_3
-Multicell battery=mxgraph.electrical.miscellaneous.multicell_battery;flipV=1
-Multicell battery with taps=mxgraph.electrical.miscellaneous.multicell_battery_tapped;flipV=1
-Attenuator=mxgraph.electrical.resistors.attenuator
-#Rotating Equipment and Mech. Functions
-Rotating machine=ellipse
-Armature=mxgraph.electrical.rot_mech.armature
-#Brush=
-Field=mxgraph.electrical.rot_mech.field
-Permanent magnet=mxgraph.electrical.miscellaneous.permanent_magnet
-Winding connection=mxgraph.electrical.rot_mech.winding_connection
-Synchro=mxgraph.electrical.rot_mech.synchro
-Brake=trapezoid
-Gearing=mxgraph.electrical.rot_mech.gearing
-Rotation=mxgraph.electrical.rot_mech.rotation
-Clutch=mxgraph.electrical.rot_mech.clutch
-Clutch 2=mxgraph.electrical.rot_mech.clutch_2
-Delayed action=mxgraph.electrical.rot_mech.delayed_action
-Manual control=mxgraph.electrical.rot_mech.manual_control
-Blocking device=mxgraph.electrical.rot_mech.blocking_device
-Latching device=mxgraph.electrical.rot_mech.latching_device
-Mechanical interlock=mxgraph.electrical.rot_mech.mechanical_interlock
-Automatic return=mxgraph.electrical.rot_mech.automatic_return
-Detent=mxgraph.electrical.rot_mech.detent
-#Switches and Relays
-Relay=mxgraph.electrical.electro-mechanical.relay
-Relay contacts=mxgraph.electrical.electro-mechanical.relay_contacts
-Switch disconnector=mxgraph.electrical.electro-mechanical.switch_disconnector;direction=north
-Fuse=mxgraph.electrical.electro-mechanical.fuse;direction=north
-Pilot light=mxgraph.electrical.electro-mechanical.pilot_light
-Relay coil=mxgraph.electrical.electro-mechanical.relay_coil_2
-Mercury switch=mxgraph.electrical.electro-mechanical.mercury_switch
-Mercury switch 2=mxgraph.electrical.electro-mechanical.mercury_switch_2
-Liquid level actuated=mxgraph.electrical.electro-mechanical.liquid_level_actuated
-Liquid level actuated 2=mxgraph.electrical.electro-mechanical.liquid_level_actuated_2
-Gas flow actuated=mxgraph.electrical.electro-mechanical.gas_flow_actuated
-Flow actuated=mxgraph.electrical.electro-mechanical.flow_actuated
-Pressure actuated=mxgraph.electrical.electro-mechanical.pressure_actuated
-Temperature actuated=mxgraph.electrical.electro-mechanical.temperature_actuated
-Safety interlock=mxgraph.electrical.electro-mechanical.safety_interlock
-Temperature switch=mxgraph.electrical.electro-mechanical.temperature_switch
-Thermostat=mxgraph.electrical.electro-mechanical.thermostat
-Limit switch=mxgraph.electrical.electro-mechanical.limit_switch;direction=north
-Circuit breaker=mxgraph.electrical.electro-mechanical.circuit_breaker;direction=north
-Selector switch=mxgraph.electrical.electro-mechanical.selector_switch
-Shorting selector=mxgraph.electrical.electro-mechanical.shorting_selector
-Proximity limit switch=mxgraph.electrical.electro-mechanical.proximity_limit_switch
-Inertia switch=mxgraph.electrical.electro-mechanical.inertia_switch
-Pushbutton break=mxgraph.electrical.electro-mechanical.pushbutton_break
-Manual switch=mxgraph.electrical.electro-mechanical.manual_switch;direction=north
-Make contact=mxgraph.electrical.electro-mechanical.make_contact;direction=north
-SPST=mxgraph.electrical.electro-mechanical.simple_switch
-SPDT=mxgraph.electrical.electro-mechanical.2-way_switch
-Break contact=mxgraph.electrical.electro-mechanical.break_contact
-Two way contact=mxgraph.electrical.electro-mechanical.two_way_contact;direction=north
-Passing make-contact=mxgraph.electrical.electro-mechanical.passing_make_contact;direction=north
-Stay put=mxgraph.electrical.electro-mechanical.stay_put;direction=north
-DPST=mxgraph.electrical.electro-mechanical.dpst
-Spring return=mxgraph.electrical.electro-mechanical.spring_return;direction=north
-Spring return 2=mxgraph.electrical.electro-mechanical.spring_return_2
-Spring return 3=mxgraph.electrical.electro-mechanical.spring_return_2;flipV=1
-Limit switch n/o=mxgraph.electrical.electro-mechanical.limit_switch_no
-Limit switch n/c=mxgraph.electrical.electro-mechanical.limit_switch_nc
-DPDT=mxgraph.electrical.electro-mechanical.dpdt
-2 position switch=mxgraph.electrical.electro-mechanical.2_position_switch
-3 position switch=mxgraph.electrical.electro-mechanical.3_position_switch
-4 position switch=mxgraph.electrical.electro-mechanical.4_position_switch
-Pushbutton make=mxgraph.electrical.electro-mechanical.pushbutton_make
-Pushbutton 2-circuit=mxgraph.electrical.electro-mechanical.pushbutton_2_circuit
-Time delay make=mxgraph.electrical.electro-mechanical.time_delay_make
-Time delay break=mxgraph.electrical.electro-mechanical.time_delay_break
-Time delay make 2=mxgraph.electrical.electro-mechanical.time_delay_make_2;direction=north
-Time delay break 2=mxgraph.electrical.electro-mechanical.time_delay_break_2;direction=north
-Isolator=mxgraph.electrical.electro-mechanical.isolator;direction=north
-Change-over contact=mxgraph.electrical.electro-mechanical.changeover_contact;direction=north
-#Terminals and Connectors
-Adapter=mxgraph.electrical.miscellaneous.adapter
-Circuit terminal=ellipse;perimeter=ellipsePerimeter
-#M/F contact=
-M/F contact 2=mxgraph.electrical.miscellaneous.mf_contact_2
-Terminal board=mxgraph.electrical.miscellaneous.terminal_board
-Cable termination=mxgraph.electrical.miscellaneous.cable_termination
-2-conductor jack=mxgraph.electrical.miscellaneous.2_conductor_jack
-3-conductor jack=mxgraph.electrical.miscellaneous.3_conductor_jack
-2-conductor plug=mxgraph.electrical.miscellaneous.2_conductor_plug
-3-conductor plug=mxgraph.electrical.miscellaneous.3_conductor_plug
-Normalled jacks=mxgraph.electrical.miscellaneous.normalled_jacks
-Normalled jack=mxgraph.electrical.miscellaneous.normalled_jack
-Coaxial outside conductor=mxgraph.electrical.miscellaneous.coaxial_outside_conductor
-Coaxial center conductor=mxgraph.electrical.miscellaneous.coaxial_center_conductor
-Large D connector=mxgraph.electrical.miscellaneous.large_d_connector
-Small D connector=mxgraph.electrical.miscellaneous.small_d_connector
-C header connector=mxgraph.electrical.miscellaneous.c_header_connector
-AC out=mxgraph.electrical.miscellaneous.ac_out
-Shielded jack/plug=mxgraph.electrical.miscellaneous.shielded_jack_plug
-Coaxial jack/plug=mxgraph.electrical.miscellaneous.coaxial_jack_plug
-F/M 2-conductor 1=mxgraph.electrical.miscellaneous.f_m_2_conductor_1
-F/M 2-conductor 2=mxgraph.electrical.miscellaneous.f_m_2_conductor_2
-F/M 2-conductor 3=mxgraph.electrical.miscellaneous.f_m_2_conductor_3
-F/M 3-conductor 1=mxgraph.electrical.miscellaneous.f_m_3_conductor_1
-F/M 3-conductor 2=mxgraph.electrical.miscellaneous.f_m_3_conductor_2
-F/M 3-conductor 3=mxgraph.electrical.miscellaneous.f_m_3_conductor_3
-F/M 3-conductor 4=mxgraph.electrical.miscellaneous.f_m_3_conductor_4
-F/M 3-conductor 5=mxgraph.electrical.miscellaneous.f_m_3_conductor_5
-#Transformers and Windings
-Transformer=mxgraph.electrical.inductors.transformer;direction=north
-Magnetic core=mxgraph.electrical.inductors.magnetic_core
-Inductor=mxgraph.electrical.inductors.inductor
-Choke=mxgraph.electrical.inductors.choke
-Variometer=mxgraph.electrical.inductors.variometer
-Coaxial choke=mxgraph.electrical.inductors.coaxial_choke
-Transductor=mxgraph.electrical.inductors.transductor
-Saturating transformer=mxgraph.electrical.inductors.saturating_transformer
-Transformer 2=mxgraph.electrical.signal_sources.current_source
-Adjustable transformer=mxgraph.electrical.inductors.adjustable_transformer
-1-phase induction volt. reg.=mxgraph.electrical.inductors.1_phase_induction_volt_reg
-Triplex induction volt. reg.=mxgraph.electrical.inductors.triplex_induction_volt_reg
-Induction voltage regulator=mxgraph.electrical.inductors.induction_voltage_regulator
-Current transformer 1=mxgraph.electrical.inductors.current_transformer_1
-Current transformer 2=mxgraph.electrical.inductors.current_transformer_2
-Current transformer 3=mxgraph.electrical.inductors.current_transformer_3
-Potential transformer=mxgraph.electrical.inductors.potential_transformer
-Potential transformer 2=mxgraph.electrical.signal_sources.current_source;direction=north
-Pot. trans. 3 windings=mxgraph.electrical.inductors.pot_trans_3_windings
-Outdoor metering device=mxgraph.electrical.inductors.outdoor_metering_device
-Linear coupler=mxgraph.electrical.inductors.linear_coupler
-#Transmission paths
-Bus width=mxgraph.electrical.transmission.bus_width
-Straight bus=mxgraph.electrical.transmission.straightBus
-Line concentrator=mxgraph.electrical.transmission.line_concentrator
-Cable group=mxgraph.electrical.transmission.cable_group
-#Lead group=
-Overground enclosure=mxgraph.electrical.transmission.overground_enclosure
-Optical fiber=mxgraph.electrical.transmission.optical_fiber
-Terminal=ellipse
-Terminal 3-phase=mxgraph.electrical.transmission.terminal_3_phase
-Test point=mxgraph.electrical.transmission.testPoint
-Label=ellipse;perimeter=ellipsePerimeter
-Line/cable=mxgraph.electrical.transmission.line_cable
-Anticreepage device=mxgraph.electrical.transmission.anticreepage_device
-#Transmission path=
-#Direction of flow=
-Elbow bus 1=mxgraph.arrows2.bendArrow;dy=15;dx=38;notch=0;arrowHead=55;direction=south
-Elbow bus 2=mxgraph.arrows2.bendArrow;dy=15;dx=38;notch=0;arrowHead=55;direction=south;flipV=1
-2-line bus=mxgraph.electrical.transmission.2_line_bus
-3-line bus=mxgraph.electrical.transmission.3_line_bus
-4-line bus=mxgraph.electrical.transmission.4_line_bus
-8-line bus=mxgraph.electrical.transmission.8_line_bus
-2-line bus elbow=mxgraph.electrical.transmission.twoLineBusElbow;notch=25
-3-line bus elbow=mxgraph.electrical.transmission.threeLineBusElbow;notch=25
-4-line bus elbow=mxgraph.electrical.transmission.fourLineBusElbow;notch=25
-8-line bus elbow=mxgraph.electrical.transmission.eightLineBusElbow;notch=25
diff --git a/src/com/mxgraph/io/vsdx/resources/nameU.tmp b/src/com/mxgraph/io/vsdx/resources/nameU.tmp
deleted file mode 100644
index 57c007f8961b8035ca3dc07fb3230ff69b5ff859..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/resources/nameU.tmp
+++ /dev/null
@@ -1,2290 +0,0 @@
-Circle=ellipse
-Ellipse=ellipse
-On-page\ reference=ellipse
-Process\ (circle)=ellipse
-XOR=ellipse
-OR=ellipse
-AND=ellipse
-Enterprise\ area=ellipse
-Operation=ellipse
-System\ support=ellipse
-Connector\ (TQM)=ellipse
-Fabrication=ellipse
-On-page\ reference=ellipse
-Reference\ oval=ellipse
-Colored\ shapes=ellipse
-Circle,\ ellipse=ellipse
-Label=ellipse
-Circular\ table=ellipse
-Round\ table=ellipse
-Initial\ State=ellipse
-Use\ Case=ellipse
-Fabrication=ellipse
-Water\ heater=ellipse
-Racetrack\ table=ellipse
-Substation=ellipse
-Callout\ 2=ellipse
-Spot=ellipse
-Sheet=rect
-
-Rounded\ square=rounded\=1
-Rounded\ rectangle=rounded\=1
-Rounded\ process=rounded\=1
-Function=rounded\=1
-Main\ process=rounded\=1
-Component=rounded\=1
-Issue=rounded\=1
-Corner\ table=rounded\=1
-Main\ object=rounded\=1
-Web\ page=rounded\=1
-Pop-up=rounded\=1
-State\ context=rounded\=1
-
-Triangle=triangle
-Alternative=triangle
-Extract=triangle
-Merge=triangle
-Inbound\ goods=triangle
-Storage=triangle
-Move=triangle
-Store=triangle
-Manual\ file=triangle
-Reference\ triangle=triangle
-Correcting\ element=triangle
-
-Hexagon=hexagon
-Decision\ 1=hexagon
-Event=hexagon
-Data\ transmission=hexagon
-Reference\ hexagon=hexagon
-Hex\ stone=hexagon
-6-phase\ hexagonal=hexagon
-
-Circle\ callout=cloud
-Cloud=cloud
-
-Firewall=image;image\=img/lib/clip_art/networking/Firewall_02_128x128.png
-Modem=image;image\=img/lib/clip_art/networking/Modem_128x128.png
-Server=image;image\=img/lib/clip_art/computers/Server_Tower_128x128.png
-PC=image;image\=img/lib/clip_art/computers/Monitor_Tower_128x128.png;flipH=1
-
-Entity\ relationship=rhombus
-Decision\ 2=rhombus
-Check=rhombus
-Decision\ 1\ (TQM)=rhombus
-Decision\ 2\ (TQM)=rhombus
-Check\ 1\ (audit)=rhombus
-
-And\ gate=mxgraph.electrical.logic_gates.and
-AND\ gate=mxgraph.electrical.logic_gates.and
-Logic\ gate\ 2=mxgraph.electrical.logic_gates.and
-
-# Mate did it from here on
-
-Vertical\ holder=swimlane
-Functional\ band=swimlane
-Multiple\ process=doubleEllipse
-Final\ State=doubleEllipse
-Drum\ type=cylinder
-Datastore=cylinder
-Direct\ data=cylinder
-Or\ gate=mxgraph.electrical.logic_gates.or
-OR\ gate=mxgraph.electrical.logic_gates.or
-XOR\ (Exclusive\ Or)=mxgraph.electrical.logic_gates.xor
-Concentrating=mxgraph.basic.trapezoid
-Signal\ generator=mxgraph.electrical.instruments.signal_generator
-Manual\ operation=mxgraph.basic.trapezoid
-Inverter=mxgraph.electrical.logic_gates.inverter
-
-# General - Basic Shapes
-Ellipse=ellipse
-Rounded\ Rectangle=rounded\=1
-Triangle=triangle
-45\ degree\ single=mxgraph.arrows.arrow_left
-45\ degree\ double=mxgraph.arrows.two_way_arrow_horizontal
-Pentagon=mxgraph.basic.pentagon
-Hexagon=hexagon
-#Octagon=;
-Star\ 5=mxgraph.basic.star
-Star\ 6=mxgraph.basic.6_point_star
-#Star\ 7=;
-Center\ drag\ circle=ellipse
-Right\ triangle=mxgraph.basic.orthogonal_triangle
-Cross=mxgraph.basic.cross
-Shadowed\ box=shadow=1
-3-D\ box=cube
-Rounded\ Square=rounded\=1
-60\ degree\ single=mxgraph.arrows.slender_left_arrow
-Fancy\ arrow=mxgraph.arrows.sharp_edged_arrow
-60\ degree\ double=mxgraph.arrows.slender_two_way_arrow
-45\ degree\ tail=mxgraph.arrows.slender_wide_tailed_arrow
-60\ degree\ tail=mxgraph.arrows.slender_wide_tailed_arrow
-Flexi-arrow\ 1=mxgraph.arrows.stylised_notched_arrow
-Flexi-arrow\ 2=mxgraph.arrows.left_sharp_edged_head_arrow
-Flexi-arrow\ 3=mxgraph.arrows.slender_wide_tailed_arrow
-Double\ flexi-arrow=mxgraph.arrows.slender_two_way_arrow
-
-#\ General - Blocks
-Diamond=rhombus
-Arrow\ box=mxgraph.arrows.callout_up_arrow
-1-D\ single=mxgraph.arrows.arrow_right
-1-D\ double=mxgraph.arrows.slender_two_way_arrow
-2-D\ single=mxgraph.arrows.arrow_right
-2-D\ double=mxgraph.arrows.slender_two_way_arrow
-#Curved\ arrow=;
-1-D\ single,\ open=mxgraph.arrows.arrow_right
-2-D\ single,\ open=mxgraph.arrows.arrow_right
-Button=mxgraph.ios.iButton
-Concentric\ layer\ 1=ellipse
-Concentric\ layer\ 2=ellipse
-Concentric\ layer\ 3=ellipse
-Concentric\ center=ellipse
-#Partial\ layer\ 1=;
-#Partial\ layer\ 2=;
-#Partial\ layer\ 3=;
-#Partial\ layer\ 4=;
-#Double\ tree\ square=;
-#Double\ tree\ sloped=;
-#Multi-tree\ square=;
-#Multi-tree\ sloped=;
-
-# General - Blocks raised
-Square\ block=shadow\=1
-Horizontal\ bar=shadow\=1
-Vertical\ bar=shadow\=1
-Left\ arrow=mxgraph.arrows.slender_left_arrow;shadow\=1
-Right\ arrow=mxgraph.arrows.slender_left_arrow;shadow\=1
-Up\ arrow=mxgraph.arrows.slender_left_arrow;shadow\=1
-Down\ arrow=mxgraph.arrows.slender_left_arrow;shadow\=1
-Left\ /\ right\ arrow=mxgraph.arrows.slender_two_way_arrow;shadow\=1
-Up\ /\ down\ arrow=mxgraph.arrows.slender_two_way_arrow;shadow\=1
-Up\ arrow=\ open=mxgraph.arrows.slender_left_arrow;shadow\=1
-Down\ arrow=\ open=mxgraph.arrows.slender_left_arrow;shadow\=1
-Left\ arrow=\ open=mxgraph.arrows.slender_left_arrow;shadow\=1
-Right\ arrow=\ open=mxgraph.arrows.slender_left_arrow;shadow\=1
-#Elbow\ 1=;
-#Elbow\ 2=;
-#Elbow\ 3=;
-#Elbow\ 4=;
-#Frame=;
-
-# General - Blocks with perspective
-1-D\ Up\ /\ down\ arrow=mxgraph.arrows.slender_two_way_arrow
-1-D\ Left\ /\ right\ arrow=mxgraph.arrows.slender_two_way_arrow
-
-# Business - Brainstorming - Brainstorming shapes
-Main\ topic=ellipse
-
-# Business - Brainstorming - Legend shapes
-To\ do=mxgraph.mockup.form_elements.checkbox_off
-Done=mxgraph.mockup.form_elements.checkbox_on
-#Idea=;
-#Needs\ follow\ up=;
-Important=mxgraph.mockup.misc.warning_icon
-Question=mxgraph.mockup.misc.help_icon
-High\ importance=mxgraph.arrows.arrow_up
-Low\ importance=mxgraph.arrows.arrow_down
-#Legend=;
-Good=mxgraph.basic.smiley
-#Bad=;
-Priority\ 1=ellipse
-Priority\ 2=ellipse
-Priority\ 3=ellipse
-Delete=mxgraph.basic.x
-Do\ not\ do=mxgraph.basic.x
-Meeting=mxgraph.mockup.calendars.calendar_1
-Information=mxgraph.mockup.misc.information_icon
-Star=mxgraph.basic.star
-#Task=
-#Attention=
-Time=mxgraph.bpmn.timer_start
-Warning=mxgraph.mockup.misc.warning_icon
-#Note=
-
-# Business - Business process - Audit Diagram Shapes
-Tagged\ document=mxgraph.flowchart.document
-I/O=mxgraph.basic.parallelepiped
-Manual\ operation=mxgraph.basic.trapezoid
-Terminator=mxgraph.flowchart.terminator
-Manual\ file=triangle
-Display=mxgraph.flowchart.display
-On-page\ reference=ellipse
-Off-page\ reference=mxgraph.arrows.signal-in_arrow
-Divided\ process=swimlane
-Multi\ proc/doc=mxgraph.flowchart.multi-document
-#Lined/Shaded\ process=
-Lined\ document=mxgraph.flowchart.document
-Multi\ document=mxgraph.flowchart.multi-document
-Disk\ storage=mxgraph.flowchart.stored_data
-Variable\ start=mxgraph.pid.vessels.drum_or_condenser
-Feedback=mxgraph.arrows.signal-in_arrow
-Feedback\ arrow=triangle
-#Diskette\ 1=
-#Diskette\ 2=
-#Magnetic\ tape=
-Data\ transmission=hexagon
-Manual\ input=mxgraph.flowchart.manual_input
-Check\ 1\ (audit)=rhombus
-Compare\ 1=rhombus
-Reference\ point=mxgraph.arrows.arrow_right
-Event=rounded\=1
-#Manual\ input=
-
-#supported forms (probably a semi-random group)
-6-phase\ double\ delta=mxgraph.basic.6_point_star
-Actor=umlActor
-Bollard=doubleEllipse
-Brake=trapezoid
-Card=card
-Collate=mxgraph.flowchart.collate
-Concentricity=doubleEllipse
-Constraint=note
-Data\ process=ellipse
-Document/\ file=note
-Encl\ ceiling\ lum=mxgraph.mockup.graphics.iconGrid;gridSize\=1,1
-Event.43=hexagon
-Fluid\ separators=mxgraph.basic.pentagon
-Internal\ storage=mxgraph.flowchart.internal_storage
-I/O\ port=mxgraph.electrical.abstract.dac
-Kickoff=triangle
-Magnetic\ tape=mxgraph.flowchart.sequential_data
-Manual\ input=mxgraph.flowchart.manual_input
-Microform=tape
-Node=cube
-Note=note
-Octagon=mxgraph.basic.octagon
-Paper\ tape=tape
-Predefined\ process=process
-Procedure=process
-Reducer=trapezoid
-Return=mxgraph.flowchart.or
-Screening\ device=process
-Security\ booth=mxgraph.mockup.graphics.iconGrid;gridSize\=1,1
-Selectable\ compressor1=trapezoid
-Sequential\ data=mxgraph.flowchart.sequential_data
-Slope=mxgraph.basic.orthogonal_triangle
-State=rounded\=1
-State.5=ellipse
-Stop\ state\ 2=triangle
-Stored\ data=mxgraph.flowchart.stored_data
-Stud=mxgraph.flowchart.or
-Surface\ profile=mxgraph.basic.half_circle
-Transportation=mxgraph.arrows.arrow_right
-User=umlActor
-Backing=mxgraph.basic.half_circle
-
-# Active Directory Objects
-Domain=image;image\=img/lib/clip_art/computers/Server_Rack_128x128.png
-Computer=image;image\=img/lib/clip_art/computers/Monitor_Tower_128x128.png
-User=image;image\=img/lib/clip_art/people/Worker_Man_128x128.png
-Container=folder
-Print\ queue=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-Contact=folder
-Organizational\ unit=folder
-Policy=image;image\=img/lib/clip_art/computers/Server_Rack_128x128.png
-Volume=image;image\=img/lib/clip_art/networking/Bridge_128x128.png
-Generic\ object=folder
-WAN=cloud
-Site\ or\ subnet=ellipse
-Domain\ contrl.\ 3D=image;image\=img/lib/clip_art/computers/Server_Tower_128x128.png
-Client=image;image\=img/lib/clip_art/computers/Workstation_128x128.png
-Site\ or\ subnet\ 2D=ellipse
-Domain\ 2D=triangle
-Domain\ contrl.\ 2D=mxgraph.rack.general.server_2
-
-#Analog and Digital Logic
-Flip-flop=mxgraph.electrical.logic_gates.synchronous_rs_latch
-Negative\ logic\ dot=ellipse
-Signal\ waveforms=mxgraph.electrical.waveforms.square_wave
-Clock=mxgraph.electrical.instruments.signal_generator
-Amplifier=mxgraph.electrical.iec417.amp
-Logic\ gate\ 1=mxgraph.electrical.iec_logic_gates.and
-Buffer=mxgraph.electrical.logic_gates.buffer
-Integrator=mxgraph.electrical.op_amps.integrator
-Summing\ amplifier=mxgraph.electrical.op_amps.summing_amplifier
-Operational\ amplifier\ 2=mxgraph.electrical.abstract.operational_amp_1
-Positional\ servo=mxgraph.pid.vessels.tank
-
-#Annotations
-Revision\ cloud=cloud
-
-# Basic Flowchart Shapes
-Process=mxgraph.flowchart.process
-Decision=mxgraph.flowchart.decision
-Subprocess=mxgraph.flowchart.predefined_process
-Start/End=mxgraph.flowchart.terminator
-Data=mxgraph.flowchart.data
-Document=mxgraph.flowchart.document
-Database=mxgraph.flowchart.direct_data
-External\ Data=mxgraph.flowchart.stored_data
-Custom\ 1=mxgraph.flowchart.manual_input
-Custom\ 2=mxgraph.flowchart.manual_operation
-Custom\ 3=mxgraph.flowchart.card
-Custom\ 4=mxgraph.flowchart.preparation
-
-# TODO BPMN groups need a different approach, we have most of these shapes, but in a composite form
-# BPMN Activities
-Task=ext;rounded\=1
-Collapsed\ Sub-Process=ext;rounded\=1;symbol0\=plus;symbol0Width\=14;symbol0Height\=14;symbol0Align\=center;symbol0VerticalAlign\=bottom;
-Expanded\ Sub-Process=ext;rounded\=1
-Transaction\ Expanded\ Sub-Process=shape=\ext;rounded\=1;double\=1;
-
-# BPMN Basic Shapes
-Gateway=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=none;symbol\=general;
-Data\ Object=note
-
-# BPMN Events
-String\ b\ =\ shape\=mxgraph.bpmn.shape;verticalLabelPosition=bottom;verticalAlign=top;perimeter=ellipsePerimeter;outline=;
-Start\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=standard;symbol\=general;
-Intermediate\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=general;
-Intermediate\ (Throwing)\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=general;
-End\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=general;
-Start\ Message\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=standard;symbol\=message;
-Intermediate\ Message\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=catching;symbol\=message;
-Intermediate\ (Throwing)\ Message\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=message;
-End\ Message\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=message;
-Start\ Timer\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=standard;symbol\=timer;
-Intermediate\ Timer\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=catching;symbol\=timer;
-Intermediate\ Error\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=boundInt;symbol\=error;
-End\ Error\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=error;
-Intermediate\ Cancel\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=boundInt;symbol\=cancel;
-End\ Cancel\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=cancel;
-End\ Terminate\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=terminate;
-Intermediate\ Compensation\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=boundInt;symbol\=compensation;
-Intermediate\ (Throwing)\ Compensation\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=compensation;
-End\ Compensation\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=compensation;
-Start\ Conditional\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=standard;symbol\=conditional;
-Intermediate\ Conditional\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=catching;symbol\=conditional;
-Intermediate\ Link\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=catching;symbol\=link;
-Intermediate\ (Throwing)\ Link\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=link;
-Start\ Signal\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=standard;symbol\=signal;
-Intermediate\ Signal\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=catching;symbol\=signal;
-Intermediate\ (Throwing)\ Signal\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=signal;
-End\ Signal\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=signal;
-Start\ Multiple\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=standard;symbol\=multiple;
-Intermediate\ Multiple\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=catching;symbol\=multiple;
-Intermediate\ (Throwing)\ Multiple\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=multiple;
-End\ Multiple\ Event=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=multiple;
-
-# BPMN Gateways
-b\ =\ shape\=mxgraph.shape\=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=;
-Exclusive\ Data\ Gateway=rhombus
-Exclusive\ Data\ Gateway\ (with\ Marker)=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=none;symbol=exclusiveGw;
-Exclusive\ Event\ Gateway=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=catching;symbol=multiple;
-Inclusive\ Gateway=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=end;symbol=general;
-Parallel\ Gateway=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=none;symbol=parallelGw;
-Complex\ Gateway=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=rhombusPerimeter;background\=gateway;outline\=none;symbol=complexGw;
-
-# COM and OLE
-Folder=folder
-Data\ store=mxgraph.flowchart.database
-
-#\ Common\ icons
-Back=mxgraph.arrows.arrow_left
-Forward=mxgraph.arrows.arrow_right
-Add=mxgraph.basic.cross
-Remove=mxgraph.mockup.markup.redX
-Configure=mxgraph.mockup.misc.gear
-Permission=mxgraph.ios.iDeleteIcon
-Calendar=mxgraph.mockup.forms.calendar;mainText\=Apr\ 2013;textSize\=12
-
-#\ Composite\ assemblies
-Amplifier=mxgraph.electrical.abstract.amplifier
-Rectifier=mxgraph.electrical.abstract.amplifier
-1-way\ repeater=mxgraph.electrical.iec417.amp
-Bridge\ rectifier=mxgraph.electrical.power_semiconductors.bridge_rectifier_2
-
-#\ Computers\ and\ Monitors
-Laptop\ computer=image;image\=img/lib/clip_art/computers/Laptop_128x128.png;flipH=1;
-LCD\ monitor=image;image\=img/lib/clip_art/computers/Monitor_128x128.png;flipH=1;
-Terminal=image;image\=img/lib/clip_art/computers/Workstation_128x128.png;flipH=1;
-Tablet\ computer=image;image\=img/lib/clip_art/computers/iPad_128x128.png;flipH=1;
-PDA=image;image\=img/lib/clip_art/telecommunication/iPhone_128x128.png;flipH=1;
-iMac=image;image\=img/lib/clip_art/computers/iMac_128x128.png;flipH=1;
-New\ iMac=image;image\=img/lib/clip_art/computers/iMac_128x128.png;flipH=1;
-CRT\ monitor=image;image\=img/lib/clip_art/computers/Monitor_128x128.png;flipH=1;
-
-#\ Controls
-Label=text
-List\ box=mxgraph.mockup.forms.listBox
-List\ box\ item=mxgraph.text
-Spinner=mxgraph.ios.iPrevNext
-Checkbox=mxgraph.forms.checkboxGroup;mainText\=+
-Radio\ button=mxgraph.forms.radioGroup;mainText\=+
-Slider=mxgraph.mockup.forms.horSlider;sliderStyle\=fancy;sliderPos\=20;handleStyle\=handle
-Chevron=mxgraph.ios.iArrowIcon
-Progress\ bar=mxgraph.ios.iCloudProgressBar;barPos\=20;
-
-#\ Data\ Flow\ Diagram\ Shapes
-Start\ state=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=general
-Stop\ state=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=general
-Multi\ state=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=throwing;symbol\=general
-Oval\ process=ellipse
-Oval\ process\ (offset)=ellipse
-
-#\ Dialogs
-Dialog\ form=mxgraph.mockup.containers.alertBox;mainText\=Dialog\ Title;subText\=Dialog\ text\ line\ 1\=Dialog\ text\ line\ 2;buttonText\=Cancel,OK
-Application\ form=mxgraph.mockup.containers.window;
-Upper\ tab\ item=mxgraph.mockup.forms.wedgeBar;tabs,,+,;tabStyle\=block;html\=1;align\=left;verticalAlign\=top;overflow\=fill;
-Scroll\ bar=mxgraph.mockup.navigation.scrollBar;barPos\=20;
-Notification\ bubble=mxgraph.mockup.containers.alertBox;mainText\=Dialog\ Title;subText\=Dialog\ text\ line\ 1,Dialog\ text\ line\ 2;buttonText\=Cancel,OK
-Error\ icon=mxgraph.ios.iDeleteApp
-Information\ icon=mxgraph.ios.iInfoIcon
-Question\ icon=mxgraph.mockup.misc.help_icon
-
-#\ Drawing\ Tool\ Shapes
-Circle\:\ 3pt.=ellipse
-
-#\ Electrical\ and\ Telecom
-Outdoor\ lighting=mxgraph.electrical.miscellaneous.lamp_2
-Ground=mxgraph.electrical.radio.earth
-
-#\ Enterprise\ Application
-Mainframe=image;image\=img/lib/clip_art/computers/Mainframe_128x128.png
-Workstation=image;image\=img/lib/clip_art/computers/Workstation_128x128.png;flipH=1
-Spare=image;image\=img/lib/clip_art/computers/Server_Tower_128x128.png
-Laptop=image;image\=img/lib/clip_art/computers/Laptop_128x128.png
-
-#\ EPC\ Diagram\ Shapes
-Process\ group=step
-
-#\ Equipment\ General
-#Breaker=
-#Crusher=
-Mixer=mxgraph.pid.misc.mixer
-Cyclone\ 1=mxgraph.pid.misc.cyclone
-Roll\ crusher=mxgraph.pid.crushers_grinding.crusher_(roller)
-Hammer\ crusher=mxgraph.pid.crushers_grinding.crusher_(hammer)
-Various\ crushers\ 1=mxgraph.pid.crushers_grinding.crusher_(impact)
-Various\ crushers\ 2=mxgraph.pid.crushers_grinding.crushing,_grinding_machine
-Ball\ mill=mxgraph.pid.crushers_grinding.mill_(roller)
-Various\ mills=mxgraph.pid.crushers_grinding.crushing,_grinding_machine
-Various\ mixers=mxgraph.pid.misc.mixer
-#Kneader=
-#Various\ kneaders=
-#Blender=
-Double\ blender=hexagon
-Fluid\ separators=mxgraph.basic.pentagon
-#Filter\ 1=
-Filter\ 2=mxgraph.pid.misc.filter
-#Rotary\ filter=
-#Screen=
-#Electromagnet=
-#Cyclone\ 2=
-#\ Centrifuge\  1=
-#\ Centrifuge\  2=
-#Briquetting\ machine=
-Prill\ tower=mxgraph.pid.separators.spray_scrubber
-#Dryer=
-Conveyor=mxgraph.pid.misc.conveyor_(belt)
-Conveyor\ wheel=ellipse
-#Boom\ loader=
-#Scraper\ conveyor=
-#Screw\ conveyor=
-Elevator\ 1=mxgraph.pid.misc.bucket_elevator
-#Elevator\ 2=
-#Skip\ hoist=
-#Overhead\ conveyor=
-#Hoists=
-#Electric\ motor=
-Tank\ truck=mxgraph.signs.transportation.truck_7
-Tank\ car=mxgraph.pid.misc.tank_car,_tank_wagon
-
-#\ Equipment\ -\ Heat\ Exchangers
-Heat\ exchanger1=mxgraph.pid.heat_exchangers.shell_and_tube_heat_exchanger_1
-#Boiler=
-Cooling\ tower\ 1=mxgraph.pid.misc.cooling_tower_(wet,_natural_draught)
-Condenser=mxgraph.pid.heat_exchangers.heat_exchanger_(straight_tubes)
-Heat\ exchanger2=mxgraph.pid.heat_exchangers.shell_and_tube_heat_exchanger_2
-Shell\ and\ tube=mxgraph.pid.vessels.drum_or_condenser
-Tube\ bundle\ 1=
-Tube\ bundle\ 2=mxgraph.pid.heat_exchangers.u-tube_heat_exchanger
-Kettle\ reboiler=mxgraph.pid.heat_exchangers.reboiler
-Air-blown\ cooler=mxgraph.pid.misc.forced_flow_air_cooler
-Plate\ type=mxgraph.pid.heat_exchangers.plate_and_frame_heat_exchanger
-Finned\ tube=mxgraph.pid.heat_exchangers.heat_exchanger_(finned_tubes)
-Double\ pipe\ type=mxgraph.pid.heat_exchangers.double_pipe_heat_exchanger
-Oil\ burner=mxgraph.pid.pumps.centrifugal_pump_1
-Fired\ heater=
-Cooling\ tower\ 2=mxgraph.pid.misc.cooling_tower
-Cooling\ tower=
-Automatic\ stoker=
-Refriger-\ ators=
-Evaporative\ Condenser=
-Condenser\ (air\ cooled)=
-Oil\ separator=
-Chilling\ evaporator=
-Air\ cooling\ evaporator=
-Extractor\ hood=
-Autoclave=mxgraph.pid.vessels.jacketed_mixing_vessel
-Fan\ blades=mxgraph.pid.misc.fan_2
-Triple\ fan\ \ blades=mxgraph.pid.misc.fan
-
-#\ Equipment\ -\ Pumps
-In-line\ pump=mxgraph.pid.pumps.vacuum_pump
-Centrifugal\ pump=mxgraph.pid.compressors.centrifugal_compressor
-Selectable\ compressor1=mxgraph.pid.pumps.turbine
-Selectable\ fan\ 1=mxgraph.pid.misc.fan
-#Positive\ displacement=
-Proportioning\ pump=mxgraph.pid.compressors.reciprocating_compressor
-Rotary\ pump\ 1=mxgraph.pid.compressors.centrifugal_compressor
-#Rotary\ pump\ 2=
-#Selectable\ pump\ 1=
-Selectable\ pump\ 2=mxgraph.pid.pumps_-_din.centrifugal
-#Selectable\ pump\ 3=
-Selectable\ compressor2=mxgraph.pid.compressors_-_iso.compressor,_vacuum_pump
-#Selectable\ compressor3=
-#Rotary\ compressor=
-#Motor\ driven\ turbine=
-#Compressor\ /\ turbine=
-#Reciprocating\ pump/compr.=
-#Reciprocating\ pump\ 2=
-#Selectable\ fan\ 2=
-Centrifugal\ fan=mxgraph.pid.compressors.centrifugal_compressor
-#Axial\ flow\ fan\ 1=
-Axial\ flow\ fan\ 2=mxgraph.pid.flow_sensors.turbine
-Ejector\ /\ injector=mxgraph.pid.fittings.injector
-Spray=mxgraph.pid.misc.spraying_device
-Fan\ blades=mxgraph.pid.misc.fan_2
-Triple\ fan\ \ blades=mxgraph.pid.misc.fan
-
-# Equipment - Vessels
-Vessel=mxgraph.pid.vessels.tank
-Column=mxgraph.pid.vessels.tank
-#Tank=
-Tray\ column=mxgraph.pid2misc.column;columnType=tray
-Fluid\ contacting=mxgraph.pid2misc.column;columnType=fixed
-Reaction\ vessel=mxgraph.pid2misc.column;columnType=fluid
-Open\ tank=mxgraph.pid.vessels.container,_tank,_cistern
-Clarifier=mxgraph.pid.vessels.bunker_(conical_bottom)
-Closed\ tank=rect
-Covered\ tank=mxgraph.pid.vessels.tank_(covered)
-Gas\ holder=mxgraph.pid.vessels.gas_holder
-Storage\ sphere=mxgraph.pid.vessels.storage_sphere
-Barrel=mxgraph.pid.vessels.barrel,_drum_(iso)
-Gas\ cylinder=mxgraph.pid.vessels.gas_bottle
-Bag=mxgraph.pid.vessels.bag
-#Carrying\ vessel=
-Tray\ (dashed)=line;dashed=1
-Tray\ (solid)=line
-#Water\ surface=
-Branch\ fitting=mxgraph.pid.apparatus_elements.socket,_connection_nozzle
-#Access\ point=
-#Flanged\ access\ point=
-
-#Equipment
-com.lucidchart.PEAxialCompressor.1=mxgraph.pid.compressors.centrifugal_compressor_-_turbine_driven
-com.lucidchart.PECentrifugalCompressor.5=mxgraph.pid.compressors.centrifugal_compressor
-com.lucidchart.PECentrifugalCompressor2.13=mxgraph.pid.compressors.centrifugal_compressor_-_turbine_driven
-#com.lucidchart.PECentrifugalCompressor3.21=
-com.lucidchart.PEReciprocationCompressor.30=mxgraph.pid.compressors.reciprocating_compressor
-com.lucidchart.PERotaryCompressorBlock.36=mxgraph.pid.compressors.rotary_compressor
-com.lucidchart.PERotaryCompressor2Block.43=mxgraph.pid.compressors.compressor_and_silencers
-com.lucidchart.PEConveyorBlock.52=mxgraph.pid.misc.conveyor_(belt)
-#com.lucidchart.PEOverheadConveyorBlock.56=
-#com.lucidchart.PEScraperConveyorBlock.62=
-#com.lucidchart.PEScrewConveyorBlock.67=
-#com.lucidchart.PEPositiveDisplacementBlock.71=
-#com.lucidchart.PEPositiveDisplacement2.82=
-com.lucidchart.PEElevator1Block.86=mxgraph.pid.misc.bucket_elevator
-#com.lucidchart.PEElevator2Block.90=
-#com.lucidchart.PEHoistBlock.92=
-#com.lucidchart.PESkipHoistBlock.97=
-#com.lucidchart.PEMotorBlock.101=
-#com.lucidchart.PEDieselMotorBlock.105=
-#com.lucidchart.PEElectricMotorBlock.110=
-#com.lucidchart.PELiquidRingVacuumBlock.115=
-#com.lucidchart.PETurbineDriverBlock.125=
-#com.lucidchart.PEDoubleFlowTurbineBlock.130=
-com.lucidchart.PEAgitatorMixerBlock.144=mxgraph.pid.agitators.agitator_(propeller)
-com.lucidchart.PEDrumBlock.146=mxgraph.pid.vessels.drum_or_condenser
-com.lucidchart.PETankEquipmentBlock.149=mxgraph.pid2misc.column;columnType=common
-#com.lucidchart.PECentrifugalBlower.153=
-#com.lucidchart.PEAlkylationBlock.164=
-#com.lucidchart.PEBoomLoaderBlock.192=
-#com.lucidchart.PEFluidCatalyticCrackingBlock.199=
-#com.lucidchart.PEFluidCookingBlock.215=
-#com.lucidchart.PEFluidizedReactorBlock.220=
-#com.lucidchart.PETubularBlock.234=
-#com.lucidchart.PEReformerBlock.241=
-#com.lucidchart.PEMixingReactorBlock.260=
-#com.lucidchart.PEHydrodesulferizationBlock.265=
-#com.lucidchart.PEHydrocrackingBlock.269=
-#com.lucidchart.PEPlateTowerBlock.318=
-#com.lucidchart.PEPackedTowerBlock.326=
-#com.lucidchart.PEAutomaticStokerBlock.333=
-#com.lucidchart.PEOilBurnerBlock.336=
-#com.lucidchart.PECounterflowForcedDraftBlock.340=
-#com.lucidchart.PECounterflowNaturalDraftBlock.394=
-#com.lucidchart.PECrossflowInductedBlock.441=
-com.lucidchart.PEFurnaceBlock.473=mxgraph.pid.vessels.furnace
-#com.lucidchart.PEChimneyTowerBlock.481=
-
-#\ Fault\ Tree\ Analysis\ Shapes
-Basic\ event=ellipse
-Undeveloped\ event=rhombus
-Inhibit\ gate=hexagon
-Priority\ AND\ gate=mxgraph.electrical.logic_gates.and
-Exclusive\ OR\ gate=mxgraph.electrical.logic_gates.xor
-Voting\ gate=mxgraph.electrical.logic_gates.or
-House\ event=mxgraph.electrical.abstract.dac
-Conditional\ event=ellipse
-Transfer\ symbol=triangle
-
-#\ Fundamental\ Items
-Resistor=mxgraph.electrical.resistors.resistor_2
-Capacitor=mxgraph.electrical.capacitors.capacitor_1
-AC\ source=mxgraph.electrical.signal_sources.ac_source
-DC\ source=mxgraph.electrical.signal_sources.dc_source_3
-Inductor=mxgraph.electrical.inductors.inductor_3
-Crystal=mxgraph.electrical.electro-mechanical.piezo_sounder
-Battery=mxgraph.electrical.miscellaneous.monocell_battery
-Accumulator=mxgraph.electrical.miscellaneous.monocell_battery
-Antenna=mxgraph.electrical.radio.aerial_-_antenna_1
-Fuse=mxgraph.electrical.miscellaneous.fuse_1
-Pickup\ head=mxgraph.electrical.abstract.dac
-Pulse=mxgraph.electrical.waveforms.pulse_1
-Alternating\ pulse=mxgraph.electrical.waveforms.sine_wave
-Saw\ tooth=mxgraph.electrical.waveforms.sawtooth
-Step\ function=mxgraph.electrical.waveforms.step_1
-Bell=mxgraph.electrical.electro-mechanical.buzzer
-Ferrite\ core=mxgraph.electrical.inductors.ferrite_core
-Thermocouple=mxgraph.electrical.miscellaneous.thermocouple
-Lamp=mxgraph.electrical.miscellaneous.lamp_2
-Speaker=mxgraph.electrical.electro-mechanical.loudspeaker
-Microphone=mxgraph.electrical.radio.microphone_1
-Microphone\ 2=mxgraph.electrical.electro-mechanical.buzzer
-Oscillator=mxgraph.electrical.signal_sources.ac_source
-
-#\ Geometric\ Dimensioning\ and\ Tolerancing
-Straightness=line
-Flatness=parallelogram
-Circularity=ellipse
-
-#\ IDEF0\ Diagram\ Shapes
-Text\ block\ 8pt=text
-
-#\ Instruments
-NOT\ gate=mxgraph.electrical.logic_gates.inverter
-
-#\ ITIL\ Shapes
-Configuration\ management\ database=mxgraph.flowchart.database
-
-#\ Legend\ Shapes
-Do\ not\ do=mxgraph.basic.no_symbol
-
-#\ Maintenance\ Symbols
-Linear\ element=rect
-Relay\ contacts=rhombus
-Relay\ coil=rect
-#Switch=
-Composite\ circuit=rect
-#Signal\ code=
-Reference\ signal=mxgraph.electrical.abstract.dac;
-Energize\ relay\ signal=triangle
-Transmitter\ pulse=mxgraph.arrows.arrow_right
-#Test\ signal=
-
-#\ Misc\ Flowchart\ Shapes
-Divided\ process\ 2=mxgraph.lean_mapping.manufacturing_process
-External\ entity\ 2=shadow\=1
-Delay=mxgraph.flowchart.delay
-Summing\ junction=mxgraph.flowchart.or
-Or=mxgraph.flowchart.summing_function
-
-#Organization Chart Shapes
-Executive=ext;double\=1
-Manager=ext;double\=1
-Position=rect
-Consultant=rect;dashed\=1
-Vacancy=rect;dashed\=1
-Staff=text
-
-#\ Process\ Annotations
-Off-Sheet\ Label\ 1=mxgraph.electrical.abstract.dac;
-Off-Sheet\ Label\ 3=step
-6pt.\ text=text
-8pt.\ text=text
-10pt.\ text=text
-6pt.\ text\ &\ Line=text
-8pt.\ text\ &\ Line=text
-10pt.\ text\ &\ Line=text
-
-#SDL Diagram Shapes
-Save=parallelogram
-Message\ to\ user=mxgraph.arrows.signal-in_arrow
-
-#\ Semiconductors\ and\ Electron\ Tubes
-Bipolar=mxgraph.electrical.transistors.pnp_transistor_1
-Diode=mxgraph.electrical.diodes.diode
-Photodiode=mxgraph.electrical.opto_electronics.light-activated_scr
-MOSFET=mxgraph.electrical.mosfets1.p-channel_mosfet_3
-Junction=mxgraph.electrical.transistors.p-channel_jfet_1
-Unijunction=mxgraph.electrical.transistors.complementary_unijunction
-Darlington=mxgraph.electrical.transistors.darlington_pair
-IGFET\ N-type=mxgraph.electrical.mosfets1.n-channel_mosfet_3
-IGFET\ P-type=mxgraph.electrical.mosfets1.p-channel_mosfet_3
-Tunnel\ diode=mxgraph.electrical.diodes.tunnel_diode
-Backward\ diode=mxgraph.electrical.diodes.field_effect_diode
-Four\ layer\ diode=mxgraph.electrical.diodes.four_layer_diode
-Diac=mxgraph.electrical.power_semiconductors.diac_2
-Triac=mxgraph.electrical.power_semiconductors.triac_1
-Breakdown\ diode=mxgraph.electrical.diodes.zener_diode_1
-Tube\ diode=mxgraph.electrical.thermionic_devices.diode
-Tube\ triode=mxgraph.electrical.thermionic_devices.triode
-Tube\ tetrode=mxgraph.electrical.thermionic_devices.tetrode
-Tube\ pentode=mxgraph.electrical.thermionic_devices.pentode
-
-#\ Switches\ and\ Relays
-Relay=mxgraph.electrical.electro-mechanical.relay_coil
-Relay\ contacts=mxgraph.electrical.capacitors.capacitor_1
-SPST=mxgraph.electrical.electro-mechanical.relay_contact_no
-SPDT=mxgraph.electrical.electro-mechanical.relay_changeover_contact
-Pushbutton\ make=mxgraph.electrical.electro-mechanical.push_switch_no
-Pushbutton\ break=mxgraph.electrical.electro-mechanical.push_switch_nc
-
-#\ Telecom\ Switch\ and\ Peripherieal\ Equipment
-Transducer\ head=mxgraph.electrical.abstract.dac
-
-#\ TQM\ Diagram\ Shapes
-2-part\ function=mxgraph.lean_mapping.manufacturing_process
-2-part\ metric=mxgraph.lean_mapping.manufacturing_process
-Connected\ issues=mxgraph.mockup.markup.redX
-
-#\ Transformers\ and\ Windings
-Transformer=mxgraph.electrical.inductors.transformer_1
-Magnetic\ core=mxgraph.electrical.inductors.iron_core
-Transformer\ 2=mxgraph.electrical.signal_sources.current_source
-Potential\ transformer\ 2=mxgraph.electrical.signal_sources.current_source
-
-#\ Value\ Stream\ Map
-Inventory=mxgraph.lean_mapping.inventory_box
-Customer/Supplier=mxgraph.lean_mapping.outside_sources
-Shipment\ truck=mxgraph.lean_mapping.truck_shipment
-Production\ control=mxgraph.lean_mapping.manufacturing_process
-Timeline\ segment=mxgraph.lean_mapping.timeline;mainText=50,,50,
-Production\ kanban=mxgraph.lean_mapping.production_kanban
-Withdrawal\ kanban=mxgraph.lean_mapping.withdrawal_kanban
-Batch\ kanban=mxgraph.lean_mapping.batched_kanban
-Signal\ kanban=mxgraph.lean_mapping.signal_kanban
-Kanban\ post=mxgraph.lean_mapping.kanban_post
-Supermarket=mxgraph.lean_mapping.supermarket
-Safety/Buffer\ stock=mxgraph.lean_mapping.buffer_or_safety_stock
-Kaizen\ burst=mxgraph.lean_mapping.kaizen_lightening_burst
-Physical\ pull=mxgraph.lean_mapping.physical_pull
-Sequenced\ pull\ ball=mxgraph.lean_mapping.sequenced_pull_ball
-Load\ leveling=mxgraph.lean_mapping.load_leveling
-
-#\ Valves\ and\ Fittings
-Gate\ valve=mxgraph.pid.valves.gate_valve
-Globe\ valve=mxgraph.pid.valves.globe_valve
-Check\ valve=mxgraph.pid.valves.check_valve_1
-Powered\ valve=mxgraph.pid.valves.motor_operated_valve
-Diaphragm\ valve=mxgraph.pid.valves.pneumatic_operated
-Needle\ valve=mxgraph.pid.valves.needle
-Angle\ valve=mxgraph.pid.valves.angle
-Wedge\ /\ Parallel=mxgraph.pid.valves.needle
-Butterfly\ valve=mxgraph.pid.valves.butterfly_valve_1
-Ball\ valve=mxgraph.pid.valves.ball_valve
-Relief\ \ (angle)=mxgraph.pid.valves.safety_psv_1
-3-way\ Plug\ Valve=mxgraph.pid.valves.three-way_valve
-Mixing\ valve=mxgraph.pid.valves.three-way_valve
-Soldered/\ Solvent=ellipse
-Bell\ mouth=triangle
-
-# Fillet
-Fillet=mxgraph.basic.orthogonal_triangle
-Melt\ thru=mxgraph.basic.half_circle
-
-#Misc
-Ethernet=mxgraph.lean_mapping.bus
-
-# Cisco
-100BaseT\ hub=mxgraph.cisco.hubs_and_gateways.100baset_hub
-15200=mxgraph.cisco.misc.15200
-3174\ (desktop)\ cluster\ contro=mxgraph.cisco.controllers_and_modules.3174_(desktop)_cluster_controller
-3X74\ (floor)\ cluster\ controll=mxgraph.cisco.controllers_and_modules.3x74_(floor)_cluster_controller
-6700\ series=mxgraph.cisco.misc.6700_series
-7500ARS\ (7513)=mxgraph.cisco.misc.7500ars_(7513)
-10700=mxgraph.cisco.routers.10700
-10GE_FCoE=mxgraph.cisco.controllers_and_modules.10ge_fcoe
-AccessPoint=mxgraph.cisco.misc.access_point
-ACE=mxgraph.cisco.misc.ace
-ADM=mxgraph.cisco.misc.adm
-ACS=mxgraph.cisco.misc.acs
-Androgenous\ person=mxgraph.cisco.people.androgenous_person
-Antenna=mxgraph.cisco.wireless.antenna
-Asic\ processor=mxgraph.cisco.misc.asic_processor
-ASR\ 1000\ series=mxgraph.cisco.misc.asr_1000_series
-ATA=mxgraph.cisco.misc.ata
-ATM\ 3800=mxgraph.cisco.misc.atm_3800
-ATM\ Fast\ Gigabit=mxgraph.cisco.switches.atm_fast_gigabit_etherswitch
-ATM\ router=mxgraph.cisco.routers.atm_router
-ATM\ Switch=mxgraph.cisco.switches.atm_switch
-ATM\ Tag\ switch\ router=mxgraph.cisco.routers.atm_tag_switch_router
-AVS=mxgraph.cisco.misc.avs
-AXP=mxgraph.cisco.misc.axp
-BBSM=mxgraph.cisco.misc.bbsm
-Branch\ office=mxgraph.cisco.buildings.branch_office
-Breakout\ box=mxgraph.cisco.misc.breakout_box
-Breakout=mxgraph.cisco.misc.breakout_box
-Bridge=mxgraph.cisco.misc.bridge
-Broadcast\ router=mxgraph.cisco.routers.broadcast_router
-BTS\ 10200=mxgraph.cisco.misc.bts_10200
-Cable\ modem=mxgraph.cisco.modems_and_phones.cable_modem
-CallManager=mxgraph.cisco.misc.call_manager
-Car=mxgraph.cisco.misc.car
-CDDI\ FDDI=mxgraph.cisco.misc.cddi_fddi
-Carrier\ routing\ system=mxgraph.cisco.misc.carrier_routing_system
-CDM=mxgraph.cisco.misc.cdm
-Cell\ P{hone=mxgraph.cisco.modems_and_phones.cell_phone
-Centri\ Firewall=mxgraph.cisco.security.centri_firewall
-Cisco\ 1000=mxgraph.cisco.misc.cisco_1000
-ASA\ 5500=mxgraph.cisco.misc.asa_5500
-Cisco\ CA=mxgraph.cisco.misc.cisco_ca
-Cisco\ file\ engine=mxgraph.cisco.storage.cisco_file_engine
-Cisco\ hub=mxgraph.cisco.hubs_and_gateways.cisco_hub
-Cisco\ unified\ presence\ server=mxgraph.cisco.servers.cisco_unified_presence_server
-Cisco\ unity\ express=mxgraph.cisco.misc.cisco_unity_express
-Cisco\ security=mxgraph.cisco.security.cisco_security
-Cisco\ works=mxgraph.cisco.misc.cisco_works
-Class\ 4_5\ switch=mxgraph.cisco.switches.class_4_5_switch
-Communications\ server=mxgraph.cisco.servers.communications_server
-Contact\ center=mxgraph.cisco.misc.contact_center
-Content\ acquirer=mxgraph.cisco.misc.contact_acquirer
-Content\ engine\ (cache\ director=mxgraph.cisco.directors.content_engine_(cache_director)
-Content\ service\ router=mxgraph.cisco.routers.content_service_router
-Content\ service\ switch\ 1100=mxgraph.cisco.switches.content_service_switch_1100
-Congtent\ switch\ module=mxgraph.cisco.controllers_and_modules.content_switch_module
-Content\ switch=mxgraph.cisco.switches.content_switch
-Content\ transformation\ engine\ (c=mxgraph.cisco.misc.content_transformation_engine_(cte)
-CS-MARS=mxgraph.cisco.misc.cs-mars
-CSM-S=mxgraph.cisco.misc.csm-s
-CSU_DSU=mxgraph.cisco.misc.csu_dsu
-CUBE=mxgraph.cisco.misc.cube
-Detector=mxgraph.cisco.misc.detector
-Director-class\ fibre\ channel\ di=mxgraph.cisco.directors.director-class_fibre_channel_director
-Directory\ server=mxgraph.cisco.servers.directory_server
-Diskette=mxgraph.cisco.storage.diskette
-Distributed\ director=mxgraph.cisco.directors.distributed_director
-Dot-dot=mxgraph.cisco.misc.dot-dot
-DPT=mxgraph.cisco.misc.dpt
-DSLAM=mxgraph.cisco.misc.dslam
-Dual\ mode=mxgraph.cisco.misc.dual_mode
-DWDM\ filter=mxgraph.cisco.misc.dwdm_filter
-End\ office=mxgraph.cisco.buildings.end_office
-Fax=mxgraph.cisco.modems_and_phones.fax
-FC\ storage=mxgraph.cisco.storage.fc_storage
-FDDI\ ring=mxgraph.cisco.misc.fddi_ring
-Fibre\ channel\ disk\ subsystem=mxgraph.cisco.storage.fibre_channel_disk_subsystem
-Fibre\ channel\ fabric\ switch=mxgraph.cisco.switches.fibre_channel_fabric_switch
-File\ cabinet=mxgraph.cisco.storage.file_cabinet
-File\ server=mxgraph.cisco.servers.file_server
-Fileserver=mxgraph.cisco.servers.fileserver
-Firewall\ service\ module\ (FWSM)=mxgraph.cisco.controllers_and_modules.firewall_service_module_(fwsm)
-Firewall=mxgraph.cisco.security.firewall
-Front\ end\ processor=mxgraph.cisco.misc.front_end_processor
-Gatekeeper=mxgraph.cisco.security.gatekeeper
-General\ appliance=mxgraph.cisco.misc.general_appliance
-Generic\ building=mxgraph.cisco.buildings.generic_building
-Generic\ gateway=mxgraph.cisco.hubs_and_gateways.generic_gateway
-Generic\ processor=mxgraph.cisco.misc.generic_processor
-Generic\ softswitch=mxgraph.cisco.switches.generic_softswitch
-Gigabit\ switch\ ATM\ tag\ router=mxgraph.cisco.routers.gigabit_switch_atm_tag_router
-Government\ building=mxgraph.cisco.buildings.government_building
-Ground\ terminal=mxgraph.cisco.wireless.ground_terminal
-Guard=mxgraph.cisco.security.guard
-H.323=mxgraph.cisco.misc.h_323
-Handheld=mxgraph.cisco.misc.handheld
-Hootphone=mxgraph.cisco.modems_and_phones.hootphone
-Host=mxgraph.cisco.servers.host
-HP\ mini=mxgraph.cisco.misc.hp_mini
-Hub=mxgraph.cisco.hubs_and_gateways.hub
-IAD\ router=mxgraph.cisco.routers.iad_router
-IBM\ mainframe=mxgraph.cisco.computers_and_peripherals.ibm_mainframe
-IBM\ mini=mxgraph.cisco.computers_and_peripherals.ibm_mini_as400
-IBM\ tower=mxgraph.cisco.computers_and_peripherals.ibm_tower
-ICM\ =mxgraph.cisco.misc.icm
-ICS=mxgraph.cisco.misc.ics
-Intelliswitch=mxgraph.cisco.switches.intelliswitch_stack
-Internet\ streamer=mxgraph.cisco.misc.internet_streamer
-IOS\ firewall=mxgraph.cisco.security.ios_firewall
-IOS\ SLB=mxgraph.cisco.misc.ios_slb
-IP\ communicator=mxgraph.cisco.misc.ip_communicator
-IP\ DSL=mxgraph.cisco.misc.ip_dsl
-IP\ phone=mxgraph.cisco.modems_and_phones.ip_phone
-IP\ telephony\ router=mxgraph.cisco.routers.ip_telephony_router
-IP\ =mxgraph.cisco.misc.ip
-IPTC=mxgraph.cisco.misc.iptc
-IPTV\ congtent\ manager=mxgraph.cisco.misc.iptv_content_manager
-IPTV\ server=mxgraph.cisco.servers.iptv_server
-ISCSI\ router=mxgraph.cisco.routers.isci_router
-ISDN\ switch=mxgraph.cisco.switches.isdn_switch
-ITP=mxgraph.cisco.misc.itp
-JBOD=mxgraph.cisco.misc.jbod
-Key=mxgraph.cisco.misc.key
-Keys=mxgraph.cisco.misc.keys
-LAN\ to\ LAN=mxgraph.cisco.misc.lan_to_lan
-Laptop=mxgraph.cisco.computers_and_peripherals.laptop
-Layer\ 2\ remote\ switch=mxgraph.cisco.switches.layer_2_remote_switch
-Layer\ 3\ switch=mxgraph.cisco.switches.layer_3_switch
-Lightweight\ AP=mxgraph.cisco.misc.lightweight_ap
-Localdirector=mxgraph.cisco.directors.localdirector
-Lock=mxgraph.cisco.security.lock
-Longreach\ CPE=mxgraph.cisco.misc.longreach_cpe
-Mac\ woman=mxgraph.cisco.people.mac_woman
-Macintosh=mxgraph.cisco.computers_and_peripherals.macintosh
-Man_woman=mxgraph.cisco.people.man_woman
-MAS\ gateway=mxgraph.cisco.hubs_and_gateways.mas_gateway
-MAU=mxgraph.cisco.misc.mau
-MCU=mxgraph.cisco.misc.mcu
-MDU=mxgraph.cisco.buildings.mdu
-ME=mxgraph.cisco.misc.me1100
-Mediator=mxgraph.cisco.misc.mediator
-Meetingplace=mxgraph.cisco.misc.meetingplace
-Mesh=mxgraph.cisco.misc.mesh_ap
-Metro\ 1500=mxgraph.cisco.misc.metro_1500
-MGX\ 8000\ multiservice\ switch=mxgraph.cisco.switches.mgx_8000_multiservice_switch
-Microphone=mxgraph.cisco.computers_and_peripherals.microphone
-Microwebserver=mxgraph.cisco.servers.microwebserver
-Mini\ VAX=mxgraph.cisco.misc.mini_vax
-Mobile\ access\ IP\ phone=mxgraph.cisco.modems_and_phones.mobile_access_ip_phone
-Mobile\ access\ router=mxgraph.cisco.routers.mobile_access_router
-Mobile\ streamer=mxgraph.cisco.misc.mobile_streamer
-Modem=mxgraph.cisco.modems_and_phones.modem
-MSE=mxgraph.cisco.misc.mse
-MOH\ server=mxgraph.cisco.servers.moh_server
-Multiswitch=mxgraph.cisco.switches.multiswitch_device
-Multi-fabric\ server\ switch=mxgraph.cisco.switches.multi-fabric_server_switch
-Multilayer\ remote\ switch=mxgraph.cisco.switches.multilayer_remote_switch
-MUX=mxgraph.cisco.misc.mux
-MXE=mxgraph.cisco.misc.mxe
-NAC\ appliance=mxgraph.cisco.misc.nac_appliance
-NCE=mxgraph.cisco.misc.nce
-NCE\ router=mxgraph.cisco.routers.nce_router
-Netflow\ router=mxgraph.cisco.routers.netflow_router
-Netranger=mxgraph.cisco.misc.netranger
-Netsonar=mxgraph.cisco.misc.netsonar
-Network\ management=mxgraph.cisco.misc.network_management
-Network\ security=mxgraph.cisco.security.network_security
-Nexus\ 1000=mxgraph.cisco.misc.nexus_1000
-Nexus\ 2000=mxgraph.cisco.misc.nexus_2000_fabric_extender
-Nexus\ 5000=mxgraph.cisco.misc.nexus_5000
-Nexus\ 7000=mxgraph.cisco.misc.nexus_7000
-Octel=mxgraph.cisco.misc.octel
-ONS15500=mxgraph.cisco.misc.ons15500
-Optical\ amplifier=mxgraph.cisco.misc.optical_amplifier
-Optical\ services\ router=mxgraph.cisco.routers.optical_services_router
-Optical\ transort=mxgraph.cisco.misc.optical_transport
-PAD\ x.28=mxgraph.cisco.misc.pad_1
-Pad=mxgraph.cisco.misc.pad_2
-Page\ icon=mxgraph.cisco.misc.page_icon
-PBX\ switch=mxgraph.cisco.switches.pbx_switch
-PBX=mxgraph.cisco.misc.pbx
-PC\ adapter\ card=mxgraph.cisco.computers_and_peripherals.pc_adapter_card
-PC\ man=mxgraph.cisco.people.pc_man
-PC\ routercard=mxgraph.cisco.computers_and_peripherals.pc_routercard
-PC\ sosftware=mxgraph.cisco.misc.pc_software
-PC\ video=mxgraph.cisco.misc.pc_video
-PC=mxgraph.cisco.computers_and_peripherals.pc
-PDA=mxgraph.cisco.misc.pda
-Phone=mxgraph.cisco.modems_and_phones.phone
-Phone-fax=mxgraph.cisco.modems_and_phones.phone-fax
-PIX\ firewall=mxgraph.cisco.security.pix_firewall
-PMC=mxgraph.cisco.misc.pmc
-Printer=mxgraph.cisco.computers_and_peripherals.printer
-Programmble\ switch=mxgraph.cisco.switches.programmable_switch
-Protocol\ translator=mxgraph.cisco.misc.protocol_translator
-PXF=mxgraph.cisco.misc.pxf
-Radio\ tower=mxgraph.cisco.wireless.radio_tower
-Ratemux=mxgraph.cisco.misc.ratemux
-Relational\ database=mxgraph.cisco.storage.relational_database
-Repeater=mxgraph.cisco.misc.repeater
-RF\ modem=mxgraph.cisco.modems_and_phones.rf_modem
-Route\ switch=mxgraph.cisco.misc.route_switch_processor
-Router\ with\ silicon\ switch=mxgraph.cisco.routers.router_with_silicon_switch
-Router=mxgraph.cisco.routers.router
-Router_firewall=mxgraph.cisco.security.router_firewall
-Router\ in\ building=mxgraph.cisco.routers.router_in_building
-RPSRPS=mxgraph.cisco.misc.rpsrps
-Running\ man=mxgraph.cisco.people.running_man
-Sattelite\ dish=mxgraph.cisco.wireless.satellite_dish
-Sattelite=mxgraph.cisco.wireless.satellite
-Scanner=mxgraph.cisco.computers_and_peripherals.scanner
-Server\ switch=mxgraph.cisco.switches.server_switch
-Server\ with\ router=mxgraph.cisco.servers.server_with_router
-Service\ control=mxgraph.cisco.misc.service_control
-Service\ Module=mxgraph.cisco.controllers_and_modules.service_module
-Service\ router=mxgraph.cisco.routers.service_router
-Services=mxgraph.cisco.misc.services
-Set\ top\ box=mxgraph.cisco.misc.set_top_box
-Simultlayer\ switch=mxgraph.cisco.switches.simultilayer_switch
-SIP\ proxy\ server=mxgraph.cisco.servers.sip_proxy_server
-Sitting\ woman=mxgraph.cisco.people.sitting_woman
-Amall\ business=mxgraph.cisco.buildings.small_business
-Small\ hub=mxgraph.cisco.hubs_and_gateways.small_hub
-Softphone=mxgraph.cisco.modems_and_phones.softphone
-Softswitch\ PGW\ MGC=mxgraph.cisco.switches.softswitch_pgw_mgc
-Software\ based\ server=mxgraph.cisco.servers.software_based_server
-Space\ router=mxgraph.cisco.routers.space_router
-Speaker=mxgraph.cisco.computers_and_peripherals.speaker
-SSC=mxgraph.cisco.misc.ssc
-SSL\ terminator=mxgraph.cisco.misc.ssl_terminator
-Standard\ host=mxgraph.cisco.servers.standard_host
-Standing\ man=mxgraph.cisco.people.standing_man
-Standing\ woman=mxgraph.cisco.people.standing_woman
-STB=mxgraph.cisco.misc.stb
-Storage\ router=mxgraph.cisco.routers.storage_router
-Storge\ server=mxgraph.cisco.servers.storage_server
-STP=mxgraph.cisco.misc.stp
-Streamer=mxgraph.cisco.misc.streamer
-Sun\ workstation=mxgraph.cisco.computers_and_peripherals.sun_workstation
-Supercomputer=mxgraph.cisco.computers_and_peripherals.supercomputer
-SVX=mxgraph.cisco.misc.svx
-System\ controller=mxgraph.cisco.controllers_and_modules.system_controller
-Tablet=mxgraph.cisco.computers_and_peripherals.tablet
-Tape\ array=mxgraph.cisco.storage.tape_array
-TDM\ router=mxgraph.cisco.routers.tdm_router
-Telecommuter\ house\ PC=mxgraph.cisco.buildings.telecommuter_house_pc
-Telecommuter\ house=mxgraph.cisco.buildings.telecommuter_house
-Telecommuter\ icon=mxgraph.cisco.misc.telecommuter_icon
-Terminal=mxgraph.cisco.computers_and_peripherals.terminal
-Token=mxgraph.cisco.misc.token
-TP\ MCU=mxgraph.cisco.misc.tp_mcu
-Transpath=mxgraph.cisco.misc.transpath
-Truck=mxgraph.cisco.misc.truck
-Turret=mxgraph.cisco.misc.turret
-TV=mxgraph.cisco.misc.tv
-UBR910=mxgraph.cisco.misc.ubr910
-UMG\ series=mxgraph.cisco.misc.umg_series
-Unity\ server=mxgraph.cisco.servers.unity_server
-Universal\ gateway=mxgraph.cisco.hubs_and_gateways.universal_gateway
-University=mxgraph.cisco.buildings.university
-UPC=mxgraph.cisco.computers_and_peripherals.upc
-UPS=mxgraph.cisco.misc.ups
-Vault=mxgraph.cisco.misc.vault
-Telepresence\ 3200=mxgraph.cisco.misc.telepresence
-Video\ camera=mxgraph.cisco.computers_and_peripherals.video_camera
-VIP=mxgraph.cisco.misc.vip
-Virtual\ layer\ switch=mxgraph.cisco.switches.virtual_layer_switch
-Virtual\ switch\ controller\ (vsc3=mxgraph.cisco.controllers_and_modules.virtual_switch_controller_(vsc3000)
-Voice\ ATM\ switch=mxgraph.cisco.switches.voice_atm_switch
-Voice\ commserver=mxgraph.cisco.servers.voice_commserver
-Voice\ router=mxgraph.cisco.routers.voice_router
-Voice\ switch=mxgraph.cisco.switches.voice_switch
-VPN\ concentrator=mxgraph.cisco.misc.vpn_concentrator
-VPN\ gateway=mxgraph.cisco.hubs_and_gateways.vpn_gateway
-VSS=mxgraph.cisco.misc.vss
-WAE=mxgraph.cisco.misc.wae
-Wavelength=mxgraph.cisco.routers.wavelength_router
-Web\ browser=mxgraph.cisco.computers_and_peripherals.web_browser
-Web\ cluster=mxgraph.cisco.storage.web_cluster
-Wi-fi\ tag=mxgraph.cisco.wireless.wi-fi_tag
-Wirelss\ bridge=mxgraph.cisco.wireless.wireless_bridge
-Wireless\ location\ appliance=mxgraph.cisco.wireless.wireless_location_appliance
-Wireless\ router=mxgraph.cisco.routers.wireless_router
-Wireless\ transport=mxgraph.cisco.wireless.wireless_transport
-Wireless=mxgraph.cisco.wireless.wireless
-WISM=mxgraph.cisco.misc.wism
-WLAN\ controller=mxgraph.cisco.wireless.wlan_controller
-Workgroup\ director=mxgraph.cisco.directors.workgroup_director
-Workgroup\ switch=mxgraph.cisco.switches.workgroup_switch
-Workstation=mxgraph.cisco.computers_and_peripherals.workstation
-WWW\ server=mxgraph.cisco.servers.www_server
-
-
-# misc shapes
-Off-line\ storage=triangle
-Swimlane=swimlane;horizontal\=0;
-CFF\ Container=swimlane;
-Swimlane\ List=swimlane
-Final\ State=mxgraph.bpmn.shape;verticalLabelPosition\=bottom;verticalAlign\=top;perimeter\=ellipsePerimeter;outline\=end;symbol\=terminate;
-System\ Boundary=swimlane
-Off-page\ reference=offPageConnector
-
-#Appliances
-#Refrg.\ 1=
-#Refrg.\ 3=
-#Stacked\ W/D=
-#Combo\ W/D=
-#Refrg.\ 2=
-#Built-in\ refrg.=
-#Chest\ freezer=
-Cooker\ 1=mxgraph.floorplan.range_1;
-Cooker\ 2=mxgraph.floorplan.range_1;
-Cooker\ 3=mxgraph.floorplan.range_1;
-Range=mxgraph.floorplan.range_2;
-#Wall\ oven=
-#Microwave=
-#Dishwasher=
-#Washing\ machine=
-#Tumble\ dryer=
-#Refuse\ compactor=
-Television=mxgraph.floorplan.crt_tv;
-#Video\ game=
-#Food\ cooler=
-#Vending\ machine=
-#Coffee\ maker=
-#Water\ cooler=
-#Water\ heater=
-
-#Bath and Kitchen Plan
-Sink\ 1=mxgraph.floorplan.sink_2;
-Sink\ 2=mxgraph.floorplan.sink_double;
-Shower=mxgraph.floorplan.shower;
-Bath\ 1=mxgraph.floorplan.bathtub;
-Sink\ 3=mxgraph.floorplan.sink_double;
-Corner\ shower=mxgraph.floorplan.shower;
-#Corner\ bath=
-Bath\ 2=mxgraph.floorplan.bathtub;
-Oval\ bath=mxgraph.floorplan.bathtub;
-Wall\ toilet=mxgraph.floorplan.toilet;
-Toilet=mxgraph.floorplan.toilet;
-#Squat\ wc=
-#Bidet=
-Pedestal\ sink\ 1=mxgraph.floorplan.sink_1;
-Pedestal\ sink\ 2=mxgraph.floorplan.sink_2;
-Countertop\ sink=mxgraph.floorplan.sink_1;
-Basin=mxgraph.floorplan.sink_2;
-Double\ basin=mxgraph.floorplan.sink_double;
-#Towel\ rack=
-#Medicine\ cabinet\ 1=
-#Medicine\ cabinet\ 2=
-#TP\ dispenser=
-
-
-
-
-#######################################
-#\ ***\ LUCIDCHART\ SHAPES\ ***
-#######################################
-
-
-
-#\ Flowchart
-com.lucidchart.DisplayBlock=mxgraph.flowchart.display
-com.lucidchart.DecisionBlock=mxgraph.flowchart.decision
-com.lucidchart.DirectAccessStorageBlock=mxgraph.flowchart.direct_data
-com.lucidchart.MergeBlock=mxgraph.flowchart.merge_or_storage
-com.lucidchart.ManualInputBlock=mxgraph.flowchart.manual_input
-com.lucidchart.DelayBlock=mxgraph.flowchart.delay
-com.lucidchart.SummingJunctionBlock=mxgraph.flowchart.or
-com.lucidchart.OrBlock=mxgraph.flowchart.summing_function
-com.lucidchart.ConnectorBlock=ellipse
-com.lucidchart.ConnectorBlock=ellipse
-com.lucidchart.ProcessBlock=mxgraph.flowchart.process
-com.lucidchart.PreparationBlock=mxgraph.flowchart.preparation
-com.lucidchart.OffPageLinkBlock=mxgraph.flowchart.off-page_reference
-com.lucidchart.ManualOperationBlock=mxgraph.flowchart.manual_operation
-com.lucidchart.PaperTapeBlock=mxgraph.flowchart.paper_tape
-com.lucidchart.DocumentBlock=mxgraph.flowchart.document
-com.lucidchart.PredefinedProcessBlock=mxgraph.flowchart.predefined_process
-com.lucidchart.DatabaseBlock=mxgraph.flowchart.database
-com.lucidchart.StoredDataBlock=mxgraph.flowchart.stored_data
-com.lucidchart.TerminatorBlock=mxgraph.flowchart.terminator
-#com.lucidchart.NoteBlock31=mxgraph.flowchart.
-com.lucidchart.DataBlock=mxgraph.flowchart.data
-com.lucidchart.InternalStorageBlock=mxgraph.flowchart.internal_storage
-com.lucidchart.MultiDocumentBlock=mxgraph.flowchart.multi-document
-com.lucidchart.DefaultTextBlockNew=text
-
-#\ Containers
-com.lucidchart.AdvancedSwimLaneBlock=swimlane
-com.lucidchart.AdvancedSwimLaneBlockRotated=swimlane
-com.lucidchart.RectangleContainerBlock=rounded\=1
-com.lucidchart.DiamondContainerBlock=mxgraph.flowchart.decision
-com.lucidchart.RoundedRectangleContainerBlock=rounded\=1
-com.lucidchart.CircleContainerBlock=ellipse
-com.lucidchart.PillContainerBlock=rounded\=1
-
-#\ Shapes
-com.lucidchart.IsoscelesTriangleBlock21=triangle
-com.lucidchart.RightTriangleBlock21=mxgraph.basic.orthogonal_triangle
-com.lucidchart.PentagonBlock21=mxgraph.basic.pentagon
-com.lucidchart.HexagonBlock21=hexagon
-com.lucidchart.OctagonBlock21=mxgraph.basic.octagon
-com.lucidchart.CrossBlock21=mxgraph.basic.cross
-com.lucidchart.CloudBlock21=cloud
-com.lucidchart.HeartBlock21=mxgraph.basic.heart
-com.lucidchart.RightArrowBlock21=mxgraph.arrows.arrow_right
-com.lucidchart.CalloutBlock21=mxgraph.basic.rectangular_callout
-
-# Entity Relationship
-com.lucidchart.ERDEntityBlock247=mxgraph.er.entityExt
-com.lucidchart.ERDEntityBlock347=mxgraph.er.entityExt
-com.lucidchart.ERDEntityBlock4510=mxgraph.er.entityExt
-com.lucidchart.ERDEntityBlock34=mxgraph.er.entityExt
-
-# iPad Elements
-com.lucidchart.Image_ipad_ipad8321510f=mxgraph.ios.iPad
-com.lucidchart.iPadGrayBackgroundBlock20=mxgraph.ios.iBgFlat
-com.lucidchart.Image_ipad_top_bar9b387f07818a3d5a9b8d0c0d=mxgraph.ios.iTopBar
-com.lucidchart.Image_ipad_bar_gray5b014114=mxgraph.ios.iScreenNameBar
-com.lucidchart.Image_ipad_bar_semi_trans_blackaf49c08=mxgraph.ios.iScreenNameBar
-com.lucidchart.Image_ipad_bar_black8e3cad84=mxgraph.ios.iScreenNameBar
-com.lucidchart.Image_ipad_safari_top5a8275884c31e01b5ad7028e=mxgraph.ios.iURLBar
-com.lucidchart.Image_ipad_search44efda9aaa7961ad454467a0=mxgraph.mockup.forms.searchBox
-com.lucidchart.Image_ipad_alert_dialog8d948490=mxgraph.ios.iDialogBox
-com.lucidchart.Image_ipad_dialog5597f6428244294d549a4f30=mxgraph.ios.iAlertBox
-com.lucidchart.Image_ipad_popover5b11928bd4da43d65a13eb79=mxgraph.ios.iOption;barPos\=50;pointerPos\=top
-com.lucidchart.Image_ipad_tablec991d5a1eb9c7274c9e662a7eb2bb66c6f3e09ffeb8043721161ab0fea9ecb6211b63815=mxgraph.ios.iButtonBar
-com.lucidchart.Image_ipad_vtab59b3205e2bc2218e2597d919d0d5664e2597d919d0d5664=mxgraph.ios.iButtonBar
-
-# iPad Controls
-com.lucidchart.Image_ipad_button_blackc07c92a48d089437c0d11faa=mxgraph.ios.iButton
-com.lucidchart.Image_ipad_button_blue8a3f7ca5aad00a788a9409ab=mxgraph.ios.iButton
-com.lucidchart.Image_ipad_button_grayblue84ca5dc8cbd6d85b851eeace=mxgraph.ios.iButton
-com.lucidchart.Image_ipad_button_red9214b0f6f4581f0992693dfc=mxgraph.ios.iButton
-com.lucidchart.Image_ipad_back_button_gray43bdb06a3f626b7d44123d70=mxgraph.ios.iButtonBack
-com.lucidchart.Image_ipad_back_button_blackc55dda83600d03bcaa6aae=mxgraph.ios.iButtonBack
-#com.lucidchart.Image_ipad_sort_handlec2af001a=mxgraph.
-com.lucidchart.Image_ipad_dropdown67531bc397dcd91667a7a8c9=mxgraph.ios.iComboBox
-com.lucidchart.Image_ipad_email_name800e34c041940d538062c1c6=mxgraph.ios.iTextInput
-com.lucidchart.Image_ipad_prev_next8a11ac30=mxgraph.ios.iPrevNext
-com.lucidchart.Image_ipad_keyboard_portrait1b265fa4=mxgraph.ios.iKeybLett
-com.lucidchart.Image_ipad_keyboard_landscape44a333e8=mxgraph.ios.iKeybLett
-com.lucidchart.Image_ipad_large_tabbed_button3b53d9dfa9ee6e323b29935ca9ee6e323b29935ca9ee6e323ba866e596fb2d33bb67e66bb86f860623dd8cb=mxgraph.ios.iHorButtonBar
-com.lucidchart.Image_ipad_sort_buttonaba6db5161972424ab7c94ce61972424ab7c94ce61972424abfb6857b1081fc5ac097fd86fc29ae9d645bd=mxgraph.ios.iHorButtonBar
-com.lucidchart.Image_ipad_tab_bar9c7fb9a9d744c3bb6251cedad9afc1=mxgraph.ios.iHorButtonBar
-com.lucidchart.Image_ipad_sliderbe7edf1316c13066bed36c19=mxgraph.ios.iSlider
-com.lucidchart.Image_ipad_switch_offf288e2e9=mxgraph.ios.iOnOffButton
-
-# iPad Icons
-com.lucidchart.Image_ipad_add_icon_blue4a498c73=mxgraph.ios.iAddIcon
-com.lucidchart.Image_ipad_add_icon_green8896ea0=mxgraph.ios.iAddIcon
-com.lucidchart.Image_ipad_remove_iconeb9a7a05=mxgraph.ios.iDeleteIcon
-com.lucidchart.Image_ipad_arrow_icon484b2a74=mxgraph.ios.iArrowIcon
-com.lucidchart.Image_ipad_arrowa89dacba=mxgraph.ios.iArrowIcon
-com.lucidchart.Image_ipad_checkmarkac05af86=mxgraph.ios.iCheckIcon
-com.lucidchart.Image_ipad_check_offcd8bdbe9=mxgraph.ios.iCheckIcon
-#com.lucidchart.Image_ipad_location_dot712c4ac4=mxgraph.
-com.lucidchart.Image_ipad_mark_as_reada01dc616=ellipse
-com.lucidchart.Image_ipad_pin_greenaf2b858a=mxgraph.ios.iPin;fillColor2\=#00dd00;fillColor3\=#004400;strokeColor\=#006600;
-com.lucidchart.Image_ipad_pin_reda027bb18=mxgraph.ios.iPin;fillColor2\=#dd0000;fillColor3\=#440000;strokeColor\=#660000;
-com.lucidchart.Image_ipad_radio_off74367dc=mxgraph.ios.iRadioGroup;buttonText\=+
-com.lucidchart.Image_ipad_checkbox_off57bd7df8=mxgraph.ios.iCheckboxGroup;buttonText\=+
-com.lucidchart.Image_ipad_indicatordbc398edfdbe98c0dc1825f3=ellipse
-
-# iPhone Elements
-com.lucidchart.Image_iphone_iphone_4fcb30924=mxgraph.ios.iPhone
-com.lucidchart.Image_iphone_bg_blackd33dc60f=mxgraph.ios.iBgFlat
-com.lucidchart.Image_iphone_bg_gray86856b29=mxgraph.ios.iBgFlat
-com.lucidchart.Image_iphone_bg_stripe_drkd9f1ef31=mxgraph.ios.iBgStriped
-com.lucidchart.Image_iphone_bg_stripe_lt35b840ca=mxgraph.ios.iBgStriped
-com.lucidchart.Image_iphone_bg_white2135dd39=mxgraph.ios.iBgFlat
-com.lucidchart.Image_iphone_top_bar_appc0cc097=mxgraph.ios.iAppBar
-com.lucidchart.Image_iphone_top_bar_home1597dc3f=mxgraph.ios.iTopBar
-com.lucidchart.Image_iphone_bar_top10091635=mxgraph.ios.iTopBar
-com.lucidchart.Image_iphone_bar_semi_trans_black8e48900d=mxgraph.ios.iScreenNameBar
-com.lucidchart.Image_iphone_bar_semi_trans_blue9a563be2=mxgraph.ios.iScreenNameBar
-com.lucidchart.Image_iphone_search1db5ee1f3a4892721e0a7b25=mxgraph.mockup.forms.searchBox
-com.lucidchart.Image_iphone_table98e32bc55b35a4f9e2bfc255429e473a132c9a55972b4d515e082a54b5b33d51b29530=mxgraph.ios.iButtonBar
-com.lucidchart.Image_iphone_table_w_buttons5588c8367869064955dd553c77f84a41dc578f14784cd7479d589da4776b5f379dad2aaa=mxgraph.ios.iButtonBar
-com.lucidchart.Image_iphone_table_w_icons40a608cf26df992240fa95d5266edd1aacd7042d26c36a208875de3d25e1f21088ca6b43=mxgraph.ios.iButtonBar
-com.lucidchart.Image_iphone_list8ecf8c5d6cbaa6503d108a288eb35d5b8dd1e54bb48a7bbe=mxgraph.ios.iButtonBar
-com.lucidchart.Image_iphone_safari_topbc12660=mxgraph.ios.iURLBar
-#com.lucidchart.Image_iphone_safari_bottomc9848996=mxgraph.
-com.lucidchart.Image_iphone_gray_grad_listd5cac55d=mxgraph.ios.iTextInput
-#com.lucidchart.Image_iphone_alert_bar1e6e25fc=mxgraph.
-com.lucidchart.Image_iphone_alert_dialoga66b4d95=mxgraph.ios.iDialogBox
-com.lucidchart.Image_iphone_dialog2e5e09c712135a122d6062b5=mxgraph.ios.iAlertBox
-#com.lucidchart.Image_iphone_scroll_panea4de27a6=mxgraph.
-com.lucidchart.Image_iphone_alpha_listcd053ca9=mxgraph.ios.iAlphaList
-
-# iPhone Controls
-com.lucidchart.Image_iphone_button_blackfec52e69a5df5d3cff19bb6f=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_blue8c41d440dd298cd38c966146=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_grayblue88516fe356a1b53688a5fce9=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_redaaeb79fbb3e7654eab400701=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_lg_lightaebed83860872ecbaf13653e=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_lg_dark60c53d6458fceef76119ca6a=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_xl_greenfe3f205ef7a74871fe93ad64=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_lg_greenbf4a8c65b2dc0a38bf9f196b=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_lg_red8c1e09f3fded93468c7296f9=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_button_lg_yellow2b5c22629d64fb752bb0af68=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_back_buttonc7c002433515f96c8148f49=mxgraph.ios.iButtonBack
-com.lucidchart.Image_iphone_prev_nextca0e094b=mxgraph.ios.iPrevNext
-#com.lucidchart.Image_iphone_sort_handlef5088275=mxgraph.
-com.lucidchart.Image_iphone_slider9744f298a690612b97997f9e=mxgraph.ios.iSlider
-com.lucidchart.Image_iphone_dropdown26e2620870a2ec9b2736ef0e=mxgraph.ios.iComboBox
-com.lucidchart.Image_iphone_email_name98e4fdc5123539899398acb=mxgraph.ios.iTextInput
-com.lucidchart.Image_iphone_switch_offb218292e=mxgraph.ios.iOnOffButton
-com.lucidchart.Image_iphone_keyboard_button_bluea05f6bf9=mxgraph.ios.iButton
-com.lucidchart.Image_iphone_keyboard_letters8f8a1c3f=mxgraph.ios.iKeybLett
-com.lucidchart.Image_iphone_keyboard_landscapeb1fe652d=mxgraph.ios.iKeybLett
-com.lucidchart.Image_iphone_large_tabbed_button227e667ae7f9658d22541ff7e7f9658d22541ff7e7f9658d22d2f380d02984ae22e10b01cc0761e528f7aaa6=mxgraph.ios.iHorButtonBar
-com.lucidchart.Image_iphone_sort_buttonada932ec93f0a67fad7eec6993f0a67fad7eec6993f0a67fadfdbff23bd2fca0ae0bd773d58ce83394a12298=mxgraph.ios.iHorButtonBar
-com.lucidchart.Image_iphone_tab_bar73dee375cfcdce964b5eaee9d33321c=mxgraph.ios.iHorButtonBar
-#com.lucidchart.Image_iphone_picker_multid28353d2=mxgraph.
-#com.lucidchart.Image_iphone_picker_webefa423ed=mxgraph.
-
-# iPhone Icons
-com.lucidchart.Image_iphone_add_icon_blue4c4be40e=mxgraph.ios.iAddIcon
-com.lucidchart.Image_iphone_add_icon_green46d20a65=mxgraph.ios.iAddIcon
-com.lucidchart.Image_iphone_remove_icon1df3fc60=mxgraph.ios.iDeleteIcon
-com.lucidchart.Image_iphone_arrow_icon7da70b9=mxgraph.ios.iArrowIcon
-com.lucidchart.Image_iphone_arrow7372cf55=mxgraph.ios.iArrowIcon
-com.lucidchart.Image_iphone_checkmarkec020ca1=mxgraph.ios.iCheckIcon
-com.lucidchart.Image_iphone_check_offd883904=mxgraph.ios.iCheckIcon
-#com.lucidchart.Image_iphone_location_dot8a0313c9=mxgraph.
-com.lucidchart.Image_iphone_mark_as_readb8f48f1b=ellipse
-com.lucidchart.Image_iphone_pin_greenef27e2a5=mxgraph.ios.iPin;fillColor2\=#00dd00;fillColor3\=#004400;strokeColor\=#006600;
-com.lucidchart.Image_iphone_pin_reda3ea2f3=mxgraph.ios.iPin;fillColor2\=#dd0000;fillColor3\=#440000;strokeColor\=#660000;
-com.lucidchart.Image_iphone_indicatore1d1b483dbaf5dbe71a84e=shape\ellipse
-com.lucidchart.Image_iphone_radio_off473fc4f7=mxgraph.ios.iRadioGroup;buttonText\=+
-com.lucidchart.Image_iphone_checkbox_off709446fd=mxgraph.ios.iCheckboxGroup;buttonText\=+
-com.lucidchart.Image_iphone_thread_countf9164f24=rounded\=1
-
-# UI Containers
-com.lucidchart.UI2BrowserBlock92=mxgraph.mockup.containers.browserWindow
-com.lucidchart.UI2WindowBlock91=mxgraph.mockup.containers.window
-com.lucidchart.UI2DialogBlock52=mxgraph.mockup.containers.alertBox
-com.lucidchart.UI2AccordionBlock54=mxgraph.mockup.containers.accordion
-com.lucidchart.UI2TabBar2ContainerBlock43=mxgraph.mockup.containers.horTabBar
-com.lucidchart.UI2TabBarContainerBlock43=mxgraph.mockup.containers.horTabBar
-com.lucidchart.UI2VTabBarContainerBlock43=mxgraph.mockup.containers.verTabBar
-com.lucidchart.UI2VScrollBlock80=mxgraph.mockup.navigation.scrollBar
-com.lucidchart.UI2HScrollBlock80=mxgraph.mockup.navigation.scrollBar
-com.lucidchart.UI2VerticalSplitterBlock40=mxgraph.mockup.forms.splitter
-com.lucidchart.UI2HorizontalSplitterBlock40=mxgraph.mockup.forms.splitter
-com.lucidchart.UI2ElementBlock21=rounded\=1
-com.lucidchart.UI2AreaBlock20=rounded\=1
-
-# UI Widgets
-com.lucidchart.UI2ImageBlock31=mxgraph.mockup.graphics.iconGrid;gridSize\=1,1;
-com.lucidchart.UI2VideoBlock91=mxgraph.mockup.containers.videoPlayer;barHeight\=30;barPos\=20;
-com.lucidchart.UI2AudioBlock71=mxgraph.mockup.misc.playbackControls
-com.lucidchart.UI2MapBlock41=mxgraph.mockup.misc.map
-com.lucidchart.UI2CalendarBlock68=mxgraph.mockup.forms.calendar;strokeColor2\=#008cff;mainText\=April\ 2013;textSize\=12;firstDay\=0;startOn\=0;days\=30;prevDays\=31;dayNames\=Mo,Tu,We,Th,Fr,Sa,Su;selDay\=24
-com.lucidchart.UI2BarChartBlock51=mxgraph.mockup.graphics.barChart
-com.lucidchart.UI2ColumnChartBlock51=mxgraph.mockup.graphics.columnChart
-com.lucidchart.UI2LineChartBlock51=mxgraph.mockup.graphics.lineChart
-com.lucidchart.UI2PieChartBlock41=mxgraph.mockup.graphics.pieChart;parts\=10,20,35
-com.lucidchart.UI2WebcamBlock30=mxgraph.mockup.containers.userMale
-com.lucidchart.UI2CaptchaBlock37=mxgraph.mockup.text.captcha
-com.lucidchart.Image_ui_formatting_toolbar21214016b=mxgraph.mockup.menus_and_buttons.font_style_selector_3
-
-# UI Input
-com.lucidchart.UI2ButtonBlock21=mxgraph.mockup.buttons.button
-com.lucidchart.UI2CheckBoxBlock63=mxgraph.mockup.forms.checkboxGroup
-#com.lucidchart.UI2HorizontalCheckBoxBlock63=mxgraph.
-com.lucidchart.UI2RadioBlock63=mxgraph.mockup.forms.radioGroup
-#com.lucidchart.UI2HorizontalRadioBlock63=mxgraph.
-com.lucidchart.UI2ColorPickerBlock40=mxgraph.mockup.forms.colorPicker;chosenColor\=#aaddff;
-com.lucidchart.UI2TextInputBlock21=mxgraph.mockup.text.textBox
-com.lucidchart.UI2SelectBlock41=mxgraph.mockup.forms.comboBox
-com.lucidchart.UI2VSliderBlock30=mxgraph.mockup.forms.horSlider
-com.lucidchart.UI2HSliderBlock30=mxgraph.mockup.forms.horSlider
-#com.lucidchart.UI2DatePickerBlock31=mxgraph.
-com.lucidchart.UI2SearchBlock41=mxgraph.mockup.forms.searchBox
-com.lucidchart.UI2NumericStepperBlock41=mxgraph.mockup.forms.spinner
-#com.lucidchart.UI2TableBlock1910=mxgraph.
-
-# UI Menus
-com.lucidchart.UI2ButtonBarBlock43=mxgraph.mockup.buttons.horButtonBar
-com.lucidchart.UI2VerticalButtonBarBlock43=mxgraph.mockup.buttons.verButtonBar
-com.lucidchart.UI2LinkBarBlock43=mxgraph.mockup.text.linkBar
-com.lucidchart.UI2BreadCrumbsBlock43=mxgraph.mockup.navigation.breadcrumb
-com.lucidchart.UI2MenuBarBlock34=mxgraph.mockup.forms.menuBar
-com.lucidchart.UI2AtoZBlock227=mxgraph.mockup.text.alphanumeric
-com.lucidchart.UI2PaginationBlock212=mxgraph.mockup.navigation.pagination;linkText=<< Prev 1 2 3 4 5 6 7 8 9 10 Next >>
-#com.lucidchart.UI2ContextMenuBlock614=mxgraph.
-#com.lucidchart.UI2TreePaneBlock2012=
-com.lucidchart.UI2PlaybackControlsBlock90=mxgraph.mockup.misc.playbackControls
-com.lucidchart.Image_ui_formatting_toolbar42a4f47d=mxgraph.mockup.menus_and_buttons.font_style_selector_3
-
-# UI Misc
-com.lucidchart.UI2ProgressBarBlock30=mxgraph.mockup.misc.progressBar
-com.lucidchart.UI2HelpIconBlock30=mxgraph.mockup.misc.help_icon
-#com.lucidchart.UI2BraceNoteBlock31=mxgraph.
-com.lucidchart.UI2TooltipBlock21=mxgraph.basic.rectangular_callout;flipV=1
-com.lucidchart.UI2CalloutBlock21=ellipse
-com.lucidchart.UI2AlertBlock74=mxgraph.mockup.containers.alertBox
-
-# UML Class DGM
-com.lucidchart.UMLActiveClassBlock31=mxgraph.flowchart.predefined_process
-#com.lucidchart.UMLMultiplicityBlock31=
-com.lucidchart.UMLPackageBlock22=folder;fontStyle\=1;spacingTop\=10;tabWidth\=40;tabHeight\=14;tabPosition\=left;
-#com.lucidchart.UMLConstraintBlock21=mxgraph.
-com.lucidchart.UMLNoteBlock31=note
-
-# UML Use Case
-com.lucidchart.UMLActorBlock41=umlActor
-com.lucidchart.UMLUseCaseBlock23=ellipse
-com.lucidchart.UMLCircleContainerBlock20=ellipse
-com.lucidchart.UMLNoteBlock31=note
-com.lucidchart.UMLUseCaseBlock21=ellipse
-
-# UML State/Activity
-#com.lucidchart.UMLOptionLoopBlock42=mxgraph.
-com.lucidchart.UMLStartBlock20=ellipse;shape\=startState
-com.lucidchart.UMLDecisionBlock20=rhombus
-com.lucidchart.UMLFlowFinalBlock30=mxgraph.flowchart.or
-com.lucidchart.UMLHistoryStateBlock30=ellipse
-com.lucidchart.UMLEndBlock30=endState
-com.lucidchart.UMLSendSignalBlock21=mxgraph.flowchart.off-page_reference
-#com.lucidchart.UMLReceiveSignalBlock21=
-com.lucidchart.UMLStateBlock21=rounded\=1
-
-# UML Sequence
-com.lucidchart.UMLDeletionBlock30=mxgraph.mockup.markup.redX
-com.lucidchart.UMLSeqEntityBlock31=mxgraph.electrical.radio.microphone_1
-
-# UML Component
-com.lucidchart.UMLComponentBlock41=component
-com.lucidchart.UMLNodeBlock41=cube
-com.lucidchart.UMLComponentInterfaceBlock20=ellipse
-
-# UML Deployment
-com.lucidchart.UMLObjectBlock21=rounded\=1
-com.lucidchart.UMLActivationBlock20=rounded\=1
-
-# UML Entity Relation
-com.lucidchart.UMLEntityBlock21=mxgraph.er.entity
-com.lucidchart.UMLWeakEntityBlock31=mxgraph.er.entity;buttonStyle=dblFrame
-com.lucidchart.UMLAttributeBlock21=ellipse
-com.lucidchart.UMLMultivaluedAttributeBlock31=mxgraph.er.attribute;buttonStyle=dblFrame
-com.lucidchart.UMLRelationshipBlock21=mxgraph.er.has;buttonStyle=rhombus
-com.lucidchart.UMLWeakRelationshipBlock31=mxgraph.er.has;buttonStyle=dblFrame;
-
-# BPMN 2.0 (this conversion should be much more than a simple lookup table)
-com.lucidchart.BPMNActivity31=mxgraph.ext;rounded\=1;
-com.lucidchart.BPMNActivity21=mxgraph.ext;rounded\=1;
-com.lucidchart.BPMNEvent21=mxgraph.bpmn.shape;perimeter\=ellipsePerimeter;outline\=standard;symbol\=general
-com.lucidchart.BPMNEvent31=mxgraph.bpmn.shape;perimeter\=ellipsePerimeter;outline\=standard;symbol\=general
-#com.lucidchart.BPMNChoreography63=
-com.lucidchart.BPMNConversation21=hexagon
-com.lucidchart.BPMNGateway21=mxgraph.bpmn.shape;perimeter\=rhombusPerimeter;background\=gateway;outline\=none;symbol\=none
-com.lucidchart.BPMNData32=note
-com.lucidchart.BPMNDataStore31=mxgraph.flowchart.database
-com.lucidchart.BPMNBlackPool21=swimlane
-com.lucidchart.BPMNAdvancedPoolBlock33=swimlane
-com.lucidchart.BPMNAdvancedPoolBlockRotated33=shape\swimlane
-
-# Org Chart
-com.lucidchart.OrgBlock21=rounded\=1
-
-#Data\ Flow
-com.lucidchart.DFDExternalEntityBlock=mxgraph.er.entity
-com.lucidchart.DFDExternalEntityBlock2=mxgraph.er.entity
-com.lucidchart.YDMDFDProcessBlock=ellipse
-#com.lucidchart.YDMDFDDataStoreBlock=
-com.lucidchart.GSDFDProcessBlock=mxgraph.er.entityExt
-com.lucidchart.GSDFDProcessBlock2=mxgraph.er.entity
-
-# Value Stream Mapping - Processes
-com.lucidchart.VSMCustomerSupplierBlock21=mxgraph.lean_mapping.outside_sources
-com.lucidchart.VSMDedicatedProcessBlock52=mxgraph.lean_mapping.manufacturing_process
-com.lucidchart.VSMSharedProcessBlock52=mxgraph.lean_mapping.manufacturing_process_shared
-com.lucidchart.VSMWorkcellBlock21=mxgraph.lean_mapping.work_cell
-com.lucidchart.VSMDatacellBlock53=mxgraph.lean_mapping.buffer_or_safety_stock
-
-# VSM - Materials
-com.lucidchart.VSMInventoryBlock31=mxgraph.lean_mapping.inventory_box
-com.lucidchart.VSMSupermarketBlock63=mxgraph.lean_mapping.supermarket
-com.lucidchart.VSMPhysicalPullBlock40=mxgraph.lean_mapping.physical_pull
-com.lucidchart.VSMFIFOLaneBlock100=mxgraph.lean_mapping.fifo_sequence_flow
-com.lucidchart.VSMSafetyBufferStockBlock43=mxgraph.lean_mapping.buffer_or_safety_stock
-
-# VSM - Shipments
-com.lucidchart.VSMExternalShipmentAirplaneBlock21=mxgraph.lean_mapping.airplane_7
-com.lucidchart.VSMExternalShipmentForkliftBlock71=mxgraph.lean_mapping.move_by_forklift
-com.lucidchart.VSMExternalShipmentTruckBlock61=mxgraph.lean_mapping.truck_shipment
-com.lucidchart.VSMExternalShipmentBoatBlock21=mxgraph.lean_mapping.boat_shipment
-
-# VSM - Information
-com.lucidchart.VSMProductionControlBlock32=mxgraph.lean_mapping.manufacturing_process
-com.lucidchart.VSMOtherInformationBlock21=mxgraph.lean_mapping.schedule
-#com.lucidchart.VSMHeijyunkaBoxBlock33=
-com.lucidchart.VSMSequencedPullBallBlock30=mxgraph.lean_mapping.sequenced_pull_ball
-com.lucidchart.VSMMRPERPBlock31=mxgraph.lean_mapping.mrp_erp
-com.lucidchart.VSMLoadLevelingBlock80=mxgraph.lean_mapping.load_leveling
-com.lucidchart.VSMGoSeeBlock60=mxgraph.lean_mapping.go_see_production_scheduling
-com.lucidchart.VSMGoSeeProductionBlock71=ellipse
-com.lucidchart.VSMVerbalInfoBlock60=mxgraph.lean_mapping.verbal
-
-# VSM
-com.lucidchart.VSMKaizenBurstBlock21=mxgraph.lean_mapping.kaizen_lightening_burst
-com.lucidchart.VSMOperatorBlock31=mxgraph.lean_mapping.operator
-com.lucidchart.VSMTimelineBlock44=mxgraph.lean_mapping.timeline;mainText\=20,N1,50,V1,30,N2,40,V2,30,N3,50,V3,20,N4;
-com.lucidchart.VSMQualityProblemBlock21=mxgraph.lean_mapping.quality_problem
-
-# VSM - Kanban
-com.lucidchart.VSMProductionKanbanSingleBlock21=mxgraph.lean_mapping.production_kanban
-com.lucidchart.VSMProductionKanbanBatchBlock41=mxgraph.lean_mapping.batched_kanban
-com.lucidchart.VSMWithdrawalKanbanBlock41=mxgraph.lean_mapping.withdrawal_kanban
-com.lucidchart.VSMWithdrawalKanbanBatchBlock61=mxgraph.lean_mapping.batched_kanban
-com.lucidchart.VSMSignalKanbanBlock21=mxgraph.lean_mapping.signal_kanban
-com.lucidchart.VSMKanbanPostBlock30=mxgraph.lean_mapping.kanban_post
-
-# AWS - EC2
-com.lucidchart.AWSElasticComputeCloudBlock291=mxgraph.aws2.compute_and_networking.ec2
-com.lucidchart.AWSInstanceBlock2122=mxgraph.aws2.compute_and_networking.ec2_instance
-com.lucidchart.AWSInstancesBlock2301=mxgraph.aws2.compute_and_networking.ec2_instances
-com.lucidchart.AWSAMIBlock2201=mxgraph.aws2.compute_and_networking.ec2_ami
-com.lucidchart.AWSDBonInstanceBlock2211=mxgraph.aws2.compute_and_networking.ec2_db_on_instance
-com.lucidchart.AWSInstanceCloudWatchBlock2141=mxgraph.aws2.compute_and_networking.ec2_cloudwatch
-com.lucidchart.AWSElasticIPBlock2101=mxgraph.aws2.compute_and_networking.ec2_elastic_ip
-com.lucidchart.AWSElasticMapReduceBlock2121=mxgraph.aws2.compute_and_networking.emr
-com.lucidchart.AWSClusterBlock2541=mxgraph.aws2.compute_and_networking.emr_cluster
-com.lucidchart.AWSHDFSClusterBlock2611=mxgraph.aws2.compute_and_networking.emr_hdfs_cluster
-com.lucidchart.AWSAutoScalingBlock2141=mxgraph.aws2.compute_and_networking.auto_scaling
-
-# AWS - S3
-com.lucidchart.AWSSimpleStorageBlock2141=mxgraph.aws2.storage_and_content_delivery.s3
-com.lucidchart.AWSBucketBlock2212=mxgraph.aws2.storage_and_content_delivery.s3_bucket
-com.lucidchart.AWSBuckethWithObjectsBlock2181=mxgraph.aws2.storage_and_content_delivery.s3_bucket_with_objects
-com.lucidchart.AWSObjectBlock282=mxgraph.aws2.storage_and_content_delivery.s3_objects
-com.lucidchart.AWSImportExportBlock2301=mxgraph.aws2.storage_and_content_delivery.aws_import_export
-com.lucidchart.AWSStorageGatewayBlock271=mxgraph.aws2.storage_and_content_delivery.aws_storage_gateway
-com.lucidchart.AWSElasticBlockStorageBlock252=mxgraph.aws2.storage_and_content_delivery.ebs
-com.lucidchart.AWSVolueBlock252=mxgraph.aws2.storage_and_content_delivery.ebs_volume
-com.lucidchart.AWSSnapshotBlock2312=mxgraph.aws2.storage_and_content_delivery.ebs_snapshot
-com.lucidchart.AWSGlacierBlock271=mxgraph.aws2.storage_and_content_delivery.glacier
-
-# AWS - Content Delivery
-com.lucidchart.AWSCloudFrontBlock2191=mxgraph.aws2.storage_and_content_delivery.cloudfront
-com.lucidchart.AWSDownloadDistBlock281=mxgraph.aws2.storage_and_content_delivery.cloudfront_download_distribution
-com.lucidchart.AWSStreamingBlock281=mxgraph.aws2.storage_and_content_delivery.cloudfront_streaming_distribution
-com.lucidchart.AWSEdgeLocationBlock291=mxgraph.aws2.storage_and_content_delivery.cloudfront_edge_location
-
-# AWS - CloudWatch
-com.lucidchart.AWSCloudWatchBlock2101=mxgraph.aws2.deployment_and_management.cloudwatch
-com.lucidchart.AWSCloudWatchAlarmBlock2111=mxgraph.aws2.deployment_and_management.cloudwatch_alarm
-
-# AWS - Networking
-com.lucidchart.AWSElasticLoadBlock281=mxgraph.aws2.compute_and_networking.elastic_load_balancing
-com.lucidchart.AWSDirectConnectBlock281=mxgraph.aws2.compute_and_networking.aws_direct_connect
-com.lucidchart.AWSElasticNetworkBlock2121=mxgraph.aws2.compute_and_networking.elastic_network_instance
-com.lucidchart.AWSRoute53Block291=mxgraph.aws2.compute_and_networking.route_53
-com.lucidchart.AWSHostedZoneBlock2162=mxgraph.aws2.compute_and_networking.route_53_hosted_zone
-com.lucidchart.AWSRouteTableBlock2144=mxgraph.aws2.compute_and_networking.route_53_route_table
-com.lucidchart.AWSVPCBlock2151=mxgraph.aws2.compute_and_networking.vpc
-com.lucidchart.AWSVPNConnectionBlock2161=mxgraph.aws2.compute_and_networking.vpc_vpn_connection
-com.lucidchart.AWSVPNGatewayBlock291=mxgraph.aws2.compute_and_networking.vpc_vpn_gateway
-com.lucidchart.AWSCustomerGatewayBlock2201=mxgraph.aws2.compute_and_networking.vpc_customer_gateway
-com.lucidchart.AWSInternetGatewayBlock291=mxgraph.aws2.compute_and_networking.vpc_internet_gateway
-com.lucidchart.AWSRouterBlock2191=mxgraph.aws2.compute_and_networking.vpc_router
-
-# AWS - Database
-com.lucidchart.AWSItemBlock2101=mxgraph.aws2.database.dynamodb_item
-com.lucidchart.AWSItemsBlock2161=mxgraph.aws2.database.dynamodb_items
-com.lucidchart.AWSAttributeBlock2101=mxgraph.aws2.database.dynamodb_attribute
-com.lucidchart.AWSAttributesBlock2161=mxgraph.aws2.database.dynamodb_attributes
-com.lucidchart.AWSRDBSBlock262=mxgraph.aws2.database.rds
-com.lucidchart.AWSRDSInstanceBlock2151=mxgraph.aws2.database.rds_db_instance
-com.lucidchart.AWSRDSStandbyBlock2151=mxgraph.aws2.database.rds_instance_standby
-com.lucidchart.AWSRDSInstanceReadBlock2151=mxgraph.aws2.database.rds_instance_read_replica
-com.lucidchart.AWSOracleDBBlock2291=mxgraph.aws2.database.rds_oracle_db_instance
-com.lucidchart.AWSMySQLDBBlock2251=mxgraph.aws2.database.rds_ms_sql_instance
-com.lucidchart.AWSDynamoDBBlock291=mxgraph.aws2.database.dynamodb
-com.lucidchart.AWSTableBlock2171=mxgraph.aws2.database.dynamodb_table
-com.lucidchart.AWSElastiCacheNodeBlock2131=mxgraph.aws2.database.elasticcache_node
-com.lucidchart.AWSElastiCacheBlock291=mxgraph.aws2.database.elasticcache
-
-# AWS - Messaging
-com.lucidchart.AWSSESBlock281=mxgraph.aws2.app_services.ses
-com.lucidchart.AWSEmailBlock2151=mxgraph.aws2.app_services.email
-com.lucidchart.AWSSNSBlock2131=mxgraph.aws2.app_services.sns
-com.lucidchart.AWSTopicBlock272=mxgraph.aws2.app_services.sns_topic
-com.lucidchart.AWSEmailNotificationBlock2191=mxgraph.aws2.app_services.sns_email_notification
-com.lucidchart.AWSHTTPNotificationBlock2181=mxgraph.aws2.app_services.sns_http_notification
-com.lucidchart.AWSSQSBlock271=mxgraph.aws2.app_services.sqs
-com.lucidchart.AWSQueueBlock241=mxgraph.aws2.app_services.sqs_queue
-com.lucidchart.AWSMessageBlock271=mxgraph.aws2.app_services.sqs_message
-com.lucidchart.AWSDeciderBlock2181=mxgraph.aws2.app_services.swf_decider
-com.lucidchart.AWSSWFBlock2101=mxgraph.aws2.app_services.swf
-com.lucidchart.AWSWorkerBlock251=mxgraph.aws2.app_services.swf_worker
-com.lucidchart.AWSCloudSearchBlock2151=mxgraph.aws2.app_services.cloudsearch
-
-# AWS - Deployment
-com.lucidchart.AWSCloudFormationBlock291=mxgraph.aws2.deployment_and_management.cloudformation
-com.lucidchart.AWSTemplageBlock231=mxgraph.aws2.deployment_and_management.cloudformation_template
-com.lucidchart.AWSStackBlock2131=mxgraph.aws2.deployment_and_management.cloudformation_stack
-com.lucidchart.AWSBeanStockBlock2111=mxgraph.aws2.deployment_and_management.elastic_beanstalk
-com.lucidchart.AWSApplicationBlock2131=mxgraph.aws2.deployment_and_management.elastic_beanstalk_application
-com.lucidchart.AWSDeploymentManagementBlock2111=mxgraph.aws2.deployment_and_management.iam
-
-# AWS - On-Demand
-com.lucidchart.AWSMechanicalTurkBlock231=mxgraph.aws2.on-demand_workforce.mechanical_turk
-com.lucidchart.AWSHumanITBlock221=mxgraph.aws2.on-demand_workforce.mechanical_turk_human_intelligence_tasks
-com.lucidchart.AWSAssignmentTaskBlock221=mxgraph.aws2.on-demand_workforce.mechanical_turk_requester
-com.lucidchart.AWSWorkersBlock271=mxgraph.aws2.on-demand_workforce.mechanical_turk_workers
-com.lucidchart.AWSRequesterBlock221=mxgraph.aws2.on-demand_workforce.mechanical_turk_assignment_task
-
-#\ AWS\ Other
-com.lucidchart.AWSCloudBlock2131=mxgraph.aws.misc.aws_cloud
-com.lucidchart.AWSUserBlock2131=mxgraph.aws.non_service_specific.user
-com.lucidchart.AWSUsersBlock2421=mxgraph.aws.non_service_specific.users
-com.lucidchart.AWSClientBlock2191=mxgraph.aws.non_service_specific.client
-com.lucidchart.AWSMobileClientBlock2111=mxgraph.aws.non_service_specific.mobile_client
-com.lucidchart.AWSMediaBlock2111=mxgraph.aws.non_service_specific.multimedia
-com.lucidchart.AWSDataCenterBlock2111=mxgraph.aws.non_service_specific.corporate_data_center
-com.lucidchart.AWSServerBlock2111=mxgraph.aws.non_service_specific.traditional_server
-com.lucidchart.AWSInternetBlock2101=mxgraph.aws.non_service_specific.internet
-com.lucidchart.AWSManagementBlock2191=mxgraph.aws.non_service_specific.aws_management_console
-com.lucidchart.AWSIAMAddonBlock2181=mxgraph.aws.non_service_specific.iam_add_on
-com.lucidchart.AWSExampleIAMBlock241=shape=mxgraph.aws2.deployment_and_management.iam_add-on
-com.lucidchart.AWSSubnetBlock251=mxgraph.aws.misc.vpc_subnet
-
-# AWS Containers
-# maybe need to dig deeper with this one
-#com.lucidchart.AWSRoundedRectangleContainerBlock2=mxgraph.aws.groups.auto_scaling_group\ 
-com.lucidchart.AWSRoundedRectangleContainerBlock231=rounded\=1
-com.lucidchart.AWSRoundedRectangleContainerBlock241=rounded\=1
-com.lucidchart.AWSRoundedRectangleContainerBlock261=mxgraph.aws.groups.vpc_subnet
-com.lucidchart.AWSRoundedRectangleContainerBlock271=mxgraph.aws.groups.aws_cloud
-
-# AWS Data Flow
-com.lucidchart.GSDFDProcessBlock221=rounded\=1
-com.lucidchart.DFDExternalEntityBlock31=rounded\=1
-com.lucidchart.DFDExternalEntityBlock221=rounded\=1
-com.lucidchart.YDMDFDProcessBlock21=ellipse
-
-# CISCO from Lucid
-# Cisco Basic
-com.lucidchart.Cisco_cisco_androgenous_persona00a748e=mxgraph.cisco.people.androgenous_person
-com.lucidchart.Cisco_cisco_atm_switchc33e5304=mxgraph.cisco.switches.atm_switch
-com.lucidchart.Cisco_cisco_cloud336de041=mxgraph.cisco.storage.cloud
-com.lucidchart.Cisco_cisco_fileserveraec25cc9=mxgraph.cisco.servers.fileserver
-com.lucidchart.Cisco_cisco_firewall8ec414a=mxgraph.cisco.security.firewall
-com.lucidchart.Cisco_cisco_generic_building7f3319a7=mxgraph.cisco.buildings.generic_building
-com.lucidchart.Cisco_cisco_laptopbb36b4e4=mxgraph.cisco.computers_and_peripherals.laptop
-com.lucidchart.Cisco_cisco_lockb6485b75=mxgraph.cisco.security.lock
-com.lucidchart.Cisco_cisco_microwebserver6e3764dd=mxgraph.cisco.servers.microwebserver
-com.lucidchart.Cisco_cisco_pc684ad7fd=mxgraph.cisco.computers_and_peripherals.pc
-com.lucidchart.Cisco_cisco_pdaa575b739=mxgraph.cisco.misc.pda
-com.lucidchart.Cisco_cisco_phonef7efafa=mxgraph.cisco.modems_and_phones.phone
-com.lucidchart.Cisco_cisco_printerb4473f66=mxgraph.cisco.computers_and_peripherals.printer
-com.lucidchart.Cisco_cisco_relational_database26294f20=mxgraph.cisco.storage.relational_database
-com.lucidchart.Cisco_cisco_router871f06d3=mxgraph.cisco.routers.router
-com.lucidchart.Cisco_cisco_standing_manb4275950=mxgraph.cisco.people.standing_man
-com.lucidchart.Cisco_cisco_standing_womane29ae4b8=mxgraph.cisco.people.standing_woman
-com.lucidchart.Cisco_cisco_upsc36cae04=mxgraph.cisco.misc.ups
-com.lucidchart.Cisco_cisco_wireless_router4989bfd7=mxgraph.cisco.routers.wireless_router
-
-# Cisco Extended
-com.lucidchart.Cisco_cisco_100baset_hub8636591=mxgraph.cisco.hubs_and_gateways.100baset_hub
-com.lucidchart.Cisco_cisco_10700da518e84=mxgraph.cisco.routers.10700
-com.lucidchart.Cisco_cisco_10GE_FCoE2390a081=mxgraph.cisco.controllers_and_modules.10ge_fcoe
-com.lucidchart.Cisco_cisco_15200d938469a=mxgraph.cisco.misc.15200
-com.lucidchart.Cisco_cisco_3174__desktop_6b9e49a=mxgraph.cisco.controllers_and_modules.3174_(desktop)_cluster_controller
-#com.lucidchart.Cisco_cisco_3200_mobile_access_router486f3974=mxgraph.cisco.
-com.lucidchart.Cisco_cisco_3x74__floor_9a53ab31=mxgraph.cisco.controllers_and_modules.3x74_(floor)_cluster_controller
-com.lucidchart.Cisco_cisco_6700_series648f5bc2=mxgraph.cisco.misc.6700_series
-com.lucidchart.Cisco_cisco_7500ars__7513_ee840d67=mxgraph.cisco.misc.7500ars_(7513)
-#com.lucidchart.Cisco_cisco_access_gatewayd120ec92=mxgraph.cisco.
-com.lucidchart.Cisco_cisco_accesspointe7474c78=mxgraph.cisco.misc.access_point
-com.lucidchart.Cisco_cisco_ace8a7bc3cf=mxgraph.cisco.misc.ace
-com.lucidchart.Cisco_cisco_ACSb61ba0bd=mxgraph.cisco.misc.acs
-com.lucidchart.Cisco_cisco_adm8ca15876=mxgraph.cisco.misc.adm
-com.lucidchart.Cisco_cisco_antennab2c7dd4f=mxgraph.cisco.wireless.antenna
-com.lucidchart.Cisco_cisco_asic_processorb3d76448=mxgraph.cisco.misc.asic_processor
-com.lucidchart.Cisco_cisco_ASR_1000_Series5c32eb04=mxgraph.cisco.misc.asr_1000_series
-com.lucidchart.Cisco_cisco_ataa745c85a=mxgraph.cisco.misc.ata
-com.lucidchart.Cisco_cisco_atm_38001206e3b5=mxgraph.cisco.misc.atm_3800
-com.lucidchart.Cisco_cisco_atm_fast_gigabit_etherswitcheacb90b7=mxgraph.cisco.switches.atm_fast_gigabit_etherswitch
-com.lucidchart.Cisco_cisco_atm_routerf562099=mxgraph.cisco.routers.atm_router
-com.lucidchart.Cisco_cisco_atm_tag_switch_router461095b5=mxgraph.cisco.routers.atm_tag_switch_router
-com.lucidchart.Cisco_cisco_avsabad20aa=mxgraph.cisco.misc.avs
-com.lucidchart.Cisco_cisco_AXPd9c71f45=mxgraph.cisco.misc.axp
-#com.lucidchart.Cisco_cisco_bbfw_media6138e61f=mxgraph.cisco.
-#com.lucidchart.Cisco_cisco_bbfwfd933c5b=mxgraph.cisco.
-com.lucidchart.Cisco_cisco_bbsm13355164=mxgraph.cisco.misc.bbsm
-com.lucidchart.Cisco_cisco_branch_office4ba47d86=mxgraph.cisco.buildings.branch_office
-com.lucidchart.Cisco_cisco_breakout_box2bd043e4=mxgraph.cisco.misc.breakout_box
-com.lucidchart.Cisco_cisco_bridged515f313=mxgraph.cisco.misc.bridge
-com.lucidchart.Cisco_cisco_broadband_router19bfcc1c=mxgraph.cisco.routers.broadcast_router
-com.lucidchart.Cisco_cisco_bts_102009ced32c0=mxgraph.cisco.misc.bts_10200
-com.lucidchart.Cisco_cisco_cable_modemf13ee1d3=mxgraph.cisco.modems_and_phones.cable_modem
-com.lucidchart.Cisco_cisco_callmanager751593db=mxgraph.cisco.misc.call_manager
-com.lucidchart.Cisco_cisco_carf195baa0=mxgraph.cisco.misc.car
-com.lucidchart.Cisco_cisco_carrier_routing_system1bdfa67b=mxgraph.cisco.misc.carrier_routing_system
-com.lucidchart.Cisco_cisco_cddi_fddi49253596=mxgraph.cisco.misc.cddi_fddi
-com.lucidchart.Cisco_cisco_cdmf66dcef8=mxgraph.cisco.misc.cdm
-com.lucidchart.Cisco_cisco_cellular_phone449d9442=mxgraph.cisco.modems_and_phones.cell_phone
-com.lucidchart.Cisco_cisco_centri_firewall9dc634ed=mxgraph.cisco.security.centri_firewall
-com.lucidchart.Cisco_cisco_cisco_1000186fefb0=mxgraph.cisco.misc.cisco_1000
-com.lucidchart.Cisco_cisco_cisco_asa_55009addc302=mxgraph.cisco.misc.asa_5500
-com.lucidchart.Cisco_cisco_cisco_ca22d1af=mxgraph.cisco.misc.cisco_ca
-com.lucidchart.Cisco_cisco_cisco_file_engine33cf514b=mxgraph.cisco.storage.cisco_file_engine
-com.lucidchart.Cisco_cisco_cisco_hub3196475a=mxgraph.cisco.hubs_and_gateways.cisco_hub
-com.lucidchart.Cisco_cisco_ciscosecurity28b97b45=mxgraph.cisco.security.cisco_security
-#com.lucidchart.Cisco_cisco_Cisco_telepresence_managerfb3dbb23=mxgraph.cisco.
-com.lucidchart.Cisco_cisco_cisco_unified_presence_serverac06025f=mxgraph.cisco.servers.cisco_unified_presence_server
-com.lucidchart.Cisco_cisco_cisco_unityexpresse77175ac=mxgraph.cisco.misc.cisco_unity_express
-com.lucidchart.Cisco_cisco_ciscoworksaff3e133=mxgraph.cisco.misc.cisco_works
-com.lucidchart.Cisco_cisco_class_4_5_switchc4f6351c=mxgraph.cisco.switches.class_4_5_switch
-com.lucidchart.Cisco_cisco_communications_serverec0398f2=mxgraph.cisco.servers.communications_server
-com.lucidchart.Cisco_cisco_contact_centercfa7f6df=mxgraph.cisco.misc.contact_center
-com.lucidchart.Cisco_cisco_content_engine__cache_director_8d2a439a=mxgraph.cisco.directors.content_engine_(cache_director)
-com.lucidchart.Cisco_cisco_content_service_router906d1e25=mxgraph.cisco.routers.content_service_router
-com.lucidchart.Cisco_cisco_content_service_switch_110012c746=mxgraph.cisco.switches.content_service_switch_1100
-com.lucidchart.Cisco_cisco_content_switch_moduledd22777d=mxgraph.cisco.controllers_and_modules.content_switch_module
-com.lucidchart.Cisco_cisco_content_switch3ccac845=mxgraph.cisco.switches.content_switch
-com.lucidchart.Cisco_cisco_content_transformation_engine__cte_5d94473b=mxgraph.cisco.misc.content_transformation_engine_(cte)
-com.lucidchart.Cisco_cisco_cs_mars1a2f1d5e=mxgraph.cisco.misc.cs-mars
-com.lucidchart.Cisco_cisco_csm_s26c017af=mxgraph.cisco.misc.csm-s
-com.lucidchart.Cisco_cisco_csu_dsubfa19ad8=mxgraph.cisco.misc.csu_dsu
-com.lucidchart.Cisco_cisco_CUBE796ebd7f=mxgraph.cisco.misc.cube
-com.lucidchart.Cisco_cisco_detector637b0910=mxgraph.cisco.misc.detector
-com.lucidchart.Cisco_cisco_director_class_fibre_channel_director49beb0cc=mxgraph.cisco.directors.director-class_fibre_channel_director
-com.lucidchart.Cisco_cisco_directory_serverbfc47ea0=mxgraph.cisco.servers.directory_server
-com.lucidchart.Cisco_cisco_diskette13f26047=mxgraph.cisco.storage.diskette
-com.lucidchart.Cisco_cisco_distributed_directorb3e42db3=mxgraph.cisco.directors.distributed_director
-com.lucidchart.Cisco_cisco_dot_dot9e3fdc91=mxgraph.cisco.misc.dot-dot
-com.lucidchart.Cisco_cisco_dpt4030d634=mxgraph.cisco.misc.dpt
-com.lucidchart.Cisco_cisco_dslamde85beb5=mxgraph.cisco.misc.dslam
-com.lucidchart.Cisco_cisco_dual_mode_ap8fdd2cf2=mxgraph.cisco.misc.dual_mode
-com.lucidchart.Cisco_cisco_dwdm_filter946f988=mxgraph.cisco.misc.dwdm_filter
-com.lucidchart.Cisco_cisco_end_office470105ab=mxgraph.cisco.buildings.end_office
-com.lucidchart.Cisco_cisco_fax909cf969=mxgraph.cisco.modems_and_phones.fax
-com.lucidchart.Cisco_cisco_fc_storage5e3a4ea2=mxgraph.cisco.storage.fc_storage
-com.lucidchart.Cisco_cisco_fddi_ring85362ff9=mxgraph.cisco.misc.fddi_ring
-com.lucidchart.Cisco_cisco_fibre_channel_disk_subsystem6d3ab21=mxgraph.cisco.storage.fibre_channel_disk_subsystem
-com.lucidchart.Cisco_cisco_fibre_channel_fabric_switch61776750=mxgraph.cisco.switches.fibre_channel_fabric_switch
-com.lucidchart.Cisco_cisco_file_cabinetbae4e27e=mxgraph.cisco.storage.file_cabinet
-com.lucidchart.Cisco_cisco_file_server892456b3=mxgraph.cisco.servers.file_server
-com.lucidchart.Cisco_cisco_firewall_service_module__fwsm_5f20dde9=mxgraph.cisco.controllers_and_modules.firewall_service_module_(fwsm)
-com.lucidchart.Cisco_cisco_front_end_processorfe85a1a2=mxgraph.cisco.misc.front_end_processor
-com.lucidchart.Cisco_cisco_gatekeeper33f4e987=mxgraph.cisco.security.gatekeeper
-com.lucidchart.Cisco_cisco_general_applicance647da556=mxgraph.cisco.misc.general_appliance
-com.lucidchart.Cisco_cisco_generic_gateway67d9a2c7=mxgraph.cisco.hubs_and_gateways.generic_gateway
-com.lucidchart.Cisco_cisco_generic_processorfee32015=mxgraph.cisco.misc.generic_processor
-com.lucidchart.Cisco_cisco_generic_softswitche5c637d1=mxgraph.cisco.switches.generic_softswitch
-com.lucidchart.Cisco_cisco_gigabit_switch_atm_tag_router58259e3e=mxgraph.cisco.routers.gigabit_switch_atm_tag_router
-com.lucidchart.Cisco_cisco_government_building7fb0814f=mxgraph.cisco.buildings.government_building
-com.lucidchart.Cisco_cisco_Ground_terminal24e819a1=mxgraph.cisco.wireless.ground_terminal
-com.lucidchart.Cisco_cisco_guard41b468b1=mxgraph.cisco.security.guard
-com.lucidchart.Cisco_cisco_handheldc8b6526e=mxgraph.cisco.misc.handheld
-com.lucidchart.Cisco_cisco_hootphone1fba06ce=mxgraph.cisco.modems_and_phones.hootphone
-com.lucidchart.Cisco_cisco_host32900572=mxgraph.cisco.servers.host
-com.lucidchart.Cisco_cisco_hp_mini3e22313b=mxgraph.cisco.misc.hp_mini
-com.lucidchart.Cisco_cisco_hd1490174=mxgraph.cisco.misc.h_323
-com.lucidchart.Cisco_cisco_hub1b545741=mxgraph.cisco.hubs_and_gateways.hub
-com.lucidchart.Cisco_cisco_iad_router254c21a7=mxgraph.cisco.routers.iad_router
-com.lucidchart.Cisco_cisco_ibm_mainframeb07e3834=mxgraph.cisco.computers_and_peripherals.ibm_mainframe
-com.lucidchart.Cisco_cisco_ibm_mini_as40098e0c66f=mxgraph.cisco.computers_and_peripherals.ibm_mini_as400
-com.lucidchart.Cisco_cisco_ibm_tower191c87e9=mxgraph.cisco.computers_and_peripherals.ibm_tower
-com.lucidchart.Cisco_cisco_icm321e59df=mxgraph.cisco.misc.icm
-com.lucidchart.Cisco_cisco_ics3272e6e5=mxgraph.cisco.misc.ics
-com.lucidchart.Cisco_cisco_intelliswitch_stack85103a3b=mxgraph.cisco.switches.intelliswitch_stack
-com.lucidchart.Cisco_cisco_ios_firewallf63c96fd=mxgraph.cisco.security.ios_firewall
-com.lucidchart.Cisco_cisco_ios_slbbf64ebe2=mxgraph.cisco.misc.ios_slb
-com.lucidchart.Cisco_cisco_ip_communicator2cd7aafa=mxgraph.cisco.misc.ip_communicator
-com.lucidchart.Cisco_cisco_ip_dsld0362d4e=mxgraph.cisco.misc.ip_dsl
-com.lucidchart.Cisco_cisco_ip_phone231946ff=mxgraph.cisco.modems_and_phones.ip_phone
-com.lucidchart.Cisco_cisco_ip5d101d31=mxgraph.cisco.misc.ip
-com.lucidchart.Cisco_cisco_iptcd01cb6a0=mxgraph.cisco.misc.iptc
-com.lucidchart.Cisco_cisco_ip_telephony_routerfbd0a3f6=mxgraph.cisco.routers.ip_telephony_router
-com.lucidchart.Cisco_cisco_iptv_content_managerd4fbb519=mxgraph.cisco.misc.iptv_content_manager
-com.lucidchart.Cisco_cisco_iptv_serverbaab4826=mxgraph.cisco.servers.iptv_server
-com.lucidchart.Cisco_cisco_iscsi_router1289bbc4=mxgraph.cisco.routers.isci_router
-com.lucidchart.Cisco_cisco_isdn_switch92a9396c=mxgraph.cisco.switches.isdn_switch
-com.lucidchart.Cisco_cisco_itp4f4b02f1=mxgraph.cisco.misc.itp
-com.lucidchart.Cisco_cisco_jbod4aec8257=mxgraph.cisco.misc.jbod
-com.lucidchart.Cisco_cisco_key9ffd9bab=mxgraph.cisco.misc.key
-com.lucidchart.Cisco_cisco_keys636437be=mxgraph.cisco.misc.keys
-com.lucidchart.Cisco_cisco_lan_to_land46755e5=mxgraph.cisco.misc.lan_to_lan
-com.lucidchart.Cisco_cisco_layer_2_remote_switchc389221d=mxgraph.cisco.switches.layer_2_remote_switch
-com.lucidchart.Cisco_cisco_layer_3_switch2472aba=mxgraph.cisco.switches.layer_3_switch
-com.lucidchart.Cisco_cisco_lightweight_ap75c7870b=mxgraph.cisco.misc.lightweight_ap
-com.lucidchart.Cisco_cisco_localdirector2e1b0803=mxgraph.cisco.directors.localdirector
-com.lucidchart.Cisco_cisco_longreach_cpe79e2e7b=mxgraph.cisco.misc.longreach_cpe
-com.lucidchart.Cisco_cisco_macintosha1699cd0=mxgraph.cisco.computers_and_peripherals.macintosh
-com.lucidchart.Cisco_cisco_mac_woman9f4b3cfd=mxgraph.cisco.people.mac_woman
-com.lucidchart.Cisco_cisco_man_woman2331c1e9=mxgraph.cisco.people.man_woman
-com.lucidchart.Cisco_cisco_mas_gateway1835e2cf=mxgraph.cisco.hubs_and_gateways.mas_gateway
-com.lucidchart.Cisco_cisco_mau2be51ad=mxgraph.cisco.misc.mau
-com.lucidchart.Cisco_cisco_mcu62802eb=mxgraph.cisco.misc.mcu
-com.lucidchart.Cisco_cisco_mdu7dcdb8a=mxgraph.cisco.buildings.mdu
-com.lucidchart.Cisco_cisco_me_11004f5ea5f4=mxgraph.cisco.misc.me1100
-com.lucidchart.Cisco_cisco_Mediatoref3d7ddd=mxgraph.cisco.misc.mediator
-com.lucidchart.Cisco_cisco_meetingplace3bb92a76=mxgraph.cisco.misc.meetingplace
-com.lucidchart.Cisco_cisco_mesh_ap86c8ae8e=mxgraph.cisco.misc.mesh_ap
-com.lucidchart.Cisco_cisco_metro_1500faa4fcd5=mxgraph.cisco.misc.metro_1500
-com.lucidchart.Cisco_cisco_mgx_8000_multiservice_switcha6a7a4dc=mxgraph.cisco.switches.mgx_8000_multiservice_switch
-com.lucidchart.Cisco_cisco_microphone418930b4=mxgraph.cisco.computers_and_peripherals.microphone
-com.lucidchart.Cisco_cisco_mini_vaxb5f4262e=mxgraph.cisco.misc.mini_vax
-com.lucidchart.Cisco_cisco_mobile_access_ip_phonecacb757d=mxgraph.cisco.modems_and_phones.mobile_access_ip_phone
-com.lucidchart.Cisco_cisco_mobile_access_routerc1e6bcd1=mxgraph.cisco.routers.mobile_access_router
-com.lucidchart.Cisco_cisco_modemd50a7ab6=mxgraph.cisco.modems_and_phones.modem
-com.lucidchart.Cisco_cisco_moh_server327a43a7=mxgraph.cisco.servers.moh_server
-com.lucidchart.Cisco_cisco_MSE4b6ea8ab=mxgraph.cisco.misc.mse
-com.lucidchart.Cisco_cisco_mulitswitch_device57f0013d=mxgraph.cisco.switches.multiswitch_device
-com.lucidchart.Cisco_cisco_multi_fabric_server_switch26a26414=mxgraph.cisco.switches.multi-fabric_server_switch
-com.lucidchart.Cisco_cisco_multilayer_remote_switch2713fd30=mxgraph.cisco.switches.multilayer_remote_switch
-com.lucidchart.Cisco_cisco_mux2509849c=mxgraph.cisco.misc.mux
-com.lucidchart.Cisco_cisco_MXE53f6e3c6=mxgraph.cisco.misc.mxe
-com.lucidchart.Cisco_cisco_nac_appliancec417cba9=mxgraph.cisco.misc.nac_appliance
-com.lucidchart.Cisco_cisco_NCE650759fc=mxgraph.cisco.misc.nce
-com.lucidchart.Cisco_cisco_NCE_router710a1443=mxgraph.cisco.routers.nce_router
-com.lucidchart.Cisco_cisco_netflow_router66987ec8=mxgraph.cisco.routers.netflow_router
-com.lucidchart.Cisco_cisco_netranger732e99be=mxgraph.cisco.misc.netranger
-com.lucidchart.Cisco_cisco_netsonar556e6f10=mxgraph.cisco.misc.netsonar
-com.lucidchart.Cisco_cisco_network_management9f71a87f=mxgraph.cisco.misc.network_management
-com.lucidchart.Cisco_cisco_Nexus_100046e4dc8a=mxgraph.cisco.misc.nexus_1000
-com.lucidchart.Cisco_cisco_Nexus_2000aec60969=mxgraph.cisco.misc.nexus_2000_fabric_extender
-com.lucidchart.Cisco_cisco_Nexus_5000e6699006=mxgraph.cisco.misc.nexus_5000
-com.lucidchart.Cisco_cisco_Nexus_7000b62be9c4=mxgraph.cisco.misc.nexus_7000
-com.lucidchart.Cisco_cisco_octel6d5adad3=mxgraph.cisco.misc.octel
-com.lucidchart.Cisco_cisco_ons15500c3b56c27=mxgraph.cisco.misc.ons15500
-com.lucidchart.Cisco_cisco_optical_amplifier92005ed5=mxgraph.cisco.misc.optical_amplifier
-com.lucidchart.Cisco_cisco_optical_services_router456115ef=mxgraph.cisco.routers.optical_services_router
-com.lucidchart.Cisco_cisco_optical_transportc887278d=mxgraph.cisco.misc.optical_transport
-com.lucidchart.Cisco_cisco_pada08173df=mxgraph.cisco.misc.pad_2
-com.lucidchart.Cisco_cisco_pad_x6e63f337=mxgraph.cisco.misc.pad_1
-com.lucidchart.Cisco_cisco_page_iconca8f5a76=mxgraph.cisco.misc.page_icon
-com.lucidchart.Cisco_cisco_pbxa3502292=mxgraph.cisco.misc.pbx
-com.lucidchart.Cisco_cisco_pbx_switch8ea8c958=mxgraph.cisco.switches.pbx_switch
-com.lucidchart.Cisco_cisco_pc_adapter_cardd29f629a=mxgraph.cisco.computers_and_peripherals.pc_adapter_card
-com.lucidchart.Cisco_cisco_pc_manb43bab37=mxgraph.cisco.people.pc_man
-com.lucidchart.Cisco_cisco_pc_routercard44642ab2=mxgraph.cisco.computers_and_peripherals.pc_routercard
-com.lucidchart.Cisco_cisco_pc_software5e2a9f00=mxgraph.cisco.misc.pc_software
-com.lucidchart.Cisco_cisco_pc_video56204158=mxgraph.cisco.misc.pc_video
-com.lucidchart.Cisco_cisco_phone_faxad275ed8=mxgraph.cisco.modems_and_phones.phone-fax
-com.lucidchart.Cisco_cisco_pix_firewall6f6a1aab=mxgraph.cisco.security.pix_firewall
-com.lucidchart.Cisco_cisco_pmcb4ed83d2=mxgraph.cisco.misc.pmc
-com.lucidchart.Cisco_cisco_programmable_switch5fecd4fd=mxgraph.cisco.switches.programmable_switch
-com.lucidchart.Cisco_cisco_protocol_translator60f4566e=mxgraph.cisco.misc.protocol_translator
-com.lucidchart.Cisco_cisco_pxfc7dd192a=mxgraph.cisco.misc.pxf
-com.lucidchart.Cisco_cisco_radio_towerc7361870=mxgraph.cisco.wireless.radio_tower
-com.lucidchart.Cisco_cisco_ratemux68ccb3c=mxgraph.cisco.misc.ratemux
-com.lucidchart.Cisco_cisco_repeater1d397fd2=mxgraph.cisco.misc.repeater
-com.lucidchart.Cisco_cisco_RF_modemca299788=mxgraph.cisco.modems_and_phones.rf_modem
-com.lucidchart.Cisco_cisco_router_firewalla0002182=mxgraph.cisco.security.router_firewall
-com.lucidchart.Cisco_cisco_routerin_building939d2072=mxgraph.cisco.routers.router_in_building
-com.lucidchart.Cisco_cisco_router_with_silicon_switchcc637bf2=mxgraph.cisco.routers.router_with_silicon_switch
-com.lucidchart.Cisco_cisco_route_switch_processor9e032727=mxgraph.cisco.misc.route_switch_processor
-com.lucidchart.Cisco_cisco_rpsrpsf4a80bea=mxgraph.cisco.misc.rpsrps
-com.lucidchart.Cisco_cisco_running_man27240ec5=mxgraph.cisco.people.running_man
-com.lucidchart.Cisco_cisco_sattelite_dish1e29ad5f=mxgraph.cisco.wireless.satellite_dish
-com.lucidchart.Cisco_cisco_sattelitee9875f91=mxgraph.cisco.wireless.satellite
-com.lucidchart.Cisco_cisco_scanner431edb4a=mxgraph.cisco.computers_and_peripherals.scanner
-com.lucidchart.Cisco_cisco_server_switch8a5e51bd=mxgraph.cisco.switches.server_switch
-com.lucidchart.Cisco_cisco_server_with_router2c2cdd10=mxgraph.cisco.servers.server_with_router
-com.lucidchart.Cisco_cisco_service_control65ffed3e=mxgraph.cisco.misc.service_control
-com.lucidchart.Cisco_cisco_Service_Module331ce401=mxgraph.cisco.controllers_and_modules.service_module
-com.lucidchart.Cisco_cisco_Service_router278d423e=mxgraph.cisco.routers.service_router
-com.lucidchart.Cisco_cisco_Servicesaba249c8=mxgraph.cisco.misc.services
-com.lucidchart.Cisco_cisco_Set_top_boxc9b8996e=mxgraph.cisco.misc.set_top_box
-com.lucidchart.Cisco_cisco_simulitlayer_switche4772f88=mxgraph.cisco.switches.simultilayer_switch
-com.lucidchart.Cisco_cisco_sip_proxy_werver343ccf01=mxgraph.cisco.servers.sip_proxy_server
-com.lucidchart.Cisco_cisco_sitting_womanad6abfba=mxgraph.cisco.people.sitting_woman
-com.lucidchart.Cisco_cisco_small_businessf5fabb43=mxgraph.cisco.buildings.small_business
-com.lucidchart.Cisco_cisco_small_hub9a406068=mxgraph.cisco.hubs_and_gateways.small_hub
-com.lucidchart.Cisco_cisco_softphone23510590=mxgraph.cisco.modems_and_phones.softphone
-com.lucidchart.Cisco_cisco_softswitch_pgw_mgce53a1711=mxgraph.cisco.switches.softswitch_pgw_mgc
-com.lucidchart.Cisco_cisco_software_based_server7aa58035=mxgraph.cisco.servers.software_based_server
-com.lucidchart.Cisco_cisco_Space_routerd7bbdb0d=mxgraph.cisco.routers.space_router
-com.lucidchart.Cisco_cisco_speaker16c95ccb=mxgraph.cisco.computers_and_peripherals.speaker
-com.lucidchart.Cisco_cisco_ssc5ddd494f=mxgraph.cisco.misc.ssc
-com.lucidchart.Cisco_cisco_ssl_terminator30ef3185=mxgraph.cisco.misc.ssl_terminator
-com.lucidchart.Cisco_cisco_standard_hostf3632b37=mxgraph.cisco.servers.standard_host
-com.lucidchart.Cisco_cisco_stb5f840a6d=mxgraph.cisco.misc.stb
-com.lucidchart.Cisco_cisco_storage_router12b81298=mxgraph.cisco.routers.storage_router
-com.lucidchart.Cisco_cisco_storage_server6e7e1d92=mxgraph.cisco.servers.storage_server
-com.lucidchart.Cisco_cisco_stp6049537b=mxgraph.cisco.misc.stp
-com.lucidchart.Cisco_cisco_streamer5498e1f7=mxgraph.cisco.misc.streamer
-com.lucidchart.Cisco_cisco_sun_workstation33d2f0fb=mxgraph.cisco.computers_and_peripherals.sun_workstation
-com.lucidchart.Cisco_cisco_supercomputera6c9cc22=mxgraph.cisco.computers_and_peripherals.supercomputer
-com.lucidchart.Cisco_cisco_svx6423c0c1=mxgraph.cisco.misc.svx
-com.lucidchart.Cisco_cisco_system_controllerd97d3ab9=mxgraph.cisco.controllers_and_modules.system_controller
-com.lucidchart.Cisco_cisco_tabletf727d770=mxgraph.cisco.computers_and_peripherals.tablet
-com.lucidchart.Cisco_cisco_tape_array54a6b0e5=mxgraph.cisco.storage.tape_array
-com.lucidchart.Cisco_cisco_tdm_routerea9baf56=mxgraph.cisco.routers.tdm_router
-com.lucidchart.Cisco_cisco_telecommuter_house_pccdf8751d=mxgraph.cisco.buildings.telecommuter_house_pc
-com.lucidchart.Cisco_cisco_telecommuter_house37bba04c=mxgraph.cisco.buildings.telecommuter_house
-com.lucidchart.Cisco_cisco_telecommuter_iconec892323=mxgraph.cisco.misc.telecommuter_icon
-#com.lucidchart.Cisco_cisco_Telepresence_1000392eaee6=mxgraph.cisco.
-#com.lucidchart.Cisco_cisco_Telepresence_30008f108a4=mxgraph.cisco.
-com.lucidchart.Cisco_cisco_Telepresence_320072bd7f26=mxgraph.cisco.misc.telepresence
-#com.lucidchart.Cisco_cisco_Telepresence_500bcab0164=mxgraph.cisco.
-com.lucidchart.Cisco_cisco_terminalb1cf38c6=mxgraph.cisco.computers_and_peripherals.terminal
-com.lucidchart.Cisco_cisco_token55433a05=mxgraph.cisco.misc.token
-com.lucidchart.Cisco_cisco_TP_MCU29c5f865=mxgraph.cisco.misc.tp_mcu
-com.lucidchart.Cisco_cisco_transpatha85fa859=mxgraph.cisco.misc.transpath
-com.lucidchart.Cisco_cisco_truck9a51196b=mxgraph.cisco.misc.truck
-com.lucidchart.Cisco_cisco_turret47f8b4fa=mxgraph.cisco.misc.turret
-com.lucidchart.Cisco_cisco_tv7029f90c=mxgraph.cisco.misc.tv
-com.lucidchart.Cisco_cisco_ubr910177078fd=mxgraph.cisco.misc.ubr910
-com.lucidchart.Cisco_cisco_umg_seriesad0df372=mxgraph.cisco.misc.umg_series
-com.lucidchart.Cisco_cisco_unity_serverf4ad3018=mxgraph.cisco.servers.unity_server
-com.lucidchart.Cisco_cisco_universal_gatewaya6f2c8fb=mxgraph.cisco.hubs_and_gateways.universal_gateway
-com.lucidchart.Cisco_cisco_university5d0c3018=mxgraph.cisco.buildings.university
-com.lucidchart.Cisco_cisco_upcc28b35f4=mxgraph.cisco.computers_and_peripherals.upc
-com.lucidchart.Cisco_cisco_vaultecc06dbe=mxgraph.cisco.misc.vault
-com.lucidchart.Cisco_cisco_video_camera59ea0634=mxgraph.cisco.computers_and_peripherals.video_camera
-com.lucidchart.Cisco_cisco_vipec36b669=mxgraph.cisco.misc.vip
-com.lucidchart.Cisco_cisco_virtual_layer_switch22b811a2=mxgraph.cisco.switches.virtual_layer_switch
-com.lucidchart.Cisco_cisco_virtual_switch_controller__vsc3000_3297ffed=mxgraph.cisco.controllers_and_modules.virtual_switch_controller_(vsc3000)
-com.lucidchart.Cisco_cisco_voice_atm_switch16877872=mxgraph.cisco.switches.voice_atm_switch
-com.lucidchart.Cisco_cisco_voice_commservera25b87c7=mxgraph.cisco.servers.voice_commserver
-com.lucidchart.Cisco_cisco_voice_router63c01341=mxgraph.cisco.routers.voice_router
-com.lucidchart.Cisco_cisco_voice_switch17a845ac=mxgraph.cisco.switches.voice_switch
-com.lucidchart.Cisco_cisco_vpn_concentrator3cca44d4=mxgraph.cisco.misc.vpn_concentrator
-com.lucidchart.Cisco_cisco_vpn_gatewayd45c4ee4=mxgraph.cisco.hubs_and_gateways.vpn_gateway
-com.lucidchart.Cisco_cisco_VSS284c0702=mxgraph.cisco.misc.vss
-com.lucidchart.Cisco_cisco_wae12db2a27=mxgraph.cisco.misc.wae
-com.lucidchart.Cisco_cisco_wavelength_router37068d76=mxgraph.cisco.routers.wavelength_router
-com.lucidchart.Cisco_cisco_web_browser374b9428=mxgraph.cisco.computers_and_peripherals.web_browser
-com.lucidchart.Cisco_cisco_web_cluster2173c1fa=mxgraph.cisco.storage.web_cluster
-com.lucidchart.Cisco_cisco_wi_fi_tagd97bf224=mxgraph.cisco.wireless.wi-fi_tag
-com.lucidchart.Cisco_cisco_wireless_bridge9780ac17=mxgraph.cisco.wireless.wireless_bridge
-com.lucidchart.Cisco_cisco_wireless_location_appliancea0ae4a90=mxgraph.cisco.wireless.wireless_location_appliance
-com.lucidchart.Cisco_cisco_wirelessf4f8cce8=mxgraph.cisco.wireless.wireless
-com.lucidchart.Cisco_cisco_wireless_transportba6c731=mxgraph.cisco.wireless.wireless_transport
-com.lucidchart.Cisco_cisco_wismaf99e76=mxgraph.cisco.misc.wism
-com.lucidchart.Cisco_cisco_wlan_controller65a33b06=mxgraph.cisco.wireless.wlan_controller
-com.lucidchart.Cisco_cisco_workgroup_director986d4fe8=mxgraph.cisco.directors.workgroup_director
-com.lucidchart.Cisco_cisco_workgroup_switch57bdf3d0=mxgraph.cisco.switches.workgroup_switch
-com.lucidchart.Cisco_cisco_workstationab6c3f4f=mxgraph.cisco.computers_and_peripherals.workstation
-com.lucidchart.Cisco_cisco_www_servereca50876=mxgraph.cisco.servers.www_server
-
-# Network - Computers and Monitors
-com.lucidchart.NET_PC461=image;image\=img/lib/clip_art/computers/Monitor_Tower_128x128.png
-com.lucidchart.NET_Virtual-PC661=image;image\=img/lib/clip_art/computers/Virtual_Machine_128x128.png
-com.lucidchart.NET_Terminal381=image;image\=img/lib/clip_art/computers/Workstation_128x128.png
-#com.lucidchart.NET_DataPipe21=
-com.lucidchart.NET_SlateDevice161=image;image\=img/lib/clip_art/telecommunication/HTC_smartphone_128x128.png
-com.lucidchart.NET_TabletDevice221=image;image\=img/lib/clip_art/computers/iPad_128x128.png
-com.lucidchart.NET_Laptop91=image;image\=img/lib/clip_art/computers/Laptop_128x128.png
-com.lucidchart.NET_PDA161=image;image\=img/lib/clip_art/telecommunication/iPhone_128x128.png
-com.lucidchart.NET_CRTMonitor81=image;image\=img/lib/clip_art/computers/Monitor_128x128.png
-com.lucidchart.NET_LCDMonitor71=image;image\=img/lib/clip_art/computers/Monitor_128x128.png
-
-# Network - Detailed Network Diagram
-#com.lucidchart.NET_ABSwitch=
-com.lucidchart.NET_Repeater=image;image\=img/lib/clip_art/networking/Repeater_128x128.png
-#com.lucidchart.NET_DiagnosticDevice=
-com.lucidchart.NET_CardReader=image;image\=img/lib/clip_art/finance/Credit_Card_128x128.png
-#com.lucidchart.NET_PatchPanel=
-com.lucidchart.NET_RadioTower=image;image\=img/lib/clip_art/telecommunication/Signal_tower_on_128x128.png
-#com.lucidchart.NET_BiometricReader=
-com.lucidchart.NET_ExternalHardDrive=image;image\=img/lib/clip_art/computers/Harddrive_128x128.png
-com.lucidchart.NET_WebService=image;image\=img/lib/clip_art/computers/Virtual_Application_128x128.png
-#com.lucidchart.NET_FiberOptic=
-#com.lucidchart.NET_SatelliteDish=
-#com.lucidchart.NET_Satellite=
-#com.lucidchart.NET_VoIPPhone=
-#com.lucidchart.NET_PBX=
-#com.lucidchart.NET_MLPS=
-
-# Network - Basic Network Shapes
-com.lucidchart.NET_WirelessAccessPoint101=image;image\=img/lib/clip_art/networking/Wireless_Router_N_128x128.png
-#com.lucidchart.NET_RingNetwork191=
-#com.lucidchart.NET_Ethernet121=
-com.lucidchart.NET_Server71=image;image\=img/lib/clip_art/computers/Server_Tower_128x128.png
-com.lucidchart.NET_ExternalMediaDrive131=image;image\=img/lib/clip_art/computers/Harddrive_128x128.png
-com.lucidchart.NET_Mainframe271=image;image\=img/lib/clip_art/computers/Mainframe_128x128.png
-com.lucidchart.NET_Router211=image;image\=img/lib/clip_art/networking/Router_128x128.png
-com.lucidchart.NET_Switch331=image;image\=img/lib/clip_art/networking/Switch_128x128.png
-com.lucidchart.NET_Firewall321=image;image\=img/lib/clip_art/networking/Firewall_02_128x128.png
-com.lucidchart.NET_User81=image;image\=img/lib/clip_art/people/Worker_Black_128x128.png
-#com.lucidchart.NET_CommLink41=
-com.lucidchart.NET_SuperComputer101=image;image\=img/lib/clip_art/computers/Server_Rack_128x128.png
-com.lucidchart.NET_VirtualServer231=image;image\=img/lib/clip_art/computers/Virtual_Machine_128x128.png
-com.lucidchart.NET_Printer131=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-com.lucidchart.NET_Plotter211=image;image\=img/lib/clip_art/computers/Printer_Commercial_128x128.png
-com.lucidchart.NET_Scanner131=image;image\=img/lib/clip_art/networking/Print_Server_128x128.png
-com.lucidchart.NET_Copier161=image;image\=img/lib/clip_art/computers/Printer_Commercial_128x128.png
-com.lucidchart.NET_FaxMachine211=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-com.lucidchart.NET_MultiFunctionMachine261=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-#com.lucidchart.NET_Projector121=
-#com.lucidchart.NET_ProjectorScreen81=
-com.lucidchart.NET_Bridge171=image;image\=img/lib/clip_art/networking/Bridge_128x128.png
-com.lucidchart.NET_Hub181=image;image\=img/lib/clip_art/networking/Repeater_128x128.png
-com.lucidchart.NET_Modem171=image;image\=img/lib/clip_art/networking/Modem_128x128.png
-com.lucidchart.NET_Telephone41=image;image\=img/lib/clip_art/telecommunication/Cellphone_128x128.png
-com.lucidchart.NET_CellPhone271=image;image\=img/lib/clip_art/telecommunication/Cellphone_128x128.png
-com.lucidchart.NET_SmartPhone81=image;image\=img/lib/clip_art/telecommunication/iPhone_128x128.png
-com.lucidchart.NET_VideoPhone191=image;image\=img/lib/clip_art/telecommunication/Palm_Treo_128x128.png
-com.lucidchart.NET_Camera61=image;image\=img/lib/clip_art/networking/Ip_Camera_128x128.png
-com.lucidchart.NET_VideoCamera151=image;image\=img/lib/clip_art/networking/Ip_Camera_128x128.png
-
-#\ Server\ Racks\ 
-com.lucidchart.RackServerRack81=mxgraph.rack.general.36u_rack_19_standard
-com.lucidchart.RackBlank81=mxgraph.rack.general.1u
-com.lucidchart.RackRaidArray481=mxgraph.rack.cisco.cisco_nexus_2248tp_ge_fabric_extender
-com.lucidchart.RackServer121=mxgraph.rack.cisco.cisco_ucs_c22_m3_server
-com.lucidchart.RackEthernetSwitch1111=mxgraph.rack.cisco.cisco_nexus_3016_switch
-com.lucidchart.RackPatchPanel1681=mxgraph.rack.general.cat5e_rack_mount_patch_panel_24_ports
-com.lucidchart.RackRouter231=mxgraph.rack.cisco.cisco_2901_integrated_services_router
-com.lucidchart.RackMonitor91=mxgraph.rack.oracle.sunfire_t1000
-com.lucidchart.RackKeyboard191=mxgraph.rack.oracle.sunfire_t1000
-com.lucidchart.RackPowerStrip361=mxgraph.rack.dell.power_strip
-com.lucidchart.RackPowerSupply401=mxgraph.rack.apc.apc_smart_ups_750_va_1u
-com.lucidchart.RackBridge171=mxgraph.rack.hp.hp_proliant_dl160_g8
-com.lucidchart.RackTapeDrive101=mxgraph.rack.cisco.cisco_nexus_2232pp_10ge_fabric_extender
-
-# Tech Clipart - Network
-com.lucidchart.Image_network_serverbba7f90c=image;image\=img/lib/clip_art/computers/Server_Tower_128x128.png
-com.lucidchart.Image_network_server_filec7e240e5=image;image\=img/lib/clip_art/computers/Server_Rack_Partial_128x128.png
-com.lucidchart.Image_network_server_netaf6be26a=image;image\=img/lib/clip_art/networking/Print_Server_128x128.png
-com.lucidchart.Image_network_server_net_large80aa2366=image;image\=img/lib/clip_art/computers/Server_128x128.png
-com.lucidchart.Image_network_raidbd544553=image;image\=img/lib/clip_art/computers/Server_128x128.png
-com.lucidchart.Image_network_raid_largec8ccf38f=image;image\=img/lib/clip_art/computers/Server_128x128.png
-com.lucidchart.Image_network_rack_serverbcc7018=image;image\=img/lib/clip_art/computers/Server_Rack_128x128.png
-com.lucidchart.Image_network_rack_tape59c56cf7=image;image\=img/lib/clip_art/computers/Server_Rack_128x128.png
-com.lucidchart.Image_network_printer_small60262b0f=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-com.lucidchart.Image_network_printer_largeee181743=image;image\=img/lib/clip_art/computers/Printer_Commercial_128x128.png
-com.lucidchart.Image_network_printer_multipurposea2e89f93=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-com.lucidchart.Image_network_copier_smalladcead23=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-com.lucidchart.Image_network_copier_large3bc09957=image;image\=img/lib/clip_art/computers/Printer_Commercial_128x128.png
-com.lucidchart.Image_network_printer_largeformate86215ba=image;image\=img/lib/clip_art/computers/Printer_Commercial_128x128.png
-com.lucidchart.Image_network_router5fe1ee12=image;image\=img/lib/clip_art/networking/Router_128x128.png
-com.lucidchart.Image_network_router_wirelessd0b07cc1=image;image\=img/lib/clip_art/networking/Wireless_Router_128x128.png
-com.lucidchart.Image_network_upsb69a2725=image;image\=img/lib/clip_art/networking/UPS_128x128.png
-
-#\ Tech\ Clipart\ -\ Electronics
-#com.lucidchart.Image_electronics_speakers_236da77d0=
-#com.lucidchart.Image_electronics_scanner_slidee5f18f9d=
-#com.lucidchart.Image_electronics_speakers_2_1e4d23a34=
-#com.lucidchart.Image_electronics_speakers_5_18384ebf7=
-com.lucidchart.Image_electronics_lcdc37fb13a=image;image\=img/lib/clip_art/computers/Monitor_128x128.png
-com.lucidchart.Image_electronics_pda98a3305a=image;image\=img/lib/clip_art/computers/iPad_128x128.png
-#com.lucidchart.Image_electronics_drive_cardreader78405f71=\ 
-#com.lucidchart.Image_electronics_camcorder8fe4a8c7=
-#com.lucidchart.Image_electronics_headsetff47a66f=
-#com.lucidchart.Image_electronics_calculator_simplef93b7c7c=\ 
-#com.lucidchart.Image_electronics_scanner_flatbed3a803494=\ 
-com.lucidchart.Image_electronics_scanner_photoe2df679e=image;image\=img/lib/clip_art/computers/Printer_128x128.png
-#com.lucidchart.Image_electronics_projector85b9a929=
-com.lucidchart.Image_electronics_drive_firewirea38e9c19=image;image\=img/lib/clip_art/computers/Harddrive_128x128.png
-com.lucidchart.Image_electronics_drive_usbe8fdea3c=image;image\=img/lib/clip_art/computers/Harddrive_128x128.png
-#com.lucidchart.Image_electronics_tv_tuner_external3f175a3a=\ 
-com.lucidchart.Image_electronics_mp3be26cdd=image;image\=img/lib/clip_art/computers/iPad_128x128.png
-#com.lucidchart.Image_electronics_sound_box9d0b0188=
-com.lucidchart.Image_electronics_lcd_wide30e9ab4e=image;image\=img/lib/clip_art/computers/Monitor_128x128.png
-#com.lucidchart.Image_electronics_modem_externalc8f61e89=
-#Image_electronics_printer_photo8e5b46ba=
-
-#\ Tech\ Clipart\ -\ Audio\ Equipment
-#com.lucidchart.Image_audio_speakers_2=
-#com.lucidchart.Image_audio_speakers_2_1=
-#com.lucidchart.Image_audio_speakers_5_1=
-#com.lucidchart.Image_audio_record_player=
-#com.lucidchart.Image_audio_headset=
-
-# Circuit Diagrams - Electrical
-com.lucidchart.EE_Amplifier51=mxgraph.electrical.abstract.amplifier
-com.lucidchart.EE_OpAmp91=mxgraph.electrical.abstract.operational_amp_1
-com.lucidchart.EE_ControlledAmp61=mxgraph.electrical.abstract.controlled_amplifier
-com.lucidchart.EE_Multiplexer90=mxgraph.electrical.abstract.mux-demux
-com.lucidchart.EE_Demultiplexer90=mxgraph.electrical.abstract.mux-demux
-com.lucidchart.EE_Capacitor131=mxgraph.electrical.capacitors.capacitor_1
-com.lucidchart.EE_Capacitor241=mxgraph.electrical.capacitors.capacitor_3
-com.lucidchart.EE_Diode30=mxgraph.electrical.diodes.diode
-com.lucidchart.EE_Resistor31=mxgraph.electrical.resistors.resistor_2
-com.lucidchart.EE_VarResistor41=mxgraph.electrical.resistors.variable_resistor_2
-com.lucidchart.EE_Potentiometer41=mxgraph.electrical.resistors.potentiometer_2
-com.lucidchart.EE_ProtGround30=mxgraph.electrical.radio.earth
-com.lucidchart.EE_SignalGround20=mxgraph.electrical.radio.earth
-com.lucidchart.EE_Transformer30=mxgraph.electrical.inductors.transformer_1
-com.lucidchart.EE_Inductor31=mxgraph.electrical.inductors.inductor_3
-com.lucidchart.EE_Variable\ Inductor31=mxgraph.electrical.inductors.variable_inductor
-com.lucidchart.2-Way\ Switch30=mxgraph.electrical.electro-mechanical.2-way_switch
-com.lucidchart.On/Off\ Switch30=mxgraph.electrical.electro-mechanical.simple_switch
-com.lucidchart.Loudspeaker30=mxgraph.electrical.electro-mechanical.loudspeaker
-com.lucidchart.EE_Motor40=mxgraph.electrical.electro-mechanical.motor_1
-com.lucidchart.LED140=mxgraph.electrical.opto_electronics.led_2
-com.lucidchart.EE_Lightbulb30=mxgraph.electrical.miscellaneous.lamp_2
-#com.lucidchart.EE_IntegratedCircuit49=
-
-# Circuit Diagrams - Power Sources
-com.lucidchart.EE_AcSource21=mxgraph.electrical.signal_sources.ac_source
-com.lucidchart.EE_VoltageSource21=mxgraph.electrical.signal_sources.dc_source_3
-com.lucidchart.EE_CurrentSource21=mxgraph.electrical.signal_sources.dc_source_2
-com.lucidchart.EE_ControlledVoltageSource21=mxgraph.electrical.signal_sources.dependent_source_3
-com.lucidchart.EE_ControlledCurrentSource21=mxgraph.electrical.signal_sources.dependent_source_2
-com.lucidchart.EE_DcSource131=mxgraph.electrical.miscellaneous.monocell_battery
-com.lucidchart.EE_DcSource231=mxgraph.electrical.miscellaneous.multicell_battery
-com.lucidchart.EE_Vss40=mxgraph.electrical.signal_sources.vss
-com.lucidchart.EE_Vdd40=mxgraph.electrical.signal_sources.vdd
-
-# Circuit Diagrams - Transistors
-com.lucidchart.EE_BJT_NPN140=mxgraph.electrical.transistors.pnp_transistor_1
-com.lucidchart.EE_BJT_PNP140=mxgraph.electrical.transistors.npn_transistor_1
-com.lucidchart.EE_JFET_P40=mxgraph.electrical.transistors.p-channel_jfet_2
-com.lucidchart.EE_JFET_N40=mxgraph.electrical.transistors.n-channel_jfet_2
-com.lucidchart.EE_MOSFET_P140=mxgraph.electrical.mosfets1.p-channel_mosfet_1
-com.lucidchart.EE_MOSFET_P230=mxgraph.electrical.mosfets1.p-channel_mosfet_1
-com.lucidchart.EE_MOSFET_P340=mxgraph.electrical.mosfets1.p-channel_mosfet_1
-com.lucidchart.EE_MOSFET_N140=mxgraph.electrical.mosfets1.n-channel_mosfet_1
-com.lucidchart.EE_MOSFET_N230=mxgraph.electrical.mosfets1.n-channel_mosfet_1
-com.lucidchart.EE_MOSFET_N340=mxgraph.electrical.mosfets1.n-channel_mosfet_1
-
-#\ Circuit\ Diagram\ -\ Relays
-#com.lucidchart.EE_SPST=
-#com.lucidchart.EE_SPDT=
-#com.lucidchart.EE_DPST=
-#com.lucidchart.EE_DPDT=
-
-#\ Circuit\ Diagram\ -\ Logic\ Gates
-com.lucidchart.AND40=mxgraph.electrical.logic_gates.and
-com.lucidchart.OR40=mxgraph.electrical.logic_gates.or
-com.lucidchart.Inverter40=mxgraph.electrical.logic_gates.inverter
-com.lucidchart.NAND40=mxgraph.electrical.logic_gates.nand
-com.lucidchart.NOR40=mxgraph.electrical.logic_gates.nor
-com.lucidchart.XOR50=mxgraph.electrical.logic_gates.xor
-com.lucidchart.NXOR50=mxgraph.electrical.logic_gates.xnor
-com.lucidchart.D\ Type\ RS\ Flip\ Flop20=mxgraph.electrical.logic_gates.d_type_rs_flip-flop
-com.lucidchart.D\ Type\ Flip\ Flop20=mxgraph.electrical.logic_gates.d_type_flip-flop
-com.lucidchart.D\ Type\ Flip\ Flop\ With\ Clear20=mxgraph.electrical.logic_gates.d_type_flip-flop_with_clear
-com.lucidchart.RS\ Latch20=mxgraph.electrical.logic_gates.rs_latch
-com.lucidchart.Synchronous\ RS\ Latch20=mxgraph.electrical.logic_gates.synchronous_rs_latch
-com.lucidchart.T\ Type\ Flip\ Flop20=mxgraph.electrical.logic_gates.t_type_flip-flop
-
-# Circuit Diagram - Misc
-com.lucidchart.Voltmeter40=mxgraph.electrical.instruments.voltmeter
-com.lucidchart.Ammeter40=mxgraph.electrical.instruments.ampermeter
-com.lucidchart.Square\ Wave30=mxgraph.electrical.waveforms.square_wave
-com.lucidchart.EE_InverterContact30=ellipse
-com.lucidchart.EE_Negative30=line
-com.lucidchart.Sine\ Wave30=mxgraph.electrical.waveforms.sine_wave
-com.lucidchart.Sawtooth30=mxgraph.electrical.waveforms.sawtooth
-
-# Mind Map
-com.lucidchart.MindMapBlock21=rounded\=1
-
-# Process Eng. - Equipment
-com.lucidchart.PECentrifugalCompressor81=mxgraph.pid.compressors.centrifugal_compressor
-com.lucidchart.PECentrifugalCompressor262=mxgraph.pid.compressors.centrifugal_compressor_-_turbine_driven
-com.lucidchart.PEReciprocationCompressor61=mxgraph.pid.compressors.reciprocating_compressor
-com.lucidchart.PERotaryCompressorBlock71=mxgraph.pid.compressors.rotary_compressor
-com.lucidchart.PERotaryCompressor2Block91=mxgraph.pid.compressors.compressor_and_silencers
-com.lucidchart.PEDrumBlock31=mxgraph.pid.vessels.drum_or_condenser
-com.lucidchart.PETankEquipmentBlock41=mxgraph.pid.vessels.tank
-com.lucidchart.PEIndicator4Block21=ellipse
-
-# Process Eng. - Vessels
-com.lucidchart.PEColumnBlock21=rounded\=1
-
-# Process Eng. - Heat Exchangers
-com.lucidchart.PEHeatExchangerBlock31=mxgraph.pid.heat_exchangers.shell_and_tube_heat_exchanger_1
-
-# Process Eng. - Pumps
-com.lucidchart.PECompressorTurbineBlock31=mxgraph.pid.pumps.turbine
-com.lucidchart.PECentrifugalPumpBlock21=mxgraph.pid.pumps.centrifugal_pump_1
-com.lucidchart.PECentrifugalPump41=mxgraph.pid.pumps.centrifugal_pump_1
-com.lucidchart.PECentrifugalPump241=mxgraph.pid.pumps.centrifugal_pump_2
-com.lucidchart.PECentrifugalPump341=mxgraph.pid.pumps.centrifugal_pump_3
-com.lucidchart.PEGearPumpBlock61=mxgraph.pid.pumps.gear_pump
-com.lucidchart.PEVacuumPump61=mxgraph.pid.pumps.vacuum_pump
-
-# Process Eng. - Instruments
-com.lucidchart.PEIndicatorBlock=ellipse
-com.lucidchart.PEIndicator3Block=shape\ellipse
-
-# Process Eng. - Valves
-com.lucidchart.PEGateValveBlock31=mxgraph.pid.valves.gate_valve
-com.lucidchart.PEGateValveBlock21=mxgraph.pid.valves.gate_valve
-com.lucidchart.PEAngleGlobeValveBlock51=mxgraph.pid.valves.angle
-com.lucidchart.PEAngleGlobeValveBlock61=mxgraph.pid.valves.angle
-com.lucidchart.PEControlValveBlock31=mxgraph.pid.valves.pneumatic_operated
-com.lucidchart.PEControlValveBlock41=mxgraph.pid.valves.back_pressure_regulator_2
-com.lucidchart.PENeedleValveBlock31=mxgraph.pid.valves.needle
-com.lucidchart.PEButterflyValveBlock31=mxgraph.pid.valves.butterfly_valve_2
-com.lucidchart.PEButterflyValve2Block51=mxgraph.pid.valves.butterfly_valve_1
-com.lucidchart.PEBallValveBlock31=mxgraph.pid.valves.ball_valve
-com.lucidchart.PEPlugValveBlock31=mxgraph.pid.valves.manual_operated_valve
-com.lucidchart.PEGateValveBlock31=mxgraph.pid.valves.gate_valve
-com.lucidchart.PEGlobeValveBlock31=mxgraph.pid.valves.globe_valve
-com.lucidchart.PEGlobeValveBlock41=mxgraph.pid.valves.globe_valve
-com.lucidchart.PECheckValveBlock41=mxgraph.pid.valves.check_valve_1
-com.lucidchart.PECheckValve2Block41=mxgraph.pid.valves.check_valve_1
-com.lucidchart.PEAngleValveBlock31=mxgraph.pid.valves.angle
-com.lucidchart.PEPoweredValveBlock30=mxgraph.pid.valves.motor_operated_valve
-com.lucidchart.PEPoweredValveBlock31=mxgraph.pid.valves.motor_operated_valve
-com.lucidchart.PEThreeWayValveBlock41=mxgraph.pid.valves.three-way_valve
-com.lucidchart.PEFourWayValveBlock41=mxgraph.pid.valves.four_way_valve
-com.lucidchart.PEGaugeBlock21=mxgraph.pid.valves.gauge
-com.lucidchart.PEBleederValveBlock31=mxgraph.pid.valves.bleeder_valve_1
-com.lucidchart.PEOrificeBlock31=mxgraph.pid.valves.orifice
-com.lucidchart.PERotameterBlock31=mxgraph.pid.valves.rotameter
-
-# Venn Diagrams
-com.lucidchart.VennPlainColor120=ellipse
-com.lucidchart.VennPlainColor220=ellipse
-com.lucidchart.VennPlainColor320=ellipse
-com.lucidchart.VennPlainColor420=ellipse
-com.lucidchart.VennPlainColor520=ellipse
-com.lucidchart.VennPlainColor620=ellipse
-com.lucidchart.VennPlainColor720=ellipse
-com.lucidchart.VennPlainColor820=ellipse
-com.lucidchart.VennGradientColor120=ellipse
-com.lucidchart.VennGradientColor220=ellipse
-com.lucidchart.VennGradientColor320=ellipse
-com.lucidchart.VennGradientColor420=ellipse
-com.lucidchart.VennGradientColor520=ellipse
-com.lucidchart.VennGradientColor620=ellipse
-com.lucidchart.VennGradientColor720=ellipse
-com.lucidchart.VennGradientColor820=ellipse
-
-# Standard
-com.lucidchart.DefaultSquareBlock21=rounded\=1
-com.lucidchart.DefaultNoteBlock31=note
-
-# angle offsets (1 = 90 degrees) (original to target)
-mxOffsetTriangle=3
-mxOffset6-phase\ double\ delta=1
-mxOffsetAlternative=3
-mxOffsetBacking=2
-mxOffsetConcentrating=1
-mxOffsetCorrecting\ element=1
-mxOffsetDirect\ data=1
-mxOffsetExtract=3
-mxOffsetFluid\ separators=2
-#mxOffsetOR\ gate=3
-mxOffsetAND\ gate.79=3
-mxOffsetInbound\ goods=1
-mxOffsetKickoff=1
-mxOffsetManual\ file=1
-mxOffsetMove=1
-mxOffsetOff-line\ storage=1
-mxOffsetOr\ gate.126=0
-mxOffsetReducer=1
-mxOffsetReference\ triangle=3
-mxOffsetSelectable\ compressor1=1
-mxOffset{3FB1356C-0000-0000-8E40-00608CF305B2}=1
-mxOffsetStar\ 6=1
-mxOffsetStop\ state\ 2=1
-mxOffsetStorage=3
-mxOffsetStore=3
-mxOffsetSurface\ profile=2
-mxOffsetTransportation=2
-mxOffsetDomain\ 3D=3
-#mxOffsetDatabase=3
-mxOffsetDomain\ 2D=3
-mxOffsetPositional\ servo=1
-mxOffsetManual\ operation=2
-mxOffsetInhibit\ gate=1
-#mxOffsetAND\ gate=3
-mxOffsetHouse\ event=3
-mxOffset{7313FF80-0002-0000-8E40-00608CF305B2}=3
-mxOffset{7314000C-0004-0000-8E40-00608CF305B2}=3
-mxOffsetPriority\ AND\ gate=3
-mxOffsetExclusive\ OR\ gate=3
-mxOffsetVoting\ gate=3
-mxOffsetTransfer\ symbol=3
-mxOffset{3FC37F8D-0002-0000-8E40-00608CF305B2}=3
-mxOffset{72EBC952-000A-0000-8E40-00608CF305B2}=3
-mxOffset{735CDDDE-0015-0000-8E40-00608CF305B2}=3
-mxOffsetHeat\ exchanger2=2
-mxOffsetGround=1
-mxOffsetBattery=2
-mxOffset{73092C3A-000F-0000-8E40-00608CF305B2}=1
-mxOffsetStep\ function=1
-mxOffsetFerrite\ core=1
-mxOffsetBell=3
-mxOffset{73094E3B-0032-0000-8E40-00608CF305B2}=2
-mxOffset{7309C76F-0002-0000-8E40-00608CF305B2}=1
-mxOffsetMerge=1
-mxOffsetMessage\ to\ user=2
-mxOffsetIGFET\ N-type=3
-mxOffsetIGFET\ P-type=3
-mxOffsetMOSFET=1
-mxOffsetTransducer\ head=2
-mxOffsetFeedback\ arrow=3
-mxOffsetTransformer=1
-mxOffsetMagnetic\ core=1
diff --git a/src/com/mxgraph/io/vsdx/theme/Color.java b/src/com/mxgraph/io/vsdx/theme/Color.java
deleted file mode 100644
index 3bf2d98f2c471981203d5e819b48b65ea4b353f6..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/Color.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class Color {
-	//Special none color
-	public static final Color NONE = new Color(-1, -1, -1);
-	
-	private int red, green, blue;
-	private Color gradientClr;
-	
-	public Color(int red, int green, int blue) {
-		this.red = red;
-		this.green = green;
-		this.blue = blue;
-	}
-
-	public int getRed() {
-		return red;
-	}
-
-	public void setRed(int red) {
-		this.red = red;
-	}
-
-	public int getGreen() {
-		return green;
-	}
-
-	public void setGreen(int green) {
-		this.green = green;
-	}
-
-	public int getBlue() {
-		return blue;
-	}
-
-	public void setBlue(int blue) {
-		this.blue = blue;
-	}
-	
-	public HSLColor toHsl() 
-	{
-		double r = this.getRed()/255.0, g = this.getGreen()/255.0, b = this.getBlue()/255.0;
-	    double max = Math.max(r, Math.max(g, b));
-	    double min = Math.min(r, Math.min(g, b));
-	    double l = (max + min) / 2.0;
-	    double h, s; 
-
-	    if(max == min) 
-	    {
-	        h = s = 0; // achromatic
-	    }
-	    else 
-	    {
-	        double d = max - min;
-	        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
-	        if (max == r) 
-	        {
-	        	h = (g - b) / d + (g < b ? 6 : 0); 
-	        }
-	        else if (max == g) 
-	        {
-	            h = (b - r) / d + 2;
-	        }
-	        else 
-	        {
-            	h = (r - g) / d + 4;
-	        }
-
-	        h /= 6;
-	    }
-        return new HSLColor(h, s, l);
-    }
-	
-	public HSVColor toHsv()
-	{
-		double r = this.getRed()/255.0, g = this.getGreen()/255.0, b = this.getBlue()/255.0;
-	    double max = Math.max(r, Math.max(g, b));
-	    double min = Math.min(r, Math.min(g, b));
-	    double h, s, v = max;
-
-	    double d = max - min;
-	    s = max == 0 ? 0 : d / max;
-
-	    if(max == min) 
-	    {
-	        h = 0; // achromatic
-	    }
-	    else 
-	    {
-	        if (max == r) 
-	        {
-	        	h = (g - b) / d + (g < b ? 6 : 0); 
-	        }
-	        else if (max == g) 
-	        {
-	        	h = (b - r) / d + 2;
-	        }
-	        else 
-	        {
-	        	h = (r - g) / d + 4;
-	        }
-	        h /= 6;
-		}
-	    return new HSVColor(h, s, v);
-	}
-	
-	public static Color decodeColorHex(String hex) 
-	{
-		int color = Integer.parseInt(hex, 16);
-		return new Color((color >> 16) & 0xff , (color >> 8) & 0xff, color & 0xff);
-	}
-
-	public String toHexStr() {
-		return String.format("#%02x%02x%02x", red, green, blue);
-	}
-
-	public Color getGradientClr() {
-		return gradientClr;
-	}
-
-	public void setGradientClr(Color gradientClr) {
-		this.gradientClr = gradientClr;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/FillStyle.java b/src/com/mxgraph/io/vsdx/theme/FillStyle.java
deleted file mode 100644
index 2b6710c4ab6207b8f6823051fae1ec943e0a76d6..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/FillStyle.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-
-public interface FillStyle {
-	public Color applyStyle(int styleValue, mxVsdxTheme theme);
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java b/src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
deleted file mode 100644
index 432a2d74d56a5188ffa055cd63bd051039230b16..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class FillStyleFactory 
-{
-	public static FillStyle getFillStyle(Element fillStyle)
-	{
-		FillStyle fillObj = null;
-		switch (fillStyle.getNodeName())
-		{
-			case "a:solidFill":
-				fillObj = new SolidFillStyle(OoxmlColorFactory.getOoxmlColor(
-						mxVsdxUtils.getDirectFirstChildElement(fillStyle)));
-			break;
-			case "a:noFill":
-				fillObj = new NoFillStyle();
-			break;
-			case "a:gradFill":
-				fillObj = new GradFill(fillStyle);
-			break;
-			case "a:blipFill":
-				//TODO implement Picture Fill if it can be approximated in mxGraph
-			break;
-			case "a:pattFill":
-				//TODO implement Pattern Fill if it can be approximated in mxGraph
-			break;
-			case "a:grpFill":
-				//TODO implement Group Fill if it can be approximated in mxGraph
-			break;
-		}
-		return fillObj;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/GradFill.java b/src/com/mxgraph/io/vsdx/theme/GradFill.java
deleted file mode 100644
index 3e993bcec77ebe19a176f9dac0525bef67c7c5e1..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/GradFill.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import java.util.ArrayList;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-//mxGraph doesn't support such a complex gradient fill style. So, we will approximate the gradient by the first two colors only
-public class GradFill  implements FillStyle 
-{
-	private OoxmlColor color1 = null, color2 = null;
-	
-	public GradFill(Element elem) 
-	{
-		ArrayList<Element> gsLst = mxVsdxUtils.getDirectChildNamedElements(elem, "a:gsLst");
-		
-		if (gsLst.size() > 0)
-		{
-			ArrayList<Element> gs = mxVsdxUtils.getDirectChildElements(gsLst.get(0));
-			
-			//approximate gradient by first and last color in the list
-			if (gs.size() >= 2)
-			{
-				color2 = OoxmlColorFactory.getOoxmlColor(
-						mxVsdxUtils.getDirectFirstChildElement(gs.get(0)));
-				color1 = OoxmlColorFactory.getOoxmlColor(
-						mxVsdxUtils.getDirectFirstChildElement(gs.get(gs.size()-1)));
-			}
-		}
-		
-		if (color1 == null)
-		{
-			color1 = color2 = new SrgbClr("FFFFFF");
-		}
-	}
-	
-	@Override
-	public Color applyStyle(int styleValue, mxVsdxTheme theme)
-	{
-		Color color = color1.getColor(styleValue, theme);
-		color.setGradientClr(color2.getColor(styleValue, theme));
-		return color;
-	}
-	
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/HSLColor.java b/src/com/mxgraph/io/vsdx/theme/HSLColor.java
deleted file mode 100644
index eaae1597bffba0000f3d208e1195278c82c64a88..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/HSLColor.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class HSLColor 
-{
-	private double hue, sat, lum;
-
-	public HSLColor(double hue, double sat, double lum) 
-	{
-		this.hue = hue;
-		this.sat = sat;
-		this.lum = lum;
-	}
-	
-	public double getHue() {
-		return hue;
-	}
-
-
-
-	public void setHue(double hue) {
-		this.hue = hue;
-	}
-
-
-
-	public double getSat() {
-		return sat;
-	}
-
-
-
-	public void setSat(double sat) {
-		this.sat = sat;
-	}
-
-
-
-	public double getLum() {
-		return lum;
-	}
-
-
-
-	public void setLum(double lum) {
-		this.lum = lum;
-	}
-
-	private double hue2rgb(double p, double q, double t)
-	{
-        if (t < 0) t += 1;
-        if (t > 1) t -= 1;
-        if (t < 1/6.0) return p + (q - p) * 6 * t;
-        if (t < 0.5) return q;
-        if (t < 2/3.0) return p + (q - p) * (2/3.0 - t) * 6;
-        return p;
-    }
-
-	public Color toRgb() 
-	{
-		double r, g, b;
-
-		double h = this.hue;
-		double s = this.sat;
-		double l = this.lum;
-
-
-	    if(s == 0) 
-	    {
-	        r = g = b = l; // achromatic
-	    }
-	    else 
-	    {
-	        double q = l < 0.5 ? l * (1 + s) : l + s - l * s;
-	        double p = 2 * l - q;
-	        r = hue2rgb(p, q, h + 1/3.0);
-	        g = hue2rgb(p, q, h);
-	        b = hue2rgb(p, q, h - 1/3.0);
-	    }
-
-	    return new Color((int) (r * 255), (int) (g * 255), (int) (b * 255));
-	}
-
-	// Force a number between 0 and 1
-	private double clamp01(double val) 
-	{
-	    return Math.min(1, Math.max(0, val));
-	}
-
-	//lighten or tint
-	public HSLColor tint (int amount) 
-	{
-//	    HSLColor hsl = color.toHsl();
-	    this.lum *= (1 + (amount / 100.0));
-	    this.lum = clamp01(this.lum);
-	    return this;
-	}
-
-	//darken or shade
-	public HSLColor shade(int amount) 
-	{
-		this.lum *= amount / 100.0;
-		this.lum = clamp01(this.lum);
-	    return this;
-	}
-
-	public HSLColor satMod(int amount) 
-	{
-		this.sat *= amount / 100.0;
-		this.sat = clamp01(this.sat);
-	    return this;
-	}
-
-	public HSLColor lumMod(int amount) 
-	{
-		this.lum *= amount / 100.0;
-		this.lum = clamp01(this.lum);
-	    return this;
-	}
-
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/HSVColor.java b/src/com/mxgraph/io/vsdx/theme/HSVColor.java
deleted file mode 100644
index d4e3a8d83fc1cc4cfef5a63134180d0a1ce89477..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/HSVColor.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class HSVColor {
-	private double h, s, v;
-
-	public HSVColor(double h, double s, double v) {
-		this.h = h;
-		this.s = s;
-		this.v = v;
-	}
-	
-	public Color toRgb() 
-	{
-		double h = this.h * 6;
-		double s = this.s;
-		double l = this.v;
-
-	    double i = Math.floor(h);
-	    double f = h - i, p = v * (1 - s);
-	    double q = v * (1 - f * s), t = v * (1 - (1 - f) * s);
-	    int mod = (int)i % 6;
-	    
-	    double[] rArr = {v, q, p, p, t, v};
-	    double[] gArr = {t, v, v, q, p, p};
-	    double[] bArr = {p, p, t, v, v, q};
-	    double r = rArr[mod], g = gArr[mod], b = bArr[mod];
-
-	    return new Color((int) (r * 255), (int) (g * 255), (int) (b * 255));
-	}
-
-	// Force a number between 0 and 1
-	private double clamp01(double val) 
-	{
-	    return Math.min(1, Math.max(0, val));
-	}
-
-	//lighten or tint
-	public HSVColor tint (int amount) 
-	{
-	    this.v *= (1 + (amount / 100.0));
-	    this.v = clamp01(this.v);
-	    return this;
-	}
-
-	//darken or shade
-	public HSVColor shade(int amount) 
-	{
-		this.v *= amount / 100.0;
-		this.v = clamp01(this.v);
-	    return this;
-	}
-
-	public HSVColor satMod(int amount) 
-	{
-		this.s *= amount / 100.0;
-		this.s = clamp01(this.s);
-	    return this;
-	}
-
-	public HSVColor lumMod(int amount) 
-	{
-		this.v *= amount / 100.0;
-		this.v = clamp01(this.v);
-	    return this;
-	}
-
-	public HSVColor hueMod(int amount) 
-	{
-		this.h *= amount / 100.0;
-		this.h = clamp01(this.h);
-	    return this;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/HslClr.java b/src/com/mxgraph/io/vsdx/theme/HslClr.java
deleted file mode 100644
index a640919560a64b50f01bd13857027462f1a4619e..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/HslClr.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class HslClr extends OoxmlColor {
-	private double hue, sat, lum;
-
-	public HslClr(int hue, int sat, int lum) {
-		this.hue = hue / 360.0;
-		this.sat = sat / 100.0;
-		this.lum = lum / 100.0;
-		color = new HSLColor(hue, sat, lum).toRgb();
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/LineStyle.java b/src/com/mxgraph/io/vsdx/theme/LineStyle.java
deleted file mode 100644
index cda6814058e1951a2c62569254da09dd931e76bd..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/LineStyle.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import java.util.ArrayList;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class LineStyle {
-	
-	public enum LineCapType
-	{
-		ROUND, SQUARE, FLAT
-	}
-
-	public enum CompoundLineType
-	{
-		SINGLE, DOUBLE, THICK_THIN_DOUBLE, THIN_THICK_DOUBLE, THIN_THICK_THIN_TRIPLE
-	}
-	
-	public enum LineEndType
-	{
-		NONE, TRIANGLE, STEALTH, DIAMOND, OVAL, ARROW
-	}
-	
-	private int lineWidth;
-	private LineCapType lineCap;
-	private CompoundLineType lineComp;
-	private FillStyle fillStyle;
-	
-	private boolean isLineDashed = false;
-	private ArrayList<Double> lineDashPattern = new ArrayList<>();
-	
-	private boolean isRoundJoin = false, isBevelJoin = false, isMiterJoin = false;
-	
-	private LineEndType headEndType;
-	private int headEndWidth, headEndLen;
-	
-	private LineEndType tailEndType;
-	private int tailEndWidth, tailEndLen;
-	
-	public LineStyle()
-	{
-		
-	}
-	
-	public LineStyle(Element elem)
-	{
-		//parse the line style xml
-		lineWidth = mxVsdxUtils.getIntAttr(elem, "w");
-		
-		String lineCapAtt = elem.getAttribute("cap");
-		
-		if (lineCapAtt != null)
-		{
-			switch (lineCapAtt)
-			{
-				case "rnd":
-					lineCap = LineCapType.ROUND;
-				break;
-				case "sq":
-					lineCap = LineCapType.SQUARE;
-				break;
-				case "flat":
-					lineCap = LineCapType.FLAT;
-				break;
-			}
-		}
-		
-		String lineCompAtt = elem.getAttribute("cmpd");
-		
-		if (lineCompAtt != null)
-		{
-			switch (lineCompAtt)
-			{
-				case "sng":
-					lineComp = CompoundLineType.SINGLE;
-				break;
-				case "dbl":
-					lineComp = CompoundLineType.DOUBLE;
-				break;
-				case "thickThin":
-					lineComp = CompoundLineType.THICK_THIN_DOUBLE;
-				break;
-				case "thinThick":
-					lineComp = CompoundLineType.THIN_THICK_DOUBLE;
-				break;
-				case "tri":
-					lineComp = CompoundLineType.THIN_THICK_THIN_TRIPLE;
-				break;
-			}
-		}
-		
-		//TODO add algn (Stroke Alignment) attrinbute support [http://www.datypic.com/sc/ooxml/a-algn-4.html]
-		
-		ArrayList<Element> subElems = mxVsdxUtils.getDirectChildElements(elem);
-		
-		for (Element subElem : subElems)
-		{
-			String name = subElem.getNodeName();
-			
-			switch(name)
-			{
-				case "a:noFill":
-				case "a:solidFill":
-				case "a:gradFill":
-				case "a:pattFill":
-					fillStyle = FillStyleFactory.getFillStyle(subElem);
-				break;
-				case "a:prstDash":
-					String val = subElem.getAttribute("val");
-					
-					isLineDashed = true;
-					switch (val)
-					{
-						case "solid":
-							isLineDashed = false;
-						break;
-						case "sysDot":
-						case "dot":
-							lineDashPattern.add(1.0);
-							lineDashPattern.add(4.0);
-						break;
-						case "sysDash":
-						case "dash":
-							//use the default dashed pattern
-						break;
-						case "lgDash":
-							lineDashPattern.add(12.0);
-							lineDashPattern.add(4.0);
-						break;
-						case "sysDashDot":
-						case "dashDot":
-							lineDashPattern.add(8.0);
-							lineDashPattern.add(4.0);
-							lineDashPattern.add(1.0);
-							lineDashPattern.add(4.0);
-						break;
-						case "lgDashDot":
-							lineDashPattern.add(12.0);
-							lineDashPattern.add(4.0);
-							lineDashPattern.add(1.0);
-							lineDashPattern.add(4.0);
-						break;
-						case "sysDashDotDot":
-						case "lgDashDotDot":
-							lineDashPattern.add(12.0);
-							lineDashPattern.add(4.0);
-							lineDashPattern.add(1.0);
-							lineDashPattern.add(4.0);
-							lineDashPattern.add(1.0);
-							lineDashPattern.add(4.0);
-						break;
-					}
-				break;
-				case "a:custDash":
-					isLineDashed = true;
-					ArrayList<Element> dsElems = mxVsdxUtils.getDirectChildNamedElements(subElem, "a:ds");
-					for (Element dsElem : dsElems)
-					{
-						int dashLen = mxVsdxUtils.getIntAttr(dsElem, "d");
-						int spaceLen = mxVsdxUtils.getIntAttr(dsElem, "sp");
-						//TODO find the correct conversion ratio from vsdx to mxGraph
-						lineDashPattern.add(dashLen/10000.0);
-						lineDashPattern.add(spaceLen/10000.0);
-					}
-				break;
-				//https://www.w3schools.com/tags/playcanvas.asp?filename=playcanvas_lineJoin
-				case "a:round": //Round Line Join
-					isRoundJoin = true;
-				break;
-				case "a:bevel": //Bevel Line Join
-					isBevelJoin = true;
-				break;
-				case "a:miter": //Miter Line Join
-					//	Miter Join Limit
-					int limit = mxVsdxUtils.getIntAttr(subElem, "lim"); //?
-					isMiterJoin = true;
-				break;
-				case "a:headEnd": //Line Head/End Style
-					headEndType = getLineEndType(subElem);
-					headEndWidth = mxVsdxUtils.getIntAttr(subElem, "w");
-					headEndLen = mxVsdxUtils.getIntAttr(subElem, "len");
-				break;
-				case "a:tailEnd": //Tail line end style
-					tailEndType = getLineEndType(subElem);
-					tailEndWidth = mxVsdxUtils.getIntAttr(subElem, "w");
-					tailEndLen = mxVsdxUtils.getIntAttr(subElem, "len");
-				break;
-				case "a:extLst": //Extension List!
-				break;
-			}
-		}
-	}
-
-	private LineEndType getLineEndType(Element subElem) {
-		String type = subElem.getAttribute("type");
-		LineEndType endType = null;
-		switch (type)
-		{
-			case "none":
-				endType = LineEndType.NONE;
-			break;
-			case "triangle":
-				endType = LineEndType.TRIANGLE;
-			break;
-			case "stealth":
-				endType = LineEndType.STEALTH;
-			break;
-			case "diamond":
-				endType = LineEndType.DIAMOND;
-			break;
-			case "oval":
-				endType = LineEndType.OVAL;
-			break;
-			case "arrow":
-				endType = LineEndType.ARROW;
-			break;
-		}
-		return endType;
-	}
-	
-	public Color getLineColor(int lineColorStyle, mxVsdxTheme theme) {
-		if (fillStyle != null)
-			return fillStyle.applyStyle(lineColorStyle, theme);
-		else
-			return theme.getDefaultLineClr();
-	}
-
-	public boolean isDashed() {
-		return isLineDashed;
-	}
-	
-	public ArrayList<Double> getLineDashPattern()
-	{
-		return lineDashPattern;
-	}
-
-	public int getStartSize() {
-		// TODO Implement this if it is needed
-		return 4;
-	}
-
-	public int getEndSize() {
-		// TODO Implement this if it is needed
-		return 4;
-	}
-
-	public int getStart() {
-		// TODO Implement this if it is needed
-		return 0;
-	}
-	
-	public int getEnd() {
-		// TODO Implement this if it is needed
-		return 0;
-	}
-
-	public int getLineWidth() {
-		return lineWidth;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/LineStyleExt.java b/src/com/mxgraph/io/vsdx/theme/LineStyleExt.java
deleted file mode 100644
index b405b1b201718ef691794202c332acf909fc964d..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/LineStyleExt.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import java.util.ArrayList;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.Style;
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class LineStyleExt {
-
-	private int rndg = 0, start = 0, startSize = 0, end = 0, endSize = 0, pattern = 0;
-	private ArrayList<Double> lineDashPattern;
-
-	public LineStyleExt(Element elem)
-	{
-		Element lineEx = mxVsdxUtils.getDirectFirstChildElement(elem); //vt:lineEx element of vt:lineStyle
-		
-		//parse the line style ext xml
-		rndg = mxVsdxUtils.getIntAttr(lineEx, "rndg");
-		start = mxVsdxUtils.getIntAttr(lineEx, "start");
-		startSize = mxVsdxUtils.getIntAttr(lineEx, "startSize");
-		end = mxVsdxUtils.getIntAttr(lineEx, "end");
-		endSize = mxVsdxUtils.getIntAttr(lineEx, "endSize");
-		pattern = mxVsdxUtils.getIntAttr(lineEx, "pattern");
-		lineDashPattern = Style.getLineDashPattern(pattern);
-	}
-
-	public int getRndg() 
-	{
-		return rndg;
-	}
-
-	public int getStart() 
-	{
-		return start;
-	}
-
-	public int getStartSize() 
-	{
-		return startSize;
-	}
-
-	public int getEnd() 
-	{
-		return end;
-	}
-
-	public int getEndSize() 
-	{
-		return endSize;
-	}
-
-	public boolean isDashed()
-	{
-		return pattern > 1;
-	}
-	
-	public ArrayList<Double> getLineDashPattern()
-	{
-		return lineDashPattern;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/NoFillStyle.java b/src/com/mxgraph/io/vsdx/theme/NoFillStyle.java
deleted file mode 100644
index 8b433900e734307a982adb07b4dd471f29c404ea..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/NoFillStyle.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-
-public class NoFillStyle implements FillStyle
-{
-
-	@Override
-	public Color applyStyle(int styleValue, mxVsdxTheme theme) 
-	{
-		return Color.NONE;
-	}
-
-}
-	
\ No newline at end of file
diff --git a/src/com/mxgraph/io/vsdx/theme/OoxmlColor.java b/src/com/mxgraph/io/vsdx/theme/OoxmlColor.java
deleted file mode 100644
index 387743077ad648b9549965954abac68f2527a0cc..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/OoxmlColor.java
+++ /dev/null
@@ -1,278 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-
-abstract public class OoxmlColor 
-{
-//	a:tint    Tint
-	private int tint = 0;
-//	a:shade    Shade
-	private int shade = 0;
-//	a:comp    Complement
-	private int comp = 0;
-//	a:inv    Inverse
-	private int inv = 0;
-//	a:gray    Gray
-	private int gray = 0;
-//	a:alpha    Alpha
-	private int alpha = 0;
-//	a:alphaOff    Alpha Offset
-	private int alphaOff = 0;
-//	a:alphaMod    Alpha Modulation
-	private int alphaMod = 0;
-//	a:hue    Hue
-	private int hue = 0;
-//	a:hueOff    Hue Offset
-	private int hueOff = 0;
-//	a:hueMod    Hue Modulate
-	private int hueMod = 0;
-//	a:sat    Saturation
-	private int sat = 0;
-//	a:satOff    Saturation Offset
-	private int satOff = 0;
-//	a:satMod    Saturation Modulation
-	private int satMod = 0;
-//	a:lum    Luminance
-	private int lum = 0;
-//	a:lumOff    Luminance Offset
-	private int lumOff = 0;
-//	a:lumMod    Luminance Modulation
-	private int lumMod = 0;
-//	a:red    Red
-	private int red = 0;
-//	a:redOff    Red Offset
-	private int redOff = 0;
-//	a:redMod    Red Modulation
-	private int redMod = 0;
-//	a:green    Green
-	private int green = 0;
-//	a:greenOff    Green Offset
-	private int greenOff = 0;
-//	a:greenMod    Green Modification
-	private int greenMod = 0;
-//	a:blue    Blue
-	private int blue = 0;
-//	a:blueOff    Blue Offset
-	private int blueOff = 0;
-//	a:blueMod    Blue Modification
-	private int blueMod = 0;
-//	a:gamma    Gamma
-	private int gamma = 0;
-//	a:invGamma    Inverse Gamma
-	private int invGamma = 0;
-
-	protected Color color;
-	
-	protected boolean isDynamic = false;
-	
-	protected boolean isInitialized = false;
-	
-	protected boolean hasEffects = false;
-	
-	protected void calcColor(int styleColor, mxVsdxTheme theme) 
-	{
-		if (hasEffects)
-		{
-			//TODO complete the list of effects
-			//currently we support tint, shade, satMod, lumMod 
-//			HSLColor hslColor = color.toHsl();
-//			if (tint != 0)
-//			{
-//				hslColor.tint(tint);
-//			}
-//			if (shade != 0)
-//			{
-//				hslColor.shade(shade);
-//			}
-//			if (satMod != 0)
-//			{
-//				hslColor.satMod(satMod);
-//			}
-//			if (lumMod != 0)
-//			{
-//				hslColor.lumMod(lumMod);
-//			}
-//			color = hslColor.toRgb();
-
-		
-			HSVColor hsvColor = color.toHsv();
-			if (tint != 0)
-			{
-				hsvColor.tint(tint);
-			}
-			if (shade != 0)
-			{
-				hsvColor.shade(shade);
-			}
-			if (satMod != 0)
-			{
-				hsvColor.satMod(satMod);
-			}
-			if (lumMod != 0)
-			{
-				//TODO this may be better done in HSL color format
-				hsvColor.lumMod(lumMod);
-			}
-			if (hueMod != 0)
-			{
-				hsvColor.hueMod(hueMod);
-			}
-			color = hsvColor.toRgb();
-		}
-	}
-	
-	public Color getColor(int styleColor, mxVsdxTheme theme) 
-	{
-		if (isDynamic || !isInitialized)
-		{
-			calcColor(styleColor, theme);
-			isInitialized = true;
-		}
-		return color;
-	}
-
-	public Color getColor(mxVsdxTheme theme) 
-	{
-		return getColor(-1, theme);
-	}
-
-	public void setTint(int tint) {
-		this.tint = tint;
-		hasEffects = true;
-	}
-
-	public void setShade(int shade) {
-		this.shade = shade;
-		hasEffects = true;
-	}
-
-	public void setComp(int comp) {
-		this.comp = comp;
-		hasEffects = true;
-	}
-
-	public void setInv(int inv) {
-		this.inv = inv;
-		hasEffects = true;
-	}
-
-	public void setGray(int gray) {
-		this.gray = gray;
-		hasEffects = true;
-	}
-
-	public void setAlpha(int alpha) {
-		this.alpha = alpha;
-		hasEffects = true;
-	}
-
-	public void setAlphaOff(int alphaOff) {
-		this.alphaOff = alphaOff;
-		hasEffects = true;
-	}
-
-	public void setAlphaMod(int alphaMod) {
-		this.alphaMod = alphaMod;
-		hasEffects = true;
-	}
-
-	public void setHue(int hue) {
-		this.hue = hue;
-		hasEffects = true;
-	}
-
-	public void setHueOff(int hueOff) {
-		this.hueOff = hueOff;
-		hasEffects = true;
-	}
-
-	public void setHueMod(int hueMod) {
-		this.hueMod = hueMod;
-		hasEffects = true;
-	}
-
-	public void setSat(int sat) {
-		this.sat = sat;
-		hasEffects = true;
-	}
-
-	public void setSatOff(int satOff) {
-		this.satOff = satOff;
-		hasEffects = true;
-	}
-
-	public void setSatMod(int satMod) {
-		this.satMod = satMod;
-		hasEffects = true;
-	}
-
-	public void setLum(int lum) {
-		this.lum = lum;
-		hasEffects = true;
-	}
-
-	public void setLumOff(int lumOff) {
-		this.lumOff = lumOff;
-		hasEffects = true;
-	}
-
-	public void setLumMod(int lumMod) {
-		this.lumMod = lumMod;
-		hasEffects = true;
-	}
-
-	public void setRed(int red) {
-		this.red = red;
-		hasEffects = true;
-	}
-
-	public void setRedOff(int redOff) {
-		this.redOff = redOff;
-		hasEffects = true;
-	}
-
-	public void setRedMod(int redMod) {
-		this.redMod = redMod;
-		hasEffects = true;
-	}
-
-	public void setGreen(int green) {
-		this.green = green;
-		hasEffects = true;
-	}
-
-	public void setGreenOff(int greenOff) {
-		this.greenOff = greenOff;
-		hasEffects = true;
-	}
-
-	public void setGreenMod(int greenMod) {
-		this.greenMod = greenMod;
-		hasEffects = true;
-	}
-
-	public void setBlue(int blue) {
-		this.blue = blue;
-		hasEffects = true;
-	}
-
-	public void setBlueOff(int blueOff) {
-		this.blueOff = blueOff;
-		hasEffects = true;
-	}
-
-	public void setBlueMod(int blueMod) {
-		this.blueMod = blueMod;
-		hasEffects = true;
-	}
-
-	public void setGamma(int gamma) {
-		this.gamma = gamma;
-		hasEffects = true;
-	}
-
-	public void setInvGamma(int invGamma) {
-		this.invGamma = invGamma;
-		hasEffects = true;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java b/src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
deleted file mode 100644
index 169e6eef59157dfb19d7bc14cfe04340201d5b74..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import java.util.ArrayList;
-
-import org.w3c.dom.Element;
-
-import com.mxgraph.io.vsdx.mxVsdxUtils;
-
-public class OoxmlColorFactory {
-
-	//TODO Refactor the code such that each class parse itself
-	public static OoxmlColor getOoxmlColor(Element element)
-	{
-		OoxmlColor color = null;
-		String nodeName = element.getNodeName();
-		switch (nodeName)
-		{
-			case "a:scrgbClr":
-				color = new ScrgbClr(
-						Integer.parseInt(element.getAttribute("r")), 
-						Integer.parseInt(element.getAttribute("g")), 
-						Integer.parseInt(element.getAttribute("b")));
-			break;
-			case "a:srgbClr":
-				color = new SrgbClr(element.getAttribute("val"));
-			break;
-			case "a:hslClr":
-				color = new HslClr(
-						Integer.parseInt(element.getAttribute("hue")), 
-						Integer.parseInt(element.getAttribute("sat")), 
-						Integer.parseInt(element.getAttribute("lum")));
-			break;
-			case "a:sysClr":
-				color = new SysClr(
-						element.getAttribute("val"),
-						element.getAttribute("lastClr")
-						);
-			break;
-			case "a:schemeClr":
-				color = new SchemeClr(element.getAttribute("val"));
-			break;
-			case "a:prstClr":
-				color = new SrgbClr(element.getAttribute("val"));
-			break;
-			
-		}
-		
-		ArrayList<Element> effects = mxVsdxUtils.getDirectChildElements(element);
-		
-		for (Element effect : effects)
-		{
-			int effVal = Integer.parseInt(effect.getAttribute("val")) / 1000; //these values are multiplied by 10,000 so we divide by 1,000 to keep the percentage only
-			String effName = effect.getNodeName();
-			switch(effName)
-			{
-				case "a:tint":
-					color.setTint(effVal);
-				break;
-				case "a:shade":
-					color.setShade(effVal);
-				break;
-				case "a:satMod":
-					color.setSatMod(effVal);
-				break;
-				case "a:lumMod":
-					color.setLumMod(effVal);
-				break;
-				case "a:hueMod":
-					color.setHueMod(effVal);
-				break;
-				//TODO complete the list when supported
-//				a:comp    Complement
-//				a:inv    Inverse
-//				a:gray    Gray
-//				a:alpha    Alpha
-//				a:alphaOff    Alpha Offset
-//				a:alphaMod    Alpha Modulation
-//				a:hue    Hue
-//				a:hueOff    Hue Offset
-//				a:sat    Saturation
-//				a:satOff    Saturation Offset
-//				a:lum    Luminance
-//				a:lumOff    Luminance Offset
-//				a:red    Red
-//				a:redOff    Red Offset
-//				a:redMod    Red Modulation
-//				a:green    Green
-//				a:greenOff    Green Offset
-//				a:greenMod    Green Modification
-//				a:blue    Blue
-//				a:blueOff    Blue Offset
-//				a:blueMod    Blue Modification
-//				a:gamma    Gamma
-//				a:invGamma    Inverse Gamma
-			}
-		}
-		return color;
-
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/PrstClr.java b/src/com/mxgraph/io/vsdx/theme/PrstClr.java
deleted file mode 100644
index f957280d33ed286d3fca71dd6f1c26e6e27fd8ab..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/PrstClr.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class PrstClr extends OoxmlColor {
-	private String val;
-
-	
-	public PrstClr(String val) {
-		this.val = val;
-		//TODO Implement this if it is used
-		color = new Color(255, 255, 255);
-		
-//		aliceBlue	Alice Blue Preset Color
-//		antiqueWhite	Antique White Preset Color
-//		aqua	Aqua Preset Color
-//		aquamarine	Aquamarine Preset Color
-//		azure	Azure Preset Color
-//		beige	Beige Preset Color
-//		bisque	Bisque Preset Color
-//		black	Black Preset Color
-//		blanchedAlmond	Blanched Almond Preset Color
-//		blue	Blue Preset Color
-//		blueViolet	Blue Violet Preset Color
-//		brown	Brown Preset Color
-//		burlyWood	Burly Wood Preset Color
-//		cadetBlue	Cadet Blue Preset Color
-//		chartreuse	Chartreuse Preset Color
-//		chocolate	Chocolate Preset Color
-//		coral	Coral Preset Color
-//		cornflowerBlue	Cornflower Blue Preset Color
-//		cornsilk	Cornsilk Preset Color
-//		crimson	Crimson Preset Color
-//		cyan	Cyan Preset Color
-//		dkBlue	Dark Blue Preset Color
-//		dkCyan	Dark Cyan Preset Color
-//		dkGoldenrod	Dark Goldenrod Preset Color
-//		dkGray	Dark Gray Preset Color
-//		dkGreen	Dark Green Preset Color
-//		dkKhaki	Dark Khaki Preset Color
-//		dkMagenta	Dark Magenta Preset Color
-//		dkOliveGreen	Dark Olive Green Preset Color
-//		dkOrange	Dark Orange Preset Color
-//		dkOrchid	Dark Orchid Preset Color
-//		dkRed	Dark Red Preset Color
-//		dkSalmon	Dark Salmon Preset Color
-//		dkSeaGreen	Dark Sea Green Preset Color
-//		dkSlateBlue	Dark Slate Blue Preset Color
-//		dkSlateGray	Dark Slate Gray Preset Color
-//		dkTurquoise	Dark Turquoise Preset Color
-//		dkViolet	Dark Violet Preset Color
-//		deepPink	Deep Pink Preset Color
-//		deepSkyBlue	Deep Sky Blue Preset Color
-//		dimGray	Dim Gray Preset Color
-//		dodgerBlue	Dodger Blue Preset Color
-//		firebrick	Firebrick Preset Color
-//		floralWhite	Floral White Preset Color
-//		forestGreen	Forest Green Preset Color
-//		fuchsia	Fuchsia Preset Color
-//		gainsboro	Gainsboro Preset Color
-//		ghostWhite	Ghost White Preset Color
-//		gold	Gold Preset Color
-//		goldenrod	Goldenrod Preset Color
-//		gray	Gray Preset Color
-//		green	Green Preset Color
-//		greenYellow	Green Yellow Preset Color
-//		honeydew	Honeydew Preset Color
-//		hotPink	Hot Pink Preset Color
-//		indianRed	Indian Red Preset Color
-//		indigo	Indigo Preset Color
-//		ivory	Ivory Preset Color
-//		khaki	Khaki Preset Color
-//		lavender	Lavender Preset Color
-//		lavenderBlush	Lavender Blush Preset Color
-//		lawnGreen	Lawn Green Preset Color
-//		lemonChiffon	Lemon Chiffon Preset Color
-//		ltBlue	Light Blue Preset Color
-//		ltCoral	Light Coral Preset Color
-//		ltCyan	Light Cyan Preset Color
-//		ltGoldenrodYellow	Light Goldenrod Yellow Preset Color
-//		ltGray	Light Gray Preset Color
-//		ltGreen	Light Green Preset Color
-//		ltPink	Light Pink Preset Color
-//		ltSalmon	Light Salmon Preset Color
-//		ltSeaGreen	Light Sea Green Preset Color
-//		ltSkyBlue	Light Sky Blue Preset Color
-//		ltSlateGray	Light Slate Gray Preset Color
-//		ltSteelBlue	Light Steel Blue Preset Color
-//		ltYellow	Light Yellow Preset Color
-//		lime	Lime Preset Color
-//		limeGreen	Lime Green Preset Color
-//		linen	Linen Preset Color
-//		magenta	Magenta Preset Color
-//		maroon	Maroon Preset Color
-//		medAquamarine	Medium Aquamarine Preset Color
-//		medBlue	Medium Blue Preset Color
-//		medOrchid	Medium Orchid Preset Color
-//		medPurple	Medium Purple Preset Color
-//		medSeaGreen	Medium Sea Green Preset Color
-//		medSlateBlue	Medium Slate Blue Preset Color
-//		medSpringGreen	Medium Spring Green Preset Color
-//		medTurquoise	Medium Turquoise Preset Color
-//		medVioletRed	Medium Violet Red Preset Color
-//		midnightBlue	Midnight Blue Preset Color
-//		mintCream	Mint Cream Preset Color
-//		mistyRose	Misty Rose Preset Color
-//		moccasin	Moccasin Preset Color
-//		navajoWhite	Navajo White Preset Color
-//		navy	Navy Preset Color
-//		oldLace	Old Lace Preset Color
-//		olive	Olive Preset Color
-//		oliveDrab	Olive Drab Preset Color
-//		orange	Orange Preset Color
-//		orangeRed	Orange Red Preset Color
-//		orchid	Orchid Preset Color
-//		paleGoldenrod	Pale Goldenrod Preset Color
-//		paleGreen	Pale Green Preset Color
-//		paleTurquoise	Pale Turquoise Preset Color
-//		paleVioletRed	Pale Violet Red Preset Color
-//		papayaWhip	Papaya Whip Preset Color
-//		peachPuff	Peach Puff Preset Color
-//		peru	Peru Preset Color
-//		pink	Pink Preset Color
-//		plum	Plum Preset Color
-//		powderBlue	Powder Blue Preset Color
-//		purple	Purple Preset Color
-//		red	Red Preset Color
-//		rosyBrown	Rosy Brown Preset Color
-//		royalBlue	Royal Blue Preset Color
-//		saddleBrown	Saddle Brown Preset Color
-//		salmon	Salmon Preset Color
-//		sandyBrown	Sandy Brown Preset Color
-//		seaGreen	Sea Green Preset Color
-//		seaShell	Sea Shell Preset Color
-//		sienna	Sienna Preset Color
-//		silver	Silver Preset Color
-//		skyBlue	Sky Blue Preset Color
-//		slateBlue	Slate Blue Preset Color
-//		slateGray	Slate Gray Preset Color
-//		snow	Snow Preset Color
-//		springGreen	Spring Green Preset Color
-//		steelBlue	Steel Blue Preset Color
-//		tan	Tan Preset Color
-//		teal	Teal Preset Color
-//		thistle	Thistle Preset Color
-//		tomato	Tomato Preset Color
-//		turquoise	Turquoise Preset Color
-//		violet	Violet Preset Color
-//		wheat	Wheat Preset Color
-//		white	White Preset Color
-//		whiteSmoke	White Smoke Preset Color
-//		yellow	Yellow Preset Color
-//		yellowGreen	Yellow Green Preset Color
-	}
-	
-	
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/QuickStyleVals.java b/src/com/mxgraph/io/vsdx/theme/QuickStyleVals.java
deleted file mode 100644
index 1fce44cfb8e504ed9e55fd3b8a4ce261fd8f62f6..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/QuickStyleVals.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class QuickStyleVals {
-	private int quickStyleEffectsMatrix, quickStyleFillColor, quickStyleFillMatrix, 
-				quickStyleFontColor, quickStyleFontMatrix, quickStyleLineColor, 
-				quickStyleLineMatrix, quickStyleShadowColor, quickStyleType,
-				quickStyleVariation;
-
-	public QuickStyleVals(int quickStyleEffectsMatrix, int quickStyleFillColor, int quickStyleFillMatrix,
-			int quickStyleFontColor, int quickStyleFontMatrix, int quickStyleLineColor, int quickStyleLineMatrix,
-			int quickStyleShadowColor, int quickStyleType, int quickStyleVariation) {
-		this.quickStyleEffectsMatrix = quickStyleEffectsMatrix;
-		this.quickStyleFillColor = quickStyleFillColor;
-		this.quickStyleFillMatrix = quickStyleFillMatrix;
-		this.quickStyleFontColor = quickStyleFontColor;
-		this.quickStyleFontMatrix = quickStyleFontMatrix;
-		this.quickStyleLineColor = quickStyleLineColor;
-		this.quickStyleLineMatrix = quickStyleLineMatrix;
-		this.quickStyleShadowColor = quickStyleShadowColor;
-		this.quickStyleType = quickStyleType;
-		this.quickStyleVariation = quickStyleVariation;
-	}
-
-	public int getQuickStyleEffectsMatrix() {
-		return quickStyleEffectsMatrix;
-	}
-
-	public int getQuickStyleFillColor() {
-		return quickStyleFillColor;
-	}
-
-	public int getQuickStyleFillMatrix() {
-		return quickStyleFillMatrix;
-	}
-
-	public int getQuickStyleFontColor() {
-		return quickStyleFontColor;
-	}
-
-	public int getQuickStyleFontMatrix() {
-		return quickStyleFontMatrix;
-	}
-
-	public int getQuickStyleLineColor() {
-		return quickStyleLineColor;
-	}
-
-	public int getQuickStyleLineMatrix() {
-		return quickStyleLineMatrix;
-	}
-
-	public int getQuickStyleShadowColor() {
-		return quickStyleShadowColor;
-	}
-
-	public int getQuickStyleType() {
-		return quickStyleType;
-	}
-
-	public int getQuickStyleVariation() {
-		return quickStyleVariation;
-	}
-
-	public void setQuickStyleEffectsMatrix(int quickStyleEffectsMatrix) {
-		this.quickStyleEffectsMatrix = quickStyleEffectsMatrix;
-	}
-
-	public void setQuickStyleFillColor(int quickStyleFillColor) {
-		this.quickStyleFillColor = quickStyleFillColor;
-	}
-
-	public void setQuickStyleFillMatrix(int quickStyleFillMatrix) {
-		this.quickStyleFillMatrix = quickStyleFillMatrix;
-	}
-
-	public void setQuickStyleFontColor(int quickStyleFontColor) {
-		this.quickStyleFontColor = quickStyleFontColor;
-	}
-
-	public void setQuickStyleFontMatrix(int quickStyleFontMatrix) {
-		this.quickStyleFontMatrix = quickStyleFontMatrix;
-	}
-
-	public void setQuickStyleLineColor(int quickStyleLineColor) {
-		this.quickStyleLineColor = quickStyleLineColor;
-	}
-
-	public void setQuickStyleLineMatrix(int quickStyleLineMatrix) {
-		this.quickStyleLineMatrix = quickStyleLineMatrix;
-	}
-
-	public void setQuickStyleShadowColor(int quickStyleShadowColor) {
-		this.quickStyleShadowColor = quickStyleShadowColor;
-	}
-
-	public void setQuickStyleType(int quickStyleType) {
-		this.quickStyleType = quickStyleType;
-	}
-
-	public void setQuickStyleVariation(int quickStyleVariation) {
-		this.quickStyleVariation = quickStyleVariation;
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/SchemeClr.java b/src/com/mxgraph/io/vsdx/theme/SchemeClr.java
deleted file mode 100644
index 979a3dbdd93a0c01b9d853edbb26761f63452d7d..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/SchemeClr.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-
-public class SchemeClr extends OoxmlColor 
-{
-	private String val;
-
-//	bg1	Background Color 1
-//	tx1	Text Color 1
-//	bg2	Background Color 2
-//	tx2	Text Color 2
-//	accent1	Accent Color 1
-//	accent2	Accent Color 2
-//	accent3	Accent Color 3
-//	accent4	Accent Color 4
-//	accent5	Accent Color 5
-//	accent6	Accent Color 6
-//	hlink	Hyperlink Color
-//	folHlink	Followed Hyperlink Color
-//	phClr	Style Color
-//	dk1	Dark Color 1
-//	lt1	Light Color 1
-//	dk2	Dark Color 2
-//	lt2	Light Color 2
-	
-	public SchemeClr(String val) 
-	{
-		isDynamic = true;
-		this.val = val;		
-	}
-	
-	protected void calcColor(int styleColor, mxVsdxTheme theme) 
-	{
-		if (!"phClr".equals(val)) 
-		{
-			color = theme.getSchemeColor(val);
-			isDynamic = false;
-		} else {
-			color = theme.getStyleColor(styleColor);
-		}
-		super.calcColor(styleColor, theme);
-	}
-	
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/ScrgbClr.java b/src/com/mxgraph/io/vsdx/theme/ScrgbClr.java
deleted file mode 100644
index c4bc5c0cd6929713d25a5f6492273bb68b87e274..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/ScrgbClr.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-
-public class ScrgbClr extends OoxmlColor{	
-	private int r,g,b;
-	
-	
-	public ScrgbClr(int r, int g, int b) {
-		this.r = r;
-		this.g = g;
-		this.b = b;
-		color = new Color(r, g, b);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java b/src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
deleted file mode 100644
index f629aaeaa07e114c6036b4c0a744668424800804..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-import com.mxgraph.io.vsdx.mxVsdxTheme;
-
-public class SolidFillStyle implements FillStyle
-{
-	
-	private OoxmlColor color;
-	
-	public SolidFillStyle(OoxmlColor color) 
-	{
-		this.color = color;
-	}
-	
-	@Override
-	public Color applyStyle(int styleValue, mxVsdxTheme theme) 
-	{
-		return color.getColor(styleValue, theme);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/SrgbClr.java b/src/com/mxgraph/io/vsdx/theme/SrgbClr.java
deleted file mode 100644
index b092278939b2e7a92a98c96be598bfcf06825149..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/SrgbClr.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-
-public class SrgbClr extends OoxmlColor {
-	private String hexVal;
-	public SrgbClr(String hexVal) {
-		this.hexVal = hexVal;
-		color = Color.decodeColorHex(hexVal);
-	}
-}
diff --git a/src/com/mxgraph/io/vsdx/theme/SysClr.java b/src/com/mxgraph/io/vsdx/theme/SysClr.java
deleted file mode 100644
index c85f84a166e3649319274956a6f2747ee1f65acd..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/io/vsdx/theme/SysClr.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.mxgraph.io.vsdx.theme;
-
-public class SysClr extends OoxmlColor 
-{
-	private String val, lastClr;
-
-	public SysClr(String val, String lastClr) 
-	{
-		this.val = val;
-		this.lastClr = lastClr;
-		//System color depends on the system. So, if lastClr is not given, guess best common system color
-		String hexVal = lastClr;
-		
-		if (hexVal == null) 
-		{
-			switch(val) 
-			{
-				case "windowText": hexVal = "000000"; break;
-				case "window": hexVal = "FFFFFF"; break;
-				//TODO complete the cases! but this is rarely used
-//				scrollBar	Scroll Bar System Color
-//				background	Background System Color
-//				activeCaption	Active Caption System Color
-//				inactiveCaption	Inactive Caption System Color
-//				menu	Menu System Color
-//				windowFrame	Window Frame System Color
-//				menuText	Menu Text System Color
-//				captionText	Caption Text System Color
-//				activeBorder	Active Border System Color
-//				inactiveBorder	Inactive Border System Color
-//				appWorkspace	Application Workspace System Color
-//				highlight	Highlight System Color
-//				highlightText	Highlight Text System Color
-//				btnFace	Button Face System Color
-//				btnShadow	Button Shadow System Color
-//				grayText	Gray Text System Color
-//				btnText	Button Text System Color
-//				inactiveCaptionText	Inactive Caption Text System Color
-//				btnHighlight	Button Highlight System Color
-//				3dDkShadow	3D Dark System Color
-//				3dLight	3D Light System Color
-//				infoText	Info Text System Color
-//				infoBk	Info Back System Color
-//				hotLight	Hot Light System Color
-//				gradientActiveCaption	Gradient Active Caption System Color
-//				gradientInactiveCaption	Gradient Inactive Caption System Color
-//				menuHighlight	Menu Highlight System Color
-//				menuBar	Menu Bar System Color
-				default:
-					hexVal = "FFFFFF";
-			}
-		}
-		color = Color.decodeColorHex(hexVal);
-	}
-	
-	
-}
diff --git a/src/com/mxgraph/online/Constants.java b/src/com/mxgraph/online/Constants.java
deleted file mode 100644
index d4664826dfa6c552116a89a27252431a0a150b8e..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/online/Constants.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.mxgraph.online;
-
-public class Constants
-{
-
-	/**
-	 * Maximum size (in bytes) for request payloads. Default is 52428800 (50MB).
-	 */
-	public static final int MAX_REQUEST_SIZE = 52428800;
-
-	/**
-	 * Maximum are for exports. Default assumes the area taken by a 
-	 * 10000px by 10000px image.
-	 */
-	public static final int MAX_AREA = 10000 * 10000;
-
-	/**
-	 * The domain where legacy images are stored.
-	 */
-	public static final String IMAGE_DOMAIN = "http://img.diagramly.com/";
-
-}
diff --git a/src/com/mxgraph/online/mxBase64.java b/src/com/mxgraph/online/mxBase64.java
deleted file mode 100644
index ad441ec920589d810fa4661bd071699af87e2020..0000000000000000000000000000000000000000
--- a/src/com/mxgraph/online/mxBase64.java
+++ /dev/null
@@ -1,612 +0,0 @@
-package com.mxgraph.online;
-
-import java.util.Arrays;
-
-/** A very fast and memory efficient class to encode and decode to and from BASE64 in full accordance
- * with RFC 2045.<br><br>
- * On Windows XP sp1 with 1.4.2_04 and later ;), this encoder and decoder is about 10 times faster
- * on small arrays (10 - 1000 bytes) and 2-3 times as fast on larger arrays (10000 - 1000000 bytes)
- * compared to <code>sun.misc.Encoder()/Decoder()</code>.<br><br>
- *
- * On byte arrays the encoder is about 20% faster than Jakarta Commons Base64 Codec for encode and
- * about 50% faster for decoding large arrays. This implementation is about twice as fast on very small
- * arrays (&lt 30 bytes). If source/destination is a <code>String</code> this
- * version is about three times as fast due to the fact that the Commons Codec result has to be recoded
- * to a <code>String</code> from <code>byte[]</code>, which is very expensive.<br><br>
- *
- * This encode/decode algorithm doesn't create any temporary arrays as many other codecs do, it only
- * allocates the resulting array. This produces less garbage and it is possible to handle arrays twice
- * as large as algorithms that create a temporary array. (E.g. Jakarta Commons Codec). It is unknown
- * whether Sun's <code>sun.misc.Encoder()/Decoder()</code> produce temporary arrays but since performance
- * is quite low it probably does.<br><br>
- *
- * The encoder produces the same output as the Sun one except that the Sun's encoder appends
- * a trailing line separator if the last character isn't a pad. Unclear why but it only adds to the
- * length and is probably a side effect. Both are in conformance with RFC 2045 though.<br>
- * Commons codec seem to always att a trailing line separator.<br><br>
- *
- * <b>Note!</b>
- * The encode/decode method pairs (types) come in three versions with the <b>exact</b> same algorithm and
- * thus a lot of code redundancy. This is to not create any temporary arrays for transcoding to/from different
- * format types. The methods not used can simply be commented out.<br><br>
- *
- * There is also a "fast" version of all decode methods that works the same way as the normal ones, but
- * har a few demands on the decoded input. Normally though, these fast verions should be used if the source if
- * the input is known and it hasn't bee tampered with.<br><br>
- *
- * If you find the code useful or you find a bug, please send me a note at base64 @ miginfocom . com.
- *
- * Licence (BSD):
- * ==============
- *
- * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this list
- * of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this
- * list of conditions and the following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- * Neither the name of the MiG InfoCom AB nor the names of its contributors may be
- * used to endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- *
- * @version 2.2
- * @author Mikael Grev
- *         Date: 2004-aug-02
- *         Time: 11:31:11
- */
-
-public class mxBase64
-{
-	private static final char[] CA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
-			.toCharArray();
-
-	private static final int[] IA = new int[256];
-	static
-	{
-		Arrays.fill(IA, -1);
-		for (int i = 0, iS = CA.length; i < iS; i++)
-			IA[CA[i]] = i;
-		IA['='] = 0;
-	}
-
-	// ****************************************************************************************
-	// *  char[] version
-	// ****************************************************************************************
-
-	/** Encodes a raw byte array into a BASE64 <code>char[]</code> representation i accordance with RFC 2045.
-	 * @param sArr The bytes to convert. If <code>null</code> or length 0 an empty array will be returned.
-	 * @param lineSep Optional "\r\n" after 76 characters, unless end of file.<br>
-	 * No line separator will be in breach of RFC 2045 which specifies max 76 per line but will be a
-	 * little faster.
-	 * @return A BASE64 encoded array. Never <code>null</code>.
-	 */
-	public final static char[] encodeToChar(byte[] sArr, boolean lineSep)
-	{
-		// Check special case
-		int sLen = sArr != null ? sArr.length : 0;
-		if (sLen == 0)
-			return new char[0];
-
-		int eLen = (sLen / 3) * 3; // Length of even 24-bits.
-		int cCnt = ((sLen - 1) / 3 + 1) << 2; // Returned character count
-		int dLen = cCnt + (lineSep ? (cCnt - 1) / 76 << 1 : 0); // Length of returned array
-		char[] dArr = new char[dLen];
-
-		// Encode even 24-bits
-		for (int s = 0, d = 0, cc = 0; s < eLen;)
-		{
-			// Copy next three bytes into lower 24 bits of int, paying attension to sign.
-			int i = (sArr[s++] & 0xff) << 16 | (sArr[s++] & 0xff) << 8
-					| (sArr[s++] & 0xff);
-
-			// Encode the int into four chars
-			dArr[d++] = CA[(i >>> 18) & 0x3f];
-			dArr[d++] = CA[(i >>> 12) & 0x3f];
-			dArr[d++] = CA[(i >>> 6) & 0x3f];
-			dArr[d++] = CA[i & 0x3f];
-
-			// Add optional line separator
-			if (lineSep && ++cc == 19 && d < dLen - 2)
-			{
-				dArr[d++] = '\r';
-				dArr[d++] = '\n';
-				cc = 0;
-			}
-		}
-
-		// Pad and encode last bits if source isn't even 24 bits.
-		int left = sLen - eLen; // 0 - 2.
-		if (left > 0)
-		{
-			// Prepare the int
-			int i = ((sArr[eLen] & 0xff) << 10)
-					| (left == 2 ? ((sArr[sLen - 1] & 0xff) << 2) : 0);
-
-			// Set last four chars
-			dArr[dLen - 4] = CA[i >> 12];
-			dArr[dLen - 3] = CA[(i >>> 6) & 0x3f];
-			dArr[dLen - 2] = left == 2 ? CA[i & 0x3f] : '=';
-			dArr[dLen - 1] = '=';
-		}
-		return dArr;
-	}
-
-	/** Decodes a BASE64 encoded char array. All illegal characters will be ignored and can handle both arrays with
-	 * and without line separators.
-	 * @param sArr The source array. <code>null</code> or length 0 will return an empty array.
-	 * @return The decoded array of bytes. May be of length 0. Will be <code>null</code> if the legal characters
-	 * (including '=') isn't divideable by 4.  (I.e. definitely corrupted).
-	 */
-	public final static byte[] decode(char[] sArr)
-	{
-		// Check special case
-		int sLen = sArr != null ? sArr.length : 0;
-		if (sLen == 0)
-			return new byte[0];
-
-		// Count illegal characters (including '\r', '\n') to know what size the returned array will be,
-		// so we don't have to reallocate & copy it later.
-		int sepCnt = 0; // Number of separator characters. (Actually illegal characters, but that's a bonus...)
-		for (int i = 0; i < sLen; i++)
-			// If input is "pure" (I.e. no line separators or illegal chars) base64 this loop can be commented out.
-			if (IA[sArr[i]] < 0)
-				sepCnt++;
-
-		// Check so that legal chars (including '=') are evenly divideable by 4 as specified in RFC 2045.
-		if ((sLen - sepCnt) % 4 != 0)
-			return null;
-
-		int pad = 0;
-		for (int i = sLen; i > 1 && IA[sArr[--i]] <= 0;)
-			if (sArr[i] == '=')
-				pad++;
-
-		int len = ((sLen - sepCnt) * 6 >> 3) - pad;
-
-		byte[] dArr = new byte[len]; // Preallocate byte[] of exact length
-
-		for (int s = 0, d = 0; d < len;)
-		{
-			// Assemble three bytes into an int from four "valid" characters.
-			int i = 0;
-			for (int j = 0; j < 4; j++)
-			{ // j only increased if a valid char was found.
-				int c = IA[sArr[s++]];
-				if (c >= 0)
-					i |= c << (18 - j * 6);
-				else
-					j--;
-			}
-			// Add the bytes
-			dArr[d++] = (byte) (i >> 16);
-			if (d < len)
-			{
-				dArr[d++] = (byte) (i >> 8);
-				if (d < len)
-					dArr[d++] = (byte) i;
-			}
-		}
-		return dArr;
-	}
-
-	/** Decodes a BASE64 encoded char array that is known to be resonably well formatted. The method is about twice as
-	 * fast as {@link #decode(char[])}. The preconditions are:<br>
-	 * + The array must have a line length of 76 chars OR no line separators at all (one line).<br>
-	 * + Line separator must be "\r\n", as specified in RFC 2045
-	 * + The array must not contain illegal characters within the encoded string<br>
-	 * + The array CAN have illegal characters at the beginning and end, those will be dealt with appropriately.<br>
-	 * @param sArr The source array. Length 0 will return an empty array. <code>null</code> will throw an exception.
-	 * @return The decoded array of bytes. May be of length 0.
-	 */
-	public final static byte[] decodeFast(char[] sArr)
-	{
-		// Check special case
-		int sLen = sArr.length;
-		if (sLen == 0)
-			return new byte[0];
-
-		int sIx = 0, eIx = sLen - 1; // Start and end index after trimming.
-
-		// Trim illegal chars from start
-		while (sIx < eIx && IA[sArr[sIx]] < 0)
-			sIx++;
-
-		// Trim illegal chars from end
-		while (eIx > 0 && IA[sArr[eIx]] < 0)
-			eIx--;
-
-		// get the padding count (=) (0, 1 or 2)
-		int pad = sArr[eIx] == '=' ? (sArr[eIx - 1] == '=' ? 2 : 1) : 0; // Count '=' at end.
-		int cCnt = eIx - sIx + 1; // Content count including possible separators
-		int sepCnt = sLen > 76 ? (sArr[76] == '\r' ? cCnt / 78 : 0) << 1 : 0;
-
-		int len = ((cCnt - sepCnt) * 6 >> 3) - pad; // The number of decoded bytes
-		byte[] dArr = new byte[len]; // Preallocate byte[] of exact length
-
-		// Decode all but the last 0 - 2 bytes.
-		int d = 0;
-		for (int cc = 0, eLen = (len / 3) * 3; d < eLen;)
-		{
-			// Assemble three bytes into an int from four "valid" characters.
-			int i = IA[sArr[sIx++]] << 18 | IA[sArr[sIx++]] << 12
-					| IA[sArr[sIx++]] << 6 | IA[sArr[sIx++]];
-
-			// Add the bytes
-			dArr[d++] = (byte) (i >> 16);
-			dArr[d++] = (byte) (i >> 8);
-			dArr[d++] = (byte) i;
-
-			// If line separator, jump over it.
-			if (sepCnt > 0 && ++cc == 19)
-			{
-				sIx += 2;
-				cc = 0;
-			}
-		}
-
-		if (d < len)
-		{
-			// Decode last 1-3 bytes (incl '=') into 1-3 bytes
-			int i = 0;
-			for (int j = 0; sIx <= eIx - pad; j++)
-				i |= IA[sArr[sIx++]] << (18 - j * 6);
-
-			for (int r = 16; d < len; r -= 8)
-				dArr[d++] = (byte) (i >> r);
-		}
-
-		return dArr;
-	}
-
-	// ****************************************************************************************
-	// *  byte[] version
-	// ****************************************************************************************
-
-	/** Encodes a raw byte array into a BASE64 <code>byte[]</code> representation i accordance with RFC 2045.
-	 * @param sArr The bytes to convert. If <code>null</code> or length 0 an empty array will be returned.
-	 * @param lineSep Optional "\r\n" after 76 characters, unless end of file.<br>
-	 * No line separator will be in breach of RFC 2045 which specifies max 76 per line but will be a
-	 * little faster.
-	 * @return A BASE64 encoded array. Never <code>null</code>.
-	 */
-	public final static byte[] encodeToByte(byte[] sArr, boolean lineSep)
-	{
-		// Check special case
-		int sLen = sArr != null ? sArr.length : 0;
-		if (sLen == 0)
-			return new byte[0];
-
-		int eLen = (sLen / 3) * 3; // Length of even 24-bits.
-		int cCnt = ((sLen - 1) / 3 + 1) << 2; // Returned character count
-		int dLen = cCnt + (lineSep ? (cCnt - 1) / 76 << 1 : 0); // Length of returned array
-		byte[] dArr = new byte[dLen];
-
-		// Encode even 24-bits
-		for (int s = 0, d = 0, cc = 0; s < eLen;)
-		{
-			// Copy next three bytes into lower 24 bits of int, paying attension to sign.
-			int i = (sArr[s++] & 0xff) << 16 | (sArr[s++] & 0xff) << 8
-					| (sArr[s++] & 0xff);
-
-			// Encode the int into four chars
-			dArr[d++] = (byte) CA[(i >>> 18) & 0x3f];
-			dArr[d++] = (byte) CA[(i >>> 12) & 0x3f];
-			dArr[d++] = (byte) CA[(i >>> 6) & 0x3f];
-			dArr[d++] = (byte) CA[i & 0x3f];
-
-			// Add optional line separator
-			if (lineSep && ++cc == 19 && d < dLen - 2)
-			{
-				dArr[d++] = '\r';
-				dArr[d++] = '\n';
-				cc = 0;
-			}
-		}
-
-		// Pad and encode last bits if source isn't an even 24 bits.
-		int left = sLen - eLen; // 0 - 2.
-		if (left > 0)
-		{
-			// Prepare the int
-			int i = ((sArr[eLen] & 0xff) << 10)
-					| (left == 2 ? ((sArr[sLen - 1] & 0xff) << 2) : 0);
-
-			// Set last four chars
-			dArr[dLen - 4] = (byte) CA[i >> 12];
-			dArr[dLen - 3] = (byte) CA[(i >>> 6) & 0x3f];
-			dArr[dLen - 2] = left == 2 ? (byte) CA[i & 0x3f] : (byte) '=';
-			dArr[dLen - 1] = '=';
-		}
-		return dArr;
-	}
-
-	/** Decodes a BASE64 encoded byte array. All illegal characters will be ignored and can handle both arrays with
-	 * and without line separators.
-	 * @param sArr The source array. Length 0 will return an empty array. <code>null</code> will throw an exception.
-	 * @return The decoded array of bytes. May be of length 0. Will be <code>null</code> if the legal characters
-	 * (including '=') isn't divideable by 4. (I.e. definitely corrupted).
-	 */
-	public final static byte[] decode(byte[] sArr)
-	{
-		// Check special case
-		int sLen = sArr.length;
-
-		// Count illegal characters (including '\r', '\n') to know what size the returned array will be,
-		// so we don't have to reallocate & copy it later.
-		int sepCnt = 0; // Number of separator characters. (Actually illegal characters, but that's a bonus...)
-		for (int i = 0; i < sLen; i++)
-			// If input is "pure" (I.e. no line separators or illegal chars) base64 this loop can be commented out.
-			if (IA[sArr[i] & 0xff] < 0)
-				sepCnt++;
-
-		// Check so that legal chars (including '=') are evenly divideable by 4 as specified in RFC 2045.
-		if ((sLen - sepCnt) % 4 != 0)
-			return null;
-
-		int pad = 0;
-		for (int i = sLen; i > 1 && IA[sArr[--i] & 0xff] <= 0;)
-			if (sArr[i] == '=')
-				pad++;
-
-		int len = ((sLen - sepCnt) * 6 >> 3) - pad;
-
-		byte[] dArr = new byte[len]; // Preallocate byte[] of exact length
-
-		for (int s = 0, d = 0; d < len;)
-		{
-			// Assemble three bytes into an int from four "valid" characters.
-			int i = 0;
-			for (int j = 0; j < 4; j++)
-			{ // j only increased if a valid char was found.
-				int c = IA[sArr[s++] & 0xff];
-				if (c >= 0)
-					i |= c << (18 - j * 6);
-				else
-					j--;
-			}
-
-			// Add the bytes
-			dArr[d++] = (byte) (i >> 16);
-			if (d < len)
-			{
-				dArr[d++] = (byte) (i >> 8);
-				if (d < len)
-					dArr[d++] = (byte) i;
-			}
-		}
-
-		return dArr;
-	}
-
-	/** Decodes a BASE64 encoded byte array that is known to be resonably well formatted. The method is about twice as
-	 * fast as {@link #decode(byte[])}. The preconditions are:<br>
-	 * + The array must have a line length of 76 chars OR no line separators at all (one line).<br>
-	 * + Line separator must be "\r\n", as specified in RFC 2045
-	 * + The array must not contain illegal characters within the encoded string<br>
-	 * + The array CAN have illegal characters at the beginning and end, those will be dealt with appropriately.<br>
-	 * @param sArr The source array. Length 0 will return an empty array. <code>null</code> will throw an exception.
-	 * @return The decoded array of bytes. May be of length 0.
-	 */
-	public final static byte[] decodeFast(byte[] sArr)
-	{
-		// Check special case
-		int sLen = sArr.length;
-		if (sLen == 0)
-			return new byte[0];
-
-		int sIx = 0, eIx = sLen - 1; // Start and end index after trimming.
-
-		// Trim illegal chars from start
-		while (sIx < eIx && IA[sArr[sIx] & 0xff] < 0)
-			sIx++;
-
-		// Trim illegal chars from end
-		while (eIx > 0 && IA[sArr[eIx] & 0xff] < 0)
-			eIx--;
-
-		// get the padding count (=) (0, 1 or 2)
-		int pad = sArr[eIx] == '=' ? (sArr[eIx - 1] == '=' ? 2 : 1) : 0; // Count '=' at end.
-		int cCnt = eIx - sIx + 1; // Content count including possible separators
-		int sepCnt = sLen > 76 ? (sArr[76] == '\r' ? cCnt / 78 : 0) << 1 : 0;
-
-		int len = ((cCnt - sepCnt) * 6 >> 3) - pad; // The number of decoded bytes
-		byte[] dArr = new byte[len]; // Preallocate byte[] of exact length
-
-		// Decode all but the last 0 - 2 bytes.
-		int d = 0;
-		for (int cc = 0, eLen = (len / 3) * 3; d < eLen;)
-		{
-			// Assemble three bytes into an int from four "valid" characters.
-			int i = IA[sArr[sIx++]] << 18 | IA[sArr[sIx++]] << 12
-					| IA[sArr[sIx++]] << 6 | IA[sArr[sIx++]];
-
-			// Add the bytes
-			dArr[d++] = (byte) (i >> 16);
-			dArr[d++] = (byte) (i >> 8);
-			dArr[d++] = (byte) i;
-
-			// If line separator, jump over it.
-			if (sepCnt > 0 && ++cc == 19)
-			{
-				sIx += 2;
-				cc = 0;
-			}
-		}
-
-		if (d < len)
-		{
-			// Decode last 1-3 bytes (incl '=') into 1-3 bytes
-			int i = 0;
-			for (int j = 0; sIx <= eIx - pad; j++)
-				i |= IA[sArr[sIx++]] << (18 - j * 6);
-
-			for (int r = 16; d < len; r -= 8)
-				dArr[d++] = (byte) (i >> r);
-		}
-
-		return dArr;
-	}
-
-	// ****************************************************************************************
-	// * String version
-	// ****************************************************************************************
-
-	/** Encodes a raw byte array into a BASE64 <code>String</code> representation i accordance with RFC 2045.
-	 * @param sArr The bytes to convert. If <code>null</code> or length 0 an empty array will be returned.
-	 * @param lineSep Optional "\r\n" after 76 characters, unless end of file.<br>
-	 * No line separator will be in breach of RFC 2045 which specifies max 76 per line but will be a
-	 * little faster.
-	 * @return A BASE64 encoded array. Never <code>null</code>.
-	 */
-	public final static String encodeToString(byte[] sArr, boolean lineSep)
-	{
-		// Reuse char[] since we can't create a String incrementally anyway and StringBuffer/Builder would be slower.
-		return new String(encodeToChar(sArr, lineSep));
-	}
-
-	/** Decodes a BASE64 encoded <code>String</code>. All illegal characters will be ignored and can handle both strings with
-	 * and without line separators.<br>
-	 * <b>Note!</b> It can be up to about 2x the speed to call <code>decode(str.toCharArray())</code> instead. That
-	 * will create a temporary array though. This version will use <code>str.charAt(i)</code> to iterate the string.
-	 * @param str The source string. <code>null</code> or length 0 will return an empty array.
-	 * @return The decoded array of bytes. May be of length 0. Will be <code>null</code> if the legal characters
-	 * (including '=') isn't divideable by 4.  (I.e. definitely corrupted).
-	 */
-	public final static byte[] decode(String str)
-	{
-		// Check special case
-		int sLen = str != null ? str.length() : 0;
-		if (sLen == 0)
-			return new byte[0];
-
-		// Count illegal characters (including '\r', '\n') to know what size the returned array will be,
-		// so we don't have to reallocate & copy it later.
-		int sepCnt = 0; // Number of separator characters. (Actually illegal characters, but that's a bonus...)
-		for (int i = 0; i < sLen; i++)
-			// If input is "pure" (I.e. no line separators or illegal chars) base64 this loop can be commented out.
-			if (IA[str.charAt(i)] < 0)
-				sepCnt++;
-
-		// Check so that legal chars (including '=') are evenly divideable by 4 as specified in RFC 2045.
-		if ((sLen - sepCnt) % 4 != 0)
-			return null;
-
-		// Count '=' at end
-		int pad = 0;
-		for (int i = sLen; i > 1 && IA[str.charAt(--i)] <= 0;)
-			if (str.charAt(i) == '=')
-				pad++;
-
-		int len = ((sLen - sepCnt) * 6 >> 3) - pad;
-
-		byte[] dArr = new byte[len]; // Preallocate byte[] of exact length
-
-		for (int s = 0, d = 0; d < len;)
-		{
-			// Assemble three bytes into an int from four "valid" characters.
-			int i = 0;
-			for (int j = 0; j < 4; j++)
-			{ // j only increased if a valid char was found.
-				int c = IA[str.charAt(s++)];
-				if (c >= 0)
-					i |= c << (18 - j * 6);
-				else
-					j--;
-			}
-			// Add the bytes
-			dArr[d++] = (byte) (i >> 16);
-			if (d < len)
-			{
-				dArr[d++] = (byte) (i >> 8);
-				if (d < len)
-					dArr[d++] = (byte) i;
-			}
-		}
-		return dArr;
-	}
-
-	/** Decodes a BASE64 encoded string that is known to be resonably well formatted. The method is about twice as
-	 * fast as {@link #decode(String)}. The preconditions are:<br>
-	 * + The array must have a line length of 76 chars OR no line separators at all (one line).<br>
-	 * + Line separator must be "\r\n", as specified in RFC 2045
-	 * + The array must not contain illegal characters within the encoded string<br>
-	 * + The array CAN have illegal characters at the beginning and end, those will be dealt with appropriately.<br>
-	 * @param s The source string. Length 0 will return an empty array. <code>null</code> will throw an exception.
-	 * @return The decoded array of bytes. May be of length 0.
-	 */
-	public final static byte[] decodeFast(String s)
-	{
-		// Check special case
-		int sLen = s.length();
-		if (sLen == 0)
-			return new byte[0];
-
-		int sIx = 0, eIx = sLen - 1; // Start and end index after trimming.
-
-		// Trim illegal chars from start
-		while (sIx < eIx && IA[s.charAt(sIx) & 0xff] < 0)
-			sIx++;
-
-		// Trim illegal chars from end
-		while (eIx > 0 && IA[s.charAt(eIx) & 0xff] < 0)
-			eIx--;
-
-		// get the padding count (=) (0, 1 or 2)
-		int pad = s.charAt(eIx) == '=' ? (s.charAt(eIx - 1) == '=' ? 2 : 1) : 0; // Count '=' at end.
-		int cCnt = eIx - sIx + 1; // Content count including possible separators
-		int sepCnt = sLen > 76 ? (s.charAt(76) == '\r' ? cCnt / 78 : 0) << 1
-				: 0;
-
-		int len = ((cCnt - sepCnt) * 6 >> 3) - pad; // The number of decoded bytes
-		byte[] dArr = new byte[len]; // Preallocate byte[] of exact length
-
-		// Decode all but the last 0 - 2 bytes.
-		int d = 0;
-		for (int cc = 0, eLen = (len / 3) * 3; d < eLen;)
-		{
-			// Assemble three bytes into an int from four "valid" characters.
-			int i = IA[s.charAt(sIx++)] << 18 | IA[s.charAt(sIx++)] << 12
-					| IA[s.charAt(sIx++)] << 6 | IA[s.charAt(sIx++)];
-
-			// Add the bytes
-			dArr[d++] = (byte) (i >> 16);
-			dArr[d++] = (byte) (i >> 8);
-			dArr[d++] = (byte) i;
-
-			// If line separator, jump over it.
-			if (sepCnt > 0 && ++cc == 19)
-			{
-				sIx += 2;
-				cc = 0;
-			}
-		}
-
-		if (d < len)
-		{
-			// Decode last 1-3 bytes (incl '=') into 1-3 bytes
-			int i = 0;
-			for (int j = 0; sIx <= eIx - pad; j++)
-				i |= IA[s.charAt(sIx++)] << (18 - j * 6);
-
-			for (int r = 16; d < len; r -= 8)
-				dArr[d++] = (byte) (i >> r);
-		}
-
-		return dArr;
-	}
-}
diff --git a/src/com/mxgraph/io/gliffy/importer/ArrowMapping.java b/src/main/java/com/mxgraph/io/gliffy/importer/ArrowMapping.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/ArrowMapping.java
rename to src/main/java/com/mxgraph/io/gliffy/importer/ArrowMapping.java
diff --git a/src/com/mxgraph/io/gliffy/importer/DashStyleMapping.java b/src/main/java/com/mxgraph/io/gliffy/importer/DashStyleMapping.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/DashStyleMapping.java
rename to src/main/java/com/mxgraph/io/gliffy/importer/DashStyleMapping.java
diff --git a/src/com/mxgraph/io/gliffy/importer/GliffyDiagramConverter.java b/src/main/java/com/mxgraph/io/gliffy/importer/GliffyDiagramConverter.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/GliffyDiagramConverter.java
rename to src/main/java/com/mxgraph/io/gliffy/importer/GliffyDiagramConverter.java
diff --git a/src/com/mxgraph/io/gliffy/importer/LineMapping.java b/src/main/java/com/mxgraph/io/gliffy/importer/LineMapping.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/LineMapping.java
rename to src/main/java/com/mxgraph/io/gliffy/importer/LineMapping.java
diff --git a/src/com/mxgraph/io/gliffy/importer/PostDeserializer.java b/src/main/java/com/mxgraph/io/gliffy/importer/PostDeserializer.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/PostDeserializer.java
rename to src/main/java/com/mxgraph/io/gliffy/importer/PostDeserializer.java
diff --git a/src/com/mxgraph/io/gliffy/importer/StencilTranslator.java b/src/main/java/com/mxgraph/io/gliffy/importer/StencilTranslator.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/StencilTranslator.java
rename to src/main/java/com/mxgraph/io/gliffy/importer/StencilTranslator.java
diff --git a/src/com/mxgraph/io/gliffy/importer/gliffyTranslation.properties b/src/main/java/com/mxgraph/io/gliffy/importer/gliffyTranslation.properties
similarity index 100%
rename from src/com/mxgraph/io/gliffy/importer/gliffyTranslation.properties
rename to src/main/java/com/mxgraph/io/gliffy/importer/gliffyTranslation.properties
diff --git a/src/com/mxgraph/io/gliffy/model/Constraint.java b/src/main/java/com/mxgraph/io/gliffy/model/Constraint.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/Constraint.java
rename to src/main/java/com/mxgraph/io/gliffy/model/Constraint.java
diff --git a/src/com/mxgraph/io/gliffy/model/Constraints.java b/src/main/java/com/mxgraph/io/gliffy/model/Constraints.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/Constraints.java
rename to src/main/java/com/mxgraph/io/gliffy/model/Constraints.java
diff --git a/src/com/mxgraph/io/gliffy/model/Diagram.java b/src/main/java/com/mxgraph/io/gliffy/model/Diagram.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/Diagram.java
rename to src/main/java/com/mxgraph/io/gliffy/model/Diagram.java
diff --git a/src/com/mxgraph/io/gliffy/model/EmbeddedResources.java b/src/main/java/com/mxgraph/io/gliffy/model/EmbeddedResources.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/EmbeddedResources.java
rename to src/main/java/com/mxgraph/io/gliffy/model/EmbeddedResources.java
diff --git a/src/com/mxgraph/io/gliffy/model/GliffyObject.java b/src/main/java/com/mxgraph/io/gliffy/model/GliffyObject.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/GliffyObject.java
rename to src/main/java/com/mxgraph/io/gliffy/model/GliffyObject.java
diff --git a/src/com/mxgraph/io/gliffy/model/GliffyText.java b/src/main/java/com/mxgraph/io/gliffy/model/GliffyText.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/GliffyText.java
rename to src/main/java/com/mxgraph/io/gliffy/model/GliffyText.java
diff --git a/src/com/mxgraph/io/gliffy/model/Graphic.java b/src/main/java/com/mxgraph/io/gliffy/model/Graphic.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/Graphic.java
rename to src/main/java/com/mxgraph/io/gliffy/model/Graphic.java
diff --git a/src/com/mxgraph/io/gliffy/model/Metadata.java b/src/main/java/com/mxgraph/io/gliffy/model/Metadata.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/Metadata.java
rename to src/main/java/com/mxgraph/io/gliffy/model/Metadata.java
diff --git a/src/com/mxgraph/io/gliffy/model/Stage.java b/src/main/java/com/mxgraph/io/gliffy/model/Stage.java
similarity index 100%
rename from src/com/mxgraph/io/gliffy/model/Stage.java
rename to src/main/java/com/mxgraph/io/gliffy/model/Stage.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlConstants.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlConstants.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlConstants.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlConstants.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlData.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlData.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlData.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlData.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlEdge.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlEdge.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlEdge.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlEdge.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlGraph.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlGraph.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlGraph.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlGraph.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlKey.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlKey.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlKey.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlKey.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlKeyManager.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlKeyManager.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlKeyManager.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlKeyManager.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlNode.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlNode.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlNode.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlNode.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlPort.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlPort.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlPort.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlPort.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlShapeEdge.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlShapeEdge.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlShapeEdge.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlShapeEdge.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlShapeNode.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlShapeNode.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlShapeNode.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlShapeNode.java
diff --git a/src/com/mxgraph/io/graphml/mxGraphMlUtils.java b/src/main/java/com/mxgraph/io/graphml/mxGraphMlUtils.java
similarity index 100%
rename from src/com/mxgraph/io/graphml/mxGraphMlUtils.java
rename to src/main/java/com/mxgraph/io/graphml/mxGraphMlUtils.java
diff --git a/src/com/mxgraph/io/mxGraphMlCodec.java b/src/main/java/com/mxgraph/io/mxGraphMlCodec.java
similarity index 100%
rename from src/com/mxgraph/io/mxGraphMlCodec.java
rename to src/main/java/com/mxgraph/io/mxGraphMlCodec.java
diff --git a/src/com/mxgraph/io/mxVsdxCodec.java b/src/main/java/com/mxgraph/io/mxVsdxCodec.java
similarity index 100%
rename from src/com/mxgraph/io/mxVsdxCodec.java
rename to src/main/java/com/mxgraph/io/mxVsdxCodec.java
diff --git a/src/com/mxgraph/io/mxVssxCodec.java b/src/main/java/com/mxgraph/io/mxVssxCodec.java
similarity index 100%
rename from src/com/mxgraph/io/mxVssxCodec.java
rename to src/main/java/com/mxgraph/io/mxVssxCodec.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Paragraph.java b/src/main/java/com/mxgraph/io/vsdx/Paragraph.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Paragraph.java
rename to src/main/java/com/mxgraph/io/vsdx/Paragraph.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Section.java b/src/main/java/com/mxgraph/io/vsdx/Section.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Section.java
rename to src/main/java/com/mxgraph/io/vsdx/Section.java
diff --git a/src/com/mxgraph/io/vsdx/Shape.java b/src/main/java/com/mxgraph/io/vsdx/Shape.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/Shape.java
rename to src/main/java/com/mxgraph/io/vsdx/Shape.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/ShapePageId.java b/src/main/java/com/mxgraph/io/vsdx/ShapePageId.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/ShapePageId.java
rename to src/main/java/com/mxgraph/io/vsdx/ShapePageId.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Style.java b/src/main/java/com/mxgraph/io/vsdx/Style.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/Style.java
rename to src/main/java/com/mxgraph/io/vsdx/Style.java
diff --git a/src/com/mxgraph/io/vsdx/VsdxShape.java b/src/main/java/com/mxgraph/io/vsdx/VsdxShape.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/VsdxShape.java
rename to src/main/java/com/mxgraph/io/vsdx/VsdxShape.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/ArcTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/ArcTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/ArcTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/ArcTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/DelRow.java b/src/main/java/com/mxgraph/io/vsdx/geometry/DelRow.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/DelRow.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/DelRow.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/Ellipse.java b/src/main/java/com/mxgraph/io/vsdx/geometry/Ellipse.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/Ellipse.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/Ellipse.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/EllipticalArcTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/InfiniteLine.java b/src/main/java/com/mxgraph/io/vsdx/geometry/InfiniteLine.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/InfiniteLine.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/InfiniteLine.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/LineTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/LineTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/LineTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/LineTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/MoveTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/MoveTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/MoveTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/MoveTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/NURBSTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/NURBSTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/NURBSTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/NURBSTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/PolylineTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/PolylineTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/PolylineTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/PolylineTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/RelCubBezTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/RelEllipticalArcTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/RelLineTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/RelLineTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/RelLineTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/RelLineTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/RelMoveTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/RelMoveTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/RelMoveTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/RelMoveTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java b/src/main/java/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/RelQuadBezTo.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/Row.java b/src/main/java/com/mxgraph/io/vsdx/geometry/Row.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/Row.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/Row.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RowFactory.java b/src/main/java/com/mxgraph/io/vsdx/geometry/RowFactory.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/geometry/RowFactory.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/RowFactory.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/SplineKnot.java b/src/main/java/com/mxgraph/io/vsdx/geometry/SplineKnot.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/SplineKnot.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/SplineKnot.java
diff --git a/src/com/mxgraph/io/vsdx/geometry/SplineStart.java b/src/main/java/com/mxgraph/io/vsdx/geometry/SplineStart.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/geometry/SplineStart.java
rename to src/main/java/com/mxgraph/io/vsdx/geometry/SplineStart.java
diff --git a/src/com/mxgraph/io/vsdx/mxPathDebug.java b/src/main/java/com/mxgraph/io/vsdx/mxPathDebug.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/mxPathDebug.java
rename to src/main/java/com/mxgraph/io/vsdx/mxPathDebug.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxPropertiesManager.java b/src/main/java/com/mxgraph/io/vsdx/mxPropertiesManager.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxPropertiesManager.java
rename to src/main/java/com/mxgraph/io/vsdx/mxPropertiesManager.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxConnect.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxConnect.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxConnect.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxConnect.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxConstants.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxConstants.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxConstants.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxConstants.java
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxGeometry.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometry.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/mxVsdxGeometry.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometry.java
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxGeometryList.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometryList.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/mxVsdxGeometryList.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxGeometryList.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxMaster.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxMaster.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxMaster.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxMaster.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxModel.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxModel.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxModel.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxModel.java
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxPage.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxPage.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/mxVsdxPage.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxPage.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxTheme.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxTheme.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/mxVsdxTheme.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxTheme.java
diff --git a/src/com/mxgraph/io/vsdx/mxVsdxUtils.java b/src/main/java/com/mxgraph/io/vsdx/mxVsdxUtils.java
similarity index 100%
rename from src/com/mxgraph/io/vsdx/mxVsdxUtils.java
rename to src/main/java/com/mxgraph/io/vsdx/mxVsdxUtils.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/resources/edgeNameU.properties b/src/main/java/com/mxgraph/io/vsdx/resources/edgeNameU.properties
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/resources/edgeNameU.properties
rename to src/main/java/com/mxgraph/io/vsdx/resources/edgeNameU.properties
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/resources/nameU.properties b/src/main/java/com/mxgraph/io/vsdx/resources/nameU.properties
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/resources/nameU.properties
rename to src/main/java/com/mxgraph/io/vsdx/resources/nameU.properties
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/resources/nameU.tmp b/src/main/java/com/mxgraph/io/vsdx/resources/nameU.tmp
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/resources/nameU.tmp
rename to src/main/java/com/mxgraph/io/vsdx/resources/nameU.tmp
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/Color.java b/src/main/java/com/mxgraph/io/vsdx/theme/Color.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/Color.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/Color.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/FillStyle.java b/src/main/java/com/mxgraph/io/vsdx/theme/FillStyle.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/FillStyle.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/FillStyle.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/FillStyleFactory.java b/src/main/java/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/FillStyleFactory.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/GradFill.java b/src/main/java/com/mxgraph/io/vsdx/theme/GradFill.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/GradFill.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/GradFill.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/HSLColor.java b/src/main/java/com/mxgraph/io/vsdx/theme/HSLColor.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/HSLColor.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/HSLColor.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/HSVColor.java b/src/main/java/com/mxgraph/io/vsdx/theme/HSVColor.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/HSVColor.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/HSVColor.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/HslClr.java b/src/main/java/com/mxgraph/io/vsdx/theme/HslClr.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/HslClr.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/HslClr.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/LineStyle.java b/src/main/java/com/mxgraph/io/vsdx/theme/LineStyle.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/LineStyle.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/LineStyle.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/LineStyleExt.java b/src/main/java/com/mxgraph/io/vsdx/theme/LineStyleExt.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/LineStyleExt.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/LineStyleExt.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/NoFillStyle.java b/src/main/java/com/mxgraph/io/vsdx/theme/NoFillStyle.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/NoFillStyle.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/NoFillStyle.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColor.java b/src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColor.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColor.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColor.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java b/src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/OoxmlColorFactory.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/PrstClr.java b/src/main/java/com/mxgraph/io/vsdx/theme/PrstClr.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/PrstClr.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/PrstClr.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/QuickStyleVals.java b/src/main/java/com/mxgraph/io/vsdx/theme/QuickStyleVals.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/QuickStyleVals.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/QuickStyleVals.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SchemeClr.java b/src/main/java/com/mxgraph/io/vsdx/theme/SchemeClr.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SchemeClr.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/SchemeClr.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/ScrgbClr.java b/src/main/java/com/mxgraph/io/vsdx/theme/ScrgbClr.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/ScrgbClr.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/ScrgbClr.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SolidFillStyle.java b/src/main/java/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/SolidFillStyle.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SrgbClr.java b/src/main/java/com/mxgraph/io/vsdx/theme/SrgbClr.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SrgbClr.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/SrgbClr.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SysClr.java b/src/main/java/com/mxgraph/io/vsdx/theme/SysClr.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/io/vsdx/theme/SysClr.java
rename to src/main/java/com/mxgraph/io/vsdx/theme/SysClr.java
diff --git a/src/com/mxgraph/online/AppShortcutServlet.java b/src/main/java/com/mxgraph/online/AppShortcutServlet.java
similarity index 100%
rename from src/com/mxgraph/online/AppShortcutServlet.java
rename to src/main/java/com/mxgraph/online/AppShortcutServlet.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/online/Constants.java b/src/main/java/com/mxgraph/online/Constants.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/online/Constants.java
rename to src/main/java/com/mxgraph/online/Constants.java
diff --git a/src/com/mxgraph/online/EmbedServlet2.java b/src/main/java/com/mxgraph/online/EmbedServlet2.java
similarity index 100%
rename from src/com/mxgraph/online/EmbedServlet2.java
rename to src/main/java/com/mxgraph/online/EmbedServlet2.java
diff --git a/src/com/mxgraph/online/GitHubServlet.java b/src/main/java/com/mxgraph/online/GitHubServlet.java
similarity index 100%
rename from src/com/mxgraph/online/GitHubServlet.java
rename to src/main/java/com/mxgraph/online/GitHubServlet.java
diff --git a/src/com/mxgraph/online/GoogleGadgetServlet.java b/src/main/java/com/mxgraph/online/GoogleGadgetServlet.java
similarity index 100%
rename from src/com/mxgraph/online/GoogleGadgetServlet.java
rename to src/main/java/com/mxgraph/online/GoogleGadgetServlet.java
diff --git a/src/com/mxgraph/online/ImgurRedirectServlet.java b/src/main/java/com/mxgraph/online/ImgurRedirectServlet.java
similarity index 100%
rename from src/com/mxgraph/online/ImgurRedirectServlet.java
rename to src/main/java/com/mxgraph/online/ImgurRedirectServlet.java
diff --git a/src/com/mxgraph/online/ImportServlet.java b/src/main/java/com/mxgraph/online/ImportServlet.java
similarity index 100%
rename from src/com/mxgraph/online/ImportServlet.java
rename to src/main/java/com/mxgraph/online/ImportServlet.java
diff --git a/src/com/mxgraph/online/LogServlet.java b/src/main/java/com/mxgraph/online/LogServlet.java
similarity index 100%
rename from src/com/mxgraph/online/LogServlet.java
rename to src/main/java/com/mxgraph/online/LogServlet.java
diff --git a/src/com/mxgraph/online/OpenServlet.java b/src/main/java/com/mxgraph/online/OpenServlet.java
similarity index 100%
rename from src/com/mxgraph/online/OpenServlet.java
rename to src/main/java/com/mxgraph/online/OpenServlet.java
diff --git a/src/com/mxgraph/online/ProxyServlet.java b/src/main/java/com/mxgraph/online/ProxyServlet.java
similarity index 100%
rename from src/com/mxgraph/online/ProxyServlet.java
rename to src/main/java/com/mxgraph/online/ProxyServlet.java
diff --git a/src/com/mxgraph/online/SaveServlet.java b/src/main/java/com/mxgraph/online/SaveServlet.java
similarity index 100%
rename from src/com/mxgraph/online/SaveServlet.java
rename to src/main/java/com/mxgraph/online/SaveServlet.java
diff --git a/src/com/mxgraph/online/Utils.java b/src/main/java/com/mxgraph/online/Utils.java
similarity index 100%
rename from src/com/mxgraph/online/Utils.java
rename to src/main/java/com/mxgraph/online/Utils.java
diff --git a/etc/vsdxJava2JS/src/main/java/com/mxgraph/online/mxBase64.java b/src/main/java/com/mxgraph/online/mxBase64.java
similarity index 100%
rename from etc/vsdxJava2JS/src/main/java/com/mxgraph/online/mxBase64.java
rename to src/main/java/com/mxgraph/online/mxBase64.java
diff --git a/src/com/mxgraph/view/mxGraphHeadless.java b/src/main/java/com/mxgraph/view/mxGraphHeadless.java
similarity index 100%
rename from src/com/mxgraph/view/mxGraphHeadless.java
rename to src/main/java/com/mxgraph/view/mxGraphHeadless.java
diff --git a/src/log4j.properties b/src/main/java/log4j.properties
similarity index 100%
rename from src/log4j.properties
rename to src/main/java/log4j.properties
diff --git a/war/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF
similarity index 100%
rename from war/META-INF/MANIFEST.MF
rename to src/main/webapp/META-INF/MANIFEST.MF
diff --git a/src/main/webapp/WEB-INF/appengine-web.xml b/src/main/webapp/WEB-INF/appengine-web.xml
new file mode 100644
index 0000000000000000000000000000000000000000..745206f83950e1782185e40140439c86789d3ccd
--- /dev/null
+++ b/src/main/webapp/WEB-INF/appengine-web.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
+
+  <threadsafe>true</threadsafe>
+  <sessions-enabled>false</sessions-enabled>
+  <runtime>java8</runtime>
+
+  <!-- Configure java.util.logging -->
+  <system-properties>
+    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
+  </system-properties>
+
+  <!-- Path patterns not supported in production -->
+  <static-files>
+    <include path="/**">
+	  <http-header name="Access-Control-Allow-Origin" value="*"/>
+	</include>
+  </static-files>
+
+  <instance-class>F2</instance-class>
+  <automatic-scaling>
+    <min-idle-instances>1</min-idle-instances>
+    <max-idle-instances>1</max-idle-instances>
+  </automatic-scaling>
+</appengine-web-app>
diff --git a/war/WEB-INF/github_client_secret b/src/main/webapp/WEB-INF/github_client_secret
similarity index 100%
rename from war/WEB-INF/github_client_secret
rename to src/main/webapp/WEB-INF/github_client_secret
diff --git a/war/WEB-INF/github_dev_client_secret b/src/main/webapp/WEB-INF/github_dev_client_secret
similarity index 100%
rename from war/WEB-INF/github_dev_client_secret
rename to src/main/webapp/WEB-INF/github_dev_client_secret
diff --git a/war/WEB-INF/iconfinder_client_id b/src/main/webapp/WEB-INF/iconfinder_client_id
similarity index 100%
rename from war/WEB-INF/iconfinder_client_id
rename to src/main/webapp/WEB-INF/iconfinder_client_id
diff --git a/war/WEB-INF/iconfinder_client_secret b/src/main/webapp/WEB-INF/iconfinder_client_secret
similarity index 100%
rename from war/WEB-INF/iconfinder_client_secret
rename to src/main/webapp/WEB-INF/iconfinder_client_secret
diff --git a/war/WEB-INF/iconfinder_key b/src/main/webapp/WEB-INF/iconfinder_key
similarity index 100%
rename from war/WEB-INF/iconfinder_key
rename to src/main/webapp/WEB-INF/iconfinder_key
diff --git a/etc/build/jars/commons-codec-1.10.jar b/src/main/webapp/WEB-INF/lib/commons-codec-1.10.jar
similarity index 100%
rename from etc/build/jars/commons-codec-1.10.jar
rename to src/main/webapp/WEB-INF/lib/commons-codec-1.10.jar
diff --git a/etc/build/jars/commons-fileupload-1.3.2.jar b/src/main/webapp/WEB-INF/lib/commons-fileupload-1.3.2.jar
similarity index 100%
rename from etc/build/jars/commons-fileupload-1.3.2.jar
rename to src/main/webapp/WEB-INF/lib/commons-fileupload-1.3.2.jar
diff --git a/war/WEB-INF/lib/commons-io-2.4.jar b/src/main/webapp/WEB-INF/lib/commons-io-2.4.jar
similarity index 100%
rename from war/WEB-INF/lib/commons-io-2.4.jar
rename to src/main/webapp/WEB-INF/lib/commons-io-2.4.jar
diff --git a/etc/build/jars/commons-lang3-3.5.jar b/src/main/webapp/WEB-INF/lib/commons-lang3-3.5.jar
similarity index 100%
rename from etc/build/jars/commons-lang3-3.5.jar
rename to src/main/webapp/WEB-INF/lib/commons-lang3-3.5.jar
diff --git a/etc/build/jars/gae-stub-1.0.1.jar b/src/main/webapp/WEB-INF/lib/gae-stub-1.0.1.jar
similarity index 100%
rename from etc/build/jars/gae-stub-1.0.1.jar
rename to src/main/webapp/WEB-INF/lib/gae-stub-1.0.1.jar
diff --git a/etc/build/jars/gson-2.7.jar b/src/main/webapp/WEB-INF/lib/gson-2.7.jar
similarity index 100%
rename from etc/build/jars/gson-2.7.jar
rename to src/main/webapp/WEB-INF/lib/gson-2.7.jar
diff --git a/src/main/webapp/WEB-INF/lib/jstl-1.2.jar b/src/main/webapp/WEB-INF/lib/jstl-1.2.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0fd275e94660402f80f01505d28b90a23f7e0209
Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/jstl-1.2.jar differ
diff --git a/war/WEB-INF/lib/mxgraph-core.jar b/src/main/webapp/WEB-INF/lib/mxgraph-core.jar
similarity index 100%
rename from war/WEB-INF/lib/mxgraph-core.jar
rename to src/main/webapp/WEB-INF/lib/mxgraph-core.jar
diff --git a/etc/build/jars/servlet-api.jar b/src/main/webapp/WEB-INF/lib/servlet-api.jar
similarity index 100%
rename from etc/build/jars/servlet-api.jar
rename to src/main/webapp/WEB-INF/lib/servlet-api.jar
diff --git a/src/main/webapp/WEB-INF/logging.properties b/src/main/webapp/WEB-INF/logging.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a3fb34f70dcb06d1f7f0240e69e30feba4e34431
--- /dev/null
+++ b/src/main/webapp/WEB-INF/logging.properties
@@ -0,0 +1,2 @@
+# Set the default logging level for all loggers to WARNING
+.level = CONFIG
diff --git a/war/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
similarity index 88%
rename from war/WEB-INF/web.xml
rename to src/main/webapp/WEB-INF/web.xml
index 02db62c29e439e82def649826ed0579c9581778e..b8b8f28a4672c55f046c39a44bb9d999882ec775 100644
--- a/war/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -1,5 +1,8 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="WebApp_ID" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
-  <display-name>mxgraph_com</display-name>
+<?xml version="1.0" encoding="utf-8"?>
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+         version="3.1">
   <welcome-file-list>
     <welcome-file>index.html</welcome-file>
   </welcome-file-list>
@@ -181,16 +184,4 @@
     <extension>manifest</extension>
     <mime-type>text/cache-manifest</mime-type>
   </mime-mapping>
- <servlet>
- <servlet-name>SystemServiceServlet</servlet-name>
-   <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
-   <init-param>
-     <param-name>services</param-name>
-     <param-value/>
-   </init-param>
- </servlet>
- <servlet-mapping>
-   <servlet-name>SystemServiceServlet</servlet-name>
-   <url-pattern>/_ah/spi/*</url-pattern>
- </servlet-mapping>
 </web-app>
\ No newline at end of file
diff --git a/war/about.html b/src/main/webapp/about.html
similarity index 100%
rename from war/about.html
rename to src/main/webapp/about.html
diff --git a/war/app.html b/src/main/webapp/app.html
similarity index 100%
rename from war/app.html
rename to src/main/webapp/app.html
diff --git a/war/cache.manifest b/src/main/webapp/cache.manifest
similarity index 99%
rename from war/cache.manifest
rename to src/main/webapp/cache.manifest
index e9d611de50d254b47fb2d41816a2520e6825524a..599e5b0871c5d10bcac0e705427efa3873bfb545 100644
--- a/war/cache.manifest
+++ b/src/main/webapp/cache.manifest
@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 01/16/2018 01:58 PM
+# 01/17/2018 05:49 PM
 
 app.html
 index.html?offline=1
@@ -27,10 +27,6 @@ mxgraph/images/button.gif
 mxgraph/images/point.gif
 mxgraph/images/transparent.gif
 resources/dia.txt
-styles/default.xml
-styles/dark-default.xml
-styles/default-old.xml
-img/clipart/Gear_128x128.png
 images/delete.png
 images/droptarget.png
 images/edit.gif
@@ -57,6 +53,7 @@ images/glyphicons_github.png
 images/arrow.gif
 images/hs.png
 images/cross.gif
+img/clipart/Gear_128x128.png
 img/clipart/Battery_0_128x128.png
 img/clipart/Battery_100_128x128.png
 img/clipart/Battery_50_128x128.png
diff --git a/src/main/webapp/connect/bitbucket/connect-dev.json b/src/main/webapp/connect/bitbucket/connect-dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..b339020ca54a499428cb9b85a009594f21537667
--- /dev/null
+++ b/src/main/webapp/connect/bitbucket/connect-dev.json
@@ -0,0 +1,29 @@
+{
+  "key": "com.mxgraph.bitbucket.plugins.diagramly",
+  "name": "Draw.io Viewer",
+  "description": "Viewer for files created with draw.io",
+  "baseUrl": "https://8d3077df.ngrok.io",
+  "modules": {
+    "fileViews": [
+      {
+        "key": "diagram",
+        "name": {
+          "value": "Diagram"
+        },
+        "url": "/viewer.html?repo={repo_uuid}&cset={file_cset}&path={file_path}&name={file_name}",
+        "file_matches": {
+        	"extensions": ["xml"]
+        }
+      }
+    ],
+    "oauthConsumer": {
+      "clientId": "Ss8dQHwm4RaeMqCaak"
+    }
+  },
+  "scopes": [
+    "repository"
+  ],
+  "contexts": [
+    "personal"
+  ]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/bitbucket/viewer.html b/src/main/webapp/connect/bitbucket/viewer.html
new file mode 100644
index 0000000000000000000000000000000000000000..4657288f7b2365b55118e5288e315cc01aa61253
--- /dev/null
+++ b/src/main/webapp/connect/bitbucket/viewer.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io Viewer</title>
+<script src="https://bitbucket.org/atlassian-connect/all.js"></script>
+<style type="text/css">
+html, body {
+	height:100%;
+	overflow:hidden;
+}
+body {
+	background-color:#ffffff;
+	background-image:url(/images/logo-flat.png);
+	background-repeat:no-repeat;
+	background-position:center;
+	font-family:Arial,sans-serif;
+	width:100%;
+	margin:0;
+}
+</style>
+</head>
+<body>
+<script type="text/javascript">
+// Parses URL parameters
+function getUrlParam(param)
+{
+	var result = (new RegExp(param + '=([^&]*)')).exec(window.location.search);
+	
+	if (result != null && result.length > 0)
+	{
+		return decodeURIComponent(result[1].replace(/\+/g, '%20'))
+	}
+	
+	return null;
+};
+
+// Sets global environment variables
+RESOURCE_BASE = '/resources/dia';
+STENCIL_PATH = '/stencils';
+SHAPES_PATH = '/shapes';
+
+// Overrides browser language with Confluence user language
+var lang = getUrlParam('loc');
+
+// Language is in the Connect URL
+if (lang != null)
+{
+	var dash = lang.indexOf('-');
+	
+	if (dash >= 0)
+	{
+		mxLanguage = lang.substring(0, dash);
+	}
+}
+</script>
+<script type="text/javascript" src="/js/viewer.min.js"></script>
+<script type="text/javascript">
+(function()
+{
+	// Enables dynamic loading of shapes and stencils (same domain)
+	mxStencilRegistry.dynamicLoading = true;
+
+	var srcRawUrl = '/1.0/repositories/{}/' + RBR.queryParam('repo') +
+    	'/raw/' + RBR.queryParam('cset') +
+    	'/' + RBR.queryParam('path');  
+
+	var tbHeight = GraphViewer.prototype.toolbarHeight;
+	var border = 8;
+
+	document.body.style.backgroundImage = 'url(/images/ajax-loader.gif)';
+
+	function main()
+	{
+		AP.require(['request'], function(request)
+		{
+			request(
+			{
+				url: srcRawUrl,
+				responseType: 'text/plain',
+			    success: function (xml)
+			    {                
+					
+					// LATER: Fix horizontal alignment ignored with 100% width of iframe
+					// LATER: Fix page scrolling on touch device if trigger event on diagram
+					// LATER: Hide toolbar after second container click for iOS
+					// LATER: Disable responsive resize while lightbox shows
+					var container = document.createElement('div');
+					container.style.cssText = 'position:absolute;box-sizing:border-box;' +
+						'max-width:100%;margin-bottom:' + tbHeight +'px;border:1px solid transparent;';
+					document.body.appendChild(container);
+					var doc = mxUtils.parseXml(xml);
+					
+					var viewer = new GraphViewer(container, doc.documentElement,
+						{highlight: '#3572b0', 'toolbar-position': 'top', nav: true,
+						'max-height': screen.height / 1.5,
+						toolbar: 'zoom layers lightbox', title: name, border: border});
+
+					// Handles resize of iframe after zoom
+					var graphDoResizeContainer = viewer.graph.doResizeContainer;
+					
+					function updateHeight()
+					{
+						AP.resize('100%', container.offsetHeight + tbHeight);
+					}
+					
+					viewer.graph.doResizeContainer = function(width, height)
+					{
+						graphDoResizeContainer.apply(this, arguments);
+						updateHeight();
+					};
+
+					// Updates the size of the iframe in responsive cases
+					viewer.updateContainerHeight = function(container, height)
+					{
+						updateHeight();
+					};
+					
+					updateHeight();
+					
+					viewer.showLightbox = function()
+					{
+		                dialog.create(
+		                {
+		                    header: name,
+		                	key: 'lightbox',
+		                    size: 'fullscreen',
+		                    customData: {id: id, name: name},
+		                    chrome: true
+		                });
+					};
+					
+					
+			    },
+			    error: function(err)
+			    {
+					document.body.innerHTML = 'Failed to load source file from Bitbucket. (' +
+						JSON.stringify(err) + ')';
+			    }
+			});
+			
+		});
+	};
+	
+	mxResources.loadDefaultBundle = false;
+	var bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) ||
+		mxResources.getSpecialBundle(RESOURCE_BASE, mxLanguage);
+
+	// Prefetches asynchronous requests so that below code runs synchronous
+	// Loading the correct bundle (one file) via the fallback system in mxResources. The stylesheet
+	// is compiled into JS in the build process and is only needed for local development.
+	var bundleLoaded = false;
+	var scriptLoaded = false;
+	var validSize = document.documentElement.offsetWidth > 0;
+
+	function mainBarrier()
+	{
+		if (validSize && bundleLoaded && scriptLoaded)
+		{
+			main();
+		}
+	};
+	
+	// Workaround for collapsed side panel is to delay main until size is not 0
+	if (!validSize)
+	{
+		var listener = function()
+		{
+			if (document.documentElement.offsetWidth > 0)
+			{
+				window.removeEventListener('resize', listener);
+				validSize = true;
+				mainBarrier();
+			}
+		};
+		
+		window.addEventListener('resize', listener);
+	}
+	
+	mxUtils.getAll([bundle], function(xhr)
+	{
+		// Adds bundle text to resources
+		mxResources.parse(xhr[0].getText());
+		bundleLoaded = true;
+		mainBarrier();
+	});
+
+	script.onload = function()
+	{
+		scriptLoaded = true;
+		mainBarrier();
+	};
+
+	script.src = baseUrl + '/atlassian-connect/all.js';
+	script.setAttribute('data-options', 'sizeToParent:true;');
+	document.getElementsByTagName('head')[0].appendChild(script);
+})();
+</script>
+</body>
+</html>
diff --git a/src/main/webapp/connect/common/images/reader/checkmark.gif b/src/main/webapp/connect/common/images/reader/checkmark.gif
new file mode 100644
index 0000000000000000000000000000000000000000..3a40c089dca161df6fca4a63bd7b4d47f8b5bb3f
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/checkmark.gif differ
diff --git a/src/main/webapp/connect/common/images/reader/closeLargeView.gif b/src/main/webapp/connect/common/images/reader/closeLargeView.gif
new file mode 100644
index 0000000000000000000000000000000000000000..877e12819ab07028e5c79473f4a1d7e754464e50
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/closeLargeView.gif differ
diff --git a/src/main/webapp/connect/common/images/reader/edit.png b/src/main/webapp/connect/common/images/reader/edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..84adb14a6e854c76b9a74b7757ef8b9e3bf741da
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/edit.png differ
diff --git a/war/images/grid.gif b/src/main/webapp/connect/common/images/reader/grid.gif
similarity index 100%
rename from war/images/grid.gif
rename to src/main/webapp/connect/common/images/reader/grid.gif
diff --git a/src/main/webapp/connect/common/images/reader/largeView.png b/src/main/webapp/connect/common/images/reader/largeView.png
new file mode 100644
index 0000000000000000000000000000000000000000..12ffe3874daca681c4a2208a2fb76ead1bae1ef5
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/largeView.png differ
diff --git a/src/main/webapp/connect/common/images/reader/remove.png b/src/main/webapp/connect/common/images/reader/remove.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fda004073649022c7d97af685c2e72d6749f9c7
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/remove.png differ
diff --git a/src/main/webapp/connect/common/images/reader/zoomActual.png b/src/main/webapp/connect/common/images/reader/zoomActual.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ef23dccd806cc71844493c4a07c1f3e13623f63
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/zoomActual.png differ
diff --git a/src/main/webapp/connect/common/images/reader/zoomFit.gif b/src/main/webapp/connect/common/images/reader/zoomFit.gif
new file mode 100644
index 0000000000000000000000000000000000000000..fbf42f77e6ccd7892ff54f0999c330eea4695c66
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/zoomFit.gif differ
diff --git a/src/main/webapp/connect/common/images/reader/zoomIn.gif b/src/main/webapp/connect/common/images/reader/zoomIn.gif
new file mode 100644
index 0000000000000000000000000000000000000000..56ccdc1e2a5450609bf5dfea0495325bc33a02fa
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/zoomIn.gif differ
diff --git a/src/main/webapp/connect/common/images/reader/zoomOut.gif b/src/main/webapp/connect/common/images/reader/zoomOut.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7ece5baa50c0f2862114f5b396f5ce20ead59c8f
Binary files /dev/null and b/src/main/webapp/connect/common/images/reader/zoomOut.gif differ
diff --git a/src/main/webapp/connect/common/js/mxProperties.js b/src/main/webapp/connect/common/js/mxProperties.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9c8a3a10e030e0fd92072418ee90676856d54c4
--- /dev/null
+++ b/src/main/webapp/connect/common/js/mxProperties.js
@@ -0,0 +1,115 @@
+var ATLAS_RESOURCE_BASE = '../..';
+var RESOURCES_PATH = ATLAS_RESOURCE_BASE + '/resources';
+var RESOURCE_BASE = RESOURCES_PATH + '/dia';
+var STENCIL_PATH = ATLAS_RESOURCE_BASE + '/stencils';
+var SHAPES_PATH = ATLAS_RESOURCE_BASE + '/shapes';
+var IMAGE_PATH = '../../images';
+var GRAPH_IMAGE_PATH = ATLAS_RESOURCE_BASE + '/img';
+var STYLE_PATH = '../../styles';
+var CSS_PATH = STYLE_PATH;
+var OPEN_FORM = ATLAS_RESOURCE_BASE + '/html/open.html';
+var TEMPLATE_PATH = ATLAS_RESOURCE_BASE + '/templates';
+
+var mxBasePath = ATLAS_RESOURCE_BASE + '/mxgraph';
+var mxLoadResources = false;
+
+var umlDomain = false;
+var collab = null;
+
+// Specifies connection mode for touch devices (at least one should be true)
+var isLocalStorage = typeof(Storage) != 'undefined';
+var uiTheme = 'atlas';
+
+var urlParams = (function(url) {
+	var result = new Object();
+	var idx = url.lastIndexOf('?');
+
+	if (idx > 0) {
+		var params = url.substring(idx + 1).split('&');
+
+		for ( var i = 0; i < params.length; i++) {
+			idx = params[i].indexOf('=');
+
+			if (idx > 0) {
+				result[params[i].substring(0, idx)] = params[i].substring(idx + 1);
+			}
+		}
+	}
+
+	return result;
+})(window.location.href);
+
+function getLanguage() 
+{
+	var lang = urlParams['lang'];
+	
+	if (lang == null)
+	{
+		// Cannot use mxSettings here
+		if (isLocalStorage) 
+		{
+			try
+			{
+				var value = localStorage.getItem('.drawio-config');
+				
+				if (value != null)
+				{
+					lang = JSON.parse(value).language || null;
+				}
+			}
+			catch (e)
+			{
+				// cookies are disabled, attempts to use local storage will cause
+				// a DOM error at a minimum on Chrome
+				isLocalStorage = false;
+			}
+		}
+	}
+	
+	return lang;
+};
+
+var mxLanguage = getLanguage();
+
+// Add new languages here. First entry is translated to [Automatic]
+// in the menu defintion in Diagramly.js.
+var mxLanguageMap = {'i18n': '', 'id' : 'Bahasa Indonesia', 'ms' : 'Bahasa Melayu', 'bs' : 'Bosanski', 'ca' : 'Català', 'cs' : 'Čeština', 'da' : 'Dansk', 'de' : 'Deutsch', 'et' : 'Eesti', 'en' : 'English', 'es' : 'Español', 
+		'fil' : 'Filipino', 'fr' : 'Français', 'it' : 'Italiano', 'hu' : 'Magyar', 'nl' : 'Nederlands', 'no' : 'Norsk', 
+		'pl' : 'Polski', 'pt-br' : 'Português (Brasil)', 'pt' : 'Português (Portugal)', 'ro' : 'Română', 'fi' : 'Suomi', 'sv' : 'Svenska', 'vi' : 'Tiếng Việt', 'tr' : 'Türkçe',
+		'el' : 'Ελληνικά', 'ru' : 'Русский', 'sr' : 'Српски', 'uk' : 'Українська', 'he' : 'עברית',
+		'ar' : 'العربية', 'th' : 'ไทย', 'ko' : '한국어', 'ja' : '日本語', 'zh' : '中文(中国)',  'zh-tw' : '中文(台灣)'};
+
+var mxLanguages = [];
+
+// Populates the list of supported special language bundles
+for (var lang in mxLanguageMap)
+{
+	// Empty means default (ie. browser language), "en" means English (default for unsupported languages)
+	// Since "en" uses no extension this must not be added to the array of supported language bundles.
+	if (lang != 'en')
+	{
+		mxLanguages.push(lang);
+	}
+}
+
+function mxscript(src)
+{
+	document.write('<script src="'+src+'"></scri' + 'pt>');
+};
+
+/* for debugging */
+if (urlParams['dev'] == '1') 
+{
+	var mxDevUrl = document.location.protocol + '//devhost.jgraph.com/mxgraph2';
+	var drawDevUrl = document.location.protocol + '//test.draw.io/';
+	geBasePath = mxDevUrl + '/javascript/examples/grapheditor/www/js';
+	mxBasePath = mxDevUrl + '/javascript/src';
+
+	mxscript(mxBasePath + '/js/mxClient.js');
+	mxscript(drawDevUrl + 'js/diagramly/Devel.js');
+	mxscript(drawDevUrl + 'connect/common/js/mxReader.js');
+}
+else
+{
+	mxscript('../../js/atlas.min.js');
+}
diff --git a/src/main/webapp/connect/common/js/mxReader.js b/src/main/webapp/connect/common/js/mxReader.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a4f08bc320fad7e28c25714e82403634b2b1d42
--- /dev/null
+++ b/src/main/webapp/connect/common/js/mxReader.js
@@ -0,0 +1,827 @@
+/**
+ * A Draw.io diagram viewer component with configurable toolbar buttons for editing, deleting and zooming buttons.
+ * Parameters :
+ * diagramName - name of the diagram
+ * attachmentId - ID of the diagram attachment
+ * ceoId - page ID or issue key
+ * readerOpts - JSON object with options :
+ * 		loadUrl - url from which to load the diagram
+ * 		editUrl - url of the editor
+ * 		stylePath - url from which to load the css
+ * 		stencilPath - url from which to load the stencils
+ * 		imagePath - url from which to load the graph mages
+ * 		resourcePath - path to the translations
+ * 		viewerToolbar - show toolbar or not
+ * 		autoSize - resizes the graph container to match the graph bounds
+ * 		width - width of the container
+ * 		height - height of the container
+ * 		disableButtons - disables all buttons
+ * 		center - should the diagram be horizontally centered or not
+ * 		evaluation - evaluation mode
+ * lightbox - boolean indicating if this viewer is a lightbox
+ * graphDocument - optional document containing the XML data
+ */
+function DrawioViewer(diagramName, attachmentId, ceoId, readerOpts, lightbox, graphDocument, connect)
+{
+	this.id = attachmentId;
+	this.diagramName = diagramName;
+	this.ceoId = ceoId;
+	this.options = readerOpts;
+	this.lightbox = lightbox;
+	this.graphDocument = graphDocument;
+	this.connect = connect;
+	this.paddingBottom = (connect) ? 0 : 30;
+
+	// Overrides browser language with Confluence user language
+	var lang = null;
+	
+	// Language is in the readOpts in Server and in the URL in Connect
+	if (!connect && readerOpts.language != null)
+	{
+		lang = readerOpts.language
+	}
+	else if (connect != null && urlParams['loc'] != null)
+	{
+		lang = urlParams['loc'];
+		var dash = lang.indexOf('-');
+		
+		if (dash >= 0)
+		{
+			lang = lang.substring(0, dash);
+		}
+	}
+	
+	// Only german and english supported currently. English is default.
+	if (lang == 'de')
+	{
+		mxClient.language = 'de';
+	}
+
+	// Special extension used for the message bundle. For this bundle there is only a German
+	// translation and the default English bundle so we temporarily override isLanguageSupported
+	// to return true only if German is used and fallback to English for all other languages.
+	var prevExtension = mxResources.extension;
+	var prevIsLangSupported = mxResources.isLanguageSupported;
+	mxResources.extension = '.txt';
+	
+	mxResources.isLanguageSupported = function(lan)
+	{
+		return lan == 'de';
+	};
+	
+	mxResources.add(this.options.resourcePath);
+	
+	// Restores previous settings
+	mxResources.extension = prevExtension;
+	mxResources.isLanguageSupported = prevIsLangSupported;
+	
+	this.buttons = this.createButtons();
+	
+	this.transparentImage = Editor.prototype.transparentImage;
+	this.extractGraphModel = Editor.prototype.extractGraphModel;
+	this.setGraphXml = Editor.prototype.setGraphXml;
+	this.readGraphState = Editor.prototype.readGraphState;
+	this.resetGraph = Editor.prototype.resetGraph;
+	this.decompress = Editor.prototype.decompress;
+	this.updateGraphComponents = Editor.prototype.updateGraphComponents;
+	this.fireEvent = Editor.prototype.fireEvent;
+	this.addListener = Editor.prototype.addListener;
+	this.originalNoForeignObject = Editor.prototype.originalNoForeignObject;
+	this.gridImage = '';
+	
+	this.addListener('resetGraphView', this.resetGraphView);
+}
+
+DrawioViewer.prototype = new mxEventSource();
+
+DrawioViewer.prototype.graph = null;
+DrawioViewer.prototype.id = null;
+DrawioViewer.prototype.toolbar = null;
+DrawioViewer.prototype.options = null;
+DrawioViewer.prototype.originX = 0;
+DrawioViewer.prototype.originY = 0;
+DrawioViewer.prototype.popupWindow = null;
+DrawioViewer.prototype.buttons = {};
+
+DrawioViewer.prototype.graphXmlString = null;
+
+DrawioViewer.prototype.installToolbar = function()
+{
+	this.toolbar = document.createElement('div');
+	var toolbar = this.toolbar;
+	var container = this.graph.container;
+	toolbar.id = 'diagramly-reader-toolbar-' + this.id;
+	toolbar.className = 'diagramly-reader-toolbar';
+	toolbar.style.position = 'absolute';
+	
+	container.parentNode.appendChild(toolbar);
+
+	toolbar.style.height = '30px';
+	toolbar.style.width = this.countVisibleButtons() * 29 + 'px';
+
+	// Makes sure the toolbar is always visible and
+	// disables toolbar for all overflow content
+	container.parentNode.style.overflow = 'visible';
+	
+	if (this.lightbox)
+	{
+		toolbar.style.bottom = '4px';
+		toolbar.style.left = '50%';
+		toolbar.style.width = this.countVisibleButtons() * 29 + 'px';
+		toolbar.style.marginLeft = -Math.round(this.countVisibleButtons() * 29 / 2) + 'px'
+	}
+	else
+	{
+		container.parentNode.style.paddingBottom = this.paddingBottom + 'px';
+
+		var bs = this.graph.getBorderSizes();
+		toolbar.style.bottom = (container.offsetTop + bs.y + 4) + 'px';
+		toolbar.style.left = (container.offsetLeft + bs.x) + 'px';
+	
+		if (!mxClient.IS_TOUCH) 
+		{
+			toolbar.style.display = 'none';
+			
+			$(container.parentNode).hover(function() 
+			{
+				toolbar.style.bottom = (container.offsetTop + bs.y + 4) + 'px';
+				toolbar.style.left = (container.offsetLeft + bs.x) + 'px';
+				
+				$(toolbar).fadeIn(100);
+			},
+			function() 
+			{
+				$(toolbar).fadeOut(100);
+			});
+		}
+	}
+}
+
+DrawioViewer.prototype.countVisibleButtons = function() 
+{
+	var counter = 0;
+	
+	for(var key in this.buttons) 
+	{
+		var button = this.buttons[key];
+		
+		if (button.visible)
+		{
+			counter++;
+		}
+	}
+	
+	return counter;
+}
+
+DrawioViewer.prototype.init = function()
+{
+	this.loadStylesheet();
+	
+	// Makes the shadow brighter
+	mxConstants.SHADOWCOLOR = '#000000';
+	mxConstants.SHADOW_OPACITY = 0.25;
+	this.graph.setEnabled(false);
+	this.graph.autoScroll = false;
+	this.graph.container.style.overflow = 'hidden';
+	this.graph.container.style.cursor = 'move';
+	
+	// Panning only enabled in lightbox to allow text selection in viewer
+	this.graph.setPanning(true);
+	
+	// Workaround for context trigger starting panning if ignoreCell is true
+	this.graph.panningHandler.useLeftButtonForPanning = true;
+	this.graph.panningHandler.usePopupTrigger = false;
+	this.graph.panningHandler.ignoreCell = true;
+	
+	this.graph.panningHandler.isForcePanningEvent = function(me)
+	{
+		return mxEvent.isLeftMouseButton(me.getEvent());
+	};
+
+	// Folding only enabled in lightbox
+	this.graph.foldingEnabled = this.lightbox;
+	
+	// Overrides click handler to ignore graph enabled state
+	if (this.graph.foldingEnabled)
+	{
+		this.graph.cellRenderer.createControlClickHandler = function(state)
+		{
+			var graph = state.view.graph;
+			
+			return function (evt)
+			{
+				var collapse = !graph.isCellCollapsed(state.cell);
+				graph.foldCells(collapse, false, [state.cell], null, evt);
+				mxEvent.consume(evt);
+			};
+		};
+	}
+	else
+	{
+		// Hides collapse/expand icon if folding is disabled
+		this.graph.getFoldingImage = function()
+		{
+			return null;
+		};
+	};
+
+	// HTML entities are displayed as plain text in wrapped plain text labels
+	this.graph.cellRenderer.getLabelValue = function(state)
+	{
+		var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments);
+		
+		if (state.view.graph.isHtmlLabel(state.cell))
+		{
+			if (state.style['html'] != 1)
+			{
+				result = mxUtils.htmlEntities(result, false);
+			}
+			else
+			{
+				result = state.view.graph.sanitizeHtml(result);
+			}
+		}
+		
+		return result;
+	};
+
+	// Enables links if graph is "disabled" (ie. read-only)
+	this.graph.click = function(me)
+	{
+		var cell = me.getCell();
+		
+		if (cell != null && !me.isConsumed() && (mxEvent.isTouchEvent(me.getEvent()) ||
+			mxEvent.isLeftMouseButton(me.getEvent())))
+		{
+			var href = this.getLinkForCell(cell);
+			
+			// Test cases:
+			// 1) the relative link without the Conf base path, with a leading slash, e.g. /download/attachment/....
+			// 2) the relative link with the Conf base path, with a leading slash, e.g. /confluence/download/attachmentss/...
+			// 3) the relative link without the conf base path, without a leading slash, e.g. download/attachments/...
+			// 4) the full absolute path, e.g. https://localhost:1990/confluence/download/attachments/...
+			// 5) full path without protocol, e.g. //confluence/download/attachments/...
+
+			if (href != null)
+			{
+				var r = new RegExp('^(?:[a-z]+:)?//', 'i'); // https://stackoverflow.com/questions/10687099/how-to-test-if-a-url-string-is-absolute-or-relative
+				
+				if (!r.test(href))
+				{
+					// relative link
+
+					if (href.lastIndexOf('/', 0) !== 0) // http://stackoverflow.com/a/4579228/226469 seems to be the fastest check
+					{
+						// Need a leading slash in case we need to prepend the base path
+						href = '/' + href;
+					}
+
+					// var cp = AJS.Confluence.getContextPath(); // TODO confluence call in a common module
+					
+					// Originally, links included the base path (but not the host), so there might be cases of the base path
+					// already being prepended. If the base path has changed, we can't recover those cases
+					// window.location.href = href.substring(0, cp.length) === cp ? href : cp + href; // prepends the context path if it's not already there
+					window.location.href = href;
+				}
+				else
+				{
+					// Test if it's an absolute URL, but on the same domain (i.e. open in same window)
+					// There's a security setting (unknown which) that seems to stop the IE hack below working in
+					// IE 11, https://desk.draw.io/browse/DS-175, https://desk.draw.io/browse/DFCS-52
+					// Worst case is these users will open an absolute same domain link in a window
+
+					var link = document.createElement('a');
+					link.href = href;
+					link.href = link.href; // hack to populate 'host' under IE
+				
+					if (link.host === location.host)
+					{
+						window.location.href = href;
+					}
+					else
+					{
+						window.open(href);
+					}
+				}
+			}
+			
+			me.consume();
+		}
+	};
+
+	this.graph.setTooltips(!mxClient.IS_TOUCH);
+
+	if (this.options.width != null) 
+	{
+		this.graph.container.style.width = this.options.width + 'px';
+	}
+	
+	if (this.options.height != null) 
+	{
+		this.graph.container.style.height = this.options.height + 'px';
+	}
+
+	// Accumulates the zoom factor while the rendering is taking place
+	// so that not the complete sequence of zoom steps must be painted
+	var graph = this.graph;
+	graph.updateZoomTimeout = null;
+	graph.cumulativeZoomFactor = 1;
+	
+	graph.lazyZoom = function(zoomIn)
+	{
+		if (this.updateZoomTimeout != null)
+		{
+			window.clearTimeout(this.updateZoomTimeout);
+		}
+
+		if (zoomIn)
+		{
+			this.cumulativeZoomFactor *= this.zoomFactor;
+		}
+		else
+		{
+			this.cumulativeZoomFactor /= this.zoomFactor;
+		}
+		
+		this.cumulativeZoomFactor = Math.round(this.view.scale * this.cumulativeZoomFactor * 100) / 100 / this.view.scale;
+		
+		this.updateZoomTimeout = window.setTimeout(mxUtils.bind(this, function()
+		{
+			this.zoom(this.cumulativeZoomFactor);					
+			this.cumulativeZoomFactor = 1;
+			this.updateZoomTimeout = null;
+		}), 20);
+	};
+	
+	if (this.lightbox)
+	{
+		mxEvent.addMouseWheelListener(mxUtils.bind(this, function(evt, up)
+		{
+			if (!mxClient.IS_MAC || !mxEvent.isControlDown(evt))
+			{
+				var source = mxEvent.getSource(evt);
+				
+				while (source != null)
+				{
+					if (source == graph.container)
+					{
+						graph.lazyZoom(up);
+						mxEvent.consume(evt);
+						
+						return;
+					}
+					
+					source = source.parentNode;
+				}
+			}
+		}));
+	}
+};
+
+DrawioViewer.prototype.resetGraphView = function()
+{
+	this.graph.pageBreaksVisible = false;
+	this.graph.preferPageSize = false;
+	this.graph.pageVisible = false;
+	
+	if (!this.lightbox)
+	{
+		var update = mxUtils.bind(this, function()
+		{
+			this.graph.centerZoom = this.graph.panningHandler.panningEnabled;
+			
+			// If width and height are specified the height is overridden to match the diagram size
+			var autoSizeWidth = this.options.width == null;
+			var autoSizeHeight = this.options.height == null;
+			var bounds = this.graph.getGraphBounds();
+			var ratio = bounds.width / bounds.height;
+			
+			var width = autoSizeWidth ? bounds.width + 2 : this.options.width;
+			var height = autoSizeHeight ? (width / ratio) + 1 : this.options.height;
+	
+			this.graph.container.style.width = Math.ceil(width) + 'px';
+			this.graph.container.style.height = Math.ceil(height) + 'px';
+			this.graph.container.style.maxWidth = '100%';
+			
+			if (autoSizeWidth && autoSizeHeight)
+			{
+				this.translateOrigin();
+				
+				// Used for fast restore of initial position in zoom to fit button
+				this.initialX = this.graph.view.translate.x;
+				this.initialY = this.graph.view.translate.y;
+			}
+			else if (this.options.zoomToFit)
+			{
+				this.graph.fit();
+			}
+	
+			//set the border after calling updateGraphComponnets() because the call sets it to ''
+			this.graph.container.style.border = this.options.border ? '1px solid #DDDDDD' : 'none';
+			this.graph.container.style.backgroundColor = (this.graph.background == null ||
+					this.graph.background == 'none') ? '#ffffff' : this.graph.background;
+		});
+		
+		// Workaround for invisible container is to move the container to the document body for rendering
+		if (!this.connect && (this.graph.container.clientWidth == 0 || this.graph.container.clientHeight == 0))
+		{
+			var previousParent = this.graph.container.parentNode;
+			var nextSibling = this.graph.container.nextSibling;
+			var prevPosition = this.graph.container.style.position;
+			var prevVisible = this.graph.container.style.visible;
+			
+			// Moves to document body for rendering (needed for text measuring)
+			this.graph.container.style.position = 'absolute';
+			this.graph.container.style.visible = 'hidden';
+			
+			document.body.appendChild(this.graph.container);
+			
+			// Refresh required in visible DOM to update text bounding boxes
+			this.graph.refresh();
+			update();
+			
+			// Move it back into DOM tree position
+			if (nextSibling != null)
+			{
+				nextSibling.parentNode.insertBefore(this.graph.container, nextSibling);
+			}
+			else
+			{
+				previousParent.appendChild(this.graph.container);
+			}
+			
+			// Restore position CSS
+			this.graph.container.style.visible = prevVisible;
+			this.graph.container.style.position = prevPosition;
+		}
+		else
+		{
+			update();
+		}
+	}
+	else
+	{
+		this.graph.container.style.backgroundColor = (this.graph.background == null ||
+			this.graph.background == 'none') ? '#ffffff' : this.graph.background;
+	}
+};
+
+DrawioViewer.prototype.translateOrigin = function()
+{
+	var bounds = this.graph.getGraphBounds();
+	this.graph.view.setTranslate(this.originX - Math.floor(bounds.x), this.originY - Math.floor(bounds.y));
+};
+
+DrawioViewer.prototype.loadGraph = function(diagramName, ceoId)
+{
+	var spinner = this.createSpinner(this.graph.container);
+
+	try
+	{
+		mxUtils.get(this.options.loadUrl, mxUtils.bind(this, function(req)
+		{
+			spinner.stop();
+			
+			if (req.getStatus() < 200 || req.getStatus() > 299)
+			{
+				this.showWarning(mxResources.get('error') + ' ' + req.getStatus());
+				this.graph.container.style.border = this.options.border ? '1px solid #DDDDDD' : 'none';
+				this.graph.container.style.backgroundColor = '#ffffff';
+				this.graph.container.style.height = '20px';
+			}
+			else
+			{
+				var json = JSON.parse(req.getText());
+				this.graphXmlString = json.xml;
+				var doc = mxUtils.parseXml(json.xml);
+				this.xmlDoc = doc;
+				this.filename = json.filename;
+				this.setGraphXml(doc.documentElement);
+				this.graphDocument = doc;
+			}
+		}),
+		function()
+		{
+			spinner.stop();
+		});
+	}
+	catch (e)
+	{
+		spinner.stop();
+	}
+};
+
+DrawioViewer.prototype.loadStylesheet = function()
+{
+	var node = mxUtils.load(this.options.stylePath + '/default.xml').getDocumentElement();
+	var dec = new mxCodec(node.ownerDocument);
+	dec.decode(node, this.graph.getStylesheet());
+};
+
+DrawioViewer.prototype.renderButtons = function()
+{
+	for (var key in this.buttons) 
+	{
+		var button = this.buttons[key];
+		
+		if (button.visible) 
+		{
+			this.addToolbarButton(this.toolbar, button);
+		}
+	}
+};
+
+DrawioViewer.prototype.addToolbarButton = function(toolbar, drawioButton)
+{
+	var enabled = typeof drawioButton.enabled === 'undefined' ? true : enabled;
+	var button = drawioButton.linkButton ? document.createElement('a') : document.createElement('div');
+	button.className = 'diagramly-reader-toolbar-button';
+
+	if (drawioButton.icon != null)
+	{
+		var img = document.createElement('img');
+		img.setAttribute('src', drawioButton.icon);
+		img.style.verticalAlign = 'middle';
+		img.style.marginRight = '2px';
+		button.appendChild(img);
+		button.title = drawioButton.label;
+	}
+
+	if (!drawioButton.enabled)
+	{
+		button.style.opacity = 0.2;
+
+	} else
+	{
+		if(drawioButton.linkButton) 
+		{
+			button.href = drawioButton.url;
+		}
+		else 
+		{
+			mxEvent.addListener(button, 'click', function(evt)
+			{
+				drawioButton.clickHandler.apply(this, arguments);
+			});
+		}
+		mxEvent.addListener(button, 'mouseover', function(evt)
+		{
+			button.className += ' diagramly-reader-toolbar-button-hover';
+		});
+		mxEvent.addListener(button, 'mouseout', function(evt)
+		{
+			button.className = 'diagramly-reader-toolbar-button';
+		});
+	}
+
+	toolbar.appendChild(button);
+	return button;
+};
+
+DrawioViewer.prototype.createSpinner = function(container)
+{
+	var opts =
+	{
+		lines : 12, // The number of lines to draw
+		length : 12, // The length of each line
+		width : 5, // The line thickness
+		radius : 10, // The radius of the inner circle
+		rotate : 0, // The rotation offset
+		color : '#000', // #rgb or #rrggbb
+		speed : 1, // Rounds per second
+		trail : 60, // Afterglow percentage
+		shadow : false, // Whether to render a shadow
+		hwaccel : false, // Whether to use hardware acceleration
+		className : 'spinner', // The CSS class to assign to the spinner
+		zIndex : 2e9 // The z-index (defaults to 2000000000)
+	};
+
+	return new Spinner(opts).spin(container);
+};
+
+DrawioViewer.prototype.show = function(container) 
+{
+	this.graph = new Graph(container);
+	this.graph.id = this.id;
+	this.init();
+
+	// Uses the XML document that was loaded for the viewer in the lightbox
+	if (this.graphDocument != null)
+	{
+		this.setGraphXml(this.graphDocument.documentElement);
+	}
+	else
+	{
+		this.loadGraph(this.diagramName, this.ceoId);
+	}
+	
+	if (this.options.viewerToolbar) 
+	{
+		this.installToolbar();
+		this.renderButtons();
+	}
+	
+	if (this.options.licenseStatus == 'NO_LICENSE') 
+	{
+		this.showWarning(mxResources.get('drawio.reader.noLicense'));
+	} 
+	else if (this.options.licenseStatus == 'EVAL_LICENSE') 
+	{
+		this.showWarning(mxResources.get('drawio.reader.evaluation'));
+	} 
+	else if (this.options.licenseStatus == 'EVAL_EXPIRED') 
+	{
+		this.showWarning(mxResources.get('drawio.reader.evaluationExpired'));
+	} 
+	else if (this.options.licenseStatus == 'VERSION_MISMATCH') 
+	{
+		this.showWarning(mxResources.get('drawio.reader.versionMismatch', ['https://support.draw.io/pages/viewpage.action?pageId=11829320']));
+	}
+	else if (this.options.licenseStatus == 'USER_MISMATCH') 
+	{
+		this.showWarning(mxResources.get('drawio.reader.userMismatch', ['https://support.draw.io/pages/viewpage.action?pageId=11829323']));
+	}
+	
+	
+};
+
+DrawioViewer.prototype.showWarning = function(msg) 
+{
+	var div = document.createElement('div');
+	div.style.position = 'absolute';
+	div.style.overflow = 'hidden';
+	div.style.left = '0px';
+	div.style.top = '0px';
+	div.style.right = '0px';
+	div.style.fontSize = '12px';
+	div.style.margin = '2px';
+	mxUtils.setOpacity(div, 50);
+	div.style.color = 'gray';
+	div.style.textAlign = 'center';
+	div.style.whiteSpace = 'nowrap';
+	span = document.createElement('span');
+	span.innerHTML = msg;
+	
+	div.appendChild(span);
+	
+	this.graph.container.parentNode.appendChild(div);
+};
+
+DrawioViewer.prototype.showLightbox = function() 
+{
+	console.log('Lightbox feature not implemented.');
+};
+
+DrawioViewer.prototype.createButtons = function() 
+{
+	var viewer = this;
+	var buttons = {}; 
+	
+	var enableButton = typeof this.options.disableButtons === 'undefined' ? true : !this.options.disableButtons;
+	var canEdit = this.options.userCanEdit && enableButton;
+	var canRemove = this.options.userCanRemove && enableButton;
+
+	var autoSizeWidth = this.options.width == null;
+	var autoSizeHeight = this.options.height == null;
+	
+	buttons[DrawioViewerActions.EDIT] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.edit'),
+		icon : viewer.options.imagePath + '/edit.png', 
+		url : viewer.options.editUrl,
+		enabled : canEdit,
+		linkButton : true
+	});
+	
+	buttons[DrawioViewerActions.REMOVE] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.remove'),
+		icon : viewer.options.imagePath + '/remove.png', 
+		clickHandler : function()
+		{
+			if (confirm(mxResources.get('diagramly.reader.confirmDelete')))
+			{
+				window.location.href = viewer.options.removeUrl;
+			}
+		},
+		enabled : canRemove
+	});
+	
+	buttons[DrawioViewerActions.ACTUAL_SIZE] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.zoomActual'),
+		icon : viewer.options.imagePath + '/zoomActual.png', 
+		clickHandler : function()
+		{
+			viewer.graph.zoomActual();
+			viewer.translateOrigin();
+		},
+		enabled : enableButton
+	});
+	
+	buttons[DrawioViewerActions.ZOOM_TO_FIT] = new DrawioViewerButton(
+	{
+		label : (this.lightbox) ? mxResources.get('diagramly.reader.zoomActual') : mxResources.get('diagramly.reader.fit'),
+		icon : (this.lightbox) ? viewer.options.imagePath + '/zoomActual.png' : viewer.options.imagePath + '/zoomFit.gif', 
+		clickHandler : mxUtils.bind(this, function()
+		{
+			if (this.lightbox)
+			{
+				// NOTE: Maxscale is 1 here so only make smaller but not larger
+				viewer.graph.fit(8);
+				viewer.graph.center(true, true, null, 0.42);
+			}
+			else
+			{
+				if (autoSizeWidth && autoSizeHeight)
+				{
+					this.graph.view.scaleAndTranslate(1, this.initialX, this.initialY);
+				}
+				else
+				{
+					this.graph.fit();
+				}
+			}
+		}),
+		enabled : enableButton
+	});
+	
+	buttons[DrawioViewerActions.ZOOM_OUT] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.zoomOut'),
+		icon : viewer.options.imagePath + '/zoomOut.gif', 
+		clickHandler : function()
+		{
+			viewer.graph.zoomOut();
+		},
+		enabled : enableButton
+	});
+	
+	buttons[DrawioViewerActions.ZOOM_IN] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.zoomIn'),
+		icon : viewer.options.imagePath + '/zoomIn.gif', 
+		clickHandler : function()
+		{
+			viewer.graph.zoomIn();
+		},
+		enabled : enableButton
+	});
+	
+	buttons[DrawioViewerActions.EXPAND] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.fullScreen'),
+		icon : viewer.options.imagePath + '/largeView.png', 
+		clickHandler : mxUtils.bind(this, function()
+		{
+			this.showLightbox();
+		}),
+		enabled : enableButton
+	});
+	
+	buttons[DrawioViewerActions.CLOSE] = new DrawioViewerButton(
+	{
+		label : mxResources.get('diagramly.reader.closeFullScreen'),
+		icon : viewer.options.imagePath + '/closeLargeView.gif', 
+		clickHandler : function()
+		{
+			viewer.popupWindow.remove();
+		},
+		enabled : enableButton,
+		visible : false
+	});
+	
+	return buttons;
+};
+
+DrawioViewerActions = 
+{
+	EDIT : 'edit',
+	REMOVE : 'remove',
+	ACTUAL_SIZE : 'actualSize',
+	ZOOM_TO_FIT : 'zoomToFit',
+	ZOOM_OUT : 'zoomOut',
+	ZOOM_IN : 'zoomIn',
+	EXPAND : 'expand',
+	CLOSE : 'close'
+};
+
+function DrawioViewerButton(options) 
+{
+	this.label = options.label;
+	this.clickHandler = options.clickHandler;
+	this.enabled = typeof options.enabled != 'undefined' ? options.enabled : true;
+	this.icon = options.icon;
+	this.visible = typeof options.visible != 'undefined' ? options.visible : true;
+	this.linkButton = typeof options.linkButton != 'undefined' ? options.linkButton : false;
+	this.url = options.url;
+};
+
+DrawioViewerButton.prototype.label = null;
+DrawioViewerButton.prototype.clickHandler = null;
+DrawioViewerButton.prototype.enabled = true;
+DrawioViewerButton.prototype.icon = null;
+DrawioViewerButton.prototype.visible = true;
+DrawioViewerButton.prototype.linkButton = false;
+DrawioViewerButton.prototype.url = null;
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/message.txt b/src/main/webapp/connect/common/message.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ca37ebe41f92d30effff654e79b73993ddd01b76
--- /dev/null
+++ b/src/main/webapp/connect/common/message.txt
@@ -0,0 +1,90 @@
+diagramly.new.diagram=Draw.io diagram
+diagramly.edit.diagram=Edit
+diagramly.reader.edit=Edit
+diagramly.reader.remove=Remove
+diagramly.reader.fit=Zoom to fit
+diagramly.reader.zoomActual=Actual size
+diagramly.reader.zoomOut=Zoom out
+diagramly.reader.zoomIn=Zoom in
+diagramly.reader.confirmDelete=Are you sure you want to delete this diagram?
+diagramly.reader.fullScreen=Full screen
+diagramly.reader.closeFullScreen=Close
+drawio.reader.evaluation=draw.io evaluation copy
+
+#macro properties editor
+drawio.macrooptions.size.label=Size
+drawio.macrooptions.options.label=Options
+drawio.macrooptions.width.label=Width
+drawio.macrooptions.height.label=Height
+drawio.macrooptions.border.label=Border
+drawio.macrooptions.border.desc=Display a border around the graph
+drawio.macrooptions.grid.label=Grid
+drawio.macrooptions.grid.desc=Display grid on the graph reader
+drawio.macrooptions.fitWindow.label=Fit to Window
+drawio.macrooptions.fitWindow.desc=Zoom the diagram to fit the reader
+drawio.macrooptions.autoSize.label=Auto Size
+drawio.macrooptions.viewerToolbar.label=Toolbar
+drawio.macrooptions.autoSize.desc=Update width and height of the reader to fit the diagram
+drawio.macrooptions.save.button=Save
+com.mxgraph.confluence.plugins.diagramly.diagramly.desc=Draw.io is a free online diagram drawing application for workflow, BPM, org charts, UML, ER, network diagrams.
+
+diagramly.propertypanel.macrooptions=Draw.io Macro Settings
+diagramly.propertypanel.editMacro=Edit Macro
+diagramly.propertypanel.dupediagram=Duplicate
+drawio.propertypanel.size.original=Original
+
+#search labels
+diagramly.search.header=Search for diagrams
+diagramly.search.button=Search
+diagramly.search.allspaces=All spaces
+diagramly.search.description=Enter the name of a diagram
+diagramly.search.diagramName=Diagram
+diagramly.search.spaceName=Space name
+diagramly.search.lastModified=Last modified
+diagramly.search.noResults=No diagrams have been found
+diagramly.search.error=Error during search. Specified reason
+diagramly.search.select.button=Select
+diagramly.search.copy.button=Copy
+diagramly.search.import.button=Import
+diagramly.search.cancel.button=Cancel
+
+#blueprint popup create dialog
+diagramly.create.header=How do you want to create the diagram?
+diagramly.create.blank=Blank
+diagramly.create.search=Search
+diagramly.create.select.button=Select
+diagramly.create.search.button=Search
+diagramly.create.back.button=Back
+diagramly.create.cancel.button=Cancel
+
+diagramly.import.description=Select a Visio file (.vdx)
+diagramly.import.error=There was an error during import
+diagramly.duplicate.newName=Please enter the name
+diagramly.duplicate.nameConflict=Could not duplicate diagram. Please choose a different name.
+diagramly.duplicate.error=Could not duplicate diagram. Please try again later.
+diagramly.import.uploading=Uploading file...
+drawio-rest.name=Drawio Rest
+drawio-rest.description=The Drawio Rest Plugin
+drawio.pagetemplate.cantadddiagram=Diagrams cannot be added to page templates. You can only add them to pages.
+drawio.linktodiagram.button=Link to Diagram
+
+#new diagram dialog
+drawio.templates.label=Draw.io Templates
+drawio.search.recent=Recent diagrams
+drawio.template.businessprocess=Business Process
+drawio.template.charts=Charts
+drawio.template.engineering=Engineering
+drawio.template.flowcharts=Flowcharts
+drawio.template.mindmaps=Mindmaps
+drawio.template.mockups=Mockups
+drawio.template.networkdiagrams=Network Diagrams
+drawio.template.other=Other
+drawio.template.softwaredesign=Software Design
+drawio.template.venndiagrams=Venn diagrams
+drawio.template.wireframes=Wireframes
+
+drawio.admin.info=Plugin Information
+drawio.admin.config=Plugin Configuration
+drawio.admin.config.externalImageService=Use external image service
+drawio.admin.config.saveChanges=Save changes
+
diff --git a/src/main/webapp/connect/common/message_de.txt b/src/main/webapp/connect/common/message_de.txt
new file mode 100644
index 0000000000000000000000000000000000000000..34bc154396980f711173556d50692df3e9366291
--- /dev/null
+++ b/src/main/webapp/connect/common/message_de.txt
@@ -0,0 +1,89 @@
+diagramly.new.diagram=Draw.io Diagramm
+diagramly.edit.diagram=Bearbeiten
+diagramly.reader.edit=Bearbeiten
+diagramly.reader.remove=Entfernen
+diagramly.reader.fit=Zoom anpassen
+diagramly.reader.zoomActual=Tatsächliche Grösse
+diagramly.reader.zoomOut=Herauszoomen
+diagramly.reader.zoomIn=Hineinzoomen
+diagramly.reader.confirmDelete=Möchten Sie das Diagramm wirklich löschen?
+diagramly.reader.fullScreen=Vollbild
+diagramly.reader.closeFullScreen=Schließen
+drawio.reader.evaluation=draw.io Testlizenz
+
+#macro properties editor
+drawio.macrooptions.size.label=Grösse
+drawio.macrooptions.options.label=Optionen
+drawio.macrooptions.width.label=Breite
+drawio.macrooptions.height.label=Höhe
+drawio.macrooptions.border.label=Rahmen
+drawio.macrooptions.border.desc=Rahmen um das Diagramm anzeigen
+drawio.macrooptions.grid.label=Gitternetz
+drawio.macrooptions.grid.desc=Gitternetz anzeigen
+drawio.macrooptions.fitWindow.label=An Fenstergrösse anpassen
+drawio.macrooptions.fitWindow.desc=Diagramm auf Fenstergrösse zoomen
+drawio.macrooptions.autoSize.label=Automatische Grösse
+drawio.macrooptions.viewerToolbar.label=Toolbar
+drawio.macrooptions.autoSize.desc=Breite und Höhe an Diagramm anpassen
+drawio.macrooptions.save.button=Speichern
+com.mxgraph.confluence.plugins.diagramly.diagramly.desc=Draw.io is a free online diagram drawing application for workflow, BPM, org charts, UML, ER, network diagrams.
+
+diagramly.propertypanel.macrooptions=Draw.io Makro Einstellungen
+diagramly.propertypanel.editMacro=Makro bearbeiten
+diagramly.propertypanel.dupediagram=Duplizieren
+drawio.propertypanel.size.original=Original
+
+#search labels
+diagramly.search.header=Nach Diagrammen suchen
+diagramly.search.button=Suchen
+diagramly.search.allspaces=Alle Bereiche
+diagramly.search.description=Geben Sie den Namen eines Diagramms ein
+diagramly.search.diagramName=Diagramm
+diagramly.search.spaceName=Bereichsname
+diagramly.search.lastModified=Zuletzt geändert
+diagramly.search.noResults=Es wurden keine Diagramme gefunden
+diagramly.search.error=Fehler bei der Suche. Ursache
+diagramly.search.select.button=Erstellen
+diagramly.search.copy.button=Kopieren
+diagramly.search.import.button=Importieren
+diagramly.search.cancel.button=Abbrechen
+
+#blueprint popup create dialog
+diagramly.create.header=Wie möchten Sie das Diagramm erstellen?
+diagramly.create.blank=Leer
+diagramly.create.search=Suchen
+diagramly.create.select.button=Erstellen
+diagramly.create.search.button=Suchen
+diagramly.create.back.button=Zurück
+diagramly.create.cancel.button=Abbrechen
+
+diagramly.import.description=Wählen Sie eine Visio-Datei (.vdx)
+diagramly.import.error=Es gab einen Fehler beim Import
+diagramly.duplicate.newName=Bitte geben Sie den Namen ein
+diagramly.duplicate.nameConflict=Diagramm konnte nicht dupliziert werden. Bitte geben Sie einen anderen Namen ein.
+diagramly.duplicate.error=Diagramm konnte nicht dupliziert werden. Bitte versuchen Sie es später.
+diagramly.import.uploading=Datei wird geladen...
+drawio-rest.name=Drawio Rest
+drawio-rest.description=Drawio Rest Plugin
+drawio.pagetemplate.cantadddiagram=Diagramme können nicht in Vorlagen sondern nur in Seiten eingefügt werden.
+drawio.linktodiagram.button=Link zum Diagramm
+
+#new diagram dialog
+drawio.templates.label=Draw.io Vorlagen
+drawio.search.recent=Zuletzt geöffnet
+drawio.template.businessprocess=Geschäftsprozesse
+drawio.template.charts=Grafiken
+drawio.template.engineering=Technik
+drawio.template.flowcharts=Ablaufdiagramme
+drawio.template.mindmaps=Mindmaps
+drawio.template.mockups=Mockups
+drawio.template.networkdiagrams=Netzwerkdiagramme
+drawio.template.other=Andere
+drawio.template.softwaredesign=Software Design
+drawio.template.venndiagrams=Venn Diagramme
+drawio.template.wireframes=Drahtgittermodelle
+
+drawio.admin.info=Plugin Information
+drawio.admin.config=Plugin Konfiguration
+drawio.admin.config.externalImageService=Externen Bild-Service verwenden
+drawio.admin.config.saveChanges=Änderungen speichern
diff --git a/src/main/webapp/connect/common/styles/plugin/aui-buttons.css b/src/main/webapp/connect/common/styles/plugin/aui-buttons.css
new file mode 100644
index 0000000000000000000000000000000000000000..532a182c67550b040857bb35a2679a28deca14da
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/aui-buttons.css
@@ -0,0 +1,536 @@
+/* AUI BUTTONS
+ * Note hover/disabled styles set directly as they are not precisely the same as
+ * if we used straight opacity.
+ */
+
+/* Basic Button Style */
+.aui-button,
+a.aui-button,
+.aui-button:visited {
+    background: #f2f2f2;
+    background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:    -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:     -ms-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:      -o-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:         linear-gradient(to bottom, #fff 0%, #f2f2f2 100%);
+    border: 1px solid #ccc;
+    border-radius: 3.01px;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box;
+    color: #333;
+    cursor: pointer;
+    display: inline-block;
+    font-family: inherit;
+    font-size: 14px;
+    font-variant: normal;
+    font-weight: normal;
+    height: 2.1428571428571em; /* 30px - using ems so the fields increase in line with user specified font-sizes */
+    line-height: 1.4285714285714;
+    margin: 0;
+    padding: 4px 10px;
+    text-decoration: none;
+    text-shadow: 0 1px 0 white;
+    vertical-align: baseline;
+    white-space: nowrap;
+}
+.aui-button ~ .aui-button {
+    margin-left: 10px;
+}
+/* Ensure underlines not added by link styles */
+a.aui-button:hover,
+a.aui-button:active,
+a.aui-button:focus {
+    text-decoration: none;
+}
+
+/* Control button height in Firefox. See http://www.experimentgarden.com/2010/11/firefox-buttontext-height-and-padding.html */
+.aui-button::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+.aui-button:focus,
+.aui-button:hover,
+.aui-button-subtle.aui-button:focus,
+.aui-button-subtle.aui-button:hover {
+    background: #f7f7f7;
+    background: -webkit-linear-gradient(top, #fff 0%, #f7f7f7 100%);
+    background:    -moz-linear-gradient(top, #fff 0%, #f7f7f7 100%);
+    background:     -ms-linear-gradient(top, #fff 0%, #f7f7f7 100%);
+    background:      -o-linear-gradient(top, #fff 0%, #f7f7f7 100%);
+    background:         linear-gradient(to bottom, #fff 0%, #f7f7f7 100%);
+    border-color: #999;
+    color: #000;
+    text-decoration:none;
+}
+
+.aui-button:active,
+.aui-button.active,
+.aui-header .aui-button-split-more.active,
+.aui-button-subtle.aui-button:active,
+.aui-button-subtle.aui-button.active {
+    background-image: none;
+    background-color: #f2f2f2;
+    box-shadow: inset 0 3px 6px rgba(0,0,0,.1);
+    text-shadow: none;
+    text-decoration:none;
+}
+
+/* Primary Buttons */
+.aui-button.aui-button-primary,
+.aui-button.aui-button-primary:visited {
+    background: #3068a2;
+    background: -webkit-linear-gradient(top, #4687ce 0%, #3068a2 100%);
+    background:    -moz-linear-gradient(top, #4687ce 0%, #3068a2 100%);
+    background:     -ms-linear-gradient(top, #4687ce 0%, #3068a2 100%);
+    background:      -o-linear-gradient(top, #4687ce 0%, #3068a2 100%);
+    background:         linear-gradient(to bottom, #4687ce 0%, #3068a2 100%); 
+    border-color: #486582;
+    color: #fff;
+    font-weight: bold;
+    -webkit-font-smoothing: antialiased; /* for chrome on mac */
+    text-shadow: 0 1px 0 #205081;
+}
+
+.aui-button.aui-button-primary:hover,
+.aui-button.aui-button-primary:focus {
+    background: #3673B5;
+    background: -webkit-linear-gradient(top, #5A94D3 0%, #3673B5 100%);
+    background:    -moz-linear-gradient(top, #5A94D3 0%, #3673B5 100%); 
+    background:     -ms-linear-gradient(top, #5A94D3 0%, #3673B5 100%);
+    background:      -o-linear-gradient(top, #5A94D3 0%, #3673B5 100%);
+    background:         linear-gradient(to bottom, #5A94D3 0%,#3673B5 100%);
+    border-color: #205081;
+    color: #fff;
+    text-shadow: 0 1px 0 #205081;
+}
+
+.aui-button.aui-button-primary:active {
+    background: #3673B5;
+    background-image: none;
+    background-color: #3673B5;
+    box-shadow: inset 0 3px 6px rgba(0,0,0,.1);
+    text-shadow: none;
+    text-decoration:none;
+}
+
+/* Link style buttons - used for destructive/cancel actions ONLY */
+.aui-button.aui-button-link,
+.aui-button.aui-button-link:visited  {
+    background: transparent;
+    border-color: transparent;
+    color: #3b73af;
+    padding: 5px 0;
+    text-decoration: none;
+    text-shadow: none;
+    box-shadow: none;
+}
+
+.aui-button.aui-button-link:focus,
+.aui-button.aui-button-link:hover,
+.aui-button.aui-button-link:active,
+.aui-buttons .aui-button.aui-button-link:focus,
+.aui-buttons .aui-button.aui-button-link:hover,
+.aui-buttons .aui-button.aui-button-link:active,
+.aui-buttons .aui-button.aui-button-link[aria-pressed="true"] {
+    background: transparent;
+    border-color: transparent;
+    box-shadow: none;
+    text-decoration: underline;
+}
+
+/* Subtle/hybrid/entity action/mugger buttons */
+.aui-button.aui-button-subtle {
+    background: transparent;
+    border-color: transparent;
+    color: #707070;
+}
+.aui-buttons .aui-button.aui-button-subtle {
+    border-radius: 3.01px;
+}
+.aui-button.aui-button-subtle .aui-icon {
+    margin-right: 1px;
+}
+
+/* aui-buttons groups buttons together into one button lozenge. */
+.aui-buttons {
+    display: inline-block;
+    font-size: 0;
+}
+.aui-buttons:after {
+    clear: both;
+    content: "";
+    display: table;
+}
+.aui-buttons .aui-button {
+    border-radius: 0;
+    margin: 0;
+}
+.aui-buttons .aui-button:first-child {
+    border-top-left-radius: 3.01px;
+    border-bottom-left-radius: 3.01px;
+}
+.aui-buttons .aui-button:last-child {
+    border-top-right-radius: 3.01px;
+    border-bottom-right-radius: 3.01px;
+}
+.aui-buttons + .aui-buttons {
+    margin-left: 10px;
+}
+
+/* Grouped buttons go into toolbar style */
+.aui-buttons .aui-button:focus,
+.aui-buttons .aui-button:hover,
+.aui-buttons .aui-button:active {
+    border-color: #999;
+}
+.aui-buttons .aui-button[disabled],
+.aui-buttons .aui-button[disabled]:hover,
+.aui-buttons .aui-button[disabled]:focus,
+.aui-buttons .aui-button[disabled]:active,
+.aui-buttons .aui-button[aria-disabled="true"],
+.aui-buttons .aui-button[aria-disabled="true"]:hover,
+.aui-buttons .aui-button[aria-disabled="true"]:focus,
+.aui-buttons .aui-button[aria-disabled="true"]:active {
+    border-color: #ccc;
+}
+
+
+/* Grouped Primary Buttons */
+
+/* Primary Buttons */
+.aui-buttons .aui-button.aui-button-primary {
+    background: #f2f2f2;
+    background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:    -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%); 
+    background:     -ms-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:      -o-linear-gradient(top, #fff 0%, #f2f2f2 100%); 
+    background:         linear-gradient(to bottom, #fff 0%, #f2f2f2 100%);
+    border-color: #ccc;
+    color: #3b73af;
+    text-shadow: none;
+}
+
+.aui-buttons .aui-button ~ .aui-button {
+    border-left-width: 0;
+    padding-left: 11px;
+}
+
+.aui-buttons .aui-button.aui-button-primary:hover,
+.aui-buttons .aui-button.aui-button-primary:focus,
+.aui-buttons .aui-button.aui-button-primary:active {
+    border-color: #999;
+    color: #205081;
+}
+
+.aui-buttons .aui-button ~ .aui-button:hover,
+.aui-buttons .aui-button ~ .aui-button:focus,
+.aui-buttons .aui-button ~ .aui-button:active {
+    border-width: 1px;
+    margin-left: -1px;
+    position: relative;
+}
+
+/* Selected buttons - NOT supported for free-standing primary buttons
+ARIA usage from http://www.paciellogroup.com/blog/misc/ARIA/togglebutton.html */
+.aui-button[aria-pressed="true"],
+.aui-buttons .aui-button[aria-pressed="true"],
+.aui-buttons .aui-button[aria-pressed="true"].aui-button-primary,
+.aui-buttons .aui-button[aria-pressed="true"].aui-button-subtle {
+    background: #ccc;
+    background: -webkit-linear-gradient(top, #ccc 0%, #ddd 13%); 
+    background:    -moz-linear-gradient(top, #ccc 0%, #ddd 13%);
+    background:     -ms-linear-gradient(top, #ccc 0%, #ddd 13%); 
+    background:      -o-linear-gradient(top, #ccc 0%, #ddd 13%); 
+    background:         linear-gradient(to bottom, #ccc 0%, #ddd 13%);
+}
+
+.aui-button[aria-pressed="true"].aui-button-subtle,
+.aui-buttons .aui-button[aria-pressed="true"].aui-button-subtle {
+    color: #333;
+    border-color: #ccc;
+}
+
+.aui-buttons .aui-button[aria-pressed="true"]:active {
+    background: #ccc;
+    box-shadow: inset 0px 3px 6px rgba(0,0,0,.2);
+}
+
+
+/* Disabled states (keep last to avoid excessive selector weight)
+---------------------------------------------------------------------- */
+.aui-button[disabled],
+.aui-button[disabled]:hover,
+.aui-button[disabled]:focus,
+.aui-button[disabled]:active,
+.aui-button[aria-disabled="true"],
+.aui-button[aria-disabled="true"]:hover,
+.aui-button[aria-disabled="true"]:focus,
+.aui-button[aria-disabled="true"]:active,
+.aui-button[aria-disabled="true"][aria-pressed] {
+    background: #f2f2f2;
+    background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:    -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:     -ms-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:      -o-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:         linear-gradient(to bottom, #fff 0%, #f2f2f2 100%);
+    border-color: #ccc;
+    box-shadow: none;
+    color: #999;
+    cursor: default;
+    text-shadow: none;
+}
+
+/* Subtle buttons have their own disabled stated*/
+.aui-button.aui-button-subtle[disabled],
+.aui-button.aui-button-subtle[aria-disabled="true"] {
+    border: 0;
+    background: none;
+}
+
+.aui-button.aui-button-primary[disabled],
+.aui-button.aui-button-primary[disabled]:hover,
+.aui-button.aui-button-primary[disabled]:focus,
+.aui-button.aui-button-primary[disabled]:active,
+.aui-button.aui-button-primary[aria-disabled="true"],
+.aui-button.aui-button-primary[aria-disabled="true"]:hover,
+.aui-button.aui-button-primary[aria-disabled="true"]:focus,
+.aui-button.aui-button-primary[aria-disabled="true"]:active {
+    background: #97b3d0;
+    background: -webkit-linear-gradient(top, #a2c3e6 0%, #97b3d0 100%);
+    background:    -moz-linear-gradient(top, #a2c3e6 0%, #97b3d0 100%);
+    background:     -ms-linear-gradient(top, #a2c3e6 0%, #97b3d0 100%);
+    background:      -o-linear-gradient(top, #a2c3e6 0%, #97b3d0 100%);
+    background:         linear-gradient(to bottom, #a2c3e6 0%, #97b3d0 100%);
+    border-color: #7f9cb9;
+    box-shadow:none;
+    color: #fff;
+    text-shadow: none;
+}
+
+.aui-button.aui-button-link[disabled],
+.aui-button.aui-button-link[disabled]:hover,
+.aui-button.aui-button-link[disabled]:focus,
+.aui-button.aui-button-link[disabled]:active,
+.aui-button.aui-button-link[aria-disabled="true"],
+.aui-button.aui-button-link[aria-disabled="true"]:hover,
+.aui-button.aui-button-link[aria-disabled="true"]:focus,
+.aui-button.aui-button-link[aria-disabled="true"]:active {
+    background: transparent;
+    border-color: transparent;
+    color: #999;
+    text-shadow: none;
+    text-decoration: none;
+}
+
+.aui-buttons .aui-button.aui-button-primary[disabled],
+.aui-buttons .aui-button.aui-button-primary[disabled]:hover,
+.aui-buttons .aui-button.aui-button-primary[disabled]:focus,
+.aui-buttons .aui-button.aui-button-primary[disabled]:active,
+.aui-buttons .aui-button.aui-button-primary[aria-disabled="true"],
+.aui-buttons .aui-button.aui-button-primary[aria-disabled="true"]:hover,
+.aui-buttons .aui-button.aui-button-primary[aria-disabled="true"]:focus,
+.aui-buttons .aui-button.aui-button-primary[aria-disabled="true"]:active {
+    background: #f2f2f2;
+    background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:    -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:     -ms-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:      -o-linear-gradient(top, #fff 0%, #f2f2f2 100%);
+    background:         linear-gradient(to bottom, #fff 0%, #f2f2f2 100%);
+    border-color: #ccc;
+    color: #9dbbd9;
+    text-shadow: none;
+}
+
+
+/* Cross-component integration
+---------------------------------------------------------------------- */
+
+/* Dropdown2 integration
+---------- */
+.aui-button.aui-dropdown2-trigger:first-child.active,
+.aui-button.aui-dropdown2-trigger.active {
+    /* square off bottom corners */
+    border-bottom-right-radius: 0;
+    border-bottom-left-radius: 0;
+    border-bottom-width: 0; /* avoid double border when the dropdown is active - increase padding to cater for this reduction */
+    padding-bottom: 5px; /* increase the padding to cater for the lack of border so the button doesn't change size */
+}
+.aui-button-link.aui-dropdown2-trigger:first-child.active,
+.aui-button-link.aui-dropdown2-trigger.active {
+    border-bottom-width: 1px;
+    box-shadow: none;
+    padding-bottom: 5px;
+}
+
+.aui-buttons .aui-button.aui-button-subtle.aui-dropdown2-trigger.active,
+.aui-button.aui-button-subtle.aui-dropdown2-trigger.active {
+    border-color: #ccc;
+}
+.aui-button.aui-button-subtle.aui-dropdown2-trigger:hover {
+    border-color: #999;
+}
+
+.aui-button.aui-dropdown2-trigger {
+    padding-right: 23px !important; /* 8px (arrow width) + 10px (right padding) + 5px (margin between arrow and logo) */
+    position: relative;
+}
+.aui-button.aui-dropdown2-trigger:after {
+    border: 4px solid transparent;
+    content: "";
+    height: 0;
+    left: 100%; /* "left" + "margin-left" required because of webkit not working properly with "right" */
+    margin-left: -18px;
+    margin-top: -2px;
+    opacity: 0.8;
+    position: absolute;
+    top: 50%;
+    width: 0;
+}
+.aui-button.aui-dropdown2-trigger:after,
+.aui-buttons .aui-button.aui-button-primary.aui-dropdown2-trigger:after {
+    border-top-color: #333;
+}
+.aui-button.aui-button-primary.aui-dropdown2-trigger:after {
+    border-top-color: #fff;
+}
+.aui-button.aui-dropdown2-trigger:hover:after,
+.aui-button.aui-dropdown2-trigger.active:after {
+    opacity: 1;
+}
+.aui-button.aui-button.aui-dropdown2-trigger:after {
+    margin-top: 0;
+    top: 13px;
+}
+
+/* suppress old icon pattern for dropdown widget so we don't get double arrows */
+.aui-button.aui-dropdown2-trigger > .icon-dropdown,
+.aui-button.aui-dropdown2-trigger > .aui-icon-dropdown {
+    display: none;
+}
+
+
+/* INPUT does not play with :after - dropdown2 does not support arrow styles for INPUT buttons */
+input.aui-button.aui-dropdown2-trigger {
+    padding-right: 10px !important; /* someone used important now we're all doomed */
+}
+input.aui-button.aui-dropdown2-trigger:after {
+    display: none;
+}
+
+/* Dropdown2-only / Split Button
+---------- */
+.aui-button.aui-dropdown2-trigger.aui-button-split-more,
+.aui-button.aui-dropdown2-trigger.aui-button-split-more.active {
+    /* don't touch vertical padding or things jump around, jump around, jump up jump up and get down */
+    padding-left: 5px;
+    padding-right: 10px;
+    text-align: left;
+    text-indent: -9999em;
+}
+
+/* remove the element border... */
+.aui-button-split-main {
+    border-right: 0;
+}
+
+.aui-button.aui-dropdown2-trigger.aui-button-split-more:hover {
+    border-left: 0;
+    margin-left: 0;
+}
+ 
+/* ...then replace it with a border on a pseudo element so we can control the height. */
+.aui-button.aui-dropdown2-trigger.aui-button-split-more:before {
+    border-left: 1px solid #ccc;
+    bottom: 4px;
+    content: "";
+    display: block;
+    left: 0;
+    position: absolute;
+    top: 4px;
+}
+
+/* ...then extend it to full height border on hover */
+.aui-button.aui-button-split-main:hover + .aui-button.aui-dropdown2-trigger.aui-button-split-more:before,
+.aui-button.aui-dropdown2-trigger.aui-button-split-more.active:hover:before,
+.aui-button.aui-dropdown2-trigger.aui-button-split-more.active:before,
+.aui-button.aui-dropdown2-trigger.aui-button-split-more:hover:before {
+    border-left-color: #999; /* dark border for hover. */
+    bottom: -1px; /* -1 to pull it out over the border */
+    top: -1px; /* -1 to pull it out over the border */
+}
+/* ...and change the colour on dropdown .active */
+.aui-button.aui-dropdown2-trigger.aui-button-split-more.active:before {
+    border-left-color: #ccc; /* lighter border for dropdown-active */
+}
+
+
+/* App Header Buttons and Split Button
+---------- */
+.aui-header .aui-nav .aui-button,
+.aui-header .aui-nav .aui-button-primary {
+    margin: 5px 0 0 10px;
+}
+
+.aui-header .aui-nav .aui-button-split-main {
+    margin-right: 0;
+}
+
+/* long selector set required to avoid a jump in non-hover focus */
+.aui-header .aui-nav .aui-buttons .aui-button ~ .aui-button:hover, 
+.aui-header .aui-nav .aui-buttons .aui-button ~ .aui-button:focus, 
+.aui-header .aui-nav .aui-buttons .aui-button ~ .aui-button:active,
+.aui-header .aui-nav .aui-button-split-more {
+    margin-left: 0;
+}
+
+.aui-header .aui-nav .aui-button-primary,
+.aui-header .aui-nav .aui-button-primary:link,
+.aui-header .aui-nav .aui-button-primary:visited {
+    background: #336ea9;
+    background-image: -moz-linear-gradient(top, #3b7fc4, #336ea9);
+    background-image: -ms-linear-gradient(top,  #3b7fc4, #336ea9);
+    background-image: -webkit-linear-gradient(top,  #3b7fc4, #336ea9);
+    background-image: -o-linear-gradient(top,  #3b7fc4, #336ea9);
+    background-image: linear-gradient(top,  #3b7fc4, #336ea9);
+    border: 0;
+    box-shadow: rgba(255, 255, 255, 0.1) 0 1px 0 0 inset, rgba(0, 0, 0, 0.2) 0 1px 1px 0;
+    color: #fff;    
+    text-shadow: 0 1px 0 #295989;
+}
+
+.aui-header .aui-nav .aui-button.aui-button-primary:focus,
+.aui-header .aui-nav .aui-button.aui-button-primary:hover {
+    background: #2D5F9C;
+    background-image: -moz-linear-gradient(top, #4796e6, #3773af);
+    background-image: -ms-linear-gradient(top, #4796e6, #3773af);
+    background-image: -webkit-linear-gradient(top, #4796e6, #3773af);
+    background-image: -o-linear-gradient(top, #4796e6, #3773af);
+    background-image: linear-gradient(top, #4796e6, #3773af);
+    color: #fff;    
+}
+
+.aui-header .aui-nav .aui-button.aui-button-primary:active,
+.aui-header .aui-nav .aui-button.aui-button-primary.active {
+    background-color: #3572b0;
+    background-image: none;
+}
+
+.aui-header .aui-nav .aui-buttons .aui-button-primary.aui-dropdown2-trigger:after {
+    border-top-color: #fff;
+}
+
+.aui-header .aui-button-primary.aui-dropdown2-trigger.aui-button-split-more.active {
+    top: -1px;
+}
+
+.aui-header .aui-button-primary.aui-button-split-main:hover + .aui-button.aui-dropdown2-trigger.aui-button-split-more:before,
+.aui-header .aui-button-primary.aui-dropdown2-trigger.aui-button-split-more.active:hover:before,
+.aui-header .aui-button-primary.aui-dropdown2-trigger.aui-button-split-more.active:before,
+.aui-header .aui-button-primary.aui-dropdown2-trigger.aui-button-split-more:hover:before,
+.aui-header .aui-button-primary.aui-dropdown2-trigger.aui-button-split-more:before {
+    border-color: #1f4e7e;
+    bottom: 0;
+    top: 0;
+}
+
diff --git a/etc/unicode-tests/emptyfile.xml b/src/main/webapp/connect/common/styles/plugin/blueprint.css
similarity index 100%
rename from etc/unicode-tests/emptyfile.xml
rename to src/main/webapp/connect/common/styles/plugin/blueprint.css
diff --git a/src/main/webapp/connect/common/styles/plugin/common.css b/src/main/webapp/connect/common/styles/plugin/common.css
new file mode 100644
index 0000000000000000000000000000000000000000..960de985089ffa42dcba431a221fedc0708469d4
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/common.css
@@ -0,0 +1,150 @@
+div.mxRubberband {
+	position: absolute;
+	overflow: hidden;
+	border-style: solid;
+	border-width: 1px;
+	border-color: #0000FF;
+	background: #0077FF;
+}
+textarea.mxCellEditor {
+	background: url('../images/transparent.gif');
+	border-style: solid;
+	border-color: black;
+	border-width: 0;
+	overflow: auto;
+}
+div.mxWindow {
+	-webkit-box-shadow: 3px 3px 12px #C0C0C0;
+	-moz-box-shadow: 3px 3px 12px #C0C0C0;
+	box-shadow: 3px 3px 12px #C0C0C0;
+	background: url('../images/window.gif');
+	border:1px solid #c3c3c3;
+	position: absolute;
+	overflow: hidden;
+	z-index: 1;
+}
+table.mxWindow {
+	border-collapse: collapse;
+	table-layout: fixed;
+  	font-family: Arial;
+	font-size: 8pt;
+}
+td.mxWindowTitle {
+	background: url('../images/window-title.gif') repeat-x;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+ 	text-align: center;
+ 	font-weight: bold;
+ 	overflow: hidden;
+	height: 13px;
+	padding: 2px;
+ 	padding-top: 4px;
+ 	padding-bottom: 6px;
+ 	color: black;
+}
+td.mxWindowPane {
+	vertical-align: top;
+	padding: 0px;
+}
+div.mxWindowPane {
+	overflow: hidden;
+	position: absolute;
+}
+td.mxWindowPane td {
+  	font-family: Arial;
+	font-size: 8pt;
+}
+td.mxWindowPane input, td.mxWindowPane select, td.mxWindowPane textarea, td.mxWindowPane radio {
+  	border-color: #8C8C8C;
+  	border-style: solid;
+  	border-width: 1px;
+  	font-family: Arial;
+	font-size: 8pt;
+ 	padding: 1px;
+}
+td.mxWindowPane button {
+	background: url('../images/button.gif') repeat-x;
+  	font-family: Arial;
+  	font-size: 8pt;
+  	padding: 2px;
+	float: left;
+}
+img.mxToolbarItem {
+	margin-right: 6px;
+	margin-bottom: 6px;
+	border-width: 1px;
+}
+select.mxToolbarCombo {
+	vertical-align: top;
+	border-style: inset;
+	border-width: 2px;
+}
+div.mxToolbarComboContainer {
+	padding: 2px;
+}
+img.mxToolbarMode {
+	margin: 2px;
+	margin-right: 4px;
+	margin-bottom: 4px;
+	border-width: 0px;
+}
+img.mxToolbarModeSelected {
+	margin: 0px;
+	margin-right: 2px;
+	margin-bottom: 2px;
+	border-width: 2px;
+	border-style: inset;
+}
+div.mxTooltip {
+	-webkit-box-shadow: 3px 3px 12px #C0C0C0;
+	-moz-box-shadow: 3px 3px 12px #C0C0C0;
+	box-shadow: 3px 3px 12px #C0C0C0;
+	background: #FFFFCC;
+	border-style: solid;
+	border-width: 1px;
+	border-color: black;
+	font-family: Arial;
+	font-size: 8pt;
+	position: absolute;
+	cursor: default;
+	padding: 4px;
+	color: black;
+}
+div.mxPopupMenu {
+	-webkit-box-shadow: 3px 3px 12px #C0C0C0;
+	-moz-box-shadow: 3px 3px 12px #C0C0C0;
+	box-shadow: 3px 3px 12px #C0C0C0;
+	background: url('../images/window.gif');
+	position: absolute;
+	border-style: solid;
+	border-width: 1px;
+	border-color: black;
+}
+table.mxPopupMenu {
+	border-collapse: collapse;
+	margin-top: 1px;
+	margin-bottom: 1px;
+}
+tr.mxPopupMenuItem {
+	color: black;
+	cursor: pointer;
+}
+tr.mxPopupMenuItemHover {
+	background-color: #000066;
+	color: #FFFFFF;
+	cursor: pointer;
+}
+td.mxPopupMenuItem {
+	padding: 2px 30px 2px 10px;
+	white-space: nowrap;
+	font-family: Arial;
+	font-size: 8pt;
+}
+td.mxPopupMenuIcon {
+	background-color: #D0D0D0;
+	padding: 2px 4px 2px 4px;
+}
+.mxDisabled {
+	opacity: 0.2 !important;
+	cursor:default !important;
+}
diff --git a/src/main/webapp/connect/common/styles/plugin/dropdown-menu.css b/src/main/webapp/connect/common/styles/plugin/dropdown-menu.css
new file mode 100644
index 0000000000000000000000000000000000000000..70b54d05c8024c7ba3e01eb43aca9ec9b4d18c71
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/dropdown-menu.css
@@ -0,0 +1,4 @@
+#insert-menu .macro-drawio .icon {
+    background:transparent url("images/logo-16x16.png") 0 0 no-repeat;
+    margin-top:0px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/styles/plugin/explorer.css b/src/main/webapp/connect/common/styles/plugin/explorer.css
new file mode 100644
index 0000000000000000000000000000000000000000..daa5e4873eecc093f70cf625a882dd7d2edd0574
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/explorer.css
@@ -0,0 +1,18 @@
+div.mxTooltip {
+	filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, 
+        Color='#A2A2A2', Positive='true');
+}
+div.mxPopupMenu {
+	filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, 
+        Color='#C0C0C0', Positive='true');
+}
+div.mxWindow {
+	filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, 
+        Color='#C0C0C0', Positive='true');
+}
+td.mxWindowTitle {
+	_height: 23px;
+}
+.mxDisabled {
+	_filter:alpha(opacity=20) !important;
+}
diff --git a/src/main/webapp/connect/common/styles/plugin/linkBrowser.css b/src/main/webapp/connect/common/styles/plugin/linkBrowser.css
new file mode 100644
index 0000000000000000000000000000000000000000..c45193113f2164c6821792eccb732c8e321f8633
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/linkBrowser.css
@@ -0,0 +1,296 @@
+.drawio-dialog 
+{
+	width: 100%;
+	height: 100%;
+}
+.dialog-title 
+{
+	border-bottom: 1px solid #ccc;
+	padding: 20px 25px;
+	box-sizing: border-box;
+	height: 56px;
+	width : 100%;
+	background: #f5f5f5;
+	color: #333;
+	font-weight: normal;
+	font-size: medium;
+}
+
+.dialog-button-panel 
+{
+	border-top: 1px solid #ccc;
+	padding: 12px 20px;
+	box-sizing: border-box;
+	height: 56px;
+	width: 100%;
+	margin: 0 10px 0 0;
+	text-align: right;
+	background: #f5f5f5;
+}
+.dialog-page 
+{
+	height : 483px;
+}
+.dialog-page-menu 
+{
+    background: none repeat scroll 0 0 #FFFFFF;
+    border-right: 1px solid #CCCCCC;
+    box-sizing: border-box;
+    float: left;
+    height: 100%;
+    list-style: none outside none;
+    margin: 0;
+    overflow-x: hidden;
+    overflow-y: auto;
+    padding: 10px 10px 20px;
+    width: 25%;
+    float : left;
+    list-style: none outside none;
+}
+.dialog-page-menu li.page-menu-item.selected button.item-button {
+    color: #333333;
+    font-weight: bold;
+}
+.dialog-page-menu li.page-menu-item button.item-button 
+{
+    background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
+    border: 0 none;
+    color: #3B73AF;
+    cursor: pointer;
+    font-family: inherit;
+    font-size: inherit;
+    line-height: 1.1428;
+    margin: 0;
+    padding: 7px 10px;
+    text-align: left;
+    text-decoration: none;
+    /*width: 100%;*/
+    word-wrap : none;
+}
+.page-menu-item-hover 
+{
+	background-color: #E6E6E6;
+}
+.page-menu-item-selected button.item-button
+{
+	color : #333333 !important; 
+	font-weight : bold; 
+}
+.dialog-page-contents 
+{
+	height : 100%;
+	float : left;
+	width : 620px;
+}
+.search-input 
+{
+	width : 220px;
+	float : left;
+}
+.text 
+{
+	height: 2.14286em;
+    line-height: 1.42857;
+    padding: 4px 5px;
+    border: 1px solid #ccc;
+    border-radius: 3.01px;
+    box-shadow: 0 1px 3px #ccc inset;
+    box-sizing: border-box;
+    color: #333;
+    font-size: inherit;
+    margin: 5px;
+    max-width: 250px;
+    vertical-align: baseline;
+    width: 100%;
+}
+.dialog-panel-body 
+{
+	padding : 20px 10px;    	    
+}
+.data-table-header 
+{
+	padding: 7px 10px;
+    text-align: left;
+    vertical-align: top;
+}
+table.aui 
+{
+	width : 100%;
+	border-collapse: collapse;;
+}
+table.aui>thead>tr>th, table.aui>tbody>tr>th, table.aui>thead>tr>td, table.aui>tbody>tr>td, table.aui>tfoot>tr>td 
+{
+	padding: 7px 10px;
+	text-align: left;
+	vertical-align: top;
+	
+}
+table.aui>tbody>tr>td, table.aui>tfoot>tr 
+{
+	background: #fff;
+	border-top: 1px solid #ccc;
+	color: #333;
+}
+.button-panel-button 
+{
+	background: #f2f2f2;
+	background: -webkit-linear-gradient(top,#fff 0,#f2f2f2 100%);
+	background: -moz-linear-gradient(top,#fff 0,#f2f2f2 100%);
+	background: -ms-linear-gradient(top,#fff 0,#f2f2f2 100%);
+	background: -o-linear-gradient(top,#fff 0,#f2f2f2 100%);
+	background: linear-gradient(to bottom,#fff 0,#f2f2f2 100%);
+	border-color: #ccc;
+	-moz-border-radius: 3.01px;
+	-webkit-border-radius: 3.01px;
+	border-radius: 3.01px;
+	border-style: solid;
+	border-width: 1px;
+	color: #333;
+	cursor: pointer;
+	display: inline-block;
+	font-size: 14px;
+	font-family: Arial,sans-serif;
+	font-variant: normal;
+	line-height: 20px;
+	padding: 4px 10px;
+	text-decoration: none;
+	text-shadow: 0 1px 0 white;
+	vertical-align: baseline;
+	margin : 0 10px 0 0;
+}
+
+.data-table-panel tr.selected, .data-table-panel tr.selected a, .data-table-panel tr.selected td 
+{
+	background-color: #ebf2f9;
+}
+.data-table-panel 
+{
+	margin : 0px -10px;
+	overflow-x: visible;
+	overflow-y: auto;
+	height : 388px;
+	clear : both;
+}
+
+.location-info, .location-info-top
+{
+	overflow: hidden;
+	width: 100%;
+	position: absolute;
+	left: 210px;
+	padding : 10px;
+}
+.location-info 
+{
+	border-top: 1px solid #ccc;
+	bottom: 51px;
+}
+.location-info-top 
+{
+	top: 51px;
+}
+.field-group
+{
+	padding: 0 0 0 100px;
+	position: relative;
+	word-wrap: break-word;
+}
+
+#search-panel-button 
+{
+	position : relative;
+	top : 4px;
+}
+
+#alias 
+{
+	display: none;
+}
+
+#url 
+{
+	margin : 30px;
+}
+.message-panel 
+{
+	padding-left : 10px;
+	padding-top : 10px;
+}
+
+button:focus, li:focus {
+    outline: 0;
+}
+
+div.description {
+	color: #707070;
+	font-size: 12px;
+	line-height: 1.66666666666667;
+	margin: 5px 0 0 57px;
+}
+#url:hover, .button-panel-link:hover 
+{
+	text-decoration: underline !important;
+}
+#url, .button-panel-link
+{
+	text-decoration: none !important;
+}
+
+.ui-tree li a,
+a.content-type-page span,
+div.content-type-page,
+span.content-type-page,
+.icon-page {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAPFBMVEX///+1tbWwsLCtra3///+Li4v5+fnZ2dnT09P8/PzPz8+rq6uhoaHR0dFycnJwcHB6enp4eHiDg4OAgIDxJSXRAAAADnRSTlMAIiJV3e7u7u7u7u7u7rDOyYEAAABUSURBVHhepcpLDoAwCABRqkBbP9Dq/e9qLYS1ibN8GQBYSFVGfQWLWmFEZG0uknGmuz+CDnjYEzDqDpF8BrV+HBxHNThjyBPo2qpBuemFROIpJXgAPRkGZhcD+TMAAAAASUVORK5CYII=);
+    background-repeat: no-repeat;
+    padding-left: 20px;
+}
+
+a.content-type-blogpost span,
+div.content-type-blogpost,
+span.content-type-blogpost,
+.icon-blog,
+.icon-blogpost {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAUVBMVEX///+1tbWwsLCtra3////GxsaLi4uzs7PPz8/5+fnr6+v19fXZ2dnT09P8/Pyrq6uhoaHR0dFwcHBycnJ4eHiAgIB6enqRkZF3d3eDg4OIiIgEhg+GAAAAEnRSTlMAIiJV3e7u7u7u7u7u7u7u7u5mVDB9AAAAdElEQVR4Xk3K2xbCIAxEUaqTcGurJtCq//+hItAF53HPGGNuLKKldDctPjYPwMvRRVfU5NE/ig541s+AUmow0g7WujhBfb9pBgTKQhOUPX5THGBPIRI3gHDmKPYCH3KwggJ7gxeu1gr8cXuDLfMfFtae8GJ+G+sIH3qkr1wAAAAASUVORK5CYII=);
+    background-repeat: no-repeat;
+    padding-left: 20px;
+}
+
+a.content-type-attachment-image span,
+div.content-type-attachment-image,
+span.content-type-attachment-image,
+.icon-file-image {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAaVBMVEX///+1tbWzs7OwsLD///+Li4vq6ur4+Pji4uLPz8/Hx8e1tbWmpqb29vazs7PW1tb///+srKzY2NjAwMCIiIiHh4d0dHRycnKLi4uDg4OTk5ORkZFwcHCHh4d6enqFhYV3d3d8fHyZmZke2Bp4AAAAFnRSTlMAIiIi3e7u7u7u7u7u7u7u7u7u7u7uxh/uMQAAAHZJREFUeF6Fz8kOwjAMRVEDdjozY2dsC///kSQB0goWHCmLdyUvAj+2JCu0AQoKi/NEIHVZ8R08yGc77xCPsoTZzzHn0Jp01rjmHTpmjdkrnDjq4qj2fZUCZzWq3trLEnRrk6EEDnoy5v4QuPHKOBLsrl9/+esJNi4MYbEkhTkAAAAASUVORK5CYII=);
+    background-repeat: no-repeat;
+    padding-left: 20px;
+}
+
+a.content-type-attachment-pdf span,
+div.content-type-attachment-pdf,
+span.content-type-attachment-pdf,
+.icon-file-pdf {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAWlBMVEX///+1tbWzs7OwsLD////7+/v88vHm5ubi4uLf39/12dbY2NjyzMnS0tLPz8/stK/pqKLmnJXjkYnghXyLi4veenDbb2WFhYWBgYHYY1lycnLVWU1wcHDQRDd8ojdZAAAAFXRSTlMAIiIi3e7u7u7u7u7u7u7u7u7u7u4cXfPyAAAAaUlEQVQYV13PRxaAMAgEUNTYC0awRb3/NY1pz2RW8NkwAFCw8uEcdHivhU178AfK71qUgW9cFyM/wATknABSAufWRYCyuxYpA1QnzQMSecAL3SMOHhIxhJQWmgCTAT56dx9tuTzUvzmDF/8aCYb2SVzBAAAAAElFTkSuQmCC);
+    background-repeat: no-repeat;
+    padding-left: 20px;
+}
+
+a.content-type-attachment-text-html span,
+div.content-type-attachment-text-html,
+span.content-type-attachment-text-html,
+a.content-type-attachment-html span,
+div.content-type-attachment-html,
+span.content-type-attachment-html,
+a.content-type-attachment-text-xml span,
+div.content-type-attachment-text-xml,
+span.content-type-attachment-text-xml,
+a.content-type-attachment-xml span,
+div.content-type-attachment-xml,
+span.content-type-attachment-xml,
+a.content-type-attachment-js span,
+div.content-type-attachment-js,
+span.content-type-attachment-js,
+.icon-file-html,
+.icon-file-xml {
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAZlBMVEX///+1tbWzs7OxsbH///+RkZGPj4/R0dG5ubnMzMzPz8+zs7OcnJzExMT39/f5+fnHx8fm5ubY2Nj09PTz8/OxsbGnp6ft7e1ycnJvb29wcHB2dnaRkZGNjY2FhYWBgYF+fn54eHhKjR8EAAAAGHRSTlMAIiIi3d3d7u7u7u7u7u7u7u7u7u7u7u5Iiv/NAAAAcklEQVR4Xl3Pxw4DMQgEUJyMy5b0Bnbq//9kFssJkufG0xwGIhcy/+IdEfnXgJbh7RfgiH/2rLAzOFcAIMC9SgOZcJwN9MYldY3HQQwAuT0xiQGQrlAxmGPX+AB6ox92qjB2030ZW2e7KfrcOnBL5rCiLxz1CbC+jprRAAAAAElFTkSuQmCC);
+    background-repeat: no-repeat;
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/styles/plugin/mx-editor.css b/src/main/webapp/connect/common/styles/plugin/mx-editor.css
new file mode 100644
index 0000000000000000000000000000000000000000..48eccbe7fb76eab9a93ce20915fd67711dcc556a
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/mx-editor.css
@@ -0,0 +1,34 @@
+/* contains styles specific to the Confluence integration */
+
+
+html tr.mxPopupMenuItemHover {
+	background-color: #3B73AF;
+	color: #FFFFFF;
+}
+
+html div.mxPopupMenu {
+	background-color: #FFFFFF;
+	border: 1px solid #CCCCCC;
+	border-bottom-left-radius: 3px;
+	border-bottom-right-radius: 3px;
+	box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2);
+	
+    font-size: 14px;
+    line-height: 1;
+}
+
+.geMenubar 
+{
+	background-color: #205081;
+}
+
+.geMenubarContainer a
+{
+	color: #FFFFFF !important;
+	padding: 10px 10px !important;
+}
+
+.geMenubarContainer .geItem:hover
+{
+	background-color: #3B73A7 !important;
+}
diff --git a/src/main/webapp/connect/common/styles/plugin/newDiagramDialog.css b/src/main/webapp/connect/common/styles/plugin/newDiagramDialog.css
new file mode 100644
index 0000000000000000000000000000000000000000..1d43d24e815e461c68b8bd693f0e1b6a53e2bf4a
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/newDiagramDialog.css
@@ -0,0 +1,49 @@
+.drawio-list {
+	width: 120px;
+	height: 120px;
+	text-align: center;
+	padding-bottom: 50px;
+	padding-right: 30px;
+	float: left;
+}
+
+.drawio-list-item {
+	width: 100%;
+	height: 100%;
+	border: 3px solid #F0F0F0;
+	border-radius: 5px;
+	padding: 2px;
+}
+
+.drawio-list-item-hover {
+	border: 3px solid #c5c5c5;
+}
+
+.drawio-list-item-selected {
+	border: 3px solid #3b73af;
+}
+
+.drawio-separator {
+	border-top: 1px solid #F0F0F0;
+	clear: both;
+	padding-top : 10px; 
+	padding-bottom : 10px;
+}
+
+.drawio-thumbnail {
+	width: 100%;
+	height: 100%; background-repeat : no-repeat;
+	background-size: contain;
+	background-repeat: no-repeat;
+}
+
+.drawio-template-panel-header {
+	padding-left: 10px;
+	padding-top: 5px;
+	padding-bottom: 5px;
+	font-style: italic;
+}
+
+.drawio-search-results {
+	padding-top : 10px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/styles/plugin/reader.css b/src/main/webapp/connect/common/styles/plugin/reader.css
new file mode 100644
index 0000000000000000000000000000000000000000..49c2c37b88f97424166c74f8694fc312970870e6
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/reader.css
@@ -0,0 +1,39 @@
+.drawio-viewer {
+	max-width: 100%;
+}
+
+.diagramly-reader-toolbar {
+	
+	height : 27px;
+	margin-left: 1px;
+	margin-bottom: 1px;
+	background-color: #EEEEEE;
+	border-radius : 3px;
+}
+
+.diagramly-reader-toolbar-button, .diagramly-reader-toolbar-button-hover {
+	float : left;
+	border-radius : 3px;
+	padding: 2px;
+	opacity : 0.7;
+}
+
+.diagramly-reader-toolbar-button {
+	border: 1px solid transparent;
+}
+
+.diagramly-reader-toolbar-button-hover {
+	border: 1px solid #404040;
+	opacity : 1.0;
+}
+
+.drawio-reader-popup-header 
+{
+	text-align: center;
+}
+
+.drawio-reader-heading 
+{
+	margin-top: 2px;
+	margin-bottom: 2px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/styles/plugin/search.css b/src/main/webapp/connect/common/styles/plugin/search.css
new file mode 100644
index 0000000000000000000000000000000000000000..abf19d908221e9f56ca530e4fc998134787520e8
--- /dev/null
+++ b/src/main/webapp/connect/common/styles/plugin/search.css
@@ -0,0 +1,84 @@
+.diagramly-selected {
+	background-color: #EEEEEE;
+}
+
+.diagramly-search-results {
+	 
+}
+
+.diagramly-results-table {
+	width: 100%;
+	border-spacing: 0px;
+	padding: 0 10px 0 10px;
+	
+}
+
+.diagramly-results-table td {
+	line-height: 24px;
+	color: #666666;
+    cursor: default;
+    text-decoration: none;
+}
+
+.diagramly-results-table th {
+	font-size: 12px;
+	line-height: 24px;
+	margin: 0;
+	overflow: hidden;
+	border-bottom: 1px solid #F0F0F0;
+    color: #666666;
+    font-weight: bold;
+    text-align: left;
+}
+
+
+
+.diagramly-blueprint-list {
+	
+}
+
+.diagramly-blueprint-list-item-wrapper {
+	width : 90px; 
+	height : 90px;
+	text-align : center;
+	
+}
+
+.diagramly-blueprint-list-item {
+	width : 100%; 
+	height : 100%; 
+	border : 3px solid #F0F0F0;
+	border-radius : 5px; 
+	padding : 2px;
+}
+
+.diagramly-blueprint-list-item-hover {
+	border : 3px solid #c5c5c5;
+}
+
+.diagramly-blueprint-list-item-selected {
+	border : 3px solid #3b73af;
+}
+
+.drawio-list-item-wrapper {
+	width : 90px; 
+	height : 90px;
+	text-align : center;
+	
+}
+
+.drawio-list-item {
+	width : 100%; 
+	height : 100%; 
+	border : 3px solid #F0F0F0;
+	border-radius : 5px; 
+	padding : 2px;
+}
+
+.drawio-list-item-hover {
+	border : 3px solid #c5c5c5;
+}
+
+.drawio-list-item-selected {
+	border : 3px solid #3b73af;
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/viewer.txt b/src/main/webapp/connect/common/viewer.txt
new file mode 100644
index 0000000000000000000000000000000000000000..739080e7c6bf7af52579a959aed761cd091189df
--- /dev/null
+++ b/src/main/webapp/connect/common/viewer.txt
@@ -0,0 +1,9 @@
+diagramly.reader.edit=Edit
+diagramly.reader.remove=Remove
+diagramly.reader.fit=Zoom to Fit
+diagramly.reader.zoomActual=Actual Size
+diagramly.reader.zoomOut=Zoom Out
+diagramly.reader.zoomIn=Zoom In
+diagramly.reader.confirmDelete=Are you sure you want to delete this diagram?
+diagramly.reader.fullScreen=Full screen
+diagramly.reader.closeFullScreen=Close full screen
\ No newline at end of file
diff --git a/src/main/webapp/connect/common/viewer_de.txt b/src/main/webapp/connect/common/viewer_de.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2a92b65020a0613435849aba2852fb358d8f02d5
--- /dev/null
+++ b/src/main/webapp/connect/common/viewer_de.txt
@@ -0,0 +1,9 @@
+diagramly.reader.edit=Bearbeiten
+diagramly.reader.remove=Entfernen
+diagramly.reader.fit=Zoom anpassen
+diagramly.reader.zoomActual=Tatsächliche Grösse
+diagramly.reader.zoomOut=Herauszoomen
+diagramly.reader.zoomIn=Hineinzoomen
+diagramly.reader.confirmDelete=Sind Sie sicher, Sie wollen dieses Diagramm zu löschen?
+diagramly.reader.fullScreen=Vollbild
+diagramly.reader.closeFullScreen=Schließen vollbild
\ No newline at end of file
diff --git a/src/main/webapp/connect/confluence/ac.js b/src/main/webapp/connect/confluence/ac.js
new file mode 100644
index 0000000000000000000000000000000000000000..a70df7324e7269d82b06bff237be101362a64434
--- /dev/null
+++ b/src/main/webapp/connect/confluence/ac.js
@@ -0,0 +1,1002 @@
+var AC = {};
+
+AC.autosaveTimeout = 10000;
+AC.draftExtension = '.tmp';
+AC.draftPrefix = '~';
+AC.timeout = 25000;
+
+// If save should also exit. To disable this, multiple saveMacro calls
+// must be possible (not yet in production on 08-AUG-2017)
+AC.autoExit = true;
+
+// Last Checked on 08-AUG-2017: No delete scope needed to delete drafts
+// LATER: If delete scope is needed users must upgrade to the latest json
+// Disabled. Flag to mute notifications for drafts is needed. 16-AUG-2017
+AC.draftEnabled = false;
+
+AC.getUrlParam = function(param, escape, url){
+    try{
+    	var url = url || window.location.search;
+        var regex = new RegExp(param + '=([^&]+)'),
+        data = regex.exec(url)[1];
+        // decode URI with plus sign fix.
+        return (escape) ? window.decodeURIComponent(data.replace(/\+/g, '%20')) : data;
+    } catch (e){
+        return undefined;
+    }
+};
+
+AC.getMetaTag = function(name) {
+	return document.getElementsByTagName('meta')[name].getAttribute('content');
+}
+
+AC.initAsync = function(baseUrl)
+{
+	var link = document.createElement('a');
+	link.href = location.href;
+	link.href = link.href; //to have 'host' populated under IE
+	var hostUrl = link.protocol + '//' + link.hostname;
+	var lang = AC.getUrlParam('loc', true);
+	var site = AC.getUrlParam('xdm_e', true);
+	var user = AC.getUrlParam('user_id', true);
+
+	if (lang != null)
+	{
+		var dash = lang.indexOf('-');
+		
+		if (dash >= 0)
+		{
+			lang = lang.substring(0, dash);
+		}
+	}
+
+	var editor = document.createElement('iframe');
+	editor.setAttribute('width', '100%');
+	editor.setAttribute('height', '100%');
+	editor.style.width = '100%';
+	editor.style.height = '100%';
+	editor.setAttribute('id', 'editorFrame');
+	editor.setAttribute('frameborder', '0');
+	//editor.setAttribute('src', 'https://9674265b.ngrok.io/?dev=1&drawdev=1&' +
+	editor.setAttribute('src', hostUrl + '/?' +
+			'ui=atlas&p=ac&embed=1&modified=unsavedChanges' +
+			((!AC.autoExit) ? '&saveAndExit=1' : '') +
+			'&keepmodified=1&spin=1&libraries=1&proto=json' +
+		((lang != null) ? '&lang=' + lang : '') + ((site != null) ? '&site=' + encodeURIComponent(site) : '') +
+		((user != null) ? '&user=' + encodeURIComponent(user) : ''));
+
+	var initReceived = false;
+	var draftHandled = false;
+	var waitingForAttachments = false;
+	var xmlReceived = null;
+	var draftXml = null;
+	var draftName = null;
+	var filename = null;
+	var theMacroData = null;
+	var pageId = null;
+	var theLocation = null;
+	var attachments = null;
+
+	var serverName = document.referrer;
+	var index1 = serverName.indexOf('//');
+
+	if (index1 > 0)
+	{
+		var index2 = serverName.indexOf('/', index1 + 2);
+		
+		if (index2 > index1)
+		{
+			serverName = serverName.substring(index1 + 2, index2);
+		}
+	}
+	
+	function startEditor()
+	{
+		if (initReceived && xmlReceived != null && draftHandled && !waitingForAttachments)
+		{
+			AC.init(baseUrl, theLocation, pageId, editor, filename, xmlReceived, draftName, draftXml, theMacroData);
+		}
+	};
+	
+	function loadDraft()
+	{
+		if (waitingForAttachments)
+		{
+			return;
+		}
+		
+		if (AC.draftEnabled && pageId != null && attachments != null &&
+			(draftName != null || xmlReceived == '') && !draftHandled)
+		{
+			// Searches for pending new drafts from this user
+			var prefix = '~drawio~' + user + '~';
+			
+			// Check if attachments contains draftName
+			for (var i = 0; i < attachments.length; i++)
+			{
+				var fn = attachments[i].fileName;
+				
+				if (draftName == null && attachments[i].fileSize > 0 &&
+					fn.substring(0, prefix.length) === prefix &&
+					fn.substring(fn.length - AC.draftExtension.length) === AC.draftExtension)
+				{
+					filename = fn.substring(prefix.length, fn.length - AC.draftExtension.length);
+					draftName = fn;						
+				}
+				
+				if (fn == draftName)
+				{
+					AP.require(['messages', 'confluence'], function (messages, confluence)
+					{
+						var acceptResponse = true;
+						var timeoutHandler = function()
+						{
+							acceptResponse = false;
+							document.body.style.backgroundSize = 'auto auto';
+							document.body.style.backgroundImage = 'url(/images/stop-flat-icon-80.png)';
+							editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+	
+							var message = messages.error('The connection has timed out', 'The server at ' +
+								serverName + ' is taking too long to respond.');
+						
+							messages.onClose(message, function()
+							{
+								confluence.closeMacroEditor();
+							});
+						};
+						
+						var timeoutThread = window.setTimeout(timeoutHandler, AC.timeout);
+						
+						AC.loadDiagram(pageId, draftName, null, function(loadResp)
+						{
+							//console.trace('DRAFT: Found', draftName, loadResp);
+					    		window.clearTimeout(timeoutThread);
+					    		
+					    		if (acceptResponse)
+						    	{
+								if (loadResp != null && loadResp.length > 0)
+								{
+									draftXml = loadResp;
+								}
+								
+								draftHandled = true;
+								startEditor();
+						    	}
+						}, function()
+						{
+					    		window.clearTimeout(timeoutThread);
+					    		
+					    		if (acceptResponse)
+						    	{
+					    			draftHandled = true;
+					    			startEditor();
+						    	}
+						});
+					});
+					
+					// Terminates function
+					return;
+				}
+			}
+		}
+
+		draftHandled = true;
+		startEditor();
+	};
+	
+	var initHandler = function(evt)
+	{
+		if (evt.origin == hostUrl)
+		{
+			var msg = JSON.parse(evt.data);
+			
+			if (msg.event == 'init')
+			{
+				window.removeEventListener('message', initHandler);
+				document.body.style.backgroundImage = 'none';
+				initReceived = true;
+				startEditor();
+			}
+		}
+	};
+
+	window.addEventListener('message', initHandler);
+
+	// Parallel loading for data and iframe
+	document.body.appendChild(editor);
+	
+	AP.getLocation(function(location) 
+	{
+		theLocation = location;
+		
+		AP.require(['messages', 'navigator', 'confluence', 'request'], function (messages, navigator, confluence, request)
+		{
+		    navigator.getLocation(function (data)
+		    {
+			    	if (data != null && data.target != null && data.context!= null &&
+			    		(data.target == 'contentedit')) // || data.target == 'contentcreate'))
+			    	{
+			    		pageId = data.context.contentId;
+			    	}
+
+			    	if (pageId == null || isNaN(pageId))
+		    		{
+		    			document.body.style.backgroundImage = 'url(/images/stop-flat-icon-80.png)';
+		    			document.body.style.backgroundSize = 'auto auto';
+			    		editor.parentNode.removeChild(editor);
+		    			
+		    			var message = messages.error('Cannot insert draw.io diagram to a new Confluence page',
+		    				'Please save the page and try again.');
+		    	
+		    			messages.onClose(message, function()
+		    			{
+		    				confluence.closeMacroEditor();
+		    			});
+		    		}
+			    	else
+			    	{
+				    	// Not needed if drafts not enabled
+				    	if (AC.draftEnabled)
+				    	{
+				    		waitingForAttachments = true;
+				    		var acceptResponse2 = true;
+				    		var timeoutHandler2 = function()
+				    		{
+				    			acceptResponse2 = false;
+				    			document.body.style.backgroundSize = 'auto auto';
+				    			document.body.style.backgroundImage = 'url(/images/stop-flat-icon-80.png)';
+				    			editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+
+				    			var message = messages.error('The connection has timed out', 'The server at ' +
+				    				serverName + ' is taking too long to respond.');
+				    		
+				    			messages.onClose(message, function()
+				    			{
+				    				confluence.closeMacroEditor();
+				    			});
+				    		};
+				    		
+						var timeoutThread2 = window.setTimeout(timeoutHandler2, AC.timeout);
+						
+						request({
+							type: 'POST',
+							data: JSON.stringify([pageId]),
+							url: '/rpc/json-rpc/confluenceservice-v2/getAttachments',
+							contentType: 'application/json;charset=UTF-8',
+							success: function(res)
+							{
+						    		window.clearTimeout(timeoutThread2);
+						    		
+						    		if (acceptResponse2)
+							    	{
+									waitingForAttachments = false;
+						    			attachments = JSON.parse(res);
+						    			loadDraft();
+							    	}
+							},
+							error: function(res)
+							{
+						    		window.clearTimeout(timeoutThread2);
+						    		
+						    		if (acceptResponse2)
+							    	{
+									waitingForAttachments = false;
+						    			draftHandled = true;
+							    	}
+							}
+						});
+				    	}
+			    	
+					var acceptResponse = true;	
+					var timeoutHandler = function()
+					{
+						acceptResponse = false;
+						document.body.style.backgroundSize = 'auto auto';
+						document.body.style.backgroundImage = 'url(/images/stop-flat-icon-80.png)';
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+
+						var message = messages.error('The connection has timed out', 'The server at ' +
+							serverName + ' is taking too long to respond.');
+					
+						messages.onClose(message, function()
+						{
+							confluence.closeMacroEditor();
+						});
+					};
+					
+					var timeoutThread = window.setTimeout(timeoutHandler, AC.timeout);
+					
+				    	confluence.getMacroData(function (macroData) 
+				    	{
+				    		window.clearTimeout(timeoutThread);
+				    		
+				    		if (acceptResponse)
+					    	{
+					    		var name = (macroData != null) ? (macroData.diagramName || '') : null;
+			    				theMacroData = macroData;
+			    				
+					    		if (name != null && name.length > 0)
+					    		{
+					    			var revision = parseInt(macroData.revision);
+						    		draftName = (name != null) ? AC.draftPrefix + name + AC.draftExtension : null;
+						    		loadDraft();
+					    			
+					    			if (isNaN(revision))
+					    			{
+					    				revision = null;
+					    			}
+					    			
+								timeoutThread = window.setTimeout(timeoutHandler, AC.timeout);
+			
+					    			AC.loadDiagram(pageId, name, revision, function(loadResp)
+					    			{
+							    		window.clearTimeout(timeoutThread);
+							    		
+							    		if (acceptResponse)
+								    	{
+						    				xmlReceived = loadResp;
+						    				filename = name;
+										//console.trace('DRAFT: Created', AC.draftPrefix + filename + AC.draftExtension);
+										startEditor();
+								    	}
+								}, 
+					    			function(resp) 
+					    			{
+							    		window.clearTimeout(timeoutThread);
+							    		
+							    		if (acceptResponse)
+								    	{
+						    				editor.parentNode.removeChild(editor);
+						    				var message = messages.error('Read Error', (resp.status == 404) ?
+						    					'File not found' : 'Error loading file');
+						    		
+						    				messages.onClose(message, function()
+						    				{
+						    					confluence.closeMacroEditor();
+						    				});
+								    	}
+					    			});
+					    		}
+					    		else
+					    		{
+					    			filename = null;
+						    		xmlReceived = '';
+						    		loadDraft();
+					    		}
+					    	}
+				    	});
+			    	}
+		    	});
+		});
+	});
+};
+
+AC.init = function(baseUrl, location, pageId, editor, diagramName, initialXml, draftName, draftXml, macroData)
+{
+	// Hides the logo
+	document.body.style.backgroundImage = 'none';
+	var user = AC.getUrlParam('user_id', true);
+	var draftExists = false;
+	
+	AP.require(['messages', 'confluence', 'request'], function(messages, confluence, request)
+	{
+		var newPage = location.indexOf('createpage.action') > -1 ? true : false;
+		var diagramXml = null;
+		var link = document.createElement('a');
+		link.href = location.href;
+		link.href = link.href; //to have 'host' populated under IE
+		var hostUrl = link.protocol + '//' + link.hostname;
+		
+	   	function removeDraft(fn, err)
+	   	{
+			if (draftExists)
+			{
+				AC.removeAttachment(pageId, draftName, fn, err);
+			}
+			else
+			{
+				fn();
+			}
+	   	};
+		
+	   	function saveDraft(xml, fn, err)
+	   	{
+	   		//console.trace('DRAFT: Save', draftName, xml);
+	   		
+			AC.saveDiagram(pageId, draftName,
+				btoa(unescape(encodeURIComponent(xml))),
+				function(res)
+				{
+					var obj = null;
+					
+					try
+					{
+						obj = JSON.parse(res);
+					}
+					catch (e)
+					{
+						// ignore
+					}
+					
+					//console.trace('DRAFT: Saved', obj);
+					
+					if (obj != null && obj.error != null)
+					{
+						if (err != null)
+						{
+							err(obj);
+						}
+					}
+					else
+					{
+						draftExists = true;
+						
+						if (fn != null)
+						{
+							fn(obj);
+						}
+					}
+				},
+				function(res)
+				{
+					//console.trace('DRAFT: Save error');
+					
+					if (err != null)
+					{
+						err(obj);
+					}
+				}, false, 'text/plain', 'Created by Draw.io');
+	   	};
+	   	
+		function showTemplateDialog()
+		{
+			if (AC.draftEnabled)
+			{
+				editor.contentWindow.postMessage(JSON.stringify({action: 'template', callback: true}), '*');
+			}
+			else
+			{
+				editor.contentWindow.postMessage(JSON.stringify({action: 'template'}), '*');
+			}
+		};
+		
+		function promptName(name, err, errKey)
+		{
+			editor.contentWindow.postMessage(JSON.stringify({action: 'prompt',
+				titleKey: 'filename', okKey: 'save', defaultValue: name || '' }), '*');
+			
+			if (err != null || errKey != null)
+			{
+				editor.contentWindow.postMessage(JSON.stringify({action: 'dialog',
+					titleKey: 'error', message: err, messageKey: errKey,
+					buttonKey: 'ok'}), '*');
+			}
+		};
+		
+		function checkName(name, fn, err)
+		{
+			if (name == null || name.length == 0)
+			{
+				err(name, 'Filename too short');
+			}
+			else if (/[&\*+=\\;/{}|\":<>\?~]/g.test(name))
+			{
+				err(name, 'Invalid characters \\ / | : { } < > & + ? = ; * " ~');
+			}
+			else
+			{
+				request({
+					type: 'POST',
+					data: JSON.stringify([pageId]),
+					url: '/rpc/json-rpc/confluenceservice-v2/getAttachments',
+					contentType: 'application/json;charset=UTF-8',
+					success: function(res)
+					{
+						var attachments = JSON.parse(res);
+						
+						if (attachments.error != null)
+						{
+							err(name, attachments.error.message);
+						}
+						else
+						{
+							var draftPattern = new RegExp('^~drawio~.*~' + name.
+								replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + '.tmp$', 'i');
+							var lc = name.toLowerCase();
+							var dn = AC.draftPrefix + lc + AC.draftExtension
+							var fileExists = false;
+
+							// Checks if any files will be overwritten
+							for (var i = 0; i < attachments.length && !fileExists; i++)
+							{
+								// To avoid name clash with new diagrams of other users,
+								// we need to check for ~drawio~.*~filename.tmp
+								var an = attachments[i].fileName.toLowerCase();
+
+								if (an == lc || an == lc + '.png' || (AC.draftEnabled &&
+									(an == dn || draftPattern.test(an))))
+								{
+									fileExists = true;
+								}
+							}
+							
+							if (fileExists)
+							{
+								err(name, null, 'fileExists');
+							}
+							else
+							{
+								fn(name);
+							}
+						}
+					},
+					error: function(res) 
+					{
+						// LATER: What error message to return here?
+						err(name, res);
+					}
+				});
+			}
+		};
+
+	   	var autosaveThread = null;
+	   	var autosaveCounter = 0;
+	   	var currentXml = null;
+
+		// Shows template dialog for new diagrams with no draft state
+		if (initialXml != '')
+		{
+			editor.contentWindow.postMessage(JSON.stringify({action: 'load',
+				autosave: 1, xml: initialXml, title: diagramName,
+				macroData: macroData}), '*');
+		}
+
+		if (draftXml != null)
+		{
+			// Keeps ignore option even for existing files
+			editor.contentWindow.postMessage(JSON.stringify({action: 'draft', xml: draftXml,
+				name: diagramName, discardKey: 'discardChanges', ignore: true}), '*');
+		}
+		else if (initialXml == '')
+		{
+			showTemplateDialog();
+		}
+		
+		var messageListener = function(evt)
+		{
+			if (typeof window.AC !== 'undefined' && evt.origin == hostUrl)
+			{
+				var drawMsg = JSON.parse(evt.data);
+				
+				if (drawMsg.event == 'draft')
+				{
+					if (drawMsg.error != null)
+					{
+						//console.log('DRAFT: error', drawMsg);
+						
+						editor.parentNode.removeChild(editor);
+						var message = messages.error('Draft Read Error', drawMsg.error);
+	    		
+		    				messages.onClose(message, function()
+		    				{
+		    					confluence.closeMacroEditor();
+		    				});
+					}
+					else if (drawMsg.result == 'edit')
+					{
+						// Use draft
+						//console.trace('DRAFT: Using', draftName);
+
+						editor.contentWindow.postMessage(JSON.stringify({action: 'load',
+							autosave: 1, xml: drawMsg.message.xml, title: diagramName}), '*');
+						editor.contentWindow.postMessage(JSON.stringify({action: 'status',
+							messageKey: 'unsavedChanges', modified: true}), '*');
+						draftExists = true;
+					}
+					else
+					{
+						if (initialXml == '' || drawMsg.result == 'ignore')
+						{
+							if (initialXml != '')
+							{
+								editor.contentWindow.postMessage(JSON.stringify({action: 'load',
+									autosave: 1, xml: initialXml, title: diagramName,
+									macroData: macroData}), '*');
+							}
+							else
+							{
+								diagramName = null;
+								showTemplateDialog();
+							}
+						}
+						else
+						{
+							//console.trace('DRAFT: Discarding', draftName);
+							
+							AC.removeAttachment(pageId, draftName);
+						}
+					}	
+				}
+				else if (drawMsg.event == 'template')
+				{
+					editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+						show: true, messageKey: 'inserting'}), '*');
+					
+					checkName(drawMsg.name, function(name)
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+							show: false}), '*');
+						diagramName = name;
+
+						if (AC.draftEnabled)
+						{
+							draftName = '~drawio~' + user + '~' + diagramName + AC.draftExtension;
+							editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+								show: true, messageKey: 'inserting'}), '*');
+							
+							saveDraft(drawMsg.xml, function()
+							{
+								editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+								editor.contentWindow.postMessage(JSON.stringify({action: 'load',
+									autosave: 1, xml: drawMsg.xml, title: diagramName}), '*');
+							},
+							function()
+							{
+								editor.parentNode.removeChild(editor);
+								var message = messages.error('Draft Write Error', 'Draft could not be created');
+			    		
+			    				messages.onClose(message, function()
+			    				{
+			    					confluence.closeMacroEditor();
+			    				});
+							});
+						}
+						else
+						{
+							editor.contentWindow.postMessage(JSON.stringify({action: 'load',
+								autosave: 1, xml: drawMsg.xml, title: diagramName}), '*');
+						}
+					},
+					function(name, err, errKey)
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+							show: false}), '*');
+						editor.contentWindow.postMessage(JSON.stringify({action: 'dialog',
+							titleKey: 'error', message: err, messageKey: errKey,
+							buttonKey: 'ok'}), '*');
+					});
+				}
+				else if (drawMsg.event == 'autosave')
+				{
+					// Saves all changes to draft attachment
+					currentXml = drawMsg.xml;
+					
+					if (autosaveThread == null && AC.draftEnabled)
+					{
+						//console.trace('DRAFT: Starting timer');
+						
+						autosaveThread = window.setTimeout(function()
+						{
+							//console.log('DRAFT: Saving', currentXml);
+							
+							autosaveThread = null
+							saveDraft(currentXml);
+							autosaveCounter++;
+						}, (autosaveCounter == 0) ? 0 : AC.autosaveTimeout);
+					}
+				}
+				else if (drawMsg.event == 'exit') 
+				{
+					removeDraft(function()
+					{
+						confluence.closeMacroEditor();
+					});
+				}
+				else if (drawMsg.event == 'save')
+				{
+					diagramXml = btoa(unescape(encodeURIComponent(drawMsg.xml)));
+					
+					if (diagramName == null)
+					{
+						promptName('');
+					}
+					else
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'export',
+							format: 'png', spinKey: 'saving', message: drawMsg}), '*');
+					}
+				}
+				else if (drawMsg.event == 'prompt')
+				{
+					editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+						show: true, messageKey: 'inserting'}), '*');
+
+					checkName(drawMsg.value, function(name)
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+							show: false}), '*');
+						diagramName = name;
+						editor.contentWindow.postMessage(JSON.stringify({action: 'export',
+							format: 'png', spinKey: 'saving'}), '*');
+					},
+					function(name, err, errKey)
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+							show: false}), '*');
+						promptName(name, err, errKey);
+					});
+				}
+				else if (drawMsg.event == 'export')
+				{
+					// Proceeds from sending the export message by saving the exported files
+					var imageData = drawMsg.data.substring(drawMsg.data.indexOf(',') + 1);
+					var diaWidth = drawMsg.bounds.width / drawMsg.scale;
+					var diaHeight = drawMsg.bounds.height / drawMsg.scale;
+					
+					function showError(key, message)
+					{
+						var msg = {action: 'dialog', titleKey: 'error', modified: true, buttonKey: 'close'};
+						
+						if (message != null)
+						{
+							msg.message = message;
+						}
+						else
+						{
+							msg.messageKey = key || 'errorSavingFile';
+						}
+						
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+						editor.contentWindow.postMessage(JSON.stringify(msg), '*');
+					};
+					
+					function saveError(err) 
+					{
+						var key = null;
+						var message = null;
+						
+						if (err.status == 409) 
+						{
+							diagramName = null;
+							key = 'fileExists';
+						}
+						else if (err.status == 401)
+						{
+							// Session expired
+							message = 'Looks like your session expired. Log in again to keep working. ' +
+								'<a href="' + baseUrl + '/pages/dashboard.action" target="_blank">Login</a>';
+						}
+						
+						showError(key, message);
+					};
+					
+					function successXml(responseText) 
+					{
+						var resp = null;
+						var revision = '1';
+
+						try
+						{
+							resp = JSON.parse(responseText);
+						}
+						catch (e)
+						{
+							// Ignores and use default value for revision
+						}
+
+						// LATER: Get revision from metadata of attachment and check
+						// what condition makes the response not contain an URL
+						if (resp != null && resp.url != null)
+						{
+							revision = resp.url.match(/version=(\d+)/i)[1];
+						}
+						else
+						{
+							// Logs special case where save response has no URL
+							try
+							{
+								var img = new Image();
+								var message = 'Invalid Confluence Cloud response';
+						    		img.src = '/images/2x2.png?msg=' + encodeURIComponent(message) +
+					    				((responseText != null) ? '&resp=' + encodeURIComponent(responseText) : '&resp=[null]');
+						    			'&url=' + encodeURIComponent(window.location.href) +
+						    			'&v=' + encodeURIComponent(EditorUi.VERSION);
+							}
+							catch (err)
+							{
+								// do nothing
+							}
+						}
+
+						function successPng(pngResponseText) 
+						{
+							try
+							{
+								confluence.saveMacro(
+								{
+									diagramName: diagramName,
+									revision: revision,
+									pageId: newPage ? null : pageId,
+									baseUrl: baseUrl,
+									width: diaWidth,
+									height: diaHeight,
+									tbstyle: (drawMsg.macroData != null) ? drawMsg.macroData.tbstyle : '',
+									links: (drawMsg.macroData != null) ? drawMsg.macroData.links : '',
+									lbox: (drawMsg.macroData != null && drawMsg.macroData.lbox != null) ? drawMsg.macroData.lbox : '1',
+									zoom: (drawMsg.macroData != null && drawMsg.macroData.zoom != null) ? drawMsg.macroData.zoom : '1'
+								});
+								
+								if (AC.autoExit || drawMsg.message == null || drawMsg.message.message == null || drawMsg.message.message.exit)
+								{
+									removeDraft(function()
+									{
+										confluence.closeMacroEditor();
+									});
+								}
+								else
+								{
+									editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+									editor.contentWindow.postMessage(JSON.stringify({action: 'status', message: '', modified: false}), '*');
+								}
+							}
+							catch (e)
+							{
+								editor.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+								editor.contentWindow.postMessage(JSON.stringify({action: 'dialog',
+									titleKey: 'errorSavingFile', message: e.message, buttonKey: 'ok'}), '*');
+							}
+						};
+
+						if (diagramName != null) 
+						{
+							AC.saveDiagram(pageId, diagramName + '.png', imageData,
+								successPng, saveError, false, 'image/png');
+						}
+					};
+
+					if (diagramName != null) 
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+							show: true, messageKey: 'saving'}), '*');
+						
+						AC.saveDiagram(pageId, diagramName, diagramXml,
+							successXml, saveError, false, 'text/plain');
+					}
+				}
+			}
+		};
+
+		window.addEventListener('message', messageListener);
+	});
+};
+
+AC.loadDiagram = function (pageId, diagramName, revision, success, error) {
+	// TODO: Get binary
+	
+	AP.require('request', function(request) {
+		request({
+			//TODO find out the ID of the page that actually holds the attachments because historical revisions do not have attachments
+			url: '/download/attachments/' + pageId + '/' + encodeURIComponent(diagramName) +
+				((revision != null) ? '?version=' + revision : ''),
+			success: success,
+			error : error
+		});
+	});
+};
+
+AC.saveDiagram = function(pageId, diagramName, xml, success, error, newSave, mime, comment) 
+{
+	var attachment = {fileName: diagramName, contentType: mime};
+	
+	if (comment != null)
+	{
+		attachment.comment = comment;
+	}
+	
+	var params = [pageId, attachment, xml];
+	
+	loadSucess = function(resp) 
+	{
+		error({status: 409, message: 'File already exists'});
+	};
+	
+	loadError = function(resp)
+	{
+		if (resp.status == 404) // file under given name does not exist means we can proceed with saving 
+		{
+			doSave();
+		}
+		else 
+		{
+			error({status: resp.status, message : resp.statusText });
+		}
+	};
+	
+	var sessionCheck = function(responseText)
+	{
+		if (responseText != null)
+		{
+			var obj = JSON.parse(responseText);
+			
+			if (obj != null && obj.code == -32600)
+			{
+				error({status: 401});
+				
+				return;
+			}
+		}
+		
+		success(responseText);
+	}
+	
+	doSave = function() 
+	{
+		// Workaround for encoding problems
+		var data = JSON.stringify(params);
+
+		AP.require(['request'], function(request) 
+		{
+			request({
+				type: 'POST',
+				data: data,
+				url: '/rpc/json-rpc/confluenceservice-v2/addAttachment',
+				contentType: 'application/json;charset=UTF-8',
+				success: sessionCheck,
+				error: error
+			});
+		});
+	};
+	
+	if(newSave && mime == 'text/plain') 
+	{
+		this.loadDiagram(pageId, diagramName, 0, loadSucess, loadError);
+	}
+	else 
+	{
+		doSave();
+	}
+};
+
+AC.removeAttachment = function(pageId, filename, fn, err)
+{
+	if (pageId != null && filename != null)
+	{
+		AP.require('request', function(request) {
+			request({
+				type: 'POST',
+				data: JSON.stringify([pageId, filename]),
+				url: '/rpc/json-rpc/confluenceservice-v2/removeAttachment',
+				contentType: 'application/json;charset=UTF-8',
+				success: function()
+				{
+					if (fn != null)
+					{
+						fn();
+					}
+				},
+				error: function()
+				{
+					if (err != null)
+					{
+						err();
+					}
+					
+					if (fn != null)
+					{
+						fn();
+					}
+				}
+			});
+		});
+	}
+	else
+	{
+		 fn();
+	}
+};
+
+AC.getMacroData = function(fn) {
+	AP.require('confluence', function(confluence) {
+		confluence.getMacroData(fn);
+	});
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/confluence/admin.html b/src/main/webapp/connect/confluence/admin.html
new file mode 100644
index 0000000000000000000000000000000000000000..ee2752dcac5d69482fc673e84841304e512a1d92
--- /dev/null
+++ b/src/main/webapp/connect/confluence/admin.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="//aui-cdn.atlassian.com/aui-adg/6.0.7/css/aui.min.css" media="all">
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
+<script src="//aui-cdn.atlassian.com/aui-adg/6.0.7/js/aui.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+
+<script type="text/javascript">
+var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+
+var script = document.createElement('script');
+
+function searchContentForMacro(macroName, onSuccess, onError) 
+{
+	url = '/rest/api/content/search?cql=macro=' + macroName;
+	
+	AP.require(['request'], function(request) 
+	{
+		request({
+			type: 'GET',
+			url: '/rest/api/content/search?cql=macro=' + macroName + "&limit=1000",
+			contentType: 'application/json;charset=UTF-8',
+			success: onSuccess,
+			error: onError
+		});
+	});
+};
+
+function getPageContent(pageId, success, error) 
+{
+	AP.require(['request'], function(request) 
+	{
+		request({
+			type: 'GET',
+			url: '/rest/api/content/' + pageId + '/?expand=body.storage',
+			contentType: 'application/json;charset=UTF-8',
+			success: success,
+			error: error
+		});
+	});
+};
+
+function main() 
+{
+	function nsResolver(prefix) 
+	{
+	  var ns = {
+	    'ac' : 'https://www.atlassian.com/software/confluence/ac',
+	    'ri': 'https://www.atlassian.com/software/confluence/ri'
+	  };
+	  return ns[prefix] || null;
+	}
+	
+	function loadPageSuccess(page) 
+	{
+		page = JSON.parse(page);
+		var pageXml = page.body.storage.value.replace(/&/g, '&amp;');
+		
+		var pageDom = new DOMParser().parseFromString('<root xmlns:ac="https://www.atlassian.com/software/confluence/ac">' + pageXml + '</root>', "text/xml");
+		var nodes = pageDom.evaluate( "//ac:structured-macro[@ac:name='gliffy']", pageDom.documentElement, nsResolver, XPathResult.ANY_TYPE, null );
+		var nextMacro = null;
+		var gliffyMacros = [];
+		
+		while(( nextMacro = nodes.iterateNext()) != null) 
+			gliffyMacros.push(nextMacro);
+		
+		for(var i = 0; i < gliffyMacros.length; i++) 
+		{
+			var element = gliffyMacros[i];
+			var nameEl = pageDom.evaluate("ac:parameter[@ac:name='name']", element, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
+			var imageIdEl = pageDom.evaluate("ac:parameter[@ac:name='diagramAttachmentId']", element, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
+			var containerEl = pageDom.evaluate("ac:parameter[@ac:name='containerId']", element, nsResolver, XPathResult.ANY_TYPE, null).iterateNext();
+			
+		};
+		
+		//console.log(new XMLSerializer().serializeToString(pageDom.documentElement))
+		
+	}; 
+	
+	function loadPageError(resp) 
+	{
+		console.log(resp);
+	};
+
+	searchContentForMacro('gliffy', function success(resp) 
+	{
+		var resp = JSON.parse(resp);
+		for(var i = 0; i < resp.results.length; i++) 
+		{
+			var page = resp.results[i];
+			getPageContent(page.id, loadPageSuccess, loadPageError);
+		}
+	}, function error(err) 
+	{
+		console.log(err);
+	});
+};	 
+
+script.onload = function()
+{
+	scriptLoaded = true;
+	main();
+};
+
+script.src = baseUrl + '/atlassian-connect/all.js';
+script.setAttribute('data-options', 'sizeToParent:true;');
+document.getElementsByTagName('head')[0].appendChild(script);
+</script>
+</head>
+
+<body>
+<h6>Gliffy import</h6>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/connect/confluence/admin.js b/src/main/webapp/connect/confluence/admin.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/main/webapp/connect/confluence/connect-dev.json b/src/main/webapp/connect/confluence/connect-dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..7d62d1b65e0b5536db6547f2c3930eec35e7e6d5
--- /dev/null
+++ b/src/main/webapp/connect/confluence/connect-dev.json
@@ -0,0 +1,240 @@
+{
+    "name": "Draw.io gaudenz",
+    "description": "Draw.io add-on for Confluence",
+    "key": "com.mxgraph.confluence.plugins.diagramly",
+    "baseUrl": "https://3f145265.ngrok.io",
+    "vendor": 
+    {
+        "name": "JGraph Ltd.",
+        "url": "https://www.jgraph.com"
+    },
+    "links": {
+        "documentation": "https://support.draw.io/display/DFCC/draw.io+for+Confluence+Cloud"
+    },
+    "version": "1.1.0",
+    "authentication": 
+    {
+        "type": "none"
+    },
+    "modules": 
+    {
+		"generalPages": [
+            {
+                "key": "lightbox",
+                "url": "/connect/confluence/viewer2.html?lightbox=1",
+                "name": {
+                    "value": "Lightbox"
+                }
+            }
+        ],
+        "adminPages": [
+            {
+                "key": "admin",
+                "url": "/connect/confluence/admin.html",
+                "name": {
+                    "value": "draw.io configuration"
+                }
+            }
+        ],
+        "dynamicContentMacros": 
+        [
+            {
+                "name": 
+                {
+                    "i18n": "drawioMacro",
+                    "value": "Draw.io Diagram"
+                },
+                "url": "/connect/confluence/viewer2.html?ceoId=${page.id}&diagramName=${diagramName}&revision=${revision}&width=${width}&height=${height}&tbstyle=${tbstyle}&lbox=${lbox}&zoom=${zoom}&links=${links}&owningPageId=${pageId}",
+                "width": "100%",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "Inserts a new Draw.io Diagram"
+                }, "icon": 
+                {
+		          "width": 128,
+		          "height": 128,
+		          "url": "/images/drawlogo128.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": true,
+                "key": "drawio",
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "diagramName",
+				      "name": 
+				      {
+				        "value": "Diagram name (do not change)"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "autoSize",
+				      "name": 
+				      {
+				        "value": "automatic size"
+				      },
+				      "type": "boolean"
+				    },
+				    {
+				      "identifier": "PageId",
+				      "name": 
+				      {
+				        "value": "Parent page ID"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "baseUrl",
+				      "name": 
+				      {
+				        "value": "Confluence Base URL"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "Diagram width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Diagram Height"
+				      },
+				      "type": "string"
+				    }
+  				],
+  				"editor": {
+				    "url": "/connect/confluence/macroEditor.html?ceoId=${page.id}&diagramName=${diagramName}",
+				    "width": "100%",
+				    "height": "100%"
+				},
+				"imagePlaceholder": {
+				    "width": 500,
+				    "height": 300,
+				    "url": "/connectImage",
+				    "applyChrome": true
+				},
+				"renderModes": {
+		          "default": {
+		            "url": "/connectRender?pageId=${page.id}&diagramName=${diagramName}"
+		          }
+		        }
+            },
+            {
+                "name": 
+                {
+                    "i18n": "drawioMacro",
+                    "value": "Legacy draw.io macro"
+                },
+                "url": "/connect/confluence/viewer.html?ceoId=${page.id}&diagramName=${diagramName}&revision=${revision}&width=${width}&height=${height}",
+                "width": "100%",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "Do not use"
+                }, "icon": 
+                {
+		          "width": 80,
+		          "height": 80,
+		          "url": "/images/stop-flat-icon-80.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": false,
+                "key": "drawio-macro",
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "diagramName",
+				      "name": 
+				      {
+				        "value": "Diagram name (do not change)"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "autoSize",
+				      "name": 
+				      {
+				        "value": "automatic size"
+				      },
+				      "type": "boolean"
+				    },
+				    {
+				      "identifier": "PageId",
+				      "name": 
+				      {
+				        "value": "Parent page ID"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "baseUrl",
+				      "name": 
+				      {
+				        "value": "Confluence Base URL"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "Diagram width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Diagram Height"
+				      },
+				      "type": "string"
+				    }
+  				],
+  				"editor": {
+				    "url": "/connect/confluence/macroEditor.html?ceoId=${page.id}&diagramName=${diagramName}",
+				    "editTitle": {
+				      "value": "Edit MarkDown",
+				      "i18n": "macro.md.edit"
+				    },
+				    "insertTitle": {
+				      "value": "Insert New MarkDown",
+				      "i18n": "macro.md.insert"
+				    },
+				    "width": "100%",
+				    "height": "100%"
+				},
+				"imagePlaceholder": {
+				    "width": 500,
+				    "height": 300,
+				    "url": "/connectImage",
+				    "applyChrome": true
+				},
+				"renderModes": {
+		          "default": {
+		            "url": "/connectRender?pageId=${page.id}&diagramName=${diagramName}&revision=${revision}"
+		          }
+		        }
+            }
+        ]
+    },
+    "scopes": [
+    "read",
+    "write",
+    "delete"
+  	]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/confluence/connect.json b/src/main/webapp/connect/confluence/connect.json
new file mode 100644
index 0000000000000000000000000000000000000000..350b3f326954ffcb3e71c7bbe3ea6b1891257a66
--- /dev/null
+++ b/src/main/webapp/connect/confluence/connect.json
@@ -0,0 +1,240 @@
+{
+    "name": "draw.io",
+    "description": "Draw.io add-on for Confluence",
+    "key": "com.mxgraph.confluence.plugins.diagramly",
+    "baseUrl": "https://www.draw.io",
+    "enableLicensing": true,
+    "vendor": 
+    {
+        "name": "JGraph Ltd.",
+        "url": "https://www.jgraph.com"
+    },
+    "links": {
+        "documentation": "https://support.draw.io/display/DFCC/draw.io+for+Confluence+Cloud"
+    },
+    "version": "2.0.0",
+    "authentication": 
+    {
+        "type": "none"
+    },
+    "modules": 
+    {
+		"generalPages": [
+            {
+                "key": "lightbox",
+                "url": "/connect/confluence/viewer2.html?lightbox=1",
+                "name": {
+                    "value": "Lightbox"
+                }
+            }
+        ],
+        "dynamicContentMacros": 
+        [
+            {
+                "name": 
+                {
+                    "i18n": "drawioMacro",
+                    "value": "Draw.io Diagram"
+                },
+                "url": "/connect/confluence/viewer2.html?ceoId=${page.id}&diagramName=${diagramName}&revision=${revision}&width=${width}&height=${height}&tbstyle=${tbstyle}&lbox=${lbox}&zoom=${zoom}&links=${links}&owningPageId=${pageId}",
+                "width": "100%",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "Inserts a new Draw.io Diagram"
+                }, "icon": 
+                {
+		          "width": 128,
+		          "height": 128,
+		          "url": "/images/drawlogo128.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": true,
+                "key": "drawio",
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "diagramName",
+				      "name": 
+				      {
+				        "value": "Diagram name (do not change)"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "autoSize",
+				      "name": 
+				      {
+				        "value": "automatic size"
+				      },
+				      "type": "boolean"
+				    },
+				    {
+				      "identifier": "PageId",
+				      "name": 
+				      {
+				        "value": "Parent page ID"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "baseUrl",
+				      "name": 
+				      {
+				        "value": "Confluence Base URL"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "Diagram width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Diagram Height"
+				      },
+				      "type": "string"
+				    }
+  				],
+  				"editor": {
+				    "url": "/connect/confluence/macroEditor.html?ceoId=${page.id}&diagramName=${diagramName}",
+				    "width": "100%",
+				    "height": "100%",
+				    "editTitle":
+				    {
+				    	"value" : "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
+				    },
+				    "insertTitle":
+				    {
+				    	"value" : "--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
+				    }
+				},
+				"imagePlaceholder": {
+				    "width": 500,
+				    "height": 300,
+				    "url": "/connectImage",
+				    "applyChrome": false
+				},
+				"renderModes": {
+		          "default": {
+		            "url": "/connectRender?pageId=${page.id}&diagramName=${diagramName}"
+		          }
+		        }
+            },
+            {
+                "name": 
+                {
+                    "i18n": "drawioMacro",
+                    "value": "Legacy macro - do not use"
+                },
+                "url": "/connect/confluence/viewer.html?ceoId=${page.id}&diagramName=${diagramName}&revision=${revision}&width=${width}&height=${height}",
+                "width": "100%",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "Do not use"
+                }, "icon": 
+                {
+		          "width": 80,
+		          "height": 80,
+		          "url": "/images/stop-flat-icon-80.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": false,
+                "key": "drawio-macro",
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "diagramName",
+				      "name": 
+				      {
+				        "value": "Diagram name (do not change)"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "autoSize",
+				      "name": 
+				      {
+				        "value": "automatic size"
+				      },
+				      "type": "boolean"
+				    },
+				    {
+				      "identifier": "PageId",
+				      "name": 
+				      {
+				        "value": "Parent page ID"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "baseUrl",
+				      "name": 
+				      {
+				        "value": "Confluence Base URL"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "Diagram width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Diagram Height"
+				      },
+				      "type": "string"
+				    }
+  				],
+  				"editor": {
+				    "url": "/connect/confluence/macroEditor.html?ceoId=${page.id}&diagramName=${diagramName}",
+				    "editTitle": {
+				      "value": "Edit MarkDown",
+				      "i18n": "macro.md.edit"
+				    },
+				    "insertTitle": {
+				      "value": "Insert New MarkDown",
+				      "i18n": "macro.md.insert"
+				    },
+				    "width": "100%",
+				    "height": "100%"
+				},
+				"imagePlaceholder": {
+				    "width": 500,
+				    "height": 300,
+				    "url": "/connectImage",
+				    "applyChrome": true
+				},
+				"renderModes": {
+		          "default": {
+		            "url": "/connectRender?pageId=${page.id}&diagramName=${diagramName}&revision=${revision}"
+		          }
+		        }
+            }
+        ]
+    },
+    "scopes": [
+    "read",
+    "write",
+    "delete"
+  	]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/confluence/macroEditor.html b/src/main/webapp/connect/confluence/macroEditor.html
new file mode 100644
index 0000000000000000000000000000000000000000..4df633943d678417a3ecdd4e37b4ec5e88268f86
--- /dev/null
+++ b/src/main/webapp/connect/confluence/macroEditor.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io Editor</title>
+<script type="text/javascript">
+	// To Avoid NPE in ac.js
+	urlParams = {};
+</script>
+<script src="ac.js" type="text/javascript"></script>
+<style type="text/css">
+	html, body {
+	  height:100%;
+	  overflow:hidden;
+	}
+	body {
+		background-color:#ffffff;
+		background-image:url(/images/logo-flat.png);
+		background-repeat:no-repeat;
+		background-position:center;
+		font-family:Arial,Sans-Serif;
+		overflow:hidden;
+		width:100%;
+		margin:0;
+	}
+</style>
+</head>
+<body>
+<script type="text/javascript">
+	var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName('head')[0];
+	
+	var script = document.createElement('script');
+	script.setAttribute('data-options', 'resize:false;margin:false');
+	
+	// Main
+	script.onload = function()
+	{
+		AP.sizeToParent(true);
+		AC.initAsync(baseUrl);
+	};
+	script.src = connectUrl + '/all.js';
+	head.appendChild(script);
+	
+	var link = document.createElement('link');
+	link.type = 'text/css';
+	link.rel = 'stylesheet';
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+</script>
+</body>
+</html>
diff --git a/src/main/webapp/connect/confluence/viewer.html b/src/main/webapp/connect/confluence/viewer.html
new file mode 100644
index 0000000000000000000000000000000000000000..e96c1db31845ca5a7007c81decd673c8e2631320
--- /dev/null
+++ b/src/main/webapp/connect/confluence/viewer.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io viewer</title>
+<link rel="stylesheet" type="text/css" href="../common/styles/plugin/reader.css"></link> 
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+<script src="../common/js/mxProperties.js"></script>
+</head>
+<body style='overflow : none'>
+<div id='graphContainer' style="position: absolute;box-sizing:border-box;"></div>
+<img id='logo' src='../../images/logo.png' style="margin-top : 5px; float : left; clear : left; width : 90px; height : 80px; display : none"/>
+
+<script type="text/javascript">
+	var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName("head")[0];
+	
+	var script = document.createElement("script");
+	script.src = connectUrl + '/all-debug.js';
+	script.setAttribute('data-options', 'resize:false;margin:false');
+
+	script.onload = main;
+	
+	head.appendChild(script);
+	
+	var link = document.createElement("link");
+	link.type = "text/css";
+	link.rel = "stylesheet";
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+	
+	// Redirects clipart images
+	mxUrlConverter.prototype.convert = function(url)
+	{
+		if (this.isEnabled() && this.isRelativeUrl(url))
+		{
+			//we rewrite the URL of the images so diagrams made with draw.io online work in the plugins and vice versa
+			if (url.substring(0,4) == 'img/') 
+			{
+				url = ATLAS_RESOURCE_BASE + '/' + url;
+			}
+			
+			if (url.substring(0,4) == '/img') 
+			{
+				url = ATLAS_RESOURCE_BASE + url;
+			}
+		}
+		
+		return url;
+	};
+	
+	function main()
+	{
+		var maxWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0) - 20;
+
+		var diagramWidth = parseFloat(AC.getUrlParam('width'));
+		var diagramHeight = parseFloat(AC.getUrlParam('height'));
+
+		var viewerOpts = {};
+		viewerOpts.stylePath = '../../styles';
+		viewerOpts.stencilPath = '../../stencils';
+		viewerOpts.imagePath = '../common/images/reader';
+		viewerOpts.border = true;
+		viewerOpts.width = null;
+		viewerOpts.height = null;
+		viewerOpts.autosize = true;
+		viewerOpts.fitWindow = true;
+		viewerOpts.center = true;
+		viewerOpts.viewerToolbar = true;
+		viewerOpts.border = false;
+		viewerOpts.resourcePath = '../common/message';
+		
+		DrawioViewer.prototype.loadGraph = function(diagramName, pageId) 
+		{
+			var reader = this;
+			AC.loadDiagram(pageId, diagramName, AC.getUrlParam('revision'), function(responseText) 
+			{
+				var doc = mxUtils.parseXml(responseText);
+				reader.xmlDoc = doc;
+				reader.filename = diagramName;
+				
+				reader.setGraphXml(doc.documentElement);
+		    });
+		};
+	
+		var graphContainer = document.getElementById('graphContainer');
+		
+		var diagramName = AC.getUrlParam('diagramName');
+		
+		if (diagramName != null && diagramName.length > 0) 
+		{
+			viewer = new DrawioViewer(diagramName , 0, AC.getUrlParam('ceoId'), viewerOpts, null, null, true);
+			viewer.buttons[DrawioViewerActions.ACTUAL_SIZE].visible = false;
+			viewer.buttons[DrawioViewerActions.EDIT].visible = false;
+			viewer.buttons[DrawioViewerActions.REMOVE].visible = false;
+			viewer.buttons[DrawioViewerActions.EXPAND].visible = false;
+			viewer.show(graphContainer);
+			AP.resize('100%', diagramHeight + 40 /* padding for toolbar */);
+		}
+		else 
+		{
+			document.getElementById('logo').style.display = 'block';
+		}
+	
+		AP.require('confluence', function(confluence)
+		{
+			confluence.getMacroData(function(location) 
+			{
+				var pageId = AC.getUrlParam('pageId', true, location);
+				var macroPageId = data.PageId != null ? data.PageId : '';
+				var macroBaseUrl = data.baseUrl != null ? data.baseUrl : '';
+				var macroDiagramName = data.baseUrl != null ? data.diagramName : '';
+				var macroRevision = data.baseUrl != null ? data.revision : '';
+				
+				if (pageId != null && macroPageId != null && macroBaseUrl != null && macroDiagramName != null && macroRevision != null)
+				{
+					if (macroBaseUrl != baseUrl || macroPageId != pageId)
+					{
+						AP.require(['confluence'], function(confluence) 
+						{
+							confluence.saveMacro(
+							{
+								diagramName : macroDiagramName,
+								revision : macroRevision,
+								pageId : pageId,
+								baseUrl : baseUrl
+							});
+						});
+					}
+				}
+			});
+		});
+	}
+</script>
+
+</body>
+</html>
diff --git a/src/main/webapp/connect/confluence/viewer2.html b/src/main/webapp/connect/confluence/viewer2.html
new file mode 100644
index 0000000000000000000000000000000000000000..275477b48052eb5ec1d2eb1212a7399450a6ce79
--- /dev/null
+++ b/src/main/webapp/connect/confluence/viewer2.html
@@ -0,0 +1,423 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io Viewer</title>
+<style type="text/css">
+html, body {
+	height:100%;
+	overflow:hidden;
+}
+body {
+	background-color:#ffffff;
+	background-image:url(/images/logo-flat.png);
+	background-repeat:no-repeat;
+	background-position:center;
+	font-family:Arial,sans-serif;
+	width:100%;
+	margin:0;
+}
+</style>
+</head>
+<body>
+<script type="text/javascript">
+// Parses URL parameters
+function getUrlParam(param)
+{
+	var result = (new RegExp(param + '=([^&]*)')).exec(window.location.search);
+	
+	if (result != null && result.length > 0)
+	{
+		return decodeURIComponent(result[1].replace(/\+/g, '%20'))
+	}
+	
+	return null;
+};
+
+var lightbox = getUrlParam('lightbox') == '1';
+
+if (!lightbox)
+{
+	document.body.style.backgroundImage = 'url(/images/drawlogo256.png)';
+	document.body.style.backgroundSize = 'auto 100%';
+}
+
+// Sets global environment variables
+RESOURCE_BASE = '/resources/dia';
+STENCIL_PATH = '/stencils';
+SHAPES_PATH = '/shapes';
+
+// Overrides browser language with Confluence user language
+var lang = getUrlParam('loc');
+
+// Language is in the Connect URL
+if (lang != null)
+{
+	var dash = lang.indexOf('-');
+	
+	if (dash >= 0)
+	{
+		mxLanguage = lang.substring(0, dash);
+	}
+}
+</script>
+<script type="text/javascript" src="/js/viewer.min.js"></script>
+<script type="text/javascript">
+(function()
+{
+	// Enables dynamic loading of shapes and stencils (same domain)
+	mxStencilRegistry.dynamicLoading = true;
+
+	// Loads the Atlassian API
+	var script = document.createElement('script');
+	var baseUrl = getUrlParam('xdm_e') + getUrlParam('cp');
+
+	// Loads the attachment and renders the diagram
+	var diagramWidth = parseFloat(getUrlParam('width'));
+	var diagramHeight = parseFloat(getUrlParam('height'));
+	var diagramName = getUrlParam('diagramName');
+	
+	//ceoId and owningPageId are IDs of the page that potentially hold the attachment
+	//they will differ when page history is shown, ceoId will be historical version ID,
+	//owningPageId will be the ID of the current version that holds the attachment
+	//ceoId is used as fallback in case owningPageId is not set(should be very rare)
+	var ceoId = getUrlParam('ceoId');
+	var owningPageId = getUrlParam('owningPageId');
+	var revision = getUrlParam('revision');
+	
+	var tbStyle = getUrlParam('tbstyle') || 'top';
+	var links = getUrlParam('links') || 'auto';
+	var enableLightbox = getUrlParam('lbox') != '0';
+	var simpleViewer = false; // unused
+	var tbHeight = (tbStyle == 'top' && !simpleViewer) ? GraphViewer.prototype.toolbarHeight : 0;
+	var zoom = parseFloat(getUrlParam('zoom') || 1);
+	var border = (simpleViewer) ? 0 : 8;
+	
+	if (!lightbox)
+	{
+		document.body.style.backgroundSize = 'auto auto';
+		document.body.style.backgroundImage = 'url(/images/ajax-loader.gif)';
+	}
+	
+	function main()
+	{
+		// Sets initial placeholder size to allow for scrollbars in fit to page width
+		AP.resize('100%', (lightbox) ? '100%' : (diagramHeight * zoom + tbHeight + 2 * border));
+		
+		function showError(msg)
+		{
+			document.body.style.backgroundImage = 'none';
+			document.body.style.padding = '4px';
+			mxUtils.write(document.body, msg);
+			AP.resize('100%', 24);
+		};
+		
+		AP.require(['request', 'dialog', 'messages', 'navigator'], function(request, dialog, messages, navigator)
+		{
+			// Uses pageId from current page as page in macro may be outdated after export
+			navigator.getLocation(function (data)
+		    {
+				var candidateId = (owningPageId != null && owningPageId.length > 0) ? owningPageId : ceoId;
+
+				if (data != null && data.target != null && data.context != null)
+				{
+					candidateId = data.context.contentId;
+				}
+				
+				// Loads the given XML into the viewer
+				function showDiagram(id, backupId, name, revision, page, links)
+				{
+					id = id.toString();
+					
+					if (id != null && id.length > 0 && name != null && name.length > 0) 
+					{
+						// Option currently not available in the UI
+						if (simpleViewer)
+						{
+							document.body.style.backgroundImage = 'none';
+							var img = document.createElement('img');
+							img.style.cssText = 'max-width:100%;';
+							img.setAttribute('src', baseUrl + '/download/attachments/' + id + '/'
+									+ encodeURIComponent(name) + ".png?api=v2"
+									+ (revision != null ? "&version=" + revision : ""));
+							
+							if (zoom != 1)
+							{
+								img.style.width = Math.round(diagramWidth * zoom) + 'px';
+							}
+							
+							document.body.appendChild(img);
+						}
+						else
+						{
+							var serverName = document.referrer;
+							var timeout = 25000;
+							var index1 = serverName.indexOf('//');
+							
+							if (index1 > 0)
+							{
+								var index2 = serverName.indexOf('/', index1 + 2);
+								
+								if (index2 > index1)
+								{
+									serverName = serverName.substring(index1 + 2, index2);
+								}
+							}
+							
+							var acceptResponse = true;
+							
+							var timeoutThread = window.setTimeout(function()
+							{
+								acceptResponse = false;
+								
+								if (lightbox)
+								{
+									var message = messages.error('The connection has timed out', 'The server at ' +
+										serverName + ' is taking too long to respond.');
+									
+									messages.onClose(message, function()
+									{
+										dialog.close();
+									});
+								}
+								else
+								{
+									showError('The connection has timed out: The server at ' +
+										serverName + ' is taking too long to respond.');
+								}
+							}, timeout);
+							
+							request(
+							{
+								url: '/download/attachments/' + id + '/' + encodeURIComponent(name) +
+									((revision != null && revision.length > 0) ? '?version=' + revision : ''),
+								success: function(xml) 
+								{
+							 		window.clearTimeout(timeoutThread);
+									
+							 		if (acceptResponse)
+							 		{
+										document.body.style.backgroundImage = 'none';
+										
+										if (lightbox)
+										{
+											var config = {highlight: '#3572b0', nav: true, lightbox: false};
+											
+											if (links != 'auto')
+											{
+												config.target = links;
+											}
+											
+											var viewer = new GraphViewer(null, null, config);
+											viewer.currentPage = parseInt(page || 0);
+											viewer.lightboxChrome = false;
+											viewer.xml = xml;
+			
+											// Enables layers via flag to avoid toolbar
+											viewer.layersEnabled = true;
+											
+											var ui = viewer.showLocalLightbox();
+											
+											// Destroy lightbox with ui instance
+											var destroy = ui.destroy;
+											ui.destroy = function()
+											{
+												dialog.close();
+												destroy.apply(this, arguments);
+											};
+										}
+										else
+										{
+											// LATER: Fix horizontal alignment ignored with 100% width of iframe
+											// LATER: Fix page scrolling on touch device if trigger event on diagram
+											// LATER: Hide toolbar after second container click for iOS
+											// LATER: Disable responsive resize while lightbox shows
+											var container = document.createElement('div');
+											container.style.cssText = 'position:absolute;box-sizing:border-box;' +
+												'max-width:100%;margin-bottom:' + tbHeight +'px;border:1px solid transparent;';
+											document.body.appendChild(container);
+											var doc = mxUtils.parseXml(xml);
+											
+											var config = {highlight: '#3572b0', 'toolbar-position': tbStyle,
+												nav: true, border: 2, zoom: zoom};
+											
+											if (tbStyle == 'top')
+											{
+												config.title = name;
+											}
+	
+											if (links != 'auto')
+											{
+												config.target = links;
+											}
+											
+											if (!enableLightbox)
+											{
+												config.lightbox = false;
+											}
+											
+											if (tbStyle != 'hidden')
+											{
+												config.toolbar = 'pages zoom layers';
+												config.border = border;
+												
+												if (enableLightbox)
+												{
+													config.toolbar += ' lightbox';
+												}
+											}
+											else
+											{
+												// Workaround for invalid width if no toolbar is present
+												var updateContainerWidth = GraphViewer.prototype.updateContainerWidth;
+												
+												GraphViewer.prototype.updateContainerWidth = function(container, width)
+												{
+													width += 3;
+													updateContainerWidth.apply(this, arguments);
+												};
+											}
+											
+											var viewer = new GraphViewer(container, doc.documentElement, config);
+			
+											// Handles resize of iframe after zoom
+											var graphDoResizeContainer = viewer.graph.doResizeContainer;
+											
+											function updateHeight(height)
+											{
+												AP.resize('100%', (tbHeight == 0) ? Math.ceil(height) : container.offsetHeight + tbHeight);
+											};
+											
+											viewer.graph.doResizeContainer = function(width, height)
+											{
+												graphDoResizeContainer.apply(this, arguments);
+												updateHeight(height);
+											};
+			
+											// Updates the size of the iframe in responsive cases
+											viewer.updateContainerHeight = function(container, height)
+											{
+												updateHeight(height);
+											};
+											
+											updateHeight();
+											
+											viewer.showLightbox = function()
+											{
+								                dialog.create(
+								                {
+								                    header: name,
+								                	key: 'lightbox',
+								                    size: 'fullscreen',
+								                    customData: {id: id, name: name, revision: revision, page: viewer.currentPage, links: links},
+								                    chrome: true
+								                });
+											};
+
+										}
+							 		}
+								},
+								error: function (err)
+								{
+							 		window.clearTimeout(timeoutThread);
+									
+							 		if (err.status == 404 && backupId != null)
+							 		{
+							 			showDiagram(backupId, null, name, revision, page, links);
+							 		}
+							 		else if (acceptResponse)
+							 		{
+										document.body.style.backgroundImage = 'none';
+										showError('Error: ' + err.status);
+							 		}
+								}
+							});
+						}
+					}
+					else
+					{
+						showError('Error: Invalid descriptor');
+					}
+				};
+	
+				if (lightbox)
+				{
+					// Gets the paramters from the customData object in lightbox mode
+					// LATER: Add XML to custom data (does not seem to work)
+					showDiagram(dialog.customData.id, dialog.customData.id, dialog.customData.name, dialog.customData.revision, dialog.customData.page, dialog.customData.links);
+				}
+				else
+				{
+					var myPageId = (owningPageId != null && owningPageId.length > 0) ? owningPageId : ceoId;
+					showDiagram(candidateId, (owningPageId != null && owningPageId.length > 0) ? owningPageId : ceoId, diagramName, revision, null, links);
+				}
+		    });
+		});
+	};
+	
+	mxResources.loadDefaultBundle = false;
+	var bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) ||
+		mxResources.getSpecialBundle(RESOURCE_BASE, mxLanguage);
+
+	// Prefetches asynchronous requests so that below code runs synchronous
+	// Loading the correct bundle (one file) via the fallback system in mxResources. The stylesheet
+	// is compiled into JS in the build process and is only needed for local development.
+	var bundleLoaded = false;
+	var scriptLoaded = false;
+	var validSize = document.documentElement.offsetWidth > 0;
+
+	function mainBarrier()
+	{
+		if (validSize && bundleLoaded && scriptLoaded)
+		{
+			main();
+		}
+	};
+
+	// Disables delayed rendering since the container is created on the fly
+	GraphViewer.prototype.checkVisibleState = false;
+	
+	// Workaround for collapsed panel is to delay main until size is not 0
+	if (!validSize)
+	{
+		var listener = function()
+		{
+			if (document.documentElement.offsetWidth > 0)
+			{
+				window.removeEventListener('resize', listener);
+				validSize = true;
+				mainBarrier();
+			}
+		};
+		
+		window.addEventListener('resize', listener);
+	}
+	
+	mxUtils.getAll([bundle], function(xhr)
+	{
+		// Adds bundle text to resources
+		mxResources.parse(xhr[0].getText());
+		bundleLoaded = true;
+		mainBarrier();
+	});
+
+	script.onload = function()
+	{
+		// Workaround for Google Chrome triggering
+		// no resize event if height is set to 0
+		if (mxClient.IS_GC && !validSize)
+		{
+			AP.resize('100%', 1);
+		}
+		
+		scriptLoaded = true;
+		mainBarrier();
+	};
+
+	script.src = baseUrl + '/atlassian-connect/all.js';
+	script.setAttribute('data-options', 'sizeToParent:true;');
+	document.getElementsByTagName('head')[0].appendChild(script);
+})();
+</script>
+</body>
+</html>
diff --git a/src/main/webapp/connect/gdriveconnector/ac.js b/src/main/webapp/connect/gdriveconnector/ac.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d1b412579aeed59205b9b92bebd0588075b5219
--- /dev/null
+++ b/src/main/webapp/connect/gdriveconnector/ac.js
@@ -0,0 +1,23 @@
+var AC = {};
+
+AC.getUrlParam = function(param, escape, url){
+    try{
+    	var url = url || window.location.search;
+        var regex = new RegExp(param + '=([^&]+)'),
+        data = regex.exec(url)[1];
+        // decode URI with plus sign fix.
+        return (escape) ? window.decodeURIComponent(data.replace(/\+/g, '%20')) : data;
+    } catch (e){
+        return undefined;
+    }
+};
+
+AC.getMetaTag = function(name) {
+	return document.getElementsByTagName('meta')[name].getAttribute('content');
+};
+
+AC.getMacroData = function(fn) {
+	AP.require('confluence', function(confluence) {
+		confluence.getMacroData(fn);
+	});
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/gdriveconnector/macroEditor.html b/src/main/webapp/connect/gdriveconnector/macroEditor.html
new file mode 100644
index 0000000000000000000000000000000000000000..8382f32bec9d3bc5acec4e1aca229e2e6ad91beb
--- /dev/null
+++ b/src/main/webapp/connect/gdriveconnector/macroEditor.html
@@ -0,0 +1,337 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>GDrive Connector Editor</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+<script src="../../js/spin/spin.min.js" type="text/javascript"></script>
+<link rel="stylesheet" href="//aui-cdn.atlassian.com/aui-adg/5.9.12/css/aui.min.css" media="all">
+<style type="text/css">
+body {
+	font-family:Arial, sans-serif;
+	overflow:hidden;
+	height:100%;
+	width:100%;
+	margin:0;
+}
+</style>
+<script type="text/javascript">
+	var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+	var connectUrl = baseUrl + '/atlassian-connect';
+
+	// See https://console.developers.google.com/apis/credentials/oauthclient/671128082532.apps.googleusercontent.com?project=api-project-671128082532&authuser=2
+	var clientId = '671128082532.apps.googleusercontent.com';
+	//var clientId = '798289808817-ep3ols4fa67338do10s9kiat93jqjstt.apps.googleusercontent.com';//test client id
+	
+	var opts =
+	{
+		left: '325px',
+		lines: 12, // The number of lines to draw
+		length: 8, // The length of each line
+		width: 3, // The line thickness
+		radius: 5, // The radius of the inner circle
+		rotate: 0, // The rotation offset
+		color: '#000', // #rgb or #rrggbb
+		speed: 1, // Rounds per second
+		trail: 60, // Afterglow percentage
+		shadow: false, // Whether to render a shadow
+		hwaccel: false, // Whether to use hardware acceleration
+		className: 'spinner', // The CSS class to assign to the spinner
+		zIndex: 2e9 // The z-index (defaults to 2000000000)
+	};
+
+	var spinner = new Spinner(opts);
+	var macroDialog = null;
+	var theParams = null;
+	
+	var head = document.getElementsByTagName("head")[0];
+	oauthToken = null;
+	
+	// Handles timeouts
+	var acceptResponse = true;
+	
+	var timeoutHandler = function()
+	{
+		acceptResponse = false;
+		spinner.stop();
+		alert('The connection has timed out');
+	};
+	
+	var timeoutThread = window.setTimeout(timeoutHandler, 25000);
+	
+	// Waits for both APIs to load in parallel
+	function main()
+	{
+		if (typeof window.AP !== 'undefined' && typeof window.gapi != 'undefined')
+		{
+			spinner.spin(document.getElementById('spinner-container'));
+			gapi.load('auth', { 'callback' : onAuthApiLoad });
+		}
+	};
+	
+	function onAuthApiLoad() 
+	{
+		window.clearTimeout(timeoutThread);
+		spinner.stop();
+		
+		if (acceptResponse)
+		{
+			$("#filePicker").prop('disabled', false);
+			$("#filePicker").click(function(evt) 
+			{
+				evt.preventDefault();
+				
+				window.gapi.auth.authorize({
+					'client_id' : clientId,
+					'scope' : 'https://www.googleapis.com/auth/drive.readonly',
+					'immediate' : false
+				}, handleAuthResult);
+			});
+			
+			if (theParams == null || theParams.fileId == null)
+			{
+				document.getElementById('filePicker').click();
+			}
+		}
+	};
+	
+	function handleAuthResult(authResult) 
+	{
+		if (authResult && !authResult.error) 
+		{
+			oauthToken = authResult.access_token;
+			gapi.load('picker', { 'callback' : createPicker });
+		}
+		else 
+		{
+			alert('Could not connect to Google Drive. Please try again later.');
+		}
+	};
+	
+	function createPicker() 
+	{
+		if (oauthToken)
+		{
+			var view1 = new google.picker.DocsView(google.picker.ViewId.FOLDERS)
+		        	.setParent('root')
+		        	.setIncludeFolders(true)
+				.setSelectFolderEnabled(true)
+				.setMimeTypes('*/*');
+			
+			var view2 = new google.picker.DocsView()
+				.setIncludeFolders(true)
+				.setSelectFolderEnabled(true);
+			
+			var view3 = new google.picker.DocsView()
+				.setEnableTeamDrives(true)
+				.setIncludeFolders(true)
+				.setSelectFolderEnabled(true);
+			
+			var builder = new google.picker.PickerBuilder()
+					.addView(view1)
+					.addView(view2)
+					.addView(view3)
+					.addView(new google.picker.MapsView())
+					.addView(new google.picker.PhotosView())
+					.addView(new google.picker.PhotoAlbumsView())
+					.addView(new google.picker.ImageSearchView())
+					.addView(new google.picker.VideoSearchView())
+					.setOAuthToken(oauthToken)
+					.enableFeature(google.picker.Feature.SUPPORT_TEAM_DRIVES)
+					.setCallback(pickerCallback)
+					.setOrigin(AC.getUrlParam('xdm_e', true))
+					.setSize(860, 600)
+					
+			picker = builder.build();		
+			picker.setVisible(true);
+			macroDialog.getButton("submit").disable();
+		}
+	};
+	
+	function pickerCallback(data) 
+	{
+        if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED)
+        {
+			var doc = data[google.picker.Response.DOCUMENTS][0];
+			var youtubeIdent = 'https://www.youtube.com/watch?v=';
+			
+			if (doc.type == 'document' || doc.type == 'file' || doc.type == 'folder')
+			{
+				id = doc[google.picker.Document.ID];
+				name = doc[google.picker.Document.NAME];
+				mimeType = doc[google.picker.Document.MIME_TYPE];
+			}
+			else if (doc.embedUrl != null)
+			{
+				id = doc.embedUrl;
+				name = doc.type;
+				mimeType = 'url';
+			}
+			else if (doc.url.substring(0, youtubeIdent.length) == youtubeIdent)
+			{
+				// Uses embed URL for Youtube videos
+				id = 'https://www.youtube.com/embed/' + doc.url.substring(youtubeIdent.length);
+				name = doc.name;
+				mimeType = 'url';
+			}
+			else if (doc.thumbnails != null)
+			{
+				// Photos and Videos cannot be shown inside IFrames
+				id = doc.thumbnails[doc.thumbnails.length - 1].url;
+				
+				if (doc.serviceId == 'web' && doc.type == 'photo')
+				{
+					// Uses images with no link to source page
+					name = doc.name;
+					mimeType = 'image';
+				}
+				else
+				{
+					// Name is href for link to source page
+					name = doc.url;
+					mimeType = 'thumb';
+				}
+			}
+			else
+			{
+				id = doc.url;
+				name = doc.name;
+				mimeType = 'url';
+			}
+			
+			$('#fileId').val(id);
+			$('#filename').val(name);
+			$('#mimeType').val(mimeType);
+			loadPreview({ fileId : id, mimeType : mimeType, filename: name});
+        }
+        
+        if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED ||
+        	data[google.picker.Response.ACTION] == google.picker.Action.CANCEL)
+       	{
+        	macroDialog.getButton("submit").enable();
+        }
+    };
+	
+	function loadAtlassianApi() 
+	{
+		var script = document.createElement("script");
+		script.src = connectUrl + '/all.js';
+		script.setAttribute('data-options', 'resize:false;margin:false');
+
+		script.onload = function() 
+		{
+			AP.require([ "confluence", "dialog" ], function(confluence, dialog) 
+			{
+				function onSubmit() 
+				{
+					var macroParams = 
+					{
+						fileId : $('#fileId').val(),
+						filename : $('#filename').val(),
+						width : $('#width').val(),
+						height : $('#height').val(),
+						mimeType : $('#mimeType').val()
+					};
+		
+					confluence.saveMacro(macroParams);
+					confluence.closeMacroEditor();
+					return true;
+				}
+				
+				confluence.getMacroData(function(macroParams) 
+				{
+					
+					if (macroParams != null && Object.keys(macroParams).length > 0) 
+					{
+						loadMacroParameters(macroParams);
+						loadPreview(macroParams);
+						theParams = macroParams;
+					}
+			    });
+				
+				macroDialog = dialog;
+				dialog.getButton("submit").bind(onSubmit);
+				
+				main();
+			});
+		};
+		
+		head.appendChild(script);
+	};
+	
+	function loadGoogleApi() 
+	{
+		var script = document.createElement("script");
+		script.src = "https://apis.google.com/js/api.js?onload=main";
+		head.appendChild(script);
+	};
+	
+	function loadMacroParameters(macroParams) 
+	{
+		$('#fileId').val(macroParams.fileId);    
+		$('#filename').val(macroParams.filename);
+		$('#width').val(macroParams.width);      
+		$('#height').val(macroParams.height);
+		$('#mimeType').val(macroParams.mimeType);
+	};
+	
+	function loadPreview(macroParams) 
+	{
+		$('#preview').empty();
+		var iframe = document.createElement('iframe');
+		var xdm_e = '&xdm_e=' + AC.getUrlParam('xdm_e', true); 
+		var cp = '&cp=' + AC.getUrlParam('cp', true);
+		var mimeTypeParam = '&mimeType=' + macroParams.mimeType;
+		var nameParam = '&filename=' + encodeURIComponent(macroParams.filename);
+		iframe.src = '/connect/gdriveconnector/viewer.html?fileId=' +
+			encodeURIComponent(macroParams.fileId) +
+			xdm_e + cp + mimeTypeParam + nameParam;
+		iframe.setAttribute('frameborder', '0');
+		iframe.width = '100%';
+		iframe.height = '100%';
+		$('#preview').append(iframe);
+	};
+	
+	// Loads APIs in parallel and waits in main
+	loadAtlassianApi();
+	loadGoogleApi();
+</script>
+</head>
+<body style="height:100%;">
+<div style="height:100%;">
+	<div style="height:100%;width:350px;border-right:1px solid #cccccc;position:absolute;top:0px;display:inline-block;">
+		<form class="aui top-label" style="height:100%;top:0px;">
+			<div class="field-group" style="padding-left:15px;">
+				<label for="filename">File name</label> 
+				<input class="text macro-param-input" type="text" id="filename" name="filename" disabled>
+				<button class="aui-button aui-button-primary ap-dialog-submit" id="filePicker" disabled>...</button>
+				<div id="spinner-container"></div>
+				<div class="description">Google Drive file name</div>
+			</div>
+			<div class="field-group" style="padding-left:15px;">
+				<input class="text medium-field" type="hidden" id="fileId" name="fileId">
+				<input class="text medium-field" type="hidden" id="mimeType" name="mimeType">
+			</div>
+			<div class="field-group" style="padding-left:15px;">
+				<label for="width">Width</label> <input class="text medium-field" id="width" value="800">
+				<div class="description">Width of the viewer (px)</div>
+			</div>
+			<div class="field-group" style="padding-left:15px;">
+				<label for="height">Height</label> <input class="text medium-field" id="height" value="600">
+				<div class="description">Height of the viewer (px)</div>
+			</div>
+			<div id="geFooter" style="bottom:0px;text-align:center;padding:3px;padding-bottom:6px;position:absolute;width:100%;">
+				<a href="https://marketplace.atlassian.com/plugins/com.mxgraph.confluence.plugins.driveconnector/cloud/reviews"
+				title="Please help us to 5 stars" target="_blank" style="display:inline;text-decoration:none;color:gray;">
+					<img border="0" align="absmiddle" style="margin-top:-4px;padding-right:5px;"
+						src="/images/glyphicons_star.png"/>Like this free plugin? Please help us to 4 stars.
+				</a>
+			</div>
+		</form>
+	</div>
+	<div id="preview" style="height:100%;left:351px;position:absolute;top:0px;right:0px;display:inline-block;">
+	</div>
+</div>
+</body>
+</html>
diff --git a/src/main/webapp/connect/gdriveconnector/plugin-dev.json b/src/main/webapp/connect/gdriveconnector/plugin-dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..fd130ffaadba7606c1a4abce10729d6dc02c4cc1
--- /dev/null
+++ b/src/main/webapp/connect/gdriveconnector/plugin-dev.json
@@ -0,0 +1,102 @@
+{
+    "name": "Google Drive Connector for Confluence",
+    "description": "Google Drive Connector for Confluence",
+    "key": "com.mxgraph.confluence.plugins.driveconnector",
+    "baseUrl": "https://test.draw.io",
+    "vendor": 
+    {
+        "name": "JGraph ltd.",
+        "url": "https://www.jgraph.com"
+    },
+    "version": "1.0.1",
+    "authentication": 
+    {
+        "type": "none"
+    },
+    "modules": 
+    {
+        "dynamicContentMacros": 
+        [
+            {
+                "name": 
+                {
+                    "i18n": "gdriveconnector",
+                    "value": "Google Drive Connector"
+                },
+                "url": "/connect/gdriveconnector/viewer.html?fileId=${fileId}&filename=${filename}&width=${width}&height=${height}&mimeType=${mimeType}",
+                "width": "600px",
+                "height": "400px",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "Views a Google Drive file"
+                }, "icon": 
+                {
+		          "width": 80,
+		          "height": 80,
+		          "url": "/images/document-google-drive-icon-80.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": true,
+                "key": "gdriveconnector",
+			    "editor": {
+				    "url": "/connect/gdriveconnector/macroEditor.html?fileId=${fileId}&filename=${filename}&width=${width}&height=${height}",
+				    "width": "1200px",
+				    "height": "600px"
+				},
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "fileId",
+				      "name": 
+				      {
+				        "value": "Google Drive file ID"
+				      },
+				      "type": "string",
+				       "hidden": true
+				    },
+				    {
+				      "identifier": "mimeType",
+				      "name": 
+				      {
+				        "value": "Google Drive file mime type"
+				      },
+				      "type": "string",
+				       "hidden": true
+				    },
+				    {
+				      "identifier": "filename",
+				      "name": 
+				      {
+				        "value": "Name of the Google Drive file"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Height"
+				      },
+				      "type": "string"
+				    }
+  				]
+            }
+        ]
+    },
+    "scopes": [
+    "read",
+    "write"
+  	]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/gdriveconnector/plugin.json b/src/main/webapp/connect/gdriveconnector/plugin.json
new file mode 100644
index 0000000000000000000000000000000000000000..c44f4a1b2a1403240cc40f6be1e126f68ee7a9f5
--- /dev/null
+++ b/src/main/webapp/connect/gdriveconnector/plugin.json
@@ -0,0 +1,105 @@
+{
+    "name": "Google Drive Connector for Confluence",
+    "description": "Google Drive Connector for Confluence",
+    "key": "com.mxgraph.confluence.plugins.driveconnector",
+    "baseUrl": "https://drive.draw.io",
+    "vendor": 
+    {
+        "name": "JGraph Ltd.",
+        "url": "https://www.jgraph.com"
+    },
+    "links": {
+        "documentation": "https://desk.draw.io/support/solutions/articles/16000042550"
+    },
+    "version": "1.0.2",
+    "authentication": 
+    {
+        "type": "none"
+    },
+    "modules": 
+    {
+        "dynamicContentMacros": 
+        [
+            {
+                "name": 
+                {
+                    "i18n": "gdriveconnector",
+                    "value": "Google Drive Connector"
+                },
+                "url": "/connect/gdriveconnector/viewer.html?fileId=${fileId}&filename=${filename}&width=${width}&height=${height}&mimeType=${mimeType}",
+                "width": "600px",
+                "height": "400px",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "Views a Google Drive file"
+                }, "icon": 
+                {
+		          "width": 144,
+		          "height": 144,
+		          "url": "/images/google-drive-connector-atlas.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": true,
+                "key": "gdriveconnector",
+			    "editor": {
+				    "url": "/connect/gdriveconnector/macroEditor.html?fileId=${fileId}&filename=${filename}&width=${width}&height=${height}",
+				    "width": "80%",
+				    "height": "60%"
+				},
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "fileId",
+				      "name": 
+				      {
+				        "value": "Google Drive file ID"
+				      },
+				      "type": "string",
+				       "hidden": true
+				    },
+				    {
+				      "identifier": "mimeType",
+				      "name": 
+				      {
+				        "value": "Google Drive file mime type"
+				      },
+				      "type": "string",
+				       "hidden": true
+				    },
+				    {
+				      "identifier": "filename",
+				      "name": 
+				      {
+				        "value": "Name of the Google Drive file"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Height"
+				      },
+				      "type": "string"
+				    }
+  				]
+            }
+        ]
+    },
+    "scopes": [
+    "read",
+    "write"
+  	]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/gdriveconnector/spinner.gif b/src/main/webapp/connect/gdriveconnector/spinner.gif
new file mode 100644
index 0000000000000000000000000000000000000000..054973c97b0d1fddec2722cc42cb68e39d27514c
Binary files /dev/null and b/src/main/webapp/connect/gdriveconnector/spinner.gif differ
diff --git a/src/main/webapp/connect/gdriveconnector/viewer.html b/src/main/webapp/connect/gdriveconnector/viewer.html
new file mode 100644
index 0000000000000000000000000000000000000000..4b2294e9638fe4160535f038043a7f42d5b4914e
--- /dev/null
+++ b/src/main/webapp/connect/gdriveconnector/viewer.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>GDrive Connector Viewer</title>
+<style type="text/css">
+html, body {
+	height:100%;
+	overflow:hidden;
+}
+body {
+	background-image:url(/connect/gdriveconnector/spinner.gif);
+	background-repeat:no-repeat;
+	background-position:center;
+}
+</style>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+</head>
+<body style='overflow : none'>
+<div id="status" style="display : none"><span>Unable to load the Google Drive file.</span></div>
+<script type="text/javascript">
+	var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName("head")[0];
+	
+	var script = document.createElement("script");
+	script.src = connectUrl + '/all.js';
+	script.setAttribute('data-options', 'resize:false;margin:false');
+
+	script.onload = main;
+	
+	head.appendChild(script);
+	
+	var link = document.createElement("link");
+	link.type = "text/css";
+	link.rel = "stylesheet";
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+	
+	var diagramMimeTypes = 'application/mxe,application/vnd.jgraph.mxfile,' +
+		'application/mxr,application/vnd.jgraph.mxfile.realtime,' +
+		'application/vnd.jgraph.mxfile.rtlegacy';
+	
+	var formsMimeType = 'application/vnd.google-apps.form';
+	var folderMimeType = 'application/vnd.google-apps.folder';
+	
+	function main() 
+	{
+		var fileId = AC.getUrlParam('fileId');
+		var width = AC.getUrlParam('width');
+		var height = AC.getUrlParam('height');
+		var name = AC.getUrlParam('filename');
+		var mimeType = AC.getUrlParam('mimeType', true);
+	
+		// Workaround for AP not available for preview in macro editor
+		if (typeof window.AP !== 'undefined')
+		{
+			AP.resize(width, height);
+		}
+
+		// Forces reload of document to override browser cache
+		var nocache = 't=' + new Date().getTime();
+		var url = null;
+				
+		if (fileId == null)
+		{
+			document.body.style.backgroundImage = 'none';
+			document.body.innerHTML = '<img src="/mxgraph/images/error.gif" border="0" align="absmiddle"/>' + 
+				' Error: Missing File ID';
+			AP.resize('100%', '20');
+		}
+		else if (mimeType == 'image')
+		{
+			document.body.style.backgroundImage = 'none';
+			document.body.innerHTML = '<img width="100%" src="' + decodeURIComponent(fileId) +
+				'" border="0"/>';
+		}
+		else if (mimeType == 'thumb')
+		{
+			document.body.style.backgroundImage = 'none';
+			document.body.innerHTML = '<a target="_blank" href="' + decodeURIComponent(name) +
+				'"><img width="100%" src="' + decodeURIComponent(fileId) + '" border="0"/></a>';
+		}
+		else
+		{
+			if (diagramMimeTypes.indexOf(mimeType) > -1) 
+			{
+				// Uses public file URL, fallback implemented in editor
+				var pubUrl = encodeURIComponent('https://drive.google.com/uc?id=' + fileId + '&export=download');
+				var editUrl = encodeURIComponent('https://www.draw.io/#G' + fileId);
+				
+				url = 'https://www.draw.io/?lightbox=1&layers=1&edit=' + editUrl +'#U' + pubUrl;
+			}
+			else if (mimeType == formsMimeType)
+			{
+				url = 'https://docs.google.com/forms/d/' + fileId + '/viewform?' + nocache;
+			}
+			else if (mimeType == folderMimeType)
+			{
+				// Possible view options are #list and #grid
+				url = 'https://drive.google.com/embeddedfolderview?id=' + fileId + '&authuser=0&' + nocache + '#list';
+			}
+			else if (mimeType == 'url')
+			{
+				url = decodeURIComponent(fileId);
+			}
+			else 
+			{
+				url = 'https://drive.google.com/file/d/' + fileId + '/preview?authuser=0&' + nocache;
+			}
+			
+			window.location.href = url;
+		}
+	}
+</script>
+</body>
+</html>
diff --git a/src/main/webapp/connect/jira/ac.js b/src/main/webapp/connect/jira/ac.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a462f210c991d6a133a4028c802d9be9586e1a5
--- /dev/null
+++ b/src/main/webapp/connect/jira/ac.js
@@ -0,0 +1,372 @@
+var AC = {};
+
+AC.getUrlParam = function(param, escape, url){
+    try{
+    	var url = url || window.location.search;
+        var regex = new RegExp(param + '=([^&]+)'),
+        data = regex.exec(url)[1];
+        // decode URI with plus sign fix.
+        return (escape) ? window.decodeURIComponent(data.replace(/\+/g, '%20')) : data;
+    } catch (e){
+        return '';
+    }
+};
+
+AC.getMetaTag = function(name) {
+	return document.getElementsByTagName('meta')[name].getAttribute('content');
+};
+
+AC.openEditor = function(baseUrl, issueId, diagramName)
+{
+	var diagramXml = null;
+	var link = document.createElement('a');
+	link.href = location.href;
+	link.href = link.href; //to have 'host' populated under IE
+	var hostUrl = link.protocol + '//' + link.hostname; 
+	
+	var lang = AC.getUrlParam['loc'];
+	
+	if (lang != null)
+	{
+		var dash = lang.indexOf('-');
+		
+		if (dash >= 0)
+		{
+			lang = lang.substring(0, dash);
+		}
+	}
+
+	var editor = $('<iframe id="editorFrame" frameborder="0" style="overflow:hidden;height:99.5%;width:100%" height="99%" width="100%">');
+	editorUrl = hostUrl + '/?ui=atlas&p=acj&embed=1&modified=unsavedChanges&spin=1&proto=json' + ((lang != null) ? '&lang=' + lang : '');
+	editorUrl += (hostUrl == "http://test.draw.io") ? '&https=0&dev=1' : '';
+	editorUrl += '&issueId=' + issueId;
+	editor.attr('src', editorUrl);
+	editor.appendTo('body');
+	editor = editor[0];
+
+	var messageListener = function(evt)
+	{
+		if (typeof window.AC !== 'undefined' && evt.origin == hostUrl)
+		{
+			var drawMsg = JSON.parse(evt.data);
+			
+			if(drawMsg.event == 'init')
+			{
+				if(diagramName == null)
+					editor.contentWindow.postMessage(JSON.stringify({action: 'load', xml: ''}), '*');
+				else 
+				{
+					AC.loadDiagram(issueId, diagramName, 
+					function(resp) 
+					{
+						editor.contentWindow.postMessage(JSON.stringify({action: 'load', xml: resp}), '*');
+					}, 
+					function(resp) 
+					{
+						if(resp.status == 404)
+						{
+							editor.contentWindow.postMessage(JSON.stringify({action: 'status', messageKey: 'fileNotFound', modified : false}), '*');
+						}
+						else 
+						{
+							editor.contentWindow.postMessage(JSON.stringify({action: 'status', messageKey: 'errorLoadingFile', modified : false}), '*');
+						}
+					});
+				}
+			} 
+			else if (drawMsg.event == 'exit') 
+			{
+				AP.require('dialog', function(dialog){
+					 dialog.close();
+				});
+			}
+			else if (drawMsg.event == 'save')
+			{
+				// Maintains modified state while editor is open
+				editor.contentWindow.postMessage(JSON.stringify({action: 'status', modified: true}), '*');
+				diagramXml = drawMsg.xml;
+				
+				var onSave = function() 
+				{
+					AP.require(['jira', 'dialog'], function (jira, dialog) {
+			            jira.refreshIssuePage();
+			            dialog.close();
+				    });
+				};
+				
+				var onError = function(resp) 
+				{
+					// Post to save servlet to log the diagram XML
+					var payload = {issueId : issueId, filename : diagramName, xml : diagramXml};
+					
+					$.ajax({
+						url : "/connect/jira/save",
+						type : "POST",
+						contentType : "application/json; charset=UTF-8",
+						data : JSON.stringify(payload)
+					});
+
+					var msgKey = null;
+					
+					if (resp.status != null && resp.status == 403)
+					{
+						msgKey = 'errorSavingFileForbidden';
+						alert('Please see this article - https://support.draw.io/pages/viewpage.action?pageId=12877897');
+					}
+					else
+					{
+						msgKey = 'errorSavingFile';
+					}
+					
+					editor.contentWindow.postMessage(JSON.stringify({action: 'status', messageKey: msgKey, modified : true}), '*');
+				};
+				
+				var onErrorNew = function(resp) 
+				{
+					diagramName = null;
+					onError(resp);
+				}
+
+				var askName = function(fileExists)
+				{
+					diagramName = prompt((fileExists) ? 'File exists! Please enter another name' : 'Please name your diagram', diagramName || '');
+
+					if (diagramName != null)
+					{
+						if (diagramName.length < 3)
+						{
+							diagramName = null;
+							alert('Invalid filename, filename too short');
+						}
+						else if (/[&\*+=\\;/{}|\":<>\?]/g.test(diagramName))
+						{
+							diagramName = null;
+							alert('Invalid filename, remove special characters    \\ / | : { } < > & + ? = ; * "');
+						}
+						else
+						{
+							AC.hasDiagram(issueId, diagramName, function(fileExists) 
+							{
+								if (fileExists) 
+								{
+									askName(true);
+								}
+								else 
+								{
+									AC.saveDiagram(issueId, diagramName, diagramXml, onSave, onErrorNew);
+								}
+							});
+						}
+					}
+				};
+				
+				if (diagramName == null)
+				{
+					askName(false);
+				}
+				else
+				{
+					AC.deleteDiagram(issueId, diagramName, function() 
+					{
+						AC.saveDiagram(issueId, diagramName, diagramXml, onSave, onError);
+					}, onError);
+				}
+			}
+			/*else if (drawMsg.event == 'save') 
+			{
+				editor.contentWindow.postMessage(JSON.stringify({action: 'export', format: 'xmlpng', spinKey: 'saving'}), '*');
+			}*/
+		}
+	};
+
+	window.addEventListener('message', messageListener);
+};
+
+AC.loadDiagram = function (issueId, diagramName, success, error) 
+{
+	function load(diagramId) 
+	{
+		AP.require('request', function(request) {
+			request({
+				url: '/secure/attachment/' + diagramId + '/' + diagramName,
+				success: success,
+				error : error
+			});
+		});
+	};
+	
+	AC.getDiagramId(issueId, diagramName, load, error); 
+	
+};
+
+AC.getDiagramId = function(issueId, diagramName, success, error) 
+{
+	AC.listDiagrams(issueId, function(diagrams) 
+	{
+		var diagramId = null;
+		for(var i=0; i< diagrams.length; i++) 
+		{
+			if(diagrams[i].filename == diagramName)
+			{
+				diagramId = diagrams[i].id;
+				break;
+			}
+		} 
+		success(diagramId);
+		
+	}, error);
+	
+};
+
+AC.saveDiagram = function(issueId, diagramName, xml, success, error) 
+{
+	var blob = new Blob([xml], {type : 'application/drawio'});
+	var file = new File([blob], diagramName, {type : 'application/drawio'});
+
+    var headers = new Object();
+    headers["X-Atlassian-Token"] = "nocheck";
+
+    AP.require('request', function (request) {
+        request({
+            url: "/rest/api/2/issue/" + issueId + "/attachments",
+            type: "POST",
+            data: {file : file},
+            contentType: "multipart/form-data",
+            headers: headers,
+            success: success,
+            error : error
+        });
+    });
+};
+
+AC.deleteDiagram = function(issueId, diagramName, success, error) 
+{
+	//files creates via server are owned by the "addon_com.mxgraph.jira.plugins.drawio" user, so they can only be deleted by it
+	deleteViaServer = function() 
+	{
+		var payload = {clientKey : AC.getClientKey(), issueId : issueId, filename : diagramName};
+		$.ajax({
+			url : "/connect/jira/delete",
+			type : "POST",
+			contentType : "application/json; charset=UTF-8",
+			data : JSON.stringify(payload),
+			success : success,
+			error : error
+		});
+	};
+	
+	deleteViaClient = function(attachmentId) 
+	{
+		AP.require('request', function (request) {
+	        request({
+	            url: "/rest/api/2/attachment/" + attachmentId,
+	            type: "DELETE",
+	            success: success,
+	            error : error
+	        });
+	    });
+	};
+	
+	doDelete = function(attachmentId) 
+	{
+		getMetaSuccess = function(resp) 
+		{
+			resp = JSON.parse(resp);
+			
+			if (resp.author.key == "addon_com.mxgraph.jira.plugins.drawio")
+			{
+				deleteViaServer();
+			}
+			else
+			{
+				deleteViaClient(attachmentId);
+				
+			}
+		};
+		
+		AC.getAttachmentMetaData(attachmentId, getMetaSuccess, error);
+	}
+	
+	AC.getDiagramId(issueId, diagramName, doDelete, error);
+};
+
+AC.getAttachmentMetaData = function(attachmentId, success, error) 
+{
+	AP.require('request', function (request) {
+        request({
+            url: "/rest/api/2/attachment/" + attachmentId,
+            type: "GET",
+            success: success,
+            error : error
+        });
+    });
+};
+
+AC.getUser = function(success, fail) 
+{
+	AP.require(['request'], function(request) 
+	{
+		request({
+			url: '/rest/api/2/myself/',
+			type: 'GET',
+			success: success,
+			error: fail
+		});
+	});
+}
+
+/*
+ * Lists attachments for a given issue
+ */
+AC.listDiagrams = function(issueId, success, fail) 
+{
+	AP.require(['request'], function(request) 
+	{
+		request({
+			url: '/rest/api/2/issue/' + issueId + '?fields=attachment',
+			type: 'GET',
+			success: function(resp) 
+			{
+				var respObj = JSON.parse(resp);
+				var names = [];
+				$.each(respObj.fields.attachment, function(index, value) 
+				{
+					if(value.mimeType == 'application/drawio')
+						names.push({filename : value.filename, id : value.id});
+				});
+				success(names);
+			},
+			error: fail
+		});
+	});
+};
+
+AC.hasDiagram = function(issueId, diagramName, success) 
+{
+	AC.listDiagrams(issueId, function(diagrams)
+	{
+		var hasDiagram = false;
+		for(var i = 0; i < diagrams.length; i++) 
+		{
+			if(diagrams[i].filename == diagramName) 
+			{
+				hasDiagram = true;
+				break;
+			}
+		}
+		
+		success(hasDiagram);
+	}, 
+	function()
+	{
+		console.log(arguments);
+	});
+};
+
+AC.getClientKey = function() 
+{
+	jwt = AC.getUrlParam('jwt');
+	jwtParts = jwt.split('.');
+	claims = JSON.parse(atob(jwtParts[1]));
+	return claims.iss;
+};
\ No newline at end of file
diff --git a/src/main/webapp/connect/jira/connect-dev.json b/src/main/webapp/connect/jira/connect-dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..2d84ad78895e8a104dac8c5fb222b092d49afb23
--- /dev/null
+++ b/src/main/webapp/connect/jira/connect-dev.json
@@ -0,0 +1,93 @@
+{
+     "name": "Draw.io gaudenz",
+     "description": "Draw.io add-on for JIRA",
+     "key": "com.mxgraph.jira.plugins.drawio.gaudenz",
+     "baseUrl": "https://7a8b3ef9.ngrok.io",
+     "vendor": {
+         "name": "JGraph Ltd.",
+         "url": "https://www.jgraph.com"
+     },
+     "authentication": 
+     {
+         "type": "none"
+     },
+     "version": "1.0.4",
+     "scopes": 
+     [
+     	"READ",
+     	"WRITE",
+     	"DELETE"
+	 ],
+     "modules": 
+     {
+      "generalPages": 
+      [
+      	{
+			"url":"/connect/jira/editor2.html?issueId=${issue.id}",
+			"key":"drawioEditor",
+			"name":
+			{
+				"value":"Draw.io Editor"
+			},
+			"location":"hidden"
+		},
+		{
+			"url":"/connect/jira/fullScreenViewer2.html?issueId=${issue.id}",
+			"key":"drawioFullScreenViewer",
+			"name":
+			{
+				"value":"Draw.io Full Screen Viewer"
+			},
+			"location":"hidden"
+		}
+      ],
+	  "webItems": [
+	    {
+	      "location": "operations-attachments",
+	      "weight": 50,
+	      "key": "drawioEditorBlank",
+	      "url": "/connect/jira/editor2.html?issueId=${issue.id}",
+	      "name": {
+	        "value": "Add Draw.io Diagram"
+	      },
+	      "target": 
+	      {
+			"type":"dialog",
+			"options": 
+			{
+				"width":"100%",
+				"height":"100%",
+				"chrome":false
+			}
+		  }
+	    }, 
+	    {
+       	   "key": "drawioEditorDialog",
+	        "name": 
+	        {
+	            "value": "Draw.io Editor"
+	        },
+	        "url": "/connect/jira/editor2.html?issueId=${issue.id}",
+	        "location": "none",
+	        "context": "addon"
+	    }
+	  ],
+	  "webPanels": 
+	  [
+      {
+        "url": "/connect/jira/viewerPanel2.html?issueId=${issue.id}",
+        "location": "atl.jira.view.issue.right.context",
+        "layout": 
+        {
+          "width": "300px"
+        },
+        "weight": 50,
+        "key": "drawioViewerPanel",
+        "name": 
+        {
+          "value": "Draw.io Diagrams"
+        }
+      }
+    ] 
+	}
+ }
\ No newline at end of file
diff --git a/src/main/webapp/connect/jira/connect.json b/src/main/webapp/connect/jira/connect.json
new file mode 100644
index 0000000000000000000000000000000000000000..3fd794709d29b6f70d8bb5ba274f847d5a83441b
--- /dev/null
+++ b/src/main/webapp/connect/jira/connect.json
@@ -0,0 +1,94 @@
+{
+     "name": "draw.io",
+     "description": "Draw.io add-on for JIRA",
+     "key": "com.mxgraph.jira.plugins.drawio",
+     "baseUrl": "https://www.draw.io",
+     "enableLicensing": true,
+     "vendor": {
+         "name": "JGraph Ltd.",
+         "url": "https://www.jgraph.com"
+     },
+     "authentication": 
+     {
+         "type": "none"
+     },
+     "version": "2.0.0",
+     "scopes": 
+     [
+     	"READ",
+     	"WRITE",
+     	"DELETE"
+	 ],
+     "modules": 
+     {
+      "generalPages": 
+      [
+      	{
+			"url":"/connect/jira/editor2.html?issueId=${issue.id}",
+			"key":"drawioEditor",
+			"name":
+			{
+				"value":"Draw.io Editor"
+			},
+			"location":"hidden"
+		},
+		{
+			"url":"/connect/jira/fullScreenViewer2.html?issueId=${issue.id}",
+			"key":"drawioFullScreenViewer",
+			"name":
+			{
+				"value":"Draw.io Full Screen Viewer"
+			},
+			"location":"hidden"
+		}
+      ],
+	  "webItems": [
+	    {
+	      "location": "operations-attachments",
+	      "weight": 50,
+	      "key": "drawioEditorBlank",
+	      "url": "/connect/jira/editor2.html?issueId=${issue.id}",
+	      "name": {
+	        "value": "Add Draw.io Diagram"
+	      },
+	      "target": 
+	      {
+			"type":"dialog",
+			"options": 
+			{
+				"width":"100%",
+				"height":"100%",
+				"chrome":false
+			}
+		  }
+	    }, 
+	    {
+       	   "key": "drawioEditorDialog",
+	        "name": 
+	        {
+	            "value": "Draw.io Editor"
+	        },
+	        "url": "/connect/jira/editor2.html?issueId=${issue.id}",
+	        "location": "none",
+	        "context": "addon"
+	    }
+	  ],
+	  "webPanels": 
+	  [
+      {
+        "url": "/connect/jira/viewerPanel2.html?issueId=${issue.id}",
+        "location": "atl.jira.view.issue.right.context",
+        "layout": 
+        {
+          "width": "300px"
+        },
+        "weight": 50,
+        "key": "drawioViewerPanel",
+        "name": 
+        {
+          "value": "Draw.io Diagrams"
+        }
+      }
+    ] 
+	}
+ }
\ No newline at end of file
diff --git a/src/main/webapp/connect/jira/editor.html b/src/main/webapp/connect/jira/editor.html
new file mode 100644
index 0000000000000000000000000000000000000000..8e7eabbb61ef97bf963025d9cc691f862e314152
--- /dev/null
+++ b/src/main/webapp/connect/jira/editor.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="UTF-8">
+	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+	<script src="ac.js" type="text/javascript"></script>
+	<script type="text/javascript">
+		// Specifies connection mode for touch devices (at least one should be true)
+		var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+		var connectUrl = baseUrl + '/atlassian-connect';
+		var head = document.getElementsByTagName("head")[0];
+		
+		var script = document.createElement("script");
+		script.src = connectUrl + '/all-debug.js';
+		script.setAttribute('data-options', 'resize:false;margin:false');
+
+		script.onload = main;
+		
+		head.appendChild(script);
+		
+		var link = document.createElement("link");
+		link.type = "text/css";
+		link.rel = "stylesheet";
+		link.href = connectUrl + '/all.css';
+		head.appendChild(link);
+		
+		function main()
+		{
+			var issueId = AC.getUrlParam('issueId', true);
+			var channel = AC.getUrlParam('xdm_c', true);
+			
+			AP.require('dialog', function(dialog){
+				  var diagramName = dialog.customData != null ? dialog.customData.diagramName : null;
+				  AC.openEditor(baseUrl, issueId, diagramName);
+			});
+		}
+		
+	</script>
+</head>
+<body>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/connect/jira/editor2.html b/src/main/webapp/connect/jira/editor2.html
new file mode 100644
index 0000000000000000000000000000000000000000..6d61a7a91b7285db549090fc0972466dbddec976
--- /dev/null
+++ b/src/main/webapp/connect/jira/editor2.html
@@ -0,0 +1,416 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io Editor</title>
+<style type="text/css">
+html, body {
+  height:100%;
+  overflow:hidden;
+}
+body {
+	background-color:#ffffff;
+	background-image:url(/images/logo-flat.png);
+	background-repeat:no-repeat;
+	background-position:center;
+	font-family:Arial,sans-serif;
+	width:100%;
+	margin:0;
+}
+iframe {
+	border:0;
+	position:fixed;
+	top:0;
+	left:0;
+	right:0;
+	bottom:0;
+	width:100%;
+	height:100%;
+}
+</style>
+</head>
+<body>
+<script type="text/javascript">
+(function()
+{
+	// Parses URL parameters
+	function getUrlParam(param)
+	{
+		var result = (new RegExp(param + '=([^&]*)')).exec(window.location.search);
+		
+		if (result != null && result.length > 0)
+		{
+			return decodeURIComponent(result[1].replace(/\+/g, '%20'))
+		}
+		
+		return null;
+	};
+
+	// Overrides browser language with Confluence user language
+	var lang = getUrlParam('loc');
+
+	// Language is in the Connect URL
+	if (lang != null)
+	{
+		var dash = lang.indexOf('-');
+		
+		if (dash >= 0)
+		{
+			lang = lang.substring(0, dash);
+		}
+	}
+	
+	// Specifies connection mode for touch devices (at least one should be true)
+	var baseUrl = getUrlParam('xdm_e') + getUrlParam('cp');
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName("head")[0];
+
+	var script = document.createElement('script');
+	script.src = connectUrl + '/all.js';
+	script.setAttribute('data-options', 'resize:false;margin:false');
+
+	script.onload = main;
+	head.appendChild(script);
+	
+	var link = document.createElement('link');
+	link.type = 'text/css';
+	link.rel = 'stylesheet';
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+	
+	// Gets current domain and protocol
+	var link2 = document.createElement('a');
+	link2.href = location.href;
+	link2.href = link2.href; //to have 'host' populated under IE
+	var editorHost = link2.protocol + '//' + link2.hostname;
+	var editorUrl = editorHost + '/?embed=1&p=acj&modified=unsavedChanges&keepmodified=1&spin=1&ui=atlas&proto=json&libraries=1&lang=' + lang;
+	
+	// Injects iframe into page
+	var iframe = document.createElement('iframe');
+	iframe.setAttribute('frameborder', '0');
+
+	var initReceived = false;
+	var xmlReceived = null;
+	var filename = null;
+	var timeout = 25000;
+	
+	function startEditor()
+	{
+		// InitReceived is usually last (iframe loads slower than data)
+		if (initReceived && xmlReceived != null)
+		{
+			// Shows template dialog if diagram is empty
+			if (xmlReceived == '')
+			{
+				iframe.contentWindow.postMessage(JSON.stringify({action: 'template'}), '*');
+			}
+			else
+			{
+				iframe.contentWindow.postMessage(JSON.stringify({action: 'load',
+					xml: xmlReceived, title: filename}), '*');
+			}
+		}
+	};
+	
+	window.addEventListener('message', function(evt)
+	{
+		if (evt.origin == editorHost)
+		{
+			var msg = JSON.parse(evt.data);
+			
+			if (msg.event == 'init')
+			{
+				document.body.style.backgroundImage = 'none';
+				initReceived = true;
+				startEditor();
+			}
+		}
+	});
+	
+	iframe.setAttribute('src', editorUrl);
+	document.body.appendChild(iframe);
+	
+	function main()
+	{
+		var issueId = getUrlParam('issueId');
+
+		AP.sizeToParent(true);
+		AP.require(['dialog', 'request', 'jira', 'messages'], function(dialog, request, jira, messages)
+		{
+			var serverName = document.referrer;
+			var index1 = serverName.indexOf('//');
+			
+			if (index1 > 0)
+			{
+				var index2 = serverName.indexOf('/', index1 + 2);
+				
+				if (index2 > index1)
+				{
+					serverName = serverName.substring(index1 + 2, index2);
+				}
+			}
+			
+			// LATER: Add fallback diagramName lookup via attachment list if name is unique
+			var diagramId = (dialog.customData != null) ? dialog.customData.diagramId : null;
+			var diagramName = (dialog.customData != null) ? dialog.customData.diagramName : null;
+
+		    function error(err, modified)
+		   	{
+		    	iframe.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+            	var obj = JSON.parse(err.responseText);
+            	iframe.contentWindow.postMessage(JSON.stringify({action: 'dialog',
+            		titleKey: 'error', message: obj.errorMessages[0],
+            		modified: modified, buttonKey: 'close'}), '*');
+		   	};
+		   	
+		   	function done(arg)
+		   	{
+		   		jira.refreshIssuePage();
+            	dialog.close();
+		   	};
+		   	
+		   	function saveDiagram(xml, insert)
+		   	{
+		   		try
+		   		{
+					var blob = new Blob([xml], {type: 'application/drawio'});
+				    blob.name = diagramName;
+
+		   			iframe.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+							messageKey: (insert) ? 'inserting' : 'saving'}), '*');
+
+				    // LATER: Update existing attachment if rest call available
+			        request(
+			        {
+			            url: '/rest/api/2/issue/' + issueId + '/attachments',
+			            type: 'POST',
+						//data: formData,
+			            data: {file: blob},
+			            contentType: 'multipart/form-data',
+			            headers: {'X-Atlassian-Token': 'no-check'},
+			            success: function()
+			            {
+			            	if (insert)
+			            	{
+			            		done();
+			            	}
+			            	else
+			            	{
+			            		// Deletes previous diagram
+				    	        request({
+				    	            url: '/rest/api/2/attachment/' + diagramId,
+				    	            type: 'DELETE',
+				    	            success: done,
+				    	            error: function(err)
+				    	            {
+				    	            	// Error deleting last version means concurrent save
+				    	            	// in which case a copy of the attachment is created
+				    	            	// or server-side flow was used, in which case a
+				    	            	// manual delete of the attachment is required.
+				    	            	done();
+				    	            }
+				    	        });
+			            	}
+			            },
+			            error: function(err)
+	    	            {
+	    	            	error(err, true);
+	    	            }
+			        });
+		   		}
+		   		catch (e)
+		   		{
+		   			error({responseText: JSON.stringify({errorMessages: [e.message]})}, true);
+		   		}
+		   	};
+
+		   	// Creates a new diagram
+		   	if (diagramName == null)
+		   	{
+		   		xmlReceived = '';
+		   		filename = null;
+		   		
+				function promptName(name, err, errKey)
+				{
+					iframe.contentWindow.postMessage(JSON.stringify({action: 'prompt',
+						titleKey: 'filename', okKey: 'save', defaultValue: name || '' }), '*');
+					
+					if (err != null || errKey != null)
+					{
+						iframe.contentWindow.postMessage(JSON.stringify({action: 'dialog',
+							titleKey: 'error', message: err, messageKey: errKey,
+							buttonKey: 'ok'}), '*');
+					}
+				};
+				
+				function checkName(name, fn, err)
+				{
+					if (name == null || name.length < 3)
+					{
+						err(name, 'Filename too short');
+					}
+					else if (/[&\*+=\\;/{}|\":<>\?~]/g.test(name))
+					{
+						err(name, 'Invalid characters \\ / | : { } < > & + ? = ; * " ~');
+					}
+					else
+					{
+						request({
+							url: '/rest/api/2/issue/' + issueId + '?fields=attachment',
+							type: 'GET',
+							success: function(resp) 
+							{
+								var respObj = JSON.parse(resp);
+								
+								for (var i = 0; i < respObj.fields.attachment.length; i++)
+								{
+									var attachment = respObj.fields.attachment[i];
+									
+									if (attachment.filename == name)
+									{
+										err(name, null, 'fileExists');
+										
+										return;
+									}
+								}
+								
+								fn(name);
+							},
+							error: function(res) 
+							{
+								var msg = (res.responseText != null && res.responseText) ?
+									res.responseText : res.statusText;
+								
+								try
+								{
+									var tmp = JSON.parse(msg);
+									
+									if (tmp != null && tmp.errorMessages != null &&
+										tmp.errorMessages.length > 0)
+									{
+										msg = tmp.errorMessages[0];
+									}
+								}
+								catch (e)
+								{
+									// ignore
+								}
+								
+								err(name, msg);
+							}
+						});
+					}
+				};
+				
+				var currentXml = null;
+				
+				window.addEventListener('message', function(evt)
+				{
+					if (evt.origin == editorHost)
+					{
+						var msg = JSON.parse(evt.data);
+						
+						if (msg.event == 'save')
+						{
+							currentXml = msg.xml;
+							
+							if (diagramName != null)
+							{
+								saveDiagram(msg.xml, true);
+							}
+							else
+							{
+								promptName('');
+							}
+						}
+						else if (msg.event == 'prompt')
+						{
+							iframe.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+								show: true, messageKey: 'inserting'}), '*');
+
+							checkName(msg.value, function(name)
+							{
+								iframe.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+									show: false}), '*');
+								diagramName = name;
+								saveDiagram(currentXml, true);
+							},
+							function(name, err, errKey)
+							{
+								iframe.contentWindow.postMessage(JSON.stringify({action: 'spinner',
+									show: false}), '*');
+								promptName(name, err, errKey);
+							});
+						}
+						else if (msg.event == 'exit')
+						{
+							dialog.close();
+						}
+					}
+				});
+		   	}
+		   	else
+		   	{
+				var acceptResponse = true;
+				
+				var timeoutThread = window.setTimeout(function()
+				{
+					acceptResponse = false;
+					var message = messages.error('The connection has timed out', 'The server at ' +
+						serverName + ' is taking too long to respond.');
+					
+    				messages.onClose(message, function()
+    				{
+    					dialog.close();
+    				});
+    				
+					iframe.contentWindow.postMessage(JSON.stringify({action: 'spinner', show: false}), '*');
+				}, timeout);
+				
+				request({
+					url: '/secure/attachment/' + diagramId + '/' + encodeURIComponent(diagramName),
+					success: function(xml)
+					{
+			    		window.clearTimeout(timeoutThread);
+			    		
+			    		if (acceptResponse)
+				    	{
+							filename = diagramName;
+							xmlReceived = xml;
+							startEditor();
+							
+							window.addEventListener('message', function(evt)
+							{
+								if (evt.origin == editorHost)
+								{
+									var msg = JSON.parse(evt.data);
+									
+									if (msg.event == 'save')
+									{
+										saveDiagram(msg.xml, false);
+									}
+									else if (msg.event == 'exit')
+									{
+										dialog.close();
+									}
+								}
+							});
+						}
+					},
+					error: function()
+					{
+			    		window.clearTimeout(timeoutThread);
+			    		
+			    		if (acceptResponse)
+				    	{
+							done();
+				    	}
+					}
+				});
+		   	}
+		});
+	};
+})();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/connect/jira/fullScreenViewer.html b/src/main/webapp/connect/jira/fullScreenViewer.html
new file mode 100644
index 0000000000000000000000000000000000000000..112755e30b6d6e1525f05b9a7336bbe963b76c2e
--- /dev/null
+++ b/src/main/webapp/connect/jira/fullScreenViewer.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+<script src="../common/js/mxProperties.js"></script>
+<script src="../common/js/mxReader.js"></script>
+<link rel="stylesheet" type="text/css" href="../common/styles/plugin/reader.css"></link> 
+</head>
+<body>
+<span id="drawio-viewer" style="position : relative; display : block;">
+	<span id="drawio-viewer-content" style="position : relative; display : block;">
+	</span>
+</span>
+<script type="text/javascript">
+		// Specifies connection mode for touch devices (at least one should be true)
+		var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+		var connectUrl = baseUrl + '/atlassian-connect';
+		var head = document.getElementsByTagName("head")[0];
+		
+		var script = document.createElement("script");
+		script.src = connectUrl + '/all-debug.js';
+		script.setAttribute('data-options', 'resize:false;margin:false');
+		 
+		script.onload = main;
+		
+		head.appendChild(script);
+		
+		var link = document.createElement("link");
+		link.type = "text/css";
+		link.rel = "stylesheet";
+		link.href = connectUrl + '/all.css';
+		head.appendChild(link);
+	
+		function main()
+		{
+			var issueId = AC.getUrlParam('issueId', true);
+			
+			AP.require('dialog', function(dialog) {
+		        
+	        	var diagramName = dialog.customData != null ? dialog.customData.diagramName : null;  
+	            
+	            DrawioViewer.prototype.loadGraph = function() 
+				{
+					var reader = this;
+					AC.loadDiagram(issueId, diagramName, mxUtils.bind(this, function(responseText) 
+					{
+						var doc = mxUtils.parseXml(responseText);
+						this.xmlDoc = doc;
+						this.setGraphXml(doc.documentElement);
+						this.graph.center(true, false);
+						
+				    }), mxUtils.bind(this,  function() 
+				    {
+						this.showEvaluationWarning(mxResources.get('error'));
+						this.graph.container.style.border = this.options.border ? '1px solid #DDDDDD' : 'none';
+						this.graph.container.style.backgroundColor = '#ffffff';
+						this.graph.container.style.height = '20px';
+				    }));
+				};
+				
+				
+				var viewerOpts = {};
+				viewerOpts.stylePath = '../../styles';
+				viewerOpts.stencilPath = '../../stencils';
+				viewerOpts.imagePath = '../common/images/reader';
+				viewerOpts.border = true;
+				viewerOpts.width = screen.availWidth - 30;
+				viewerOpts.height = screen.availHeight - 120;
+				viewerOpts.center = true;
+				viewerOpts.viewerToolbar = true;
+				viewerOpts.resourcePath = '../common/viewer';
+				
+				viewer = new DrawioViewer(diagramName , 0, issueId, viewerOpts, true, null, true);
+				viewer.buttons[DrawioViewerActions.ZOOM_TO_FIT].visible = false;
+				viewer.buttons[DrawioViewerActions.EXPAND].visible = false;
+				viewer.buttons[DrawioViewerActions.EDIT].visible = false;
+				viewer.buttons[DrawioViewerActions.REMOVE].visible = false;
+				viewer.buttons[DrawioViewerActions.CLOSE].visible = true;
+				viewer.buttons[DrawioViewerActions.CLOSE].clickHandler = function() 
+				{
+					AP.require('dialog', function(dialog){
+						 dialog.close();
+					});
+				};
+				container = $('#drawio-viewer-content')[0];
+				viewer.show(container);
+				
+				AP.resize('50%', '50%');
+		    });
+			
+		}
+		
+</script>
+
+</body>
+</html>
diff --git a/src/main/webapp/connect/jira/fullScreenViewer2.html b/src/main/webapp/connect/jira/fullScreenViewer2.html
new file mode 100644
index 0000000000000000000000000000000000000000..78734c5200ce31881de81c8f65009d798bec3a8e
--- /dev/null
+++ b/src/main/webapp/connect/jira/fullScreenViewer2.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io Viewer</title>
+<style type="text/css">
+html, body {
+	height:100%;
+	overflow:hidden;
+}
+body {
+	background-color:#ffffff;
+	background-image:url(/images/logo-flat.png);
+	background-repeat:no-repeat;
+	background-position:center;
+	font-family:Arial,sans-serif;
+	width:100%;
+	margin:0;
+}
+</style>
+<script type="text/javascript">
+// Parses URL parameters
+function getUrlParam(param)
+{
+	var result = (new RegExp(param + '=([^&]*)')).exec(window.location.search);
+	
+	if (result != null && result.length > 0)
+	{
+		return decodeURIComponent(result[1].replace(/\+/g, '%20'))
+	}
+	
+	return null;
+};
+
+// Sets global environment variables
+RESOURCE_BASE = '/resources/dia';
+STENCIL_PATH = '/stencils';
+SHAPES_PATH = '/shapes';
+
+// Overrides browser language with Confluence user language
+var lang = getUrlParam('loc');
+
+// Language is in the Connect URL
+if (lang != null)
+{
+	var dash = lang.indexOf('-');
+	
+	if (dash >= 0)
+	{
+		mxLanguage = lang.substring(0, dash);
+	}
+}
+</script>
+<script type="text/javascript" src="/js/viewer.min.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+	// Enables dynamic loading of shapes and stencils (same domain)
+	mxStencilRegistry.dynamicLoading = true;
+
+	// Specifies connection mode for touch devices (at least one should be true)
+	var baseUrl = getUrlParam('xdm_e') + getUrlParam('cp');
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName('head')[0];
+	
+	var script = document.createElement('script');
+	script.setAttribute('data-options', 'resize:false;margin:false');
+	
+	head.appendChild(script);
+	
+	var link = document.createElement('link');
+	link.type = "text/css";
+	link.rel = "stylesheet";
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+	
+	function main()
+	{
+		AP.resize('100%', '100%');
+		
+		AP.require(['request', 'dialog', 'jira', 'messages'], function(request, dialog, jira, messages)
+		{
+			var diagramId = (dialog.customData != null) ? dialog.customData.diagramId : null;
+	       	var diagramName = (dialog.customData != null) ? dialog.customData.diagramName : null;  
+	    	var serverName = document.referrer;
+	    	var timeout = 25000;
+	    	var index1 = serverName.indexOf('//');
+	    	
+	    	if (index1 > 0)
+	    	{
+	    		var index2 = serverName.indexOf('/', index1 + 2);
+	    		
+	    		if (index2 > index1)
+	    		{
+	    			serverName = serverName.substring(index1 + 2, index2);
+	    		}
+	    	}
+	    	
+			var acceptResponse = true;
+			
+			var timeoutThread = window.setTimeout(function()
+			{
+				acceptResponse = false;
+				var message = messages.error('The connection has timed out', 'The server at ' +
+					serverName + ' is taking too long to respond.');
+				
+				messages.onClose(message, function()
+				{
+					dialog.close();
+				});
+			}, timeout);
+	    	
+	       	// LATER: Add fallback using diagramName lookup via attachment list
+			request({
+				url: '/secure/attachment/' + diagramId + '/' + encodeURIComponent(diagramName),
+				success: function(xml)
+				{
+		    		window.clearTimeout(timeoutThread);
+		    		
+		    		if (acceptResponse)
+			    	{
+		    			document.body.style.backgroundImage = 'none';
+						var viewer = new GraphViewer(null, null, {highlight: '#3572b0', nav: true, lightbox: false});
+						viewer.currentPage = parseInt(((dialog.customData != null) ? dialog.customData.page : null) || 0);
+						viewer.lightboxChrome = false;
+						viewer.xml = xml;
+	
+						// Enables layers via flag to avoid toolbar
+						viewer.layersEnabled = true;
+						
+						var ui = viewer.showLocalLightbox();
+						
+						// Destroy lightbox with ui instance
+						var destroy = ui.destroy;
+						ui.destroy = function()
+						{
+							dialog.close();
+							destroy.apply(this, arguments);
+						};
+			    	}
+				},
+				error : mxUtils.bind(this,  function() 
+				{
+		    		window.clearTimeout(timeoutThread);
+		    		
+		    		if (acceptResponse)
+			    	{
+						jira.refreshIssuePage();
+						dialog.close();
+			    	}
+				})
+			});
+	    });			
+	}
+	
+	mxResources.loadDefaultBundle = false;
+	var bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) ||
+		mxResources.getSpecialBundle(RESOURCE_BASE, mxLanguage);
+
+	// Prefetches asynchronous requests so that below code runs synchronous
+	// Loading the correct bundle (one file) via the fallback system in mxResources. The stylesheet
+	// is compiled into JS in the build process and is only needed for local development.
+	var bundleLoaded = false;
+	var scriptLoaded = false;
+	
+	function mainBarrier()
+	{
+		if (bundleLoaded && scriptLoaded)
+		{
+			main();
+		}
+	};
+	
+	mxUtils.getAll([bundle], function(xhr)
+	{
+		// Adds bundle text to resources
+		mxResources.parse(xhr[0].getText());
+		bundleLoaded = true;
+		mainBarrier();
+	});
+
+	script.onload = function()
+	{
+		scriptLoaded = true;
+		mainBarrier();
+	};
+	
+	script.src = connectUrl + '/all.js';
+</script>
+
+</body>
+</html>
diff --git a/src/main/webapp/connect/jira/viewerPanel.html b/src/main/webapp/connect/jira/viewerPanel.html
new file mode 100644
index 0000000000000000000000000000000000000000..284ee1aea425c3507a83a234ce2c8e6e02df1359
--- /dev/null
+++ b/src/main/webapp/connect/jira/viewerPanel.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Insert title here</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+<script src="../common/js/mxProperties.js"></script>
+<script src="../common/js/mxReader.js"></script>
+<link rel="stylesheet" type="text/css" href="../common/styles/plugin/reader.css"></link> 
+</head>
+<body style="max-width : 99%">
+
+<script type="text/javascript">
+		// Specifies connection mode for touch devices (at least one should be true)
+		var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+		var connectUrl = baseUrl + '/atlassian-connect';
+		var head = document.getElementsByTagName("head")[0];
+		
+		var script = document.createElement("script");
+		script.src = connectUrl + '/all-debug.js';
+		script.setAttribute('data-options', 'resize:false;margin:false');
+		 
+		script.onload = main;
+		
+		head.appendChild(script);
+		
+		var link = document.createElement("link");
+		link.type = "text/css";
+		link.rel = "stylesheet";
+		link.href = connectUrl + '/all.css';
+		head.appendChild(link);
+		
+		function main()
+		{
+			var issueId = AC.getUrlParam('issueId', true);
+			
+			function loadDiagrams(diagramsList) 
+			{
+				var count = diagramsList.length; //number of diagrams
+				$wrapperDiv = null;
+				
+				$.each(diagramsList, function(index, diagramIdName) 
+				{
+					$wrapperDiv = $('<div></div>');
+					
+					$wrapperDiv.append($('<div align="center">' + diagramIdName.filename + '</div>'));	
+					$container = $('<span id="drawio-viewer-' + index + '" style="position : relative; display : block">' +
+					'<span id="drawio-viewer-content-' + index + '" style="position : relative; display : block; max-height: 405px; height: 405px"></span></span>');
+					$wrapperDiv.append($container);
+					
+					$("body").append($wrapperDiv);
+					
+					DrawioViewer.prototype.loadGraph = function() 
+					{
+						var reader = this;
+						AC.loadDiagram(issueId, diagramIdName.filename, mxUtils.bind(this, function(responseText) 
+						{
+							var doc = mxUtils.parseXml(responseText);
+							this.xmlDoc = doc;
+							this.setGraphXml(doc.documentElement);
+					    }), mxUtils.bind(this,  function() 
+					    {
+							this.showWarning(mxResources.get('error'));
+							this.graph.container.style.border = this.options.border ? '1px solid #DDDDDD' : 'none';
+							this.graph.container.style.backgroundColor = '#ffffff';
+							this.graph.container.style.height = '20px';
+					    }));
+					};
+					
+					var viewerOpts = {};
+					viewerOpts.stylePath = '../../styles';
+					viewerOpts.stencilPath = '../../stencils';
+					viewerOpts.imagePath = '../common/images/reader';
+					viewerOpts.border = true;
+					viewerOpts.width = null;
+					viewerOpts.height = null;
+					viewerOpts.center = true;
+					viewerOpts.viewerToolbar = true;
+					viewerOpts.resourcePath = '../common/viewer';
+					
+					viewerOpts.userCanEdit = true;
+					viewerOpts.userCanRemove = true;
+					
+					viewer = new DrawioViewer(diagramIdName.filename , index, issueId, viewerOpts, null, null, true);
+					viewer.buttons[DrawioViewerActions.ACTUAL_SIZE].visible = false;
+					viewer.buttons[DrawioViewerActions.EDIT].visible = true;
+					viewer.buttons[DrawioViewerActions.EDIT].linkButton = false;
+					viewer.buttons[DrawioViewerActions.EDIT].clickHandler = function() 
+					{
+						//loads an editor in a dialog
+						AP.require('dialog', function(dialog) 
+						{
+							dialog.create(
+							{
+							   key: 'drawioEditor',
+							   width: '100%',
+							   height: '100%',
+							   chrome: false,
+							   customData : {diagramName : diagramIdName.filename}
+							});					
+						});
+					};
+					viewer.buttons[DrawioViewerActions.EXPAND].visible = true;
+					viewer.buttons[DrawioViewerActions.EXPAND].linkButton = false;
+					viewer.buttons[DrawioViewerActions.EXPAND].clickHandler = function() 
+					{
+						//loads an editor in a dialog
+						AP.require('dialog', function(dialog) 
+						{
+							dialog.create(
+							{
+							   key: 'drawioFullScreenViewer',
+							   width: '100%',
+							   height: '100%',
+							   chrome: false,
+							   customData : {diagramName : diagramIdName.filename}
+							});					
+						});
+					};
+					
+					viewer.buttons[DrawioViewerActions.REMOVE].visible = true;
+					viewer.buttons[DrawioViewerActions.REMOVE].linkButton = false;
+					viewer.buttons[DrawioViewerActions.REMOVE].clickHandler = function() 
+					{
+						success = function() 
+						{
+							AP.require(['jira', 'dialog'], function (jira, dialog) {
+					            jira.refreshIssuePage();
+						    });
+						};
+						
+						var error = function(resp) 
+						{
+							
+							resp = JSON.parse(resp.responseText);
+							this.showWarning(resp.errorMessages[0]);
+						};
+						
+						if (confirm(mxResources.get('diagramly.reader.confirmDelete')))
+						{
+							AC.deleteDiagram(issueId, diagramIdName.filename, success, error);
+						}
+					};
+					viewer.show($('#drawio-viewer-content-' + index)[0]);
+				});
+
+				if($wrapperDiv != null)
+					AP.resize('100%', count * ($wrapperDiv.height() + 25 ) + 'px');
+			};
+			
+			function fail() 
+			{
+
+				AP.resize('100%', '0px');
+			};
+			
+			AC.listDiagrams(issueId, loadDiagrams, fail); 
+			
+		}
+		
+</script>
+
+</body>
+</html>
diff --git a/src/main/webapp/connect/jira/viewerPanel2.html b/src/main/webapp/connect/jira/viewerPanel2.html
new file mode 100644
index 0000000000000000000000000000000000000000..0e829aec54fd61784bdc4e79351d1f44fb804cec
--- /dev/null
+++ b/src/main/webapp/connect/jira/viewerPanel2.html
@@ -0,0 +1,382 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io Viewer</title>
+<style type="text/css">
+html, body {
+	height:100%;
+	overflow:hidden;
+}
+body {
+	font-family:Arial,sans-serif;
+	width:100%;
+	margin:0;
+}
+</style>
+</head>
+<body>
+<script type="text/javascript">
+//Parses URL parameters
+function getUrlParam(param)
+{
+	var result = (new RegExp(param + '=([^&]*)')).exec(window.location.search);
+	
+	if (result != null && result.length > 0)
+	{
+		return decodeURIComponent(result[1].replace(/\+/g, '%20'))
+	}
+	
+	return null;
+};
+
+// Sets global environment variables
+RESOURCE_BASE = '/resources/dia';
+STENCIL_PATH = '/stencils';
+SHAPES_PATH = '/shapes';
+
+// Overrides browser language with JIRA user language
+var lang = getUrlParam('loc');
+
+// Language is in the Connect URL
+if (lang != null)
+{
+	var dash = lang.indexOf('-');
+	
+	if (dash >= 0)
+	{
+		mxLanguage = lang.substring(0, dash);
+	}
+}
+</script>
+<script src="/js/viewer.min.js" type="text/javascript"></script>
+<script type="text/javascript">
+(function()
+{
+	// Enables dynamic loading of shapes and stencils (same domain)
+	mxStencilRegistry.dynamicLoading = true;
+
+	// Specifies connection mode for touch devices (at least one should be true)
+	var baseUrl = getUrlParam('xdm_e') + getUrlParam('cp');
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName("head")[0];
+	
+	var script = document.createElement("script");
+	script.setAttribute('data-options', 'resize:false;margin:false');
+
+	head.appendChild(script);
+	
+	var link = document.createElement("link");
+	link.type = "text/css";
+	link.rel = "stylesheet";
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+	
+	mxResources.loadDefaultBundle = false;
+	var bundle = mxResources.getDefaultBundle(RESOURCE_BASE, mxLanguage) ||
+		mxResources.getSpecialBundle(RESOURCE_BASE, mxLanguage);
+
+	// Prefetches asynchronous requests so that below code runs synchronous
+	// Loading the correct bundle (one file) via the fallback system in mxResources. The stylesheet
+	// is compiled into JS in the build process and is only needed for local development.
+	var bundleLoaded = false;
+	var scriptLoaded = false;
+	
+	function mainBarrier()
+	{
+		if (bundleLoaded && scriptLoaded)
+		{
+			main();
+		}
+	};
+	
+	mxUtils.getAll([bundle], function(xhr)
+	{
+		// Adds bundle text to resources
+		mxResources.parse(xhr[0].getText());
+		bundleLoaded = true;
+		mainBarrier();
+	});
+
+	script.onload = function()
+	{
+		scriptLoaded = true;
+		mainBarrier();
+	};
+	script.src = connectUrl + '/all.js';
+	
+	function main()
+	{
+		var editImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVBAMAAABbObilAAAAD1BMVEUAAAAAAAAQEBBycnIgICBqwj3hAAAAAXRSTlMAQObYZgAAADlJREFUCNdjoBwoChrAmCyGggJwYWVBBSiTSVDICKFa0AEuLCiEJKyAX5gBSZgBSZgBKGwMBKQ7HAAWzQSfKKAyBgAAAABJRU5ErkJggg==';
+		var removeImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVAQMAAACT2TfVAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABlJREFUCNdjQAF/GBj4/x8AYxBg/k80RgYApAUPr950a4AAAAAASUVORK5CYII=';
+		var issueId = getUrlParam('issueId');
+		var serverName = document.referrer;
+		var timeout = 25000;
+		var index1 = serverName.indexOf('//');
+		
+		if (index1 > 0)
+		{
+			var index2 = serverName.indexOf('/', index1 + 2);
+			
+			if (index2 > index1)
+			{
+				serverName = serverName.substring(index1 + 2, index2);
+			}
+		}
+		
+		// Delayed invocation see below
+		function init()
+		{
+			// Workaround to ignore scrollbars when applying fit to available width in all but FF
+			if (!mxClient.IS_FF)
+			{
+				document.body.style.width = document.documentElement.offsetWidth + 'px';
+			}
+			
+			AP.resize('100%', '0px');
+			AP.require(['request', 'dialog', 'jira'], function(request, dialog, jira) 
+			{
+				request({
+					url: '/rest/api/2/issue/' + issueId + '?fields=attachment',
+					type: 'GET',
+					success: function(resp) 
+					{
+						var tbHeight = GraphViewer.prototype.toolbarHeight;
+						var containers = [];
+						var count = 0;
+						
+						function updateHeight()
+						{
+							var h = 0;
+
+							// +2 is needed to include margin
+							for (var i = 0; i < containers.length; i++)
+							{
+								h += containers[i].offsetHeight + tbHeight + 2;
+							}
+							
+							// Restricts the max sidebar panel height
+							h = Math.min(screen.height * 1.5, h);
+							AP.resize('100%', h);
+							
+							// Workaround for iframe scrollbars
+							document.body.style.height = h + 'px';
+						}
+						
+						function finish() 
+						{
+							count--;
+							
+			 				if (count == 0) 
+			 				{
+			 					document.body.style.width = '';
+								updateHeight();
+			 				}
+						}
+	
+						function loadDiagram(value)
+						{
+							count++;
+							var container = document.createElement('div');
+							container.style.cssText = 'position:relative;box-sizing:border-box;margin-bottom:2px;' +
+								'max-width:100%;min-width:100%;border:1px solid transparent;';
+								
+							// Adds filename and ID to side panel
+							var title = document.createElement('div');
+							title.innerHTML = '&ndash; ';
+							mxUtils.write(title, value.filename + ' [' + value.id + ']');
+							var displayName = value.author != null ? value.author.displayName : '';
+							title.setAttribute('title', value.filename + ' [' + value.id + '] - ' + displayName +
+									' ' + new Date(value.created).toLocaleString());
+							title.style.cssText = 'position:relative;box-sizing:border-box;width:100%;padding-top:6px;height:' + tbHeight +
+								'px;margin-bottom:-' + tbHeight + 'px;text-align:left;white-space:nowrap;cursor:pointer;';
+							document.body.appendChild(title);
+							
+							// Simple collapse-expand for diagrams
+							title.addEventListener('click', function()
+							{
+								if (container.style.display != 'none')
+								{
+									title.innerHTML = '+ ';
+									mxUtils.write(title, value.filename + ' [' + value.id + ']');
+									container.style.display = 'none';
+									title.style.marginBottom = '0px';
+								}
+								else
+								{
+									title.innerHTML = '&ndash; ';
+									mxUtils.write(title, value.filename + ' [' + value.id + ']');
+									container.style.display = '';
+									title.style.marginBottom = -tbHeight + 'px';
+								}
+								
+								updateHeight();
+							});
+							
+							document.body.appendChild(container);
+							containers.push(container);
+							var acceptResponse = true;
+							
+							var timeoutThread = window.setTimeout(function()
+							{
+								acceptResponse = false;
+								
+	 							container.style.height = '24px';
+	 							container.style.textAlign = 'center';
+	 							container.style.marginTop = tbHeight + 'px';
+	 							mxUtils.write(container, 'The connection has timed out: The server at ' +
+										serverName + ' is taking too long to respond.');
+	 							finish();
+							}, timeout);
+							
+							// Loads attachment content
+							request({
+								url: '/secure/attachment/' + value.id + '/' + encodeURIComponent(value.filename),
+								success: function(xml)
+								{
+							 		window.clearTimeout(timeoutThread);
+									
+							 		if (acceptResponse)
+							 		{
+										var doc = mxUtils.parseXml(xml);
+			
+										var btnDefs = {
+											'edit': {title: mxResources.get('edit'), enabled: typeof window.Blob !== 'undefined',
+												image: editImage, handler: function()
+											{
+												dialog.create(
+												{
+												   key: 'drawioEditor',
+												   width: '100%',
+												   height: '100%',
+												   chrome: false,
+												   customData : {diagramName: value.filename, diagramId: value.id, page: viewer.currentPage}
+												});
+											}},
+											'remove': {title: mxResources.get('delete'), image: removeImage, handler: function()
+											{
+												if (confirm(mxResources.get('removeIt', [value.filename]) + '?'))
+												{
+									    	        request({
+									    	            url: '/rest/api/2/attachment/' + value.id,
+									    	            type: 'DELETE',
+									    	            success: function()
+									    	            {
+									    	            	jira.refreshIssuePage();
+									    	            },
+									    	            error : function()
+									    	            {
+									    	            	jira.refreshIssuePage();
+									    	            }
+									    	        });
+												}
+											}}
+										};
+										
+										var viewer = new GraphViewer(container, doc.documentElement, {highlight: '#3572b0',
+											'toolbar-position': 'top', toolbar: 'edit pages layers lightbox remove', 'max-height':
+											Math.max(280, document.documentElement.offsetWidth / 1.5), border: 8,
+											/* disables automatic zoom with no buttons */'auto-fit': false,
+											nav: true, title: value.filename + ' [' + value.id + ']', 'toolbar-buttons': btnDefs});
+										
+										// Handles resize of iframe after zoom
+										var graphDoResizeContainer = viewer.graph.doResizeContainer;
+										
+										viewer.graph.doResizeContainer = function(width, height)
+										{
+											graphDoResizeContainer.apply(this, arguments);
+											updateHeight();
+										};
+										
+										// Updates the size of the iframe in responsive cases
+										viewer.updateContainerHeight = function(container, height)
+										{
+											updateHeight();
+										};
+			
+										viewer.showLightbox = function()
+										{
+											dialog.create(
+											{
+							                   header: value.filename + ' [' + value.id + ']',
+											   key: 'drawioFullScreenViewer',
+							                   size: 'fullscreen',
+											   chrome: true,
+											   customData: {diagramName: value.filename, diagramId: value.id, page: viewer.currentPage}
+											});					
+										};
+										
+										finish();
+							 		}
+								},
+								error: mxUtils.bind(this,  function(err, statusText, exc) 
+								{
+							 		window.clearTimeout(timeoutThread);
+									
+							 		if (acceptResponse)
+							 		{
+										container.style.height = '24px';
+										container.style.textAlign = 'center';
+										container.style.marginTop = tbHeight + 'px';
+										mxUtils.write(container, 'Error: ' + err.status);
+										finish();
+							 		}
+							    })
+							});
+						};
+						
+						var respObj = JSON.parse(resp);
+						
+						for (var i = 0; i < respObj.fields.attachment.length; i++)
+						{
+							var attachment = respObj.fields.attachment[i];
+							
+							if (attachment.mimeType == 'application/drawio')
+							{
+								loadDiagram(attachment);
+							}
+						}
+						
+						// Shows message if no files are found
+						if (count == 0)
+						{
+							mxUtils.write(document.body, mxResources.get('noFiles'));
+							AP.resize('100%', '20px');
+						}
+					},
+					error: function() 
+					{
+						AP.resize('100%', '0px');
+					}
+				});
+			});
+		}; // end of init
+		
+		// Workaround for collapsed side panel is to delay init until size is not 0
+		// NOTE: Since container.offsetWidth is 2 in this case the delayed rendering
+		// in the viewer does not triggger. We disable is here to make sure this does
+		// not change in case the container width is zero in the future.
+		GraphViewer.prototype.checkVisibleState = false;
+		
+		if (document.documentElement.offsetWidth == 0)
+		{
+			var listener = function()
+			{
+				if (document.documentElement.offsetWidth > 0)
+				{
+					window.removeEventListener('resize', listener);
+					init();
+				}
+			};
+			
+			window.addEventListener('resize', listener);
+		}
+		else
+		{
+			init();
+		}
+	}
+})();
+</script>
+</body>
+</html>
diff --git a/src/main/webapp/connect/plantuml/ac.js b/src/main/webapp/connect/plantuml/ac.js
new file mode 100644
index 0000000000000000000000000000000000000000..9fc0370272283bceea93a77944d6691dda3d7326
--- /dev/null
+++ b/src/main/webapp/connect/plantuml/ac.js
@@ -0,0 +1,112 @@
+var AC = {};
+
+AC.getUrlParam = function(param, escape, url)
+{
+	try
+	{
+		var url = url || window.location.search;
+		var regex = new RegExp(param + '=([^&]+)'),
+		data = regex.exec(url)[1];
+		
+		// decode URI with plus sign fix.
+		return (escape) ? window.decodeURIComponent(data.replace(/\+/g, '%20')) : data;
+    }
+	catch (e)
+    {
+        return undefined;
+    }
+};
+
+AC.loadDiagram = function (pageId, diagramName, callback)
+{
+	AP.require('request', function(request)
+	{
+		request(
+		{
+			url: '/rest/api/content/' + pageId + '/child/attachment?filename=' + diagramName,
+			type: 'GET',
+			success: callback
+		});
+	});
+};
+
+AC.saveDiagram = function(pageId, diagramName, xml, callback, newSave, contentType, existHandler) 
+{
+	var attachment = { fileName : diagramName, contentType : contentType };
+	var params = [pageId, attachment, xml ];
+	
+	loadCallback = function(resp) 
+	{
+		resp = JSON.parse(resp);
+		
+		if (resp != null && resp.results != null && resp.results.length > 0)
+		{
+			if (existHandler != null)
+			{
+				existHandler();
+			}
+			else
+			{
+				alert('Attachment ' + diagramName + ' already exists. Please choose another name.');
+			}
+		}
+		else 
+		{
+			doSave();
+		}
+	};
+	
+	doSave = function() 
+	{
+		AP.require(['request'], function(request) 
+		{
+			request(
+			{
+				url: '/rpc/json-rpc/confluenceservice-v2/addAttachment',
+				type: 'POST',
+				data: JSON.stringify(params),
+				contentType : 'application/json;charset=UTF-8',
+				success: callback
+			});
+		});
+		//TODO add attachments via REST API
+		 /*var blob = new Blob([xml], {type : contentType});
+		 var file = new File([blob], diagramName);
+		 
+		 var formData = new FormData();
+         formData.append("file", file );
+         console.log("formData: "+formData.toString());
+
+         var headers = new Object();
+         headers["X-Atlassian-Token"] = "nocheck";
+
+         AP.require('request', function (request) {
+             request({
+                 url: "/rest/api/content/" + pageId + "/child/attachment",
+                 type: "POST",
+                 data: formData,
+                 contentType: "multipart/form-data",
+                 headers: headers,
+                 success: success,
+                 error : error
+             });
+         });*/
+	};
+	
+	if(newSave) 
+	{
+		this.loadDiagram(pageId, diagramName, loadCallback);
+	}
+	else 
+	{
+		doSave();
+	}
+};
+
+AC.getMacroData = function(fn)
+{
+	AP.require('confluence', function(confluence)
+	{
+		confluence.getMacroData(fn);
+	});
+}
diff --git a/src/main/webapp/connect/plantuml/deflate.js b/src/main/webapp/connect/plantuml/deflate.js
new file mode 100644
index 0000000000000000000000000000000000000000..336c5c203a32b9c0a94ad364d24ea90d5c833024
--- /dev/null
+++ b/src/main/webapp/connect/plantuml/deflate.js
@@ -0,0 +1,1654 @@
+/* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>
+ * Version: 1.0.1
+ * LastModified: Dec 25 1999
+ */
+
+/* Interface:
+ * data = zip_deflate(src);
+ */
+
+/* constant parameters */
+var zip_WSIZE = 32768;		// Sliding Window size
+var zip_STORED_BLOCK = 0;
+var zip_STATIC_TREES = 1;
+var zip_DYN_TREES    = 2;
+
+/* for deflate */
+var zip_DEFAULT_LEVEL = 6;
+var zip_FULL_SEARCH = true;
+var zip_INBUFSIZ = 32768;	// Input buffer size
+var zip_INBUF_EXTRA = 64;	// Extra buffer
+var zip_OUTBUFSIZ = 1024 * 8;
+var zip_window_size = 2 * zip_WSIZE;
+var zip_MIN_MATCH = 3;
+var zip_MAX_MATCH = 258;
+var zip_BITS = 16;
+// for SMALL_MEM
+var zip_LIT_BUFSIZE = 0x2000;
+var zip_HASH_BITS = 13;
+// for MEDIUM_MEM
+// var zip_LIT_BUFSIZE = 0x4000;
+// var zip_HASH_BITS = 14;
+// for BIG_MEM
+// var zip_LIT_BUFSIZE = 0x8000;
+// var zip_HASH_BITS = 15;
+if(zip_LIT_BUFSIZE > zip_INBUFSIZ)
+    alert("error: zip_INBUFSIZ is too small");
+if((zip_WSIZE<<1) > (1<<zip_BITS))
+    alert("error: zip_WSIZE is too large");
+if(zip_HASH_BITS > zip_BITS-1)
+    alert("error: zip_HASH_BITS is too large");
+if(zip_HASH_BITS < 8 || zip_MAX_MATCH != 258)
+    alert("error: Code too clever");
+var zip_DIST_BUFSIZE = zip_LIT_BUFSIZE;
+var zip_HASH_SIZE = 1 << zip_HASH_BITS;
+var zip_HASH_MASK = zip_HASH_SIZE - 1;
+var zip_WMASK = zip_WSIZE - 1;
+var zip_NIL = 0; // Tail of hash chains
+var zip_TOO_FAR = 4096;
+var zip_MIN_LOOKAHEAD = zip_MAX_MATCH + zip_MIN_MATCH + 1;
+var zip_MAX_DIST = zip_WSIZE - zip_MIN_LOOKAHEAD;
+var zip_SMALLEST = 1;
+var zip_MAX_BITS = 15;
+var zip_MAX_BL_BITS = 7;
+var zip_LENGTH_CODES = 29;
+var zip_LITERALS =256;
+var zip_END_BLOCK = 256;
+var zip_L_CODES = zip_LITERALS + 1 + zip_LENGTH_CODES;
+var zip_D_CODES = 30;
+var zip_BL_CODES = 19;
+var zip_REP_3_6 = 16;
+var zip_REPZ_3_10 = 17;
+var zip_REPZ_11_138 = 18;
+var zip_HEAP_SIZE = 2 * zip_L_CODES + 1;
+var zip_H_SHIFT = parseInt((zip_HASH_BITS + zip_MIN_MATCH - 1) /
+			   zip_MIN_MATCH);
+
+/* variables */
+var zip_free_queue;
+var zip_qhead, zip_qtail;
+var zip_initflag;
+var zip_outbuf = null;
+var zip_outcnt, zip_outoff;
+var zip_complete;
+var zip_window;
+var zip_d_buf;
+var zip_l_buf;
+var zip_prev;
+var zip_bi_buf;
+var zip_bi_valid;
+var zip_block_start;
+var zip_ins_h;
+var zip_hash_head;
+var zip_prev_match;
+var zip_match_available;
+var zip_match_length;
+var zip_prev_length;
+var zip_strstart;
+var zip_match_start;
+var zip_eofile;
+var zip_lookahead;
+var zip_max_chain_length;
+var zip_max_lazy_match;
+var zip_compr_level;
+var zip_good_match;
+var zip_nice_match;
+var zip_dyn_ltree;
+var zip_dyn_dtree;
+var zip_static_ltree;
+var zip_static_dtree;
+var zip_bl_tree;
+var zip_l_desc;
+var zip_d_desc;
+var zip_bl_desc;
+var zip_bl_count;
+var zip_heap;
+var zip_heap_len;
+var zip_heap_max;
+var zip_depth;
+var zip_length_code;
+var zip_dist_code;
+var zip_base_length;
+var zip_base_dist;
+var zip_flag_buf;
+var zip_last_lit;
+var zip_last_dist;
+var zip_last_flags;
+var zip_flags;
+var zip_flag_bit;
+var zip_opt_len;
+var zip_static_len;
+var zip_deflate_data;
+var zip_deflate_pos;
+
+/* constant tables */
+var zip_extra_lbits = new Array(
+    0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0);
+var zip_extra_dbits = new Array(
+    0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13);
+var zip_extra_blbits = new Array(
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7);
+var zip_bl_order = new Array(
+    16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);
+var zip_configuration_table = new Array(
+	new zip_DeflateConfiguration(0,    0,   0,    0),
+	new zip_DeflateConfiguration(4,    4,   8,    4),
+	new zip_DeflateConfiguration(4,    5,  16,    8),
+	new zip_DeflateConfiguration(4,    6,  32,   32),
+	new zip_DeflateConfiguration(4,    4,  16,   16),
+	new zip_DeflateConfiguration(8,   16,  32,   32),
+	new zip_DeflateConfiguration(8,   16, 128,  128),
+	new zip_DeflateConfiguration(8,   32, 128,  256),
+	new zip_DeflateConfiguration(32, 128, 258, 1024),
+	new zip_DeflateConfiguration(32, 258, 258, 4096));
+
+/* objects (deflate) */
+
+function zip_DeflateCT() {
+    this.fc = 0; // frequency count or bit string
+    this.dl = 0; // father node in Huffman tree or length of bit string
+}
+
+function zip_DeflateTreeDesc() {
+    this.dyn_tree = null;	// the dynamic tree
+    this.static_tree = null;	// corresponding static tree or NULL
+    this.extra_bits = null;	// extra bits for each code or NULL
+    this.extra_base = 0;	// base index for extra_bits
+    this.elems = 0;		// max number of elements in the tree
+    this.max_length = 0;	// max bit length for the codes
+    this.max_code = 0;		// largest code with non zero frequency
+}
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+function zip_DeflateConfiguration(a, b, c, d) {
+    this.good_length = a; // reduce lazy search above this match length
+    this.max_lazy = b;    // do not perform lazy search above this match length
+    this.nice_length = c; // quit search above this match length
+    this.max_chain = d;
+}
+
+function zip_DeflateBuffer() {
+    this.next = null;
+    this.len = 0;
+    this.ptr = new Array(zip_OUTBUFSIZ);
+    this.off = 0;
+}
+
+/* routines (deflate) */
+
+function zip_deflate_start(level) {
+    var i;
+
+    if(!level)
+	level = zip_DEFAULT_LEVEL;
+    else if(level < 1)
+	level = 1;
+    else if(level > 9)
+	level = 9;
+
+    zip_compr_level = level;
+    zip_initflag = false;
+    zip_eofile = false;
+    if(zip_outbuf != null)
+	return;
+
+    zip_free_queue = zip_qhead = zip_qtail = null;
+    zip_outbuf = new Array(zip_OUTBUFSIZ);
+    zip_window = new Array(zip_window_size);
+    zip_d_buf = new Array(zip_DIST_BUFSIZE);
+    zip_l_buf = new Array(zip_INBUFSIZ + zip_INBUF_EXTRA);
+    zip_prev = new Array(1 << zip_BITS);
+    zip_dyn_ltree = new Array(zip_HEAP_SIZE);
+    for(i = 0; i < zip_HEAP_SIZE; i++)
+	zip_dyn_ltree[i] = new zip_DeflateCT();
+    zip_dyn_dtree = new Array(2*zip_D_CODES+1);
+    for(i = 0; i < 2*zip_D_CODES+1; i++)
+	zip_dyn_dtree[i] = new zip_DeflateCT();
+    zip_static_ltree = new Array(zip_L_CODES+2);
+    for(i = 0; i < zip_L_CODES+2; i++)
+	zip_static_ltree[i] = new zip_DeflateCT();
+    zip_static_dtree = new Array(zip_D_CODES);
+    for(i = 0; i < zip_D_CODES; i++)
+	zip_static_dtree[i] = new zip_DeflateCT();
+    zip_bl_tree = new Array(2*zip_BL_CODES+1);
+    for(i = 0; i < 2*zip_BL_CODES+1; i++)
+	zip_bl_tree[i] = new zip_DeflateCT();
+    zip_l_desc = new zip_DeflateTreeDesc();
+    zip_d_desc = new zip_DeflateTreeDesc();
+    zip_bl_desc = new zip_DeflateTreeDesc();
+    zip_bl_count = new Array(zip_MAX_BITS+1);
+    zip_heap = new Array(2*zip_L_CODES+1);
+    zip_depth = new Array(2*zip_L_CODES+1);
+    zip_length_code = new Array(zip_MAX_MATCH-zip_MIN_MATCH+1);
+    zip_dist_code = new Array(512);
+    zip_base_length = new Array(zip_LENGTH_CODES);
+    zip_base_dist = new Array(zip_D_CODES);
+    zip_flag_buf = new Array(parseInt(zip_LIT_BUFSIZE / 8));
+}
+
+function zip_deflate_end() {
+    zip_free_queue = zip_qhead = zip_qtail = null;
+    zip_outbuf = null;
+    zip_window = null;
+    zip_d_buf = null;
+    zip_l_buf = null;
+    zip_prev = null;
+    zip_dyn_ltree = null;
+    zip_dyn_dtree = null;
+    zip_static_ltree = null;
+    zip_static_dtree = null;
+    zip_bl_tree = null;
+    zip_l_desc = null;
+    zip_d_desc = null;
+    zip_bl_desc = null;
+    zip_bl_count = null;
+    zip_heap = null;
+    zip_depth = null;
+    zip_length_code = null;
+    zip_dist_code = null;
+    zip_base_length = null;
+    zip_base_dist = null;
+    zip_flag_buf = null;
+}
+
+function zip_reuse_queue(p) {
+    p.next = zip_free_queue;
+    zip_free_queue = p;
+}
+
+function zip_new_queue() {
+    var p;
+
+    if(zip_free_queue != null)
+    {
+	p = zip_free_queue;
+	zip_free_queue = zip_free_queue.next;
+    }
+    else
+	p = new zip_DeflateBuffer();
+    p.next = null;
+    p.len = p.off = 0;
+
+    return p;
+}
+
+function zip_head1(i) {
+    return zip_prev[zip_WSIZE + i];
+}
+
+function zip_head2(i, val) {
+    return zip_prev[zip_WSIZE + i] = val;
+}
+
+/* put_byte is used for the compressed output, put_ubyte for the
+ * uncompressed output. However unlzw() uses window for its
+ * suffix table instead of its output buffer, so it does not use put_ubyte
+ * (to be cleaned up).
+ */
+function zip_put_byte(c) {
+    zip_outbuf[zip_outoff + zip_outcnt++] = c;
+    if(zip_outoff + zip_outcnt == zip_OUTBUFSIZ)
+	zip_qoutbuf();
+}
+
+/* Output a 16 bit value, lsb first */
+function zip_put_short(w) {
+    w &= 0xffff;
+    if(zip_outoff + zip_outcnt < zip_OUTBUFSIZ - 2) {
+	zip_outbuf[zip_outoff + zip_outcnt++] = (w & 0xff);
+	zip_outbuf[zip_outoff + zip_outcnt++] = (w >>> 8);
+    } else {
+	zip_put_byte(w & 0xff);
+	zip_put_byte(w >>> 8);
+    }
+}
+
+/* ==========================================================================
+ * Insert string s in the dictionary and set match_head to the previous head
+ * of the hash chain (the most recent string with same hash key). Return
+ * the previous length of the hash chain.
+ * IN  assertion: all calls to to INSERT_STRING are made with consecutive
+ *    input characters and the first MIN_MATCH bytes of s are valid
+ *    (except for the last MIN_MATCH-1 bytes of the input file).
+ */
+function zip_INSERT_STRING() {
+    zip_ins_h = ((zip_ins_h << zip_H_SHIFT)
+		 ^ (zip_window[zip_strstart + zip_MIN_MATCH - 1] & 0xff))
+	& zip_HASH_MASK;
+    zip_hash_head = zip_head1(zip_ins_h);
+    zip_prev[zip_strstart & zip_WMASK] = zip_hash_head;
+    zip_head2(zip_ins_h, zip_strstart);
+}
+
+/* Send a code of the given tree. c and tree must not have side effects */
+function zip_SEND_CODE(c, tree) {
+    zip_send_bits(tree[c].fc, tree[c].dl);
+}
+
+/* Mapping from a distance to a distance code. dist is the distance - 1 and
+ * must not have side effects. dist_code[256] and dist_code[257] are never
+ * used.
+ */
+function zip_D_CODE(dist) {
+    return (dist < 256 ? zip_dist_code[dist]
+	    : zip_dist_code[256 + (dist>>7)]) & 0xff;
+}
+
+/* ==========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+function zip_SMALLER(tree, n, m) {
+    return tree[n].fc < tree[m].fc ||
+      (tree[n].fc == tree[m].fc && zip_depth[n] <= zip_depth[m]);
+}
+
+/* ==========================================================================
+ * read string data
+ */
+function zip_read_buff(buff, offset, n) {
+    var i;
+    for(i = 0; i < n && zip_deflate_pos < zip_deflate_data.length; i++)
+	buff[offset + i] =
+	    zip_deflate_data.charCodeAt(zip_deflate_pos++) & 0xff;
+    return i;
+}
+
+/* ==========================================================================
+ * Initialize the "longest match" routines for a new file
+ */
+function zip_lm_init() {
+    var j;
+
+    /* Initialize the hash table. */
+    for(j = 0; j < zip_HASH_SIZE; j++)
+//	zip_head2(j, zip_NIL);
+	zip_prev[zip_WSIZE + j] = 0;
+    /* prev will be initialized on the fly */
+
+    /* Set the default configuration parameters:
+     */
+    zip_max_lazy_match = zip_configuration_table[zip_compr_level].max_lazy;
+    zip_good_match     = zip_configuration_table[zip_compr_level].good_length;
+    if(!zip_FULL_SEARCH)
+	zip_nice_match = zip_configuration_table[zip_compr_level].nice_length;
+    zip_max_chain_length = zip_configuration_table[zip_compr_level].max_chain;
+
+    zip_strstart = 0;
+    zip_block_start = 0;
+
+    zip_lookahead = zip_read_buff(zip_window, 0, 2 * zip_WSIZE);
+    if(zip_lookahead <= 0) {
+	zip_eofile = true;
+	zip_lookahead = 0;
+	return;
+    }
+    zip_eofile = false;
+    /* Make sure that we always have enough lookahead. This is important
+     * if input comes from a device such as a tty.
+     */
+    while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile)
+	zip_fill_window();
+
+    /* If lookahead < MIN_MATCH, ins_h is garbage, but this is
+     * not important since only literal bytes will be emitted.
+     */
+    zip_ins_h = 0;
+    for(j = 0; j < zip_MIN_MATCH - 1; j++) {
+//      UPDATE_HASH(ins_h, window[j]);
+	zip_ins_h = ((zip_ins_h << zip_H_SHIFT) ^ (zip_window[j] & 0xff)) & zip_HASH_MASK;
+    }
+}
+
+/* ==========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ */
+function zip_longest_match(cur_match) {
+    var chain_length = zip_max_chain_length; // max hash chain length
+    var scanp = zip_strstart; // current string
+    var matchp;		// matched string
+    var len;		// length of current match
+    var best_len = zip_prev_length;	// best match length so far
+
+    /* Stop when cur_match becomes <= limit. To simplify the code,
+     * we prevent matches with the string of window index 0.
+     */
+    var limit = (zip_strstart > zip_MAX_DIST ? zip_strstart - zip_MAX_DIST : zip_NIL);
+
+    var strendp = zip_strstart + zip_MAX_MATCH;
+    var scan_end1 = zip_window[scanp + best_len - 1];
+    var scan_end  = zip_window[scanp + best_len];
+
+    /* Do not waste too much time if we already have a good match: */
+    if(zip_prev_length >= zip_good_match)
+	chain_length >>= 2;
+
+//  Assert(encoder->strstart <= window_size-MIN_LOOKAHEAD, "insufficient lookahead");
+
+    do {
+//    Assert(cur_match < encoder->strstart, "no future");
+	matchp = cur_match;
+
+	/* Skip to next match if the match length cannot increase
+	    * or if the match length is less than 2:
+	*/
+	if(zip_window[matchp + best_len]	!= scan_end  ||
+	   zip_window[matchp + best_len - 1]	!= scan_end1 ||
+	   zip_window[matchp]			!= zip_window[scanp] ||
+	   zip_window[++matchp]			!= zip_window[scanp + 1]) {
+	    continue;
+	}
+
+	/* The check at best_len-1 can be removed because it will be made
+         * again later. (This heuristic is not always a win.)
+         * It is not necessary to compare scan[2] and match[2] since they
+         * are always equal when the other bytes match, given that
+         * the hash keys are equal and that HASH_BITS >= 8.
+         */
+	scanp += 2;
+	matchp++;
+
+	/* We check for insufficient lookahead only every 8th comparison;
+         * the 256th check will be made at strstart+258.
+         */
+	do {
+	} while(zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		zip_window[++scanp] == zip_window[++matchp] &&
+		scanp < strendp);
+
+      len = zip_MAX_MATCH - (strendp - scanp);
+      scanp = strendp - zip_MAX_MATCH;
+
+      if(len > best_len) {
+	  zip_match_start = cur_match;
+	  best_len = len;
+	  if(zip_FULL_SEARCH) {
+	      if(len >= zip_MAX_MATCH) break;
+	  } else {
+	      if(len >= zip_nice_match) break;
+	  }
+
+	  scan_end1  = zip_window[scanp + best_len-1];
+	  scan_end   = zip_window[scanp + best_len];
+      }
+    } while((cur_match = zip_prev[cur_match & zip_WMASK]) > limit
+	    && --chain_length != 0);
+
+    return best_len;
+}
+
+/* ==========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead, and sets eofile if end of input file.
+ * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0
+ * OUT assertions: at least one byte has been read, or eofile is set;
+ *    file reads are performed for at least two bytes (required for the
+ *    translate_eol option).
+ */
+function zip_fill_window() {
+    var n, m;
+
+    // Amount of free space at the end of the window.
+    var more = zip_window_size - zip_lookahead - zip_strstart;
+
+    /* If the window is almost full and there is insufficient lookahead,
+     * move the upper half to the lower one to make room in the upper half.
+     */
+    if(more == -1) {
+	/* Very unlikely, but possible on 16 bit machine if strstart == 0
+         * and lookahead == 1 (input done one byte at time)
+         */
+	more--;
+    } else if(zip_strstart >= zip_WSIZE + zip_MAX_DIST) {
+	/* By the IN assertion, the window is not empty so we can't confuse
+         * more == 0 with more == 64K on a 16 bit machine.
+         */
+//	Assert(window_size == (ulg)2*WSIZE, "no sliding with BIG_MEM");
+
+//	System.arraycopy(window, WSIZE, window, 0, WSIZE);
+	for(n = 0; n < zip_WSIZE; n++)
+	    zip_window[n] = zip_window[n + zip_WSIZE];
+      
+	zip_match_start -= zip_WSIZE;
+	zip_strstart    -= zip_WSIZE; /* we now have strstart >= MAX_DIST: */
+	zip_block_start -= zip_WSIZE;
+
+	for(n = 0; n < zip_HASH_SIZE; n++) {
+	    m = zip_head1(n);
+	    zip_head2(n, m >= zip_WSIZE ? m - zip_WSIZE : zip_NIL);
+	}
+	for(n = 0; n < zip_WSIZE; n++) {
+	    /* If n is not on any hash chain, prev[n] is garbage but
+	     * its value will never be used.
+	     */
+	    m = zip_prev[n];
+	    zip_prev[n] = (m >= zip_WSIZE ? m - zip_WSIZE : zip_NIL);
+	}
+	more += zip_WSIZE;
+    }
+    // At this point, more >= 2
+    if(!zip_eofile) {
+	n = zip_read_buff(zip_window, zip_strstart + zip_lookahead, more);
+	if(n <= 0)
+	    zip_eofile = true;
+	else
+	    zip_lookahead += n;
+    }
+}
+
+/* ==========================================================================
+ * Processes a new input file and return its compressed length. This
+ * function does not perform lazy evaluationof matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+function zip_deflate_fast() {
+    while(zip_lookahead != 0 && zip_qhead == null) {
+	var flush; // set if current block must be flushed
+
+	/* Insert the string window[strstart .. strstart+2] in the
+	 * dictionary, and set hash_head to the head of the hash chain:
+	 */
+	zip_INSERT_STRING();
+
+	/* Find the longest match, discarding those <= prev_length.
+	 * At this point we have always match_length < MIN_MATCH
+	 */
+	if(zip_hash_head != zip_NIL &&
+	   zip_strstart - zip_hash_head <= zip_MAX_DIST) {
+	    /* To simplify the code, we prevent matches with the string
+	     * of window index 0 (in particular we have to avoid a match
+	     * of the string with itself at the start of the input file).
+	     */
+	    zip_match_length = zip_longest_match(zip_hash_head);
+	    /* longest_match() sets match_start */
+	    if(zip_match_length > zip_lookahead)
+		zip_match_length = zip_lookahead;
+	}
+	if(zip_match_length >= zip_MIN_MATCH) {
+//	    check_match(strstart, match_start, match_length);
+
+	    flush = zip_ct_tally(zip_strstart - zip_match_start,
+				 zip_match_length - zip_MIN_MATCH);
+	    zip_lookahead -= zip_match_length;
+
+	    /* Insert new strings in the hash table only if the match length
+	     * is not too large. This saves time but degrades compression.
+	     */
+	    if(zip_match_length <= zip_max_lazy_match) {
+		zip_match_length--; // string at strstart already in hash table
+		do {
+		    zip_strstart++;
+		    zip_INSERT_STRING();
+		    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+		     * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
+		     * these bytes are garbage, but it does not matter since
+		     * the next lookahead bytes will be emitted as literals.
+		     */
+		} while(--zip_match_length != 0);
+		zip_strstart++;
+	    } else {
+		zip_strstart += zip_match_length;
+		zip_match_length = 0;
+		zip_ins_h = zip_window[zip_strstart] & 0xff;
+//		UPDATE_HASH(ins_h, window[strstart + 1]);
+		zip_ins_h = ((zip_ins_h<<zip_H_SHIFT) ^ (zip_window[zip_strstart + 1] & 0xff)) & zip_HASH_MASK;
+
+//#if MIN_MATCH != 3
+//		Call UPDATE_HASH() MIN_MATCH-3 more times
+//#endif
+
+	    }
+	} else {
+	    /* No match, output a literal byte */
+	    flush = zip_ct_tally(0, zip_window[zip_strstart] & 0xff);
+	    zip_lookahead--;
+	    zip_strstart++;
+	}
+	if(flush) {
+	    zip_flush_block(0);
+	    zip_block_start = zip_strstart;
+	}
+
+	/* Make sure that we always have enough lookahead, except
+	 * at the end of the input file. We need MAX_MATCH bytes
+	 * for the next match, plus MIN_MATCH bytes to insert the
+	 * string following the next match.
+	 */
+	while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile)
+	    zip_fill_window();
+    }
+}
+
+function zip_deflate_better() {
+    /* Process the input block. */
+    while(zip_lookahead != 0 && zip_qhead == null) {
+	/* Insert the string window[strstart .. strstart+2] in the
+	 * dictionary, and set hash_head to the head of the hash chain:
+	 */
+	zip_INSERT_STRING();
+
+	/* Find the longest match, discarding those <= prev_length.
+	 */
+	zip_prev_length = zip_match_length;
+	zip_prev_match = zip_match_start;
+	zip_match_length = zip_MIN_MATCH - 1;
+
+	if(zip_hash_head != zip_NIL &&
+	   zip_prev_length < zip_max_lazy_match &&
+	   zip_strstart - zip_hash_head <= zip_MAX_DIST) {
+	    /* To simplify the code, we prevent matches with the string
+	     * of window index 0 (in particular we have to avoid a match
+	     * of the string with itself at the start of the input file).
+	     */
+	    zip_match_length = zip_longest_match(zip_hash_head);
+	    /* longest_match() sets match_start */
+	    if(zip_match_length > zip_lookahead)
+		zip_match_length = zip_lookahead;
+
+	    /* Ignore a length 3 match if it is too distant: */
+	    if(zip_match_length == zip_MIN_MATCH &&
+	       zip_strstart - zip_match_start > zip_TOO_FAR) {
+		/* If prev_match is also MIN_MATCH, match_start is garbage
+		 * but we will ignore the current match anyway.
+		 */
+		zip_match_length--;
+	    }
+	}
+	/* If there was a match at the previous step and the current
+	 * match is not better, output the previous match:
+	 */
+	if(zip_prev_length >= zip_MIN_MATCH &&
+	   zip_match_length <= zip_prev_length) {
+	    var flush; // set if current block must be flushed
+
+//	    check_match(strstart - 1, prev_match, prev_length);
+	    flush = zip_ct_tally(zip_strstart - 1 - zip_prev_match,
+				 zip_prev_length - zip_MIN_MATCH);
+
+	    /* Insert in hash table all strings up to the end of the match.
+	     * strstart-1 and strstart are already inserted.
+	     */
+	    zip_lookahead -= zip_prev_length - 1;
+	    zip_prev_length -= 2;
+	    do {
+		zip_strstart++;
+		zip_INSERT_STRING();
+		/* strstart never exceeds WSIZE-MAX_MATCH, so there are
+		 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
+		 * these bytes are garbage, but it does not matter since the
+		 * next lookahead bytes will always be emitted as literals.
+		 */
+	    } while(--zip_prev_length != 0);
+	    zip_match_available = 0;
+	    zip_match_length = zip_MIN_MATCH - 1;
+	    zip_strstart++;
+	    if(flush) {
+		zip_flush_block(0);
+		zip_block_start = zip_strstart;
+	    }
+	} else if(zip_match_available != 0) {
+	    /* If there was no match at the previous position, output a
+	     * single literal. If there was a match but the current match
+	     * is longer, truncate the previous match to a single literal.
+	     */
+	    if(zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff)) {
+		zip_flush_block(0);
+		zip_block_start = zip_strstart;
+	    }
+	    zip_strstart++;
+	    zip_lookahead--;
+	} else {
+	    /* There is no previous match to compare with, wait for
+	     * the next step to decide.
+	     */
+	    zip_match_available = 1;
+	    zip_strstart++;
+	    zip_lookahead--;
+	}
+
+	/* Make sure that we always have enough lookahead, except
+	 * at the end of the input file. We need MAX_MATCH bytes
+	 * for the next match, plus MIN_MATCH bytes to insert the
+	 * string following the next match.
+	 */
+	while(zip_lookahead < zip_MIN_LOOKAHEAD && !zip_eofile)
+	    zip_fill_window();
+    }
+}
+
+function zip_init_deflate() {
+    if(zip_eofile)
+	return;
+    zip_bi_buf = 0;
+    zip_bi_valid = 0;
+    zip_ct_init();
+    zip_lm_init();
+
+    zip_qhead = null;
+    zip_outcnt = 0;
+    zip_outoff = 0;
+
+    if(zip_compr_level <= 3)
+    {
+	zip_prev_length = zip_MIN_MATCH - 1;
+	zip_match_length = 0;
+    }
+    else
+    {
+	zip_match_length = zip_MIN_MATCH - 1;
+	zip_match_available = 0;
+    }
+
+    zip_complete = false;
+}
+
+/* ==========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+function zip_deflate_internal(buff, off, buff_size) {
+    var n;
+
+    if(!zip_initflag)
+    {
+	zip_init_deflate();
+	zip_initflag = true;
+	if(zip_lookahead == 0) { // empty
+	    zip_complete = true;
+	    return 0;
+	}
+    }
+
+    if((n = zip_qcopy(buff, off, buff_size)) == buff_size)
+	return buff_size;
+
+    if(zip_complete)
+	return n;
+
+    if(zip_compr_level <= 3) // optimized for speed
+	zip_deflate_fast();
+    else
+	zip_deflate_better();
+    if(zip_lookahead == 0) {
+	if(zip_match_available != 0)
+	    zip_ct_tally(0, zip_window[zip_strstart - 1] & 0xff);
+	zip_flush_block(1);
+	zip_complete = true;
+    }
+    return n + zip_qcopy(buff, n + off, buff_size - n);
+}
+
+function zip_qcopy(buff, off, buff_size) {
+    var n, i, j;
+
+    n = 0;
+    while(zip_qhead != null && n < buff_size)
+    {
+	i = buff_size - n;
+	if(i > zip_qhead.len)
+	    i = zip_qhead.len;
+//      System.arraycopy(qhead.ptr, qhead.off, buff, off + n, i);
+	for(j = 0; j < i; j++)
+	    buff[off + n + j] = zip_qhead.ptr[zip_qhead.off + j];
+	
+	zip_qhead.off += i;
+	zip_qhead.len -= i;
+	n += i;
+	if(zip_qhead.len == 0) {
+	    var p;
+	    p = zip_qhead;
+	    zip_qhead = zip_qhead.next;
+	    zip_reuse_queue(p);
+	}
+    }
+
+    if(n == buff_size)
+	return n;
+
+    if(zip_outoff < zip_outcnt) {
+	i = buff_size - n;
+	if(i > zip_outcnt - zip_outoff)
+	    i = zip_outcnt - zip_outoff;
+	// System.arraycopy(outbuf, outoff, buff, off + n, i);
+	for(j = 0; j < i; j++)
+	    buff[off + n + j] = zip_outbuf[zip_outoff + j];
+	zip_outoff += i;
+	n += i;
+	if(zip_outcnt == zip_outoff)
+	    zip_outcnt = zip_outoff = 0;
+    }
+    return n;
+}
+
+/* ==========================================================================
+ * Allocate the match buffer, initialize the various tables and save the
+ * location of the internal file attribute (ascii/binary) and method
+ * (DEFLATE/STORE).
+ */
+function zip_ct_init() {
+    var n;	// iterates over tree elements
+    var bits;	// bit counter
+    var length;	// length value
+    var code;	// code value
+    var dist;	// distance index
+
+    if(zip_static_dtree[0].dl != 0) return; // ct_init already called
+
+    zip_l_desc.dyn_tree		= zip_dyn_ltree;
+    zip_l_desc.static_tree	= zip_static_ltree;
+    zip_l_desc.extra_bits	= zip_extra_lbits;
+    zip_l_desc.extra_base	= zip_LITERALS + 1;
+    zip_l_desc.elems		= zip_L_CODES;
+    zip_l_desc.max_length	= zip_MAX_BITS;
+    zip_l_desc.max_code		= 0;
+
+    zip_d_desc.dyn_tree		= zip_dyn_dtree;
+    zip_d_desc.static_tree	= zip_static_dtree;
+    zip_d_desc.extra_bits	= zip_extra_dbits;
+    zip_d_desc.extra_base	= 0;
+    zip_d_desc.elems		= zip_D_CODES;
+    zip_d_desc.max_length	= zip_MAX_BITS;
+    zip_d_desc.max_code		= 0;
+
+    zip_bl_desc.dyn_tree	= zip_bl_tree;
+    zip_bl_desc.static_tree	= null;
+    zip_bl_desc.extra_bits	= zip_extra_blbits;
+    zip_bl_desc.extra_base	= 0;
+    zip_bl_desc.elems		= zip_BL_CODES;
+    zip_bl_desc.max_length	= zip_MAX_BL_BITS;
+    zip_bl_desc.max_code	= 0;
+
+    // Initialize the mapping length (0..255) -> length code (0..28)
+    length = 0;
+    for(code = 0; code < zip_LENGTH_CODES-1; code++) {
+	zip_base_length[code] = length;
+	for(n = 0; n < (1<<zip_extra_lbits[code]); n++)
+	    zip_length_code[length++] = code;
+    }
+    // Assert (length == 256, "ct_init: length != 256");
+
+    /* Note that the length 255 (match length 258) can be represented
+     * in two different ways: code 284 + 5 bits or code 285, so we
+     * overwrite length_code[255] to use the best encoding:
+     */
+    zip_length_code[length-1] = code;
+
+    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+    dist = 0;
+    for(code = 0 ; code < 16; code++) {
+	zip_base_dist[code] = dist;
+	for(n = 0; n < (1<<zip_extra_dbits[code]); n++) {
+	    zip_dist_code[dist++] = code;
+	}
+    }
+    // Assert (dist == 256, "ct_init: dist != 256");
+    dist >>= 7; // from now on, all distances are divided by 128
+    for( ; code < zip_D_CODES; code++) {
+	zip_base_dist[code] = dist << 7;
+	for(n = 0; n < (1<<(zip_extra_dbits[code]-7)); n++)
+	    zip_dist_code[256 + dist++] = code;
+    }
+    // Assert (dist == 256, "ct_init: 256+dist != 512");
+
+    // Construct the codes of the static literal tree
+    for(bits = 0; bits <= zip_MAX_BITS; bits++)
+	zip_bl_count[bits] = 0;
+    n = 0;
+    while(n <= 143) { zip_static_ltree[n++].dl = 8; zip_bl_count[8]++; }
+    while(n <= 255) { zip_static_ltree[n++].dl = 9; zip_bl_count[9]++; }
+    while(n <= 279) { zip_static_ltree[n++].dl = 7; zip_bl_count[7]++; }
+    while(n <= 287) { zip_static_ltree[n++].dl = 8; zip_bl_count[8]++; }
+    /* Codes 286 and 287 do not exist, but we must include them in the
+     * tree construction to get a canonical Huffman tree (longest code
+     * all ones)
+     */
+    zip_gen_codes(zip_static_ltree, zip_L_CODES + 1);
+
+    /* The static distance tree is trivial: */
+    for(n = 0; n < zip_D_CODES; n++) {
+	zip_static_dtree[n].dl = 5;
+	zip_static_dtree[n].fc = zip_bi_reverse(n, 5);
+    }
+
+    // Initialize the first block of the first file:
+    zip_init_block();
+}
+
+/* ==========================================================================
+ * Initialize a new block.
+ */
+function zip_init_block() {
+    var n; // iterates over tree elements
+
+    // Initialize the trees.
+    for(n = 0; n < zip_L_CODES;  n++) zip_dyn_ltree[n].fc = 0;
+    for(n = 0; n < zip_D_CODES;  n++) zip_dyn_dtree[n].fc = 0;
+    for(n = 0; n < zip_BL_CODES; n++) zip_bl_tree[n].fc = 0;
+
+    zip_dyn_ltree[zip_END_BLOCK].fc = 1;
+    zip_opt_len = zip_static_len = 0;
+    zip_last_lit = zip_last_dist = zip_last_flags = 0;
+    zip_flags = 0;
+    zip_flag_bit = 1;
+}
+
+/* ==========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+function zip_pqdownheap(
+    tree,	// the tree to restore
+    k) {	// node to move down
+    var v = zip_heap[k];
+    var j = k << 1;	// left son of k
+
+    while(j <= zip_heap_len) {
+	// Set j to the smallest of the two sons:
+	if(j < zip_heap_len &&
+	   zip_SMALLER(tree, zip_heap[j + 1], zip_heap[j]))
+	    j++;
+
+	// Exit if v is smaller than both sons
+	if(zip_SMALLER(tree, v, zip_heap[j]))
+	    break;
+
+	// Exchange v with the smallest son
+	zip_heap[k] = zip_heap[j];
+	k = j;
+
+	// And continue down the tree, setting j to the left son of k
+	j <<= 1;
+    }
+    zip_heap[k] = v;
+}
+
+/* ==========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ *    above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ *     array bl_count contains the frequencies for each bit length.
+ *     The length opt_len is updated; static_len is also updated if stree is
+ *     not null.
+ */
+function zip_gen_bitlen(desc) { // the tree descriptor
+    var tree		= desc.dyn_tree;
+    var extra		= desc.extra_bits;
+    var base		= desc.extra_base;
+    var max_code	= desc.max_code;
+    var max_length	= desc.max_length;
+    var stree		= desc.static_tree;
+    var h;		// heap index
+    var n, m;		// iterate over the tree elements
+    var bits;		// bit length
+    var xbits;		// extra bits
+    var f;		// frequency
+    var overflow = 0;	// number of elements with bit length too large
+
+    for(bits = 0; bits <= zip_MAX_BITS; bits++)
+	zip_bl_count[bits] = 0;
+
+    /* In a first pass, compute the optimal bit lengths (which may
+     * overflow in the case of the bit length tree).
+     */
+    tree[zip_heap[zip_heap_max]].dl = 0; // root of the heap
+
+    for(h = zip_heap_max + 1; h < zip_HEAP_SIZE; h++) {
+	n = zip_heap[h];
+	bits = tree[tree[n].dl].dl + 1;
+	if(bits > max_length) {
+	    bits = max_length;
+	    overflow++;
+	}
+	tree[n].dl = bits;
+	// We overwrite tree[n].dl which is no longer needed
+
+	if(n > max_code)
+	    continue; // not a leaf node
+
+	zip_bl_count[bits]++;
+	xbits = 0;
+	if(n >= base)
+	    xbits = extra[n - base];
+	f = tree[n].fc;
+	zip_opt_len += f * (bits + xbits);
+	if(stree != null)
+	    zip_static_len += f * (stree[n].dl + xbits);
+    }
+    if(overflow == 0)
+	return;
+
+    // This happens for example on obj2 and pic of the Calgary corpus
+
+    // Find the first bit length which could increase:
+    do {
+	bits = max_length - 1;
+	while(zip_bl_count[bits] == 0)
+	    bits--;
+	zip_bl_count[bits]--;		// move one leaf down the tree
+	zip_bl_count[bits + 1] += 2;	// move one overflow item as its brother
+	zip_bl_count[max_length]--;
+	/* The brother of the overflow item also moves one step up,
+	 * but this does not affect bl_count[max_length]
+	 */
+	overflow -= 2;
+    } while(overflow > 0);
+
+    /* Now recompute all bit lengths, scanning in increasing frequency.
+     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+     * lengths instead of fixing only the wrong ones. This idea is taken
+     * from 'ar' written by Haruhiko Okumura.)
+     */
+    for(bits = max_length; bits != 0; bits--) {
+	n = zip_bl_count[bits];
+	while(n != 0) {
+	    m = zip_heap[--h];
+	    if(m > max_code)
+		continue;
+	    if(tree[m].dl != bits) {
+		zip_opt_len += (bits - tree[m].dl) * tree[m].fc;
+		tree[m].fc = bits;
+	    }
+	    n--;
+	}
+    }
+}
+
+  /* ==========================================================================
+   * Generate the codes for a given tree and bit counts (which need not be
+   * optimal).
+   * IN assertion: the array bl_count contains the bit length statistics for
+   * the given tree and the field len is set for all tree elements.
+   * OUT assertion: the field code is set for all tree elements of non
+   *     zero code length.
+   */
+function zip_gen_codes(tree,	// the tree to decorate
+		   max_code) {	// largest code with non zero frequency
+    var next_code = new Array(zip_MAX_BITS+1); // next code value for each bit length
+    var code = 0;		// running code value
+    var bits;			// bit index
+    var n;			// code index
+
+    /* The distribution counts are first used to generate the code values
+     * without bit reversal.
+     */
+    for(bits = 1; bits <= zip_MAX_BITS; bits++) {
+	code = ((code + zip_bl_count[bits-1]) << 1);
+	next_code[bits] = code;
+    }
+
+    /* Check that the bit counts in bl_count are consistent. The last code
+     * must be all ones.
+     */
+//    Assert (code + encoder->bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+//	    "inconsistent bit counts");
+//    Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+    for(n = 0; n <= max_code; n++) {
+	var len = tree[n].dl;
+	if(len == 0)
+	    continue;
+	// Now reverse the bits
+	tree[n].fc = zip_bi_reverse(next_code[len]++, len);
+
+//      Tracec(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+//	  n, (isgraph(n) ? n : ' '), len, tree[n].fc, next_code[len]-1));
+    }
+}
+
+/* ==========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ *     and corresponding code. The length opt_len is updated; static_len is
+ *     also updated if stree is not null. The field max_code is set.
+ */
+function zip_build_tree(desc) { // the tree descriptor
+    var tree	= desc.dyn_tree;
+    var stree	= desc.static_tree;
+    var elems	= desc.elems;
+    var n, m;		// iterate over heap elements
+    var max_code = -1;	// largest code with non zero frequency
+    var node = elems;	// next internal node of the tree
+
+    /* Construct the initial heap, with least frequent element in
+     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+     * heap[0] is not used.
+     */
+    zip_heap_len = 0;
+    zip_heap_max = zip_HEAP_SIZE;
+
+    for(n = 0; n < elems; n++) {
+	if(tree[n].fc != 0) {
+	    zip_heap[++zip_heap_len] = max_code = n;
+	    zip_depth[n] = 0;
+	} else
+	    tree[n].dl = 0;
+    }
+
+    /* The pkzip format requires that at least one distance code exists,
+     * and that at least one bit should be sent even if there is only one
+     * possible code. So to avoid special checks later on we force at least
+     * two codes of non zero frequency.
+     */
+    while(zip_heap_len < 2) {
+	var xnew = zip_heap[++zip_heap_len] = (max_code < 2 ? ++max_code : 0);
+	tree[xnew].fc = 1;
+	zip_depth[xnew] = 0;
+	zip_opt_len--;
+	if(stree != null)
+	    zip_static_len -= stree[xnew].dl;
+	// new is 0 or 1 so it does not have extra bits
+    }
+    desc.max_code = max_code;
+
+    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+     * establish sub-heaps of increasing lengths:
+     */
+    for(n = zip_heap_len >> 1; n >= 1; n--)
+	zip_pqdownheap(tree, n);
+
+    /* Construct the Huffman tree by repeatedly combining the least two
+     * frequent nodes.
+     */
+    do {
+	n = zip_heap[zip_SMALLEST];
+	zip_heap[zip_SMALLEST] = zip_heap[zip_heap_len--];
+	zip_pqdownheap(tree, zip_SMALLEST);
+
+	m = zip_heap[zip_SMALLEST];  // m = node of next least frequency
+
+	// keep the nodes sorted by frequency
+	zip_heap[--zip_heap_max] = n;
+	zip_heap[--zip_heap_max] = m;
+
+	// Create a new node father of n and m
+	tree[node].fc = tree[n].fc + tree[m].fc;
+//	depth[node] = (char)(MAX(depth[n], depth[m]) + 1);
+	if(zip_depth[n] > zip_depth[m] + 1)
+	    zip_depth[node] = zip_depth[n];
+	else
+	    zip_depth[node] = zip_depth[m] + 1;
+	tree[n].dl = tree[m].dl = node;
+
+	// and insert the new node in the heap
+	zip_heap[zip_SMALLEST] = node++;
+	zip_pqdownheap(tree, zip_SMALLEST);
+
+    } while(zip_heap_len >= 2);
+
+    zip_heap[--zip_heap_max] = zip_heap[zip_SMALLEST];
+
+    /* At this point, the fields freq and dad are set. We can now
+     * generate the bit lengths.
+     */
+    zip_gen_bitlen(desc);
+
+    // The field len is now set, we can generate the bit codes
+    zip_gen_codes(tree, max_code);
+}
+
+/* ==========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree. Updates opt_len to take into account the repeat
+ * counts. (The contribution of the bit length codes will be added later
+ * during the construction of bl_tree.)
+ */
+function zip_scan_tree(tree,// the tree to be scanned
+		       max_code) {  // and its largest code of non zero frequency
+    var n;			// iterates over all tree elements
+    var prevlen = -1;		// last emitted length
+    var curlen;			// length of current code
+    var nextlen = tree[0].dl;	// length of next code
+    var count = 0;		// repeat count of the current code
+    var max_count = 7;		// max repeat count
+    var min_count = 4;		// min repeat count
+
+    if(nextlen == 0) {
+	max_count = 138;
+	min_count = 3;
+    }
+    tree[max_code + 1].dl = 0xffff; // guard
+
+    for(n = 0; n <= max_code; n++) {
+	curlen = nextlen;
+	nextlen = tree[n + 1].dl;
+	if(++count < max_count && curlen == nextlen)
+	    continue;
+	else if(count < min_count)
+	    zip_bl_tree[curlen].fc += count;
+	else if(curlen != 0) {
+	    if(curlen != prevlen)
+		zip_bl_tree[curlen].fc++;
+	    zip_bl_tree[zip_REP_3_6].fc++;
+	} else if(count <= 10)
+	    zip_bl_tree[zip_REPZ_3_10].fc++;
+	else
+	    zip_bl_tree[zip_REPZ_11_138].fc++;
+	count = 0; prevlen = curlen;
+	if(nextlen == 0) {
+	    max_count = 138;
+	    min_count = 3;
+	} else if(curlen == nextlen) {
+	    max_count = 6;
+	    min_count = 3;
+	} else {
+	    max_count = 7;
+	    min_count = 4;
+	}
+    }
+}
+
+  /* ==========================================================================
+   * Send a literal or distance tree in compressed form, using the codes in
+   * bl_tree.
+   */
+function zip_send_tree(tree, // the tree to be scanned
+		   max_code) { // and its largest code of non zero frequency
+    var n;			// iterates over all tree elements
+    var prevlen = -1;		// last emitted length
+    var curlen;			// length of current code
+    var nextlen = tree[0].dl;	// length of next code
+    var count = 0;		// repeat count of the current code
+    var max_count = 7;		// max repeat count
+    var min_count = 4;		// min repeat count
+
+    /* tree[max_code+1].dl = -1; */  /* guard already set */
+    if(nextlen == 0) {
+      max_count = 138;
+      min_count = 3;
+    }
+
+    for(n = 0; n <= max_code; n++) {
+	curlen = nextlen;
+	nextlen = tree[n+1].dl;
+	if(++count < max_count && curlen == nextlen) {
+	    continue;
+	} else if(count < min_count) {
+	    do { zip_SEND_CODE(curlen, zip_bl_tree); } while(--count != 0);
+	} else if(curlen != 0) {
+	    if(curlen != prevlen) {
+		zip_SEND_CODE(curlen, zip_bl_tree);
+		count--;
+	    }
+	    // Assert(count >= 3 && count <= 6, " 3_6?");
+	    zip_SEND_CODE(zip_REP_3_6, zip_bl_tree);
+	    zip_send_bits(count - 3, 2);
+	} else if(count <= 10) {
+	    zip_SEND_CODE(zip_REPZ_3_10, zip_bl_tree);
+	    zip_send_bits(count-3, 3);
+	} else {
+	    zip_SEND_CODE(zip_REPZ_11_138, zip_bl_tree);
+	    zip_send_bits(count-11, 7);
+	}
+	count = 0;
+	prevlen = curlen;
+	if(nextlen == 0) {
+	    max_count = 138;
+	    min_count = 3;
+	} else if(curlen == nextlen) {
+	    max_count = 6;
+	    min_count = 3;
+	} else {
+	    max_count = 7;
+	    min_count = 4;
+	}
+    }
+}
+
+/* ==========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+function zip_build_bl_tree() {
+    var max_blindex;  // index of last bit length code of non zero freq
+
+    // Determine the bit length frequencies for literal and distance trees
+    zip_scan_tree(zip_dyn_ltree, zip_l_desc.max_code);
+    zip_scan_tree(zip_dyn_dtree, zip_d_desc.max_code);
+
+    // Build the bit length tree:
+    zip_build_tree(zip_bl_desc);
+    /* opt_len now includes the length of the tree representations, except
+     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+     */
+
+    /* Determine the number of bit length codes to send. The pkzip format
+     * requires that at least 4 bit length codes be sent. (appnote.txt says
+     * 3 but the actual value used is 4.)
+     */
+    for(max_blindex = zip_BL_CODES-1; max_blindex >= 3; max_blindex--) {
+	if(zip_bl_tree[zip_bl_order[max_blindex]].dl != 0) break;
+    }
+    /* Update opt_len to include the bit length tree and counts */
+    zip_opt_len += 3*(max_blindex+1) + 5+5+4;
+//    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+//	    encoder->opt_len, encoder->static_len));
+
+    return max_blindex;
+}
+
+/* ==========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+function zip_send_all_trees(lcodes, dcodes, blcodes) { // number of codes for each tree
+    var rank; // index in bl_order
+
+//    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+//    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+//	    "too many codes");
+//    Tracev((stderr, "\nbl counts: "));
+    zip_send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt
+    zip_send_bits(dcodes-1,   5);
+    zip_send_bits(blcodes-4,  4); // not -3 as stated in appnote.txt
+    for(rank = 0; rank < blcodes; rank++) {
+//      Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+	zip_send_bits(zip_bl_tree[zip_bl_order[rank]].dl, 3);
+    }
+
+    // send the literal tree
+    zip_send_tree(zip_dyn_ltree,lcodes-1);
+
+    // send the distance tree
+    zip_send_tree(zip_dyn_dtree,dcodes-1);
+}
+
+/* ==========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+function zip_flush_block(eof) { // true if this is the last block for a file
+    var opt_lenb, static_lenb; // opt_len and static_len in bytes
+    var max_blindex;	// index of last bit length code of non zero freq
+    var stored_len;	// length of input block
+
+    stored_len = zip_strstart - zip_block_start;
+    zip_flag_buf[zip_last_flags] = zip_flags; // Save the flags for the last 8 items
+
+    // Construct the literal and distance trees
+    zip_build_tree(zip_l_desc);
+//    Tracev((stderr, "\nlit data: dyn %ld, stat %ld",
+//	    encoder->opt_len, encoder->static_len));
+
+    zip_build_tree(zip_d_desc);
+//    Tracev((stderr, "\ndist data: dyn %ld, stat %ld",
+//	    encoder->opt_len, encoder->static_len));
+    /* At this point, opt_len and static_len are the total bit lengths of
+     * the compressed block data, excluding the tree representations.
+     */
+
+    /* Build the bit length tree for the above two trees, and get the index
+     * in bl_order of the last bit length code to send.
+     */
+    max_blindex = zip_build_bl_tree();
+
+    // Determine the best encoding. Compute first the block length in bytes
+    opt_lenb	= (zip_opt_len   +3+7)>>3;
+    static_lenb = (zip_static_len+3+7)>>3;
+
+//    Trace((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u dist %u ",
+//	   opt_lenb, encoder->opt_len,
+//	   static_lenb, encoder->static_len, stored_len,
+//	   encoder->last_lit, encoder->last_dist));
+
+    if(static_lenb <= opt_lenb)
+	opt_lenb = static_lenb;
+    if(stored_len + 4 <= opt_lenb // 4: two words for the lengths
+       && zip_block_start >= 0) {
+	var i;
+
+	/* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+	 * Otherwise we can't have processed more than WSIZE input bytes since
+	 * the last block flush, because compression would have been
+	 * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+	 * transform a block into a stored block.
+	 */
+	zip_send_bits((zip_STORED_BLOCK<<1)+eof, 3);  /* send block type */
+	zip_bi_windup();		 /* align on byte boundary */
+	zip_put_short(stored_len);
+	zip_put_short(~stored_len);
+
+      // copy block
+/*
+      p = &window[block_start];
+      for(i = 0; i < stored_len; i++)
+	put_byte(p[i]);
+*/
+	for(i = 0; i < stored_len; i++)
+	    zip_put_byte(zip_window[zip_block_start + i]);
+
+    } else if(static_lenb == opt_lenb) {
+	zip_send_bits((zip_STATIC_TREES<<1)+eof, 3);
+	zip_compress_block(zip_static_ltree, zip_static_dtree);
+    } else {
+	zip_send_bits((zip_DYN_TREES<<1)+eof, 3);
+	zip_send_all_trees(zip_l_desc.max_code+1,
+			   zip_d_desc.max_code+1,
+			   max_blindex+1);
+	zip_compress_block(zip_dyn_ltree, zip_dyn_dtree);
+    }
+
+    zip_init_block();
+
+    if(eof != 0)
+	zip_bi_windup();
+}
+
+/* ==========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+function zip_ct_tally(
+	dist, // distance of matched string
+	lc) { // match length-MIN_MATCH or unmatched char (if dist==0)
+    zip_l_buf[zip_last_lit++] = lc;
+    if(dist == 0) {
+	// lc is the unmatched char
+	zip_dyn_ltree[lc].fc++;
+    } else {
+	// Here, lc is the match length - MIN_MATCH
+	dist--;		    // dist = match distance - 1
+//      Assert((ush)dist < (ush)MAX_DIST &&
+//	     (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+//	     (ush)D_CODE(dist) < (ush)D_CODES,  "ct_tally: bad match");
+
+	zip_dyn_ltree[zip_length_code[lc]+zip_LITERALS+1].fc++;
+	zip_dyn_dtree[zip_D_CODE(dist)].fc++;
+
+	zip_d_buf[zip_last_dist++] = dist;
+	zip_flags |= zip_flag_bit;
+    }
+    zip_flag_bit <<= 1;
+
+    // Output the flags if they fill a byte
+    if((zip_last_lit & 7) == 0) {
+	zip_flag_buf[zip_last_flags++] = zip_flags;
+	zip_flags = 0;
+	zip_flag_bit = 1;
+    }
+    // Try to guess if it is profitable to stop the current block here
+    if(zip_compr_level > 2 && (zip_last_lit & 0xfff) == 0) {
+	// Compute an upper bound for the compressed length
+	var out_length = zip_last_lit * 8;
+	var in_length = zip_strstart - zip_block_start;
+	var dcode;
+
+	for(dcode = 0; dcode < zip_D_CODES; dcode++) {
+	    out_length += zip_dyn_dtree[dcode].fc * (5 + zip_extra_dbits[dcode]);
+	}
+	out_length >>= 3;
+//      Trace((stderr,"\nlast_lit %u, last_dist %u, in %ld, out ~%ld(%ld%%) ",
+//	     encoder->last_lit, encoder->last_dist, in_length, out_length,
+//	     100L - out_length*100L/in_length));
+	if(zip_last_dist < parseInt(zip_last_lit/2) &&
+	   out_length < parseInt(in_length/2))
+	    return true;
+    }
+    return (zip_last_lit == zip_LIT_BUFSIZE-1 ||
+	    zip_last_dist == zip_DIST_BUFSIZE);
+    /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K
+     * on 16 bit machines and because stored blocks are restricted to
+     * 64K-1 bytes.
+     */
+}
+
+  /* ==========================================================================
+   * Send the block data compressed using the given Huffman trees
+   */
+function zip_compress_block(
+	ltree,	// literal tree
+	dtree) {	// distance tree
+    var dist;		// distance of matched string
+    var lc;		// match length or unmatched char (if dist == 0)
+    var lx = 0;		// running index in l_buf
+    var dx = 0;		// running index in d_buf
+    var fx = 0;		// running index in flag_buf
+    var flag = 0;	// current flags
+    var code;		// the code to send
+    var extra;		// number of extra bits to send
+
+    if(zip_last_lit != 0) do {
+	if((lx & 7) == 0)
+	    flag = zip_flag_buf[fx++];
+	lc = zip_l_buf[lx++] & 0xff;
+	if((flag & 1) == 0) {
+	    zip_SEND_CODE(lc, ltree); /* send a literal byte */
+//	Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+	} else {
+	    // Here, lc is the match length - MIN_MATCH
+	    code = zip_length_code[lc];
+	    zip_SEND_CODE(code+zip_LITERALS+1, ltree); // send the length code
+	    extra = zip_extra_lbits[code];
+	    if(extra != 0) {
+		lc -= zip_base_length[code];
+		zip_send_bits(lc, extra); // send the extra length bits
+	    }
+	    dist = zip_d_buf[dx++];
+	    // Here, dist is the match distance - 1
+	    code = zip_D_CODE(dist);
+//	Assert (code < D_CODES, "bad d_code");
+
+	    zip_SEND_CODE(code, dtree);	  // send the distance code
+	    extra = zip_extra_dbits[code];
+	    if(extra != 0) {
+		dist -= zip_base_dist[code];
+		zip_send_bits(dist, extra);   // send the extra distance bits
+	    }
+	} // literal or match pair ?
+	flag >>= 1;
+    } while(lx < zip_last_lit);
+
+    zip_SEND_CODE(zip_END_BLOCK, ltree);
+}
+
+/* ==========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+var zip_Buf_size = 16; // bit size of bi_buf
+function zip_send_bits(
+	value,	// value to send
+	length) {	// number of bits
+    /* If not enough room in bi_buf, use (valid) bits from bi_buf and
+     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
+     * unused bits in value.
+     */
+    if(zip_bi_valid > zip_Buf_size - length) {
+	zip_bi_buf |= (value << zip_bi_valid);
+	zip_put_short(zip_bi_buf);
+	zip_bi_buf = (value >> (zip_Buf_size - zip_bi_valid));
+	zip_bi_valid += length - zip_Buf_size;
+    } else {
+	zip_bi_buf |= value << zip_bi_valid;
+	zip_bi_valid += length;
+    }
+}
+
+/* ==========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+function zip_bi_reverse(
+	code,	// the value to invert
+	len) {	// its bit length
+    var res = 0;
+    do {
+	res |= code & 1;
+	code >>= 1;
+	res <<= 1;
+    } while(--len > 0);
+    return res >> 1;
+}
+
+/* ==========================================================================
+ * Write out any remaining bits in an incomplete byte.
+ */
+function zip_bi_windup() {
+    if(zip_bi_valid > 8) {
+	zip_put_short(zip_bi_buf);
+    } else if(zip_bi_valid > 0) {
+	zip_put_byte(zip_bi_buf);
+    }
+    zip_bi_buf = 0;
+    zip_bi_valid = 0;
+}
+
+function zip_qoutbuf() {
+    if(zip_outcnt != 0) {
+	var q, i;
+	q = zip_new_queue();
+	if(zip_qhead == null)
+	    zip_qhead = zip_qtail = q;
+	else
+	    zip_qtail = zip_qtail.next = q;
+	q.len = zip_outcnt - zip_outoff;
+//      System.arraycopy(zip_outbuf, zip_outoff, q.ptr, 0, q.len);
+	for(i = 0; i < q.len; i++)
+	    q.ptr[i] = zip_outbuf[zip_outoff + i];
+	zip_outcnt = zip_outoff = 0;
+    }
+}
+
+function zip_deflate(str, level) {
+    var out, buff;
+    var i, j;
+
+    zip_deflate_data = str;
+    zip_deflate_pos = 0;
+    if(typeof level == "undefined")
+	level = zip_DEFAULT_LEVEL;
+    zip_deflate_start(level);
+
+    buff = new Array(1024);
+    out = "";
+    while((i = zip_deflate_internal(buff, 0, buff.length)) > 0) {
+	for(j = 0; j < i; j++)
+	    out += String.fromCharCode(buff[j]);
+    }
+    zip_deflate_data = null; // G.C.
+    return out;
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/plantuml/macroEditor.html b/src/main/webapp/connect/plantuml/macroEditor.html
new file mode 100644
index 0000000000000000000000000000000000000000..e5b715aa694a32bdac5c1e31976528a1901eea00
--- /dev/null
+++ b/src/main/webapp/connect/plantuml/macroEditor.html
@@ -0,0 +1,373 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>PlantUML for Confluence</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+<script src="deflate.js" type="text/javascript"></script>
+<script src="../../js/spin/spin.min.js" type="text/javascript"></script>
+<script src="../../js/deflate/pako.min.js" type="text/javascript"></script>
+<link rel="stylesheet" href="//aui-cdn.atlassian.com/aui-adg/5.9.12/css/aui.min.css" media="all">
+<style type="text/css">
+body {
+	font-family:Arial, sans-serif;
+	overflow:hidden;
+	height:100%;
+	width:100%;
+	margin:0;
+}
+</style>
+<script>
+
+function encode64(data) {
+	r = "";
+	for (i=0; i<data.length; i+=3) {
+ 		if (i+2==data.length) {
+			r +=append3bytes(data.charCodeAt(i), data.charCodeAt(i+1), 0);
+		} else if (i+1==data.length) {
+			r += append3bytes(data.charCodeAt(i), 0, 0);
+		} else {
+			r += append3bytes(data.charCodeAt(i), data.charCodeAt(i+1),
+				data.charCodeAt(i+2));
+		}
+	}
+	return r;
+}
+
+function append3bytes(b1, b2, b3) {
+	c1 = b1 >> 2;
+	c2 = ((b1 & 0x3) << 4) | (b2 >> 4);
+	c3 = ((b2 & 0xF) << 2) | (b3 >> 6);
+	c4 = b3 & 0x3F;
+	r = "";
+	r += encode6bit(c1 & 0x3F);
+	r += encode6bit(c2 & 0x3F);
+	r += encode6bit(c3 & 0x3F);
+	r += encode6bit(c4 & 0x3F);
+	return r;
+}
+
+function encode6bit(b) {
+	if (b < 10) {
+ 		return String.fromCharCode(48 + b);
+	}
+	b -= 10;
+	if (b < 26) {
+ 		return String.fromCharCode(65 + b);
+	}
+	b -= 26;
+	if (b < 26) {
+ 		return String.fromCharCode(97 + b);
+	}
+	b -= 26;
+	if (b == 0) {
+ 		return '-';
+	}
+	if (b == 1) {
+ 		return '_';
+	}
+	return '?';
+}
+
+function compress(s) 
+{
+  s = unescape(encodeURIComponent(s));
+  return encode64(zip_deflate(s, 9));
+}
+</script>
+
+<script>
+function bytesToString(arr)
+{
+	var result = new Array(arr.length);
+  
+    for (var i = 0; i < arr.length; i++)
+    {
+    	result[i] = String.fromCharCode(arr[i]);
+    }
+    
+    return result.join('');
+}
+</script>
+
+</head>
+<body style="height:100%">
+<div style="height:100%;">
+	<div style="position:absolute;top:0px;height:100%;width:450px;border-right:1px solid #cccccc;display:inline-block;">
+		<form class="aui top-label" style="height:100%;">
+			<div class="field-group" style="padding-left:15px;">
+				<label for="filename">File name</label> 
+				<input class="text macro-param-input" type="text" id="filename" name="filename" >
+				<div class="description">Name of the attachment that will hold the diagram data</div>
+			</div>
+			<div class="field-group" style="padding-left:15px;">
+				<label for="width" style="display:inline-block;">Width:</label> <input class="text medium-field" id="width" value="800">
+				<div class="description" style="display:inline-block;">px</div>
+			</div>
+			<div class="field-group" style="padding-left:15px;">
+				<label for="height" style="display:inline-block;">Height:</label> <input class="text medium-field" id="height" value="600">
+				<div class="description" style="display:inline-block;">px</div>
+			</div>
+			<div class="field-group" style="padding-left:15px;">
+				<input class="checkbox small-field" id="autoSize" type="checkbox" >
+				<label for="height" style="display:inline-block;">Automatically set the width and height of the viewer</label>
+			</div>
+			<div class="field-group" style="padding-left:15px;top:200px;bottom:60px;position:absolute;">
+				<label for="data">Definition</label>
+				<textarea class="large-field" id="data" style="resize:none;width:390px;height:100%;"></textarea>
+				<button class="aui-button aui-button-primary ap-dialog-submit" id="render"
+					style="position:absolute;left:413px;">&#8658;</button>
+			</div>
+		</form>
+	</div>
+	<div id="preview" style="position:absolute;top:0px;left:451px;right:0px;height:100%;overflow:auto;display:inline-block;">
+	</div>
+</div>
+</body>
+<script type="text/javascript">
+	var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var plantUmlServerUrl = 'https://exp.draw.io/plantuml/png/';
+	var isNewDiagram = true;
+	
+	var opts =
+	{
+		left : '325px',
+		lines : 12, // The number of lines to draw
+		length : 8, // The length of each line
+		width : 3, // The line thickness
+		radius : 5, // The radius of the inner circle
+		rotate : 0, // The rotation offset
+		color : '#000', // #rgb or #rrggbb
+		speed : 1, // Rounds per second
+		trail : 60, // Afterglow percentage
+		shadow : false, // Whether to render a shadow
+		hwaccel : false, // Whether to use hardware acceleration
+		className : 'spinner', // The CSS class to assign to the spinner
+		zIndex : 2e9 // The z-index (defaults to 2000000000)
+	};
+
+	var spinner = new Spinner(opts);
+	var macroDialog = null;
+	
+	var head = document.getElementsByTagName("head")[0];
+
+	$("#render").click(function(evt) 
+	{
+		evt.preventDefault();
+		data =  $('#data').val();
+		loadPreview(data);
+	});
+	
+	$("#autoSize").on('change', function(evt) 
+	{
+		if(this.checked) 
+		{
+			$("#width").prop('disabled', true);
+			$("#height").prop('disabled', true);
+		}
+		else 
+		{
+			$("#width").prop('disabled', false);
+			$("#height").prop('disabled', false);
+		}
+	});
+
+	// String.endsWith polyfill
+	if (!String.prototype.endsWith)
+	{
+		String.prototype.endsWith = function(searchString, position)
+		{
+			var subjectString = this.toString();
+
+			if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length)
+			{
+				position = subjectString.length;
+			}
+			
+			position -= searchString.length;
+			var lastIndex = subjectString.indexOf(searchString, position);
+			return lastIndex !== -1 && lastIndex === position;
+		};
+	}
+
+	function loadAtlassianApi() 
+	{
+		var script = document.createElement("script");
+		script.src = connectUrl + '/all-debug.js';
+		script.setAttribute('data-options', 'resize:false;margin:false');
+
+		script.onload = function() 
+		{
+			AP.require([ "confluence", "dialog" , "navigator"], function(confluence, dialog, navigator) 
+			{
+				function onSubmit() 
+				{
+					var name = $('#filename').val();
+
+					if (name != null && name.length > 3 && !/[&\*+=\\;/{}|\":<>\?]/g.test(name))
+					{
+						var fileSuffix = name.toLowerCase().endsWith('.png') ? '' : '.png';
+						name = name + fileSuffix;
+						
+						var macroParams = 
+						{
+							filename : name,
+							data : $('#data').val(),
+							width : $('#width').val(),
+							height : $('#height').val(),
+							autoSize : $('#autoSize').is(":checked")
+						};
+						
+						getRenderedDiagramData(macroParams.data, function(response) 
+						{
+							navigator.getLocation(function(location) 
+							{
+								saveSuccess = function(response) 
+								{
+									response = JSON.parse(response);	
+								
+									if(response.error == null) 
+									{
+										macroParams.data = btoa(bytesToString(pako.deflateRaw(encodeURIComponent(macroParams.data))));
+										macroParams.compressed = 'true';
+										confluence.saveMacro(macroParams);
+										confluence.closeMacroEditor();
+									}
+									else 
+									{
+										console.log('Error saving diagram : ' + response.error.message);
+										alert('Error saving diagram. Please consult tech support for more info.');
+										
+										// Workaround for lost handler
+										window.setTimeout(function()
+										{
+											dialog.getButton("submit").bind(onSubmit);
+										}, 0);
+									}
+								};
+								
+								if (location != null && location.target != null && location.context!= null && (location.target == "contentedit" || location.target == "contentcreate")) 
+								{
+									pageId = location.context.contentId;
+								}
+								
+								AC.saveDiagram(pageId, macroParams.filename, response, saveSuccess, isNewDiagram, 'image/png',
+										function()
+										{
+											// Exist handler
+											alert('Attachment ' + macroParams.filename + ' already exists. Please choose another name.');
+
+											// Workaround for lost handler
+											window.setTimeout(function()
+											{
+												dialog.getButton("submit").bind(onSubmit);
+											}, 0);
+										});
+							});
+						
+						}, function(error) 
+						{
+							alert("Error rendering diagram. Please check your syntax.");
+
+							// Workaround for lost handler
+							window.setTimeout(function()
+							{
+								dialog.getButton("submit").bind(onSubmit);
+							}, 0);
+						});
+					}
+					else 
+					{
+						alert("Diagram names must be longer than 3 characters and must not contain the following characters : \ / | : ; { < & + ? =");
+
+						// Workaround for lost handler
+						window.setTimeout(function()
+						{
+							dialog.getButton("submit").bind(onSubmit);
+						}, 0);
+					}
+						
+					return false;
+				};
+				
+				confluence.getMacroData(function(macroParams) 
+				{
+					if(macroParams != null && Object.keys(macroParams).length > 0) 
+					{
+						macroParams.data = macroParams.compressed != null && macroParams.compressed == 'true' ? decodeURIComponent(bytesToString(pako.inflateRaw(atob(macroParams.data)))) : decodeURIComponent(macroParams.data);
+						loadMacroParameters(macroParams);
+						loadPreview(macroParams.data);
+						
+						if(macroParams.filename.length > 0)
+							isNewDiagram = false;
+					}
+			    });
+				
+				macroDialog = dialog;
+				dialog.getButton("submit").bind(onSubmit);
+			});
+		};
+		
+		head.appendChild(script);
+	}
+	
+	function loadMacroParameters(macroParams) 
+	{
+		$('#filename').val(macroParams.filename);
+		$('#data').val(macroParams.data);
+		$('#width').val(macroParams.width);      
+		$('#height').val(macroParams.height);
+
+		if(macroParams.autoSize == true || macroParams.autoSize == "true")
+			$('#autoSize').click();
+		
+		if(macroParams.filename != null) 
+			$('#filename').attr('disabled', true);
+		
+	}
+	
+	function loadPreview(data) 
+	{
+		var preview = document.createElement('img');
+ 
+		preview.src = plantUmlServerUrl + compress(data);
+		$('#preview').empty();
+		$('#preview').append(preview);
+	}
+	
+	function getRenderedDiagramData(data, success, error) 
+	{
+		//using XHR to get the binary response so that PNGs work	
+		var xhr = new XMLHttpRequest();
+		xhr.open("GET", plantUmlServerUrl + compress(data), true);
+		xhr.responseType = 'blob';
+		 
+		xhr.onload = function(e) 
+		{
+		  if (this.status >= 200 && this.status < 300) 
+		  {
+		    var reader = new window.FileReader();
+		    reader.readAsDataURL(this.response); 
+		    reader.onloadend = function() 
+		    {
+	            base64data = reader.result;                
+	            success(base64data.split(",")[1]);
+		    }
+		  }
+		  else 
+		  {
+			  error(e);
+		  }
+		};
+		
+		xhr.onerror = error;
+		 
+		xhr.send();
+	}
+	
+	loadAtlassianApi();
+
+</script>
+</html>
diff --git a/src/main/webapp/connect/plantuml/plugin-dev.json b/src/main/webapp/connect/plantuml/plugin-dev.json
new file mode 100644
index 0000000000000000000000000000000000000000..d9b678aa86ccd32898ad1046e3497d0c49282171
--- /dev/null
+++ b/src/main/webapp/connect/plantuml/plugin-dev.json
@@ -0,0 +1,127 @@
+{
+    "name": "PlantUML for Confluence",
+    "description": "PlantUML for Confluence",
+    "key": "com.mxgraph.confluence.plugins.plantuml",
+    "baseUrl": "https://ae9fca65.ngrok.io",
+    "vendor": 
+    {
+        "name": "JGraph ltd.",
+        "url": "https://www.jgraph.com"
+    },
+    "links":
+    {
+        "documentation": "https://support.draw.io/display/PFCC"
+    },
+    "version": "1.2.0",
+    "authentication": 
+    {
+        "type": "none"
+    },
+    "modules": 
+    {
+        "dynamicContentMacros": 
+        [
+            {
+                "name": 
+                {
+                    "i18n": "plantumlcloud",
+                    "value": "PlantUML for Confluence"
+                },
+                "url": "/connect/plantuml/viewer.html?pageId=${page.id}&filename=${filename}&width=${width}&height=${height}&autoSize=${autoSize}",
+                "width": "600px",
+                "height": "400px",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "PlantUML for Confluence"
+                }, "icon": 
+                {
+		          "width": 144,
+		          "height": 144,
+		          "url": "/images/plant-uml-atlas.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": true,
+                "key": "plantumlcloud",
+			    "editor": {
+				    "url": "/connect/plantuml/macroEditor.html",
+				    "width": "1400px",
+				    "height": "650px"
+				},
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "filename",
+				      "name": 
+				      {
+				        "value": "Name of the diagram"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "data",
+				      "name": 
+				      {
+				        "value": "Definition of the diagram"
+				      },
+				      "type": "string",
+				      "hidden": false
+				    },
+				    {
+				      "identifier": "compressed",
+				      "name": 
+				      {
+				        "value": "Is definition of the diagram compressed?"
+				      },
+				      "type": "string",
+				      "hidden": false
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Height"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "autoSize",
+				      "name": 
+				      {
+				        "value": "Auto size"
+				      },
+				      "type": "boolean"
+				    },
+				    {
+				      "identifier": "contentType",
+				      "name": 
+				      {
+				        "value": "Content Type"
+				      },
+				      "type": "boolean"
+				    }
+  				],
+				"renderModes": {
+		          "default": {
+		            "url": "/connectRender?pageId=${page.id}&diagramName=${filename}&filenameIntact=1"
+		          }
+		        }
+            }
+        ]
+    },
+    "scopes": [
+    "READ",
+    "WRITE"
+  	]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/plantuml/plugin.json b/src/main/webapp/connect/plantuml/plugin.json
new file mode 100644
index 0000000000000000000000000000000000000000..5630a60cb9cf6da00aad13727ed3a0ee0efa6e56
--- /dev/null
+++ b/src/main/webapp/connect/plantuml/plugin.json
@@ -0,0 +1,128 @@
+{
+    "name": "PlantUML for Confluence",
+    "description": "PlantUML for Confluence",
+    "key": "com.mxgraph.confluence.plugins.plantuml",
+    "baseUrl": "https://plant.draw.io",
+    "enableLicensing": true,
+    "vendor": 
+    {
+        "name": "JGraph Ltd.",
+        "url": "https://www.jgraph.com"
+    },
+    "links":
+    {
+        "documentation": "https://support.draw.io/display/PFCC"
+    },
+    "version": "2.0.0",
+    "authentication": 
+    {
+        "type": "none"
+    },
+    "modules": 
+    {
+        "dynamicContentMacros": 
+        [
+            {
+                "name": 
+                {
+                    "i18n": "plantumlcloud",
+                    "value": "PlantUML for Confluence"
+                },
+                "url": "/connect/plantuml/viewer.html?pageId=${page.id}&filename=${filename}&width=${width}&height=${height}&autoSize=${autoSize}",
+                "width": "600px",
+                "height": "400px",
+                "description": 
+                {
+                    "i18n": "description",
+                    "value": "PlantUML for Confluence"
+                }, "icon": 
+                {
+		          "width": 144,
+		          "height": 144,
+		          "url": "/images/plant-uml-atlas.png"
+		        },
+		        "categories": [
+		          "visuals"
+		        ],
+		        "outputType": "block",
+		        "featured": true,
+                "key": "plantumlcloud",
+			    "editor": {
+				    "url": "/connect/plantuml/macroEditor.html",
+				    "width": "80%",
+				    "height": "60%"
+				},
+			    "parameters": 
+			    [
+				    {
+				      "identifier": "filename",
+				      "name": 
+				      {
+				        "value": "Name of the diagram"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "data",
+				      "name": 
+				      {
+				        "value": "Definition of the diagram"
+				      },
+				      "type": "string",
+				      "hidden": false
+				    },
+				    {
+				      "identifier": "compressed",
+				      "name": 
+				      {
+				        "value": "Is definition of the diagram compressed?"
+				      },
+				      "type": "string",
+				      "hidden": false
+				    },
+				    {
+				      "identifier": "width",
+				      "name": 
+				      {
+				        "value": "width"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "height",
+				      "name": 
+				      {
+				        "value": "Height"
+				      },
+				      "type": "string"
+				    },
+				    {
+				      "identifier": "autoSize",
+				      "name": 
+				      {
+				        "value": "Auto size"
+				      },
+				      "type": "boolean"
+				    },
+				    {
+				      "identifier": "contentType",
+				      "name": 
+				      {
+				        "value": "Content Type"
+				      },
+				      "type": "boolean"
+				    }
+  				],
+				"renderModes": {
+		          "default": {
+		            "url": "/connectRender?pageId=${page.id}&diagramName=${filename}&filenameIntact=1"
+		          }
+		        }
+            }
+        ]
+    },
+    "scopes": [
+    "READ",
+    "WRITE"
+  	]
+}
\ No newline at end of file
diff --git a/src/main/webapp/connect/plantuml/viewer.html b/src/main/webapp/connect/plantuml/viewer.html
new file mode 100644
index 0000000000000000000000000000000000000000..3ea8b330bde55ad0747d5aa2832cbeae8a570613
--- /dev/null
+++ b/src/main/webapp/connect/plantuml/viewer.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Draw.io viewer</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="ac.js" type="text/javascript"></script>
+</head>
+<body style='overflow : none'>
+<script type="text/javascript">
+	var baseUrl = AC.getUrlParam('xdm_e', true) + AC.getUrlParam('cp', true);
+	var connectUrl = baseUrl + '/atlassian-connect';
+	var head = document.getElementsByTagName("head")[0];
+	
+	var script = document.createElement("script");
+	script.src = connectUrl + '/all.js';
+	script.setAttribute('data-options', 'resize:false;margin:false');
+
+	script.onload = main;
+	
+	head.appendChild(script);
+	
+	var link = document.createElement("link");
+	link.type = "text/css";
+	link.rel = "stylesheet";
+	link.href = connectUrl + '/all.css';
+	head.appendChild(link);
+	
+	function main() 
+	{
+		filename = AC.getUrlParam('filename');
+		width = AC.getUrlParam('width');
+		height = AC.getUrlParam('height');
+		pageId = AC.getUrlParam('pageId');
+		autoSize = AC.getUrlParam('autoSize');
+		
+		img = document.createElement('img');
+		img.src = baseUrl + '/download/attachments/' + pageId + '/' + filename;
+		$(img).on('load', function(evt) 
+		{
+			if(autoSize == "true")
+				AP.resize(evt.target.width + 20, evt.target.height + 20);
+			else
+				AP.resize(width, height);
+		});
+		
+		document.getElementsByTagName('body')[0].appendChild(img);
+	}
+</script>
+</body>
+
+</html>
diff --git a/src/main/webapp/connect/trello/attSection.html b/src/main/webapp/connect/trello/attSection.html
new file mode 100644
index 0000000000000000000000000000000000000000..883d0fb8e82725c3dcce6cddb32bef6fb10cc81b
--- /dev/null
+++ b/src/main/webapp/connect/trello/attSection.html
@@ -0,0 +1,14 @@
+<html>
+  <head>
+    <link rel="stylesheet" href="https://trello.com/power-ups/power-up.css">
+    <!-- Is this OK? -->
+    <link rel="stylesheet" href="https://a.trellocdn.com/css/d8375bf2ae4b875ccc5216dd4fcc705a/core.css">
+    <script src="https://trello.com/power-ups/power-up.min.js"></script>
+    <script src="/js/viewer.min.js"></script>
+    <script src="js/common.js"></script>
+  </head>
+  <body>
+    <div id="content"></div>
+    <script src="js/attSection.js"></script>
+  </body>
+</html>
diff --git a/src/main/webapp/connect/trello/editor.html b/src/main/webapp/connect/trello/editor.html
new file mode 100644
index 0000000000000000000000000000000000000000..65cfd1bafbf0a0d8f6703e6620410087a41ddd25
--- /dev/null
+++ b/src/main/webapp/connect/trello/editor.html
@@ -0,0 +1,13 @@
+<html>
+  <head>
+      <link rel="stylesheet" href="https://trello.com/power-ups/power-up.css">
+      <script src="https://trello.com/power-ups/power-up.min.js"></script>
+  </head>
+  <body>
+    <div id="content" style="width:100%;height:100%">
+      <iframe id="editorFrame" frameborder="0" src="about:blank" style="width:100%;height:100%">
+      </iframe>
+    </div>
+    <script src="js/editor.js"></script>
+  </body>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/connect/trello/images/drawio-trello-ss.png b/src/main/webapp/connect/trello/images/drawio-trello-ss.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a8e18b377f08f74b10c9774dfa9444cc4dc724b
Binary files /dev/null and b/src/main/webapp/connect/trello/images/drawio-trello-ss.png differ
diff --git a/src/main/webapp/connect/trello/index.html b/src/main/webapp/connect/trello/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..20c961195885b4d015ec96e50709b6a43d2f60f0
--- /dev/null
+++ b/src/main/webapp/connect/trello/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <script src="https://trello.com/power-ups/power-up.js"></script>
+    <script src="js/common.js"></script>
+    <script src="js/client.js"></script>
+    <h1>
+      draw.io Trello Power-Up
+    </h1>
+  </body>
+</html>
diff --git a/src/main/webapp/connect/trello/js/attSection.js b/src/main/webapp/connect/trello/js/attSection.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d8441a3fd2cd312e132dbb053059f944d673eb0
--- /dev/null
+++ b/src/main/webapp/connect/trello/js/attSection.js
@@ -0,0 +1,196 @@
+// Resize sensor not needed
+GraphViewer.useResizeSensor = false;
+
+var t = window.TrelloPowerUp.iframe();
+
+t.render(function()
+{
+	var idSep = encodeURIComponent('|$|');
+	var ident = 'attachment-thumbnail-details-options-item dark-hover';
+	var data = null;
+	
+	// NOTE: Autosave is enabled to avoid possible data loss due
+	// to no event fired before the modal dialog closes
+	var getEditFunction = function(att, name)
+	{
+		return function() 
+		{
+			var id = t.getContext().card + idSep + att.id;
+
+			t.modal({
+				url: './editor.html',
+				fullscreen: true,
+				title: 'draw.io: ' + name,
+				args: {url: mxTrelloCommon.editorURL +
+					((location.hostname != 'www.draw.io') ?
+						'?dev=1&drawdev=1&embed=1&libraries=1&tr=1&gapi=1&od=1&gh=1&db=1&p=tr' :
+						'?embed=1&libraries=1&tr=1&gapi=1&od=1&gh=1&db=1&p=tr') +
+					'#T' + id}
+	        });
+	    }  
+	};
+
+	var getPrevFunction = function(prevURL, name)
+	{
+		return function(evt)
+		{
+			var source = mxEvent.getSource(evt);
+			
+			while (source != null)
+			{
+				if (source.className != null && source.className.
+					toString().substring(0, ident.length) == ident)
+				{
+					return;
+				}
+				
+				source = source.parentNode;
+			}
+			
+			t.modal(
+			{
+				url: prevURL,
+				fullscreen: true,
+				title: 'draw.io: ' + name
+			});
+		}
+	};
+
+	t.card('attachments')
+		.get('attachments')
+		.filter(mxTrelloCommon.attFilterFn)
+		.then(function(drawioAtts)
+		{
+			var content = document.getElementById('content');
+			content.innerHTML = "";
+
+			for (var i = 0; i < drawioAtts.length; i++)
+			{
+				(function(atts)
+				{
+					var div = document.createElement('div');
+					div.className = "attachment-thumbnail";
+	
+					var attName = atts.name;
+	
+					//TODO add preview modal on click
+					//For PNG and SVG (on supported browsers) show them as images, otherwise, load them inside a lightbox editor [size 300px max for images]
+					//Click shows a preview
+					var previews = atts.previews;
+	
+					var prevURL = mxTrelloCommon.editorURL + '?lightbox=1&nav=1&layers=1&highlight=3572b0';
+					var fileId = '#T' + t.getContext().card + idSep + atts.id;
+					
+					if (previews.length > 0)
+					{
+						//find the best size (max dim is 300px)
+						var maxPrev = previews[0];
+	
+						for (var j = 1; j < previews.length; j++)
+						{
+							if (previews[j].width <= 350 && previews[j].height <= 260 && maxPrev.width < previews[j].width)
+							{
+								maxPrev = previews[j];
+							}
+						}
+	
+						var imgLink = document.createElement('a');
+						imgLink.className = "attachment-thumbnail-preview";
+						imgLink.setAttribute('href', 'javascript:void(0);');
+						imgLink.setAttribute('title', attName);
+	
+						imgLink.style.cssText = "background-image: url('" + maxPrev.url + "');background-color: #fcfcfc;";
+						div.appendChild(imgLink);
+					}
+					else
+					{
+						var id = t.getContext().card + encodeURIComponent('|$|') + atts.id;
+						
+						var container = document.createElement('div');
+						container.style.cssText = 'position:absolute;top:0px;left:0px;width:110px;' +
+							'height:80px;border:1px solid transparent;box-sizing:border-box;cursor:pointer;' +
+							'background-position:center;background-repeat:no-repeat;background-image:url(/images/spin.gif);';
+						div.appendChild(container);
+						
+						// Does not use iframe for quicker loading and avoiding authorize dialog
+						mxUtils.get('/proxy?url=' + encodeURIComponent(atts.url), function(req)
+						{
+							container.style.backgroundImage = 'none';
+	
+							if (req.getStatus() >= 200 && req.getStatus() < 300)
+							{
+								var viewer = new GraphViewer(container, req.getDocumentElement(),
+									{highlight: '#3572b0', border: 4, lightbox: false,
+									nav: true, 'max-height': 72});
+								
+								// Adds transparent background
+								viewer.graph.view.canvas.ownerSVGElement.style.backgroundColor = 'transparent';
+								
+								// Undo container resize and center
+								container.style.width = '110px';
+								container.style.height = '80px';
+								var bounds = viewer.graph.getGraphBounds();
+								var dx = (110 - bounds.width) / 2 - bounds.x;
+								var dy = (80 - bounds.height) / 2 - bounds.y;
+								viewer.graph.view.canvas.ownerSVGElement.setAttribute('transform',
+									'translate(' + dx + ' ' + dy + ')');
+							}
+						});
+					}
+
+					var prevFn = getPrevFunction(prevURL + fileId, attName);
+					mxEvent.addListener(div, 'click', prevFn);
+					
+					var detailsP = document.createElement('p');
+					detailsP.className = "attachment-thumbnail-details";
+	
+					var nameSpan = document.createElement('span');
+					nameSpan.className = "attachment-thumbnail-name";
+					nameSpan.innerHTML = attName;
+					detailsP.appendChild(nameSpan);
+	
+					var detailOpt = document.createElement('span');
+					detailOpt.className = "u-block quiet attachment-thumbnail-details-title-options";
+	
+					var addedSpan = document.createElement('span');
+					addedSpan.innerHTML = "&nbsp;"; //Add more details about the file here
+					detailOpt.appendChild(addedSpan);
+					// <span>
+					//   Added <span class="date" dt="2017-09-09T13:28:14.099Z" title="September 9, 2017 3:28 PM">an hour ago</span>
+					// </span>
+					// <span><a class="attachment-thumbnail-details-title-options-item dark-hover js-confirm-delete" href="#">
+					//   <span class="attachment-thumbnail-details-options-item-text">Delete</span></a>
+					// </span>
+					detailsP.appendChild(detailOpt);
+	
+					var actionsSpan = document.createElement('span');
+					actionsSpan.className = "quiet attachment-thumbnail-details-options";
+					detailsP.appendChild(actionsSpan);
+	
+					var downloadLink = document.createElement('a');
+					downloadLink.className = "attachment-thumbnail-details-options-item dark-hover";
+					downloadLink.setAttribute('href', atts.url);
+					downloadLink.setAttribute('target', '_blank');
+					downloadLink.setAttribute('download', attName);
+					downloadLink.innerHTML = '<span class="icon-sm icon-download"></span> <span class="attachment-thumbnail-details-options-item-text">Download</span>';
+					actionsSpan.appendChild(downloadLink);
+	
+					var editLink = document.createElement('a');
+					editLink.className = "attachment-thumbnail-details-options-item dark-hover";
+					editLink.setAttribute('href', 'javascript:void(0);');
+					editLink.innerHTML = '<span class="icon-sm icon-edit"></span> <span class="attachment-thumbnail-details-options-item-text">Edit</span>';
+					editLink.addEventListener("click", getEditFunction(atts, attName));
+					actionsSpan.appendChild(editLink);
+	
+					detailsP.appendChild(actionsSpan);
+					div.appendChild(detailsP);
+	
+					content.appendChild(div);
+				})(drawioAtts[i]);
+			}
+		})
+		.then(function()
+		{
+			return t.sizeTo('#content');
+		});
+});
diff --git a/src/main/webapp/connect/trello/js/client.js b/src/main/webapp/connect/trello/js/client.js
new file mode 100644
index 0000000000000000000000000000000000000000..c299f03b111783a09c16933dc245d66daf44b4f2
--- /dev/null
+++ b/src/main/webapp/connect/trello/js/client.js
@@ -0,0 +1,69 @@
+/* global TrelloPowerUp */
+
+var Promise = TrelloPowerUp.Promise;
+
+TrelloPowerUp
+		.initialize({
+			'card-buttons' : function(t, options) 
+			{
+				return [ {
+					icon : 'https://www.draw.io/images/drawlogo48-gray.png',
+					text : 'draw.io',
+					callback : function(t) 
+					{
+						return t.popup({
+							title : 'Create a New Diagram...',
+							url : './new.html',
+							height : 190
+						});
+					}
+				} ];
+			},
+			'attachment-sections' : function(t, options) 
+			{
+				// Claim all png attachment that is created by draw.io
+				var claimed = options.entries.filter(mxTrelloCommon.attFilterFn);
+
+				if (claimed && claimed.length > 0) 
+				{
+					return [ {
+						claimed : claimed,
+						icon : 'https://www.draw.io/images/drawlogo48-gray.png',
+						title : 'draw.io Diagrams',
+						content : 
+						{
+							type : 'iframe',
+							url : t.signUrl('./attSection.html', {
+								arg: ""
+							}),
+							height : 230
+						}
+					} ];
+				} 
+				else 
+				{
+					return [];
+				}
+			},
+			'card-badges' : function(t, options) 
+			{
+				 return t.card('attachments')
+				    .get('attachments')
+				    .filter(mxTrelloCommon.attFilterFn)
+				    .then(function(claimed)
+		    		{
+						if (claimed && claimed.length > 0) 
+						{
+							return [{ 
+								  text: claimed.length,
+								  icon: 'https://www.draw.io/images/drawlogo48-gray.png', 
+								  color: 'white' 
+							}];
+						}
+						else
+						{
+							return [];
+						}
+		    		});
+			}
+		});
diff --git a/src/main/webapp/connect/trello/js/common.js b/src/main/webapp/connect/trello/js/common.js
new file mode 100644
index 0000000000000000000000000000000000000000..81c9174bdcc3e495411b92634f54f340def4ea8d
--- /dev/null
+++ b/src/main/webapp/connect/trello/js/common.js
@@ -0,0 +1,8 @@
+mxTrelloCommon = {
+	editorURL: location.protocol + '//' + location.hostname + '/',
+	attFilterFn: function(attachment) 
+	{
+		// Returns true for files ending with .drawio and an optional extension
+		return /.*\.drawio(\.[A-Za-z]*)?$/.test(attachment.name);
+	}
+};
diff --git a/src/main/webapp/connect/trello/js/editor.js b/src/main/webapp/connect/trello/js/editor.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a295666801ef4377363c31b23d59c7513429aa0
--- /dev/null
+++ b/src/main/webapp/connect/trello/js/editor.js
@@ -0,0 +1,29 @@
+(function () {
+  var t = window.TrelloPowerUp.iframe();
+  var url = t.arg('url');
+
+  var iframe = document.getElementById("editorFrame");
+  iframe.setAttribute('src', url);
+
+  // Only needed to invoke closeModal via embed button in toolbar
+  // and to receive messages from iframe (cannot recv from t.modal)
+  window.addEventListener('message', function(evt)
+  {
+		if (evt.data.length > 0)
+		{
+			try
+			{
+				var msg = JSON.parse(evt.data);
+	
+				if (msg != null && msg.event == 'exit')
+				{
+					t.closeModal();
+				}
+			}
+			catch (e)
+			{
+				// ignore
+			}
+		}
+  });
+})();
\ No newline at end of file
diff --git a/src/main/webapp/connect/trello/js/new.js b/src/main/webapp/connect/trello/js/new.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5c9760956b00fa70a7e82592ad66ec5f4d061f6
--- /dev/null
+++ b/src/main/webapp/connect/trello/js/new.js
@@ -0,0 +1,104 @@
+(function()
+{
+	var t = window.TrelloPowerUp.iframe();
+	var diagName = document.getElementById("diagName");
+	var errorMsg = document.getElementById("errorMsg");
+	
+	diagName.focus();
+
+	function create(fileName, type, templateId)
+	{
+		t.closePopup();
+		
+		t.modal({
+	          url: './editor.html',
+	          fullscreen: true,
+	          title: 'draw.io: ' + fileName,
+	          args: {url: mxTrelloCommon.editorURL +
+					((location.hostname != 'www.draw.io') ?
+						'?dev=1&drawdev=1&embed=1&tr=1&gapi=1&od=1&gh=1&db=1&p=tr' :
+						'?embed=1&tr=1&gapi=1&od=1&gh=1&db=1&p=tr') +
+					'&filename=' + encodeURIComponent(fileName + '.drawio' + (type == 'xml' ? '' : '.' + type)) +
+					'&filetype=' + encodeURIComponent(type) +
+					'&card=' + encodeURIComponent(t.getContext().card) +
+					((templateId != null) ? '&template=' + encodeURIComponent(templateId) : '')}
+	        });
+	};
+
+	//Fill the dialog with other attachments
+	var select = document.getElementById("otherAtt");
+	var importBtn = document.getElementById("importBtn");
+
+	t.card('attachments')
+		.get('attachments')
+		.then(function(atts)
+		{
+			var count = 0;
+			for (var i = 0; i < atts.length; i++)
+			{
+				if (!mxTrelloCommon.attFilterFn(atts[i]))
+				{
+					var opt = document.createElement("option");
+					opt.setAttribute('value', atts[i].id);
+					opt.innerHTML = atts[i].name;
+					select.appendChild(opt);
+					count++;
+				}
+			}
+
+			if (count == 0)
+			{
+				document.getElementById("importLbl").style.display = "none";
+				select.style.display = "none";
+				importBtn.style.display = "none";
+			}
+			
+			var newDiagFn = function()
+			{
+				var name = diagName.value;
+				var type = document.getElementById("format").value;
+				
+				if (name == null || name.length == 0)
+				{
+					errorMsg.style.display = "";
+					errorMsg.innerHTML = 'Diagram name cannot be empty';
+					return;
+				}
+				else
+				{
+					for (var i = 0; i < atts.length; i++)
+					{
+						if (atts[i].name == name + '.drawio' + (type == 'xml' ? '' : '.' + type))
+						{
+							errorMsg.style.display = "";
+							errorMsg.innerHTML = 'Diagram already exists';
+							return;
+						}
+					}
+				}
+				
+				create(name, type);
+			};
+
+			diagName.addEventListener("keypress", function(e)
+			{
+				if (e.keyCode == 13)
+					newDiagFn();
+				else
+					errorMsg.style.display = "none";
+			});
+
+			document.getElementById("createBtn").addEventListener("click", newDiagFn);
+			document.getElementById("createBtn").removeAttribute('disabled');
+		})
+		.then(function()
+		{
+			return t.sizeTo('#content');
+		});
+
+	importBtn.addEventListener("click", function()
+	{
+		create(select.options[select.selectedIndex].text, 'xml', select.value);
+	});
+
+})();
\ No newline at end of file
diff --git a/src/main/webapp/connect/trello/manifest.json b/src/main/webapp/connect/trello/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..9bf9113d387c73eee8e409c45beb8fb7cc5a2f3b
--- /dev/null
+++ b/src/main/webapp/connect/trello/manifest.json
@@ -0,0 +1,19 @@
+{
+  "name": "draw.io",
+  "details":"[draw.io](https://www.draw.io) is a free diagramming Power-up that enables you to draw a wide range of diagrams including flowcharts, BPMN, network diagrams, UML and ER diagrams, and much more. draw.io offers these advantages:\n\n* Fully open source platform.\n* All data stored inside Trello, nothing externally.\n* Import diagrams from other diagramming tools.\n\n### Screenshot\n\n![Screenshot of a draw.io diagram insertion in Trello card.](https://www.draw.io/connect/trello/images/drawio-trello-ss.png)",
+  "icon": {
+    "url": "https://www.draw.io/images/drawlogo128.png"
+  },
+  "author": "draw.io",
+  "capabilities": [
+    "callback",
+    "card-buttons",
+    "card-badges",
+    "attachment-sections"
+  ],
+  "connectors": {
+    "iframe": {
+      "url": "./index.html"
+    }
+  }
+}
diff --git a/src/main/webapp/connect/trello/new.html b/src/main/webapp/connect/trello/new.html
new file mode 100644
index 0000000000000000000000000000000000000000..a0a1355ad313a3d4fe7b6a2d8039beab2113a55f
--- /dev/null
+++ b/src/main/webapp/connect/trello/new.html
@@ -0,0 +1,32 @@
+<html>
+  <head>
+      <link rel="stylesheet" href="https://trello.com/power-ups/power-up.css">
+      <script src="https://trello.com/power-ups/power-up.min.js"></script>
+      <script src="/js/viewer.min.js"></script>
+      <script src="js/common.js"></script>
+  </head>
+  <body>
+    <div id="content" style="width:100%;height:100%">
+      <label for="diagName">Diagram Name</label> 
+      <input type="text" id="diagName" placeholder="New Diagram Name">
+      <div id="errorMsg" style="display: none; color: red"></div>
+      <label for="format">File Type</label>
+	  <select id="format">
+		  <option value="xml">XML</option>
+		  <option value="png">PNG</option>
+		  <option value="svg">SVG</option>
+		  <option value="html">HTML</option>
+	  </select>
+      <button disabled="disabled" id="createBtn">
+        Create
+      </button>
+      <br>
+      <label id="importLbl" for="otherAtt">Or import an existing attachment</label>
+      <select id="otherAtt"></select>
+      <button id="importBtn">
+        Import
+      </button>      
+    </div>
+    <script src="js/new.js"></script>
+  </body>
+</html>
diff --git a/war/dropbox.html b/src/main/webapp/dropbox.html
similarity index 100%
rename from war/dropbox.html
rename to src/main/webapp/dropbox.html
diff --git a/war/electron.js b/src/main/webapp/electron.js
similarity index 100%
rename from war/electron.js
rename to src/main/webapp/electron.js
diff --git a/war/export2.html b/src/main/webapp/export2.html
similarity index 100%
rename from war/export2.html
rename to src/main/webapp/export2.html
diff --git a/war/export3.html b/src/main/webapp/export3.html
similarity index 100%
rename from war/export3.html
rename to src/main/webapp/export3.html
diff --git a/war/favicon.ico b/src/main/webapp/favicon.ico
similarity index 100%
rename from war/favicon.ico
rename to src/main/webapp/favicon.ico
diff --git a/war/github.html b/src/main/webapp/github.html
similarity index 100%
rename from war/github.html
rename to src/main/webapp/github.html
diff --git a/war/images/1x1.png b/src/main/webapp/images/1x1.png
similarity index 100%
rename from war/images/1x1.png
rename to src/main/webapp/images/1x1.png
diff --git a/war/images/2x2.png b/src/main/webapp/images/2x2.png
similarity index 100%
rename from war/images/2x2.png
rename to src/main/webapp/images/2x2.png
diff --git a/war/images/3x3.png b/src/main/webapp/images/3x3.png
similarity index 100%
rename from war/images/3x3.png
rename to src/main/webapp/images/3x3.png
diff --git a/war/images/ajax-loader.gif b/src/main/webapp/images/ajax-loader.gif
similarity index 100%
rename from war/images/ajax-loader.gif
rename to src/main/webapp/images/ajax-loader.gif
diff --git a/war/images/android-chrome-192x192.png b/src/main/webapp/images/android-chrome-192x192.png
similarity index 100%
rename from war/images/android-chrome-192x192.png
rename to src/main/webapp/images/android-chrome-192x192.png
diff --git a/war/images/android-chrome-512x512.png b/src/main/webapp/images/android-chrome-512x512.png
similarity index 100%
rename from war/images/android-chrome-512x512.png
rename to src/main/webapp/images/android-chrome-512x512.png
diff --git a/war/images/apple-touch-icon.png b/src/main/webapp/images/apple-touch-icon.png
similarity index 100%
rename from war/images/apple-touch-icon.png
rename to src/main/webapp/images/apple-touch-icon.png
diff --git a/war/images/arrow.gif b/src/main/webapp/images/arrow.gif
similarity index 100%
rename from war/images/arrow.gif
rename to src/main/webapp/images/arrow.gif
diff --git a/war/images/browserconfig.xml b/src/main/webapp/images/browserconfig.xml
similarity index 100%
rename from war/images/browserconfig.xml
rename to src/main/webapp/images/browserconfig.xml
diff --git a/war/images/checkmark.gif b/src/main/webapp/images/checkmark.gif
similarity index 100%
rename from war/images/checkmark.gif
rename to src/main/webapp/images/checkmark.gif
diff --git a/war/images/chevron-down.png b/src/main/webapp/images/chevron-down.png
similarity index 100%
rename from war/images/chevron-down.png
rename to src/main/webapp/images/chevron-down.png
diff --git a/war/images/chevron-up.png b/src/main/webapp/images/chevron-up.png
similarity index 100%
rename from war/images/chevron-up.png
rename to src/main/webapp/images/chevron-up.png
diff --git a/war/images/clear.gif b/src/main/webapp/images/clear.gif
similarity index 100%
rename from war/images/clear.gif
rename to src/main/webapp/images/clear.gif
diff --git a/war/images/close.png b/src/main/webapp/images/close.png
similarity index 100%
rename from war/images/close.png
rename to src/main/webapp/images/close.png
diff --git a/war/images/collapsed.gif b/src/main/webapp/images/collapsed.gif
similarity index 100%
rename from war/images/collapsed.gif
rename to src/main/webapp/images/collapsed.gif
diff --git a/war/images/connector.png b/src/main/webapp/images/connector.png
similarity index 100%
rename from war/images/connector.png
rename to src/main/webapp/images/connector.png
diff --git a/war/images/cross.gif b/src/main/webapp/images/cross.gif
similarity index 100%
rename from war/images/cross.gif
rename to src/main/webapp/images/cross.gif
diff --git a/war/images/delete.png b/src/main/webapp/images/delete.png
similarity index 100%
rename from war/images/delete.png
rename to src/main/webapp/images/delete.png
diff --git a/war/images/document-google-drive-icon-80.png b/src/main/webapp/images/document-google-drive-icon-80.png
similarity index 100%
rename from war/images/document-google-drive-icon-80.png
rename to src/main/webapp/images/document-google-drive-icon-80.png
diff --git a/war/images/download.png b/src/main/webapp/images/download.png
similarity index 100%
rename from war/images/download.png
rename to src/main/webapp/images/download.png
diff --git a/war/images/drawlogo-text-bottom.svg b/src/main/webapp/images/drawlogo-text-bottom.svg
similarity index 100%
rename from war/images/drawlogo-text-bottom.svg
rename to src/main/webapp/images/drawlogo-text-bottom.svg
diff --git a/war/images/drawlogo128.png b/src/main/webapp/images/drawlogo128.png
similarity index 100%
rename from war/images/drawlogo128.png
rename to src/main/webapp/images/drawlogo128.png
diff --git a/war/images/drawlogo256.png b/src/main/webapp/images/drawlogo256.png
similarity index 100%
rename from war/images/drawlogo256.png
rename to src/main/webapp/images/drawlogo256.png
diff --git a/war/images/drawlogo48-gray.png b/src/main/webapp/images/drawlogo48-gray.png
similarity index 100%
rename from war/images/drawlogo48-gray.png
rename to src/main/webapp/images/drawlogo48-gray.png
diff --git a/war/images/drawlogo48.png b/src/main/webapp/images/drawlogo48.png
similarity index 100%
rename from war/images/drawlogo48.png
rename to src/main/webapp/images/drawlogo48.png
diff --git a/war/images/dropbox-logo-white.svg b/src/main/webapp/images/dropbox-logo-white.svg
similarity index 100%
rename from war/images/dropbox-logo-white.svg
rename to src/main/webapp/images/dropbox-logo-white.svg
diff --git a/war/images/dropbox-logo.svg b/src/main/webapp/images/dropbox-logo.svg
similarity index 100%
rename from war/images/dropbox-logo.svg
rename to src/main/webapp/images/dropbox-logo.svg
diff --git a/war/images/dropdown.gif b/src/main/webapp/images/dropdown.gif
similarity index 100%
rename from war/images/dropdown.gif
rename to src/main/webapp/images/dropdown.gif
diff --git a/war/images/dropdown.png b/src/main/webapp/images/dropdown.png
similarity index 100%
rename from war/images/dropdown.png
rename to src/main/webapp/images/dropdown.png
diff --git a/war/images/droptarget.png b/src/main/webapp/images/droptarget.png
similarity index 100%
rename from war/images/droptarget.png
rename to src/main/webapp/images/droptarget.png
diff --git a/war/images/edit.gif b/src/main/webapp/images/edit.gif
similarity index 100%
rename from war/images/edit.gif
rename to src/main/webapp/images/edit.gif
diff --git a/war/images/expanded.gif b/src/main/webapp/images/expanded.gif
similarity index 100%
rename from war/images/expanded.gif
rename to src/main/webapp/images/expanded.gif
diff --git a/war/images/facebook.png b/src/main/webapp/images/facebook.png
similarity index 100%
rename from war/images/facebook.png
rename to src/main/webapp/images/facebook.png
diff --git a/war/images/favicon-16x16.png b/src/main/webapp/images/favicon-16x16.png
similarity index 100%
rename from war/images/favicon-16x16.png
rename to src/main/webapp/images/favicon-16x16.png
diff --git a/war/images/favicon-32x32.png b/src/main/webapp/images/favicon-32x32.png
similarity index 100%
rename from war/images/favicon-32x32.png
rename to src/main/webapp/images/favicon-32x32.png
diff --git a/war/images/format-hide.png b/src/main/webapp/images/format-hide.png
similarity index 100%
rename from war/images/format-hide.png
rename to src/main/webapp/images/format-hide.png
diff --git a/war/images/format-show.png b/src/main/webapp/images/format-show.png
similarity index 100%
rename from war/images/format-show.png
rename to src/main/webapp/images/format-show.png
diff --git a/war/images/fullscreen.png b/src/main/webapp/images/fullscreen.png
similarity index 100%
rename from war/images/fullscreen.png
rename to src/main/webapp/images/fullscreen.png
diff --git a/war/images/gadget-screenshot.png b/src/main/webapp/images/gadget-screenshot.png
similarity index 100%
rename from war/images/gadget-screenshot.png
rename to src/main/webapp/images/gadget-screenshot.png
diff --git a/war/images/gadget-thumb.png b/src/main/webapp/images/gadget-thumb.png
similarity index 100%
rename from war/images/gadget-thumb.png
rename to src/main/webapp/images/gadget-thumb.png
diff --git a/war/images/github-logo-white.svg b/src/main/webapp/images/github-logo-white.svg
similarity index 100%
rename from war/images/github-logo-white.svg
rename to src/main/webapp/images/github-logo-white.svg
diff --git a/war/images/github-logo.svg b/src/main/webapp/images/github-logo.svg
similarity index 100%
rename from war/images/github-logo.svg
rename to src/main/webapp/images/github-logo.svg
diff --git a/war/images/glyphicons_blogger.png b/src/main/webapp/images/glyphicons_blogger.png
similarity index 100%
rename from war/images/glyphicons_blogger.png
rename to src/main/webapp/images/glyphicons_blogger.png
diff --git a/war/images/glyphicons_facebook.png b/src/main/webapp/images/glyphicons_facebook.png
similarity index 100%
rename from war/images/glyphicons_facebook.png
rename to src/main/webapp/images/glyphicons_facebook.png
diff --git a/war/images/glyphicons_github.png b/src/main/webapp/images/glyphicons_github.png
similarity index 100%
rename from war/images/glyphicons_github.png
rename to src/main/webapp/images/glyphicons_github.png
diff --git a/war/images/glyphicons_google.png b/src/main/webapp/images/glyphicons_google.png
similarity index 100%
rename from war/images/glyphicons_google.png
rename to src/main/webapp/images/glyphicons_google.png
diff --git a/war/images/glyphicons_star.png b/src/main/webapp/images/glyphicons_star.png
similarity index 100%
rename from war/images/glyphicons_star.png
rename to src/main/webapp/images/glyphicons_star.png
diff --git a/war/images/glyphicons_twitter.png b/src/main/webapp/images/glyphicons_twitter.png
similarity index 100%
rename from war/images/glyphicons_twitter.png
rename to src/main/webapp/images/glyphicons_twitter.png
diff --git a/war/images/glyphicons_youtube.png b/src/main/webapp/images/glyphicons_youtube.png
similarity index 100%
rename from war/images/glyphicons_youtube.png
rename to src/main/webapp/images/glyphicons_youtube.png
diff --git a/war/images/google-drive-connector-atlas.png b/src/main/webapp/images/google-drive-connector-atlas.png
similarity index 100%
rename from war/images/google-drive-connector-atlas.png
rename to src/main/webapp/images/google-drive-connector-atlas.png
diff --git a/war/images/google-drive-logo-white.svg b/src/main/webapp/images/google-drive-logo-white.svg
similarity index 100%
rename from war/images/google-drive-logo-white.svg
rename to src/main/webapp/images/google-drive-logo-white.svg
diff --git a/war/images/google-drive-logo.svg b/src/main/webapp/images/google-drive-logo.svg
similarity index 100%
rename from war/images/google-drive-logo.svg
rename to src/main/webapp/images/google-drive-logo.svg
diff --git a/src/main/webapp/images/grid.gif b/src/main/webapp/images/grid.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f4e7063e878d67961b48bea089c180c9b838dbdc
Binary files /dev/null and b/src/main/webapp/images/grid.gif differ
diff --git a/war/images/handle-connect.png b/src/main/webapp/images/handle-connect.png
similarity index 100%
rename from war/images/handle-connect.png
rename to src/main/webapp/images/handle-connect.png
diff --git a/war/images/handle-fixed.png b/src/main/webapp/images/handle-fixed.png
similarity index 100%
rename from war/images/handle-fixed.png
rename to src/main/webapp/images/handle-fixed.png
diff --git a/war/images/handle-main.png b/src/main/webapp/images/handle-main.png
similarity index 100%
rename from war/images/handle-main.png
rename to src/main/webapp/images/handle-main.png
diff --git a/war/images/handle-rotate.png b/src/main/webapp/images/handle-rotate.png
similarity index 100%
rename from war/images/handle-rotate.png
rename to src/main/webapp/images/handle-rotate.png
diff --git a/war/images/handle-secondary.png b/src/main/webapp/images/handle-secondary.png
similarity index 100%
rename from war/images/handle-secondary.png
rename to src/main/webapp/images/handle-secondary.png
diff --git a/war/images/handle-terminal.png b/src/main/webapp/images/handle-terminal.png
similarity index 100%
rename from war/images/handle-terminal.png
rename to src/main/webapp/images/handle-terminal.png
diff --git a/war/images/help.png b/src/main/webapp/images/help.png
similarity index 100%
rename from war/images/help.png
rename to src/main/webapp/images/help.png
diff --git a/war/images/hs.png b/src/main/webapp/images/hs.png
similarity index 100%
rename from war/images/hs.png
rename to src/main/webapp/images/hs.png
diff --git a/war/images/hv.png b/src/main/webapp/images/hv.png
similarity index 100%
rename from war/images/hv.png
rename to src/main/webapp/images/hv.png
diff --git a/war/images/img-hi-res.png b/src/main/webapp/images/img-hi-res.png
similarity index 100%
rename from war/images/img-hi-res.png
rename to src/main/webapp/images/img-hi-res.png
diff --git a/war/images/img-lo-res.png b/src/main/webapp/images/img-lo-res.png
similarity index 100%
rename from war/images/img-lo-res.png
rename to src/main/webapp/images/img-lo-res.png
diff --git a/war/images/locked.png b/src/main/webapp/images/locked.png
similarity index 100%
rename from war/images/locked.png
rename to src/main/webapp/images/locked.png
diff --git a/war/images/log.png b/src/main/webapp/images/log.png
similarity index 100%
rename from war/images/log.png
rename to src/main/webapp/images/log.png
diff --git a/war/images/logo-confluence.png b/src/main/webapp/images/logo-confluence.png
similarity index 100%
rename from war/images/logo-confluence.png
rename to src/main/webapp/images/logo-confluence.png
diff --git a/war/images/logo-flat-small.png b/src/main/webapp/images/logo-flat-small.png
similarity index 100%
rename from war/images/logo-flat-small.png
rename to src/main/webapp/images/logo-flat-small.png
diff --git a/war/images/logo-flat.png b/src/main/webapp/images/logo-flat.png
similarity index 100%
rename from war/images/logo-flat.png
rename to src/main/webapp/images/logo-flat.png
diff --git a/war/images/logo-jira.png b/src/main/webapp/images/logo-jira.png
similarity index 100%
rename from war/images/logo-jira.png
rename to src/main/webapp/images/logo-jira.png
diff --git a/war/images/logo-small.gif b/src/main/webapp/images/logo-small.gif
similarity index 100%
rename from war/images/logo-small.gif
rename to src/main/webapp/images/logo-small.gif
diff --git a/war/images/logo-white.png b/src/main/webapp/images/logo-white.png
similarity index 100%
rename from war/images/logo-white.png
rename to src/main/webapp/images/logo-white.png
diff --git a/war/images/logo.png b/src/main/webapp/images/logo.png
similarity index 100%
rename from war/images/logo.png
rename to src/main/webapp/images/logo.png
diff --git a/war/images/manifest.json b/src/main/webapp/images/manifest.json
similarity index 100%
rename from war/images/manifest.json
rename to src/main/webapp/images/manifest.json
diff --git a/war/images/move.png b/src/main/webapp/images/move.png
similarity index 100%
rename from war/images/move.png
rename to src/main/webapp/images/move.png
diff --git a/war/images/mstile-150x150.png b/src/main/webapp/images/mstile-150x150.png
similarity index 100%
rename from war/images/mstile-150x150.png
rename to src/main/webapp/images/mstile-150x150.png
diff --git a/war/images/nocolor.png b/src/main/webapp/images/nocolor.png
similarity index 100%
rename from war/images/nocolor.png
rename to src/main/webapp/images/nocolor.png
diff --git a/war/images/onedrive-logo-white.svg b/src/main/webapp/images/onedrive-logo-white.svg
similarity index 100%
rename from war/images/onedrive-logo-white.svg
rename to src/main/webapp/images/onedrive-logo-white.svg
diff --git a/war/images/onedrive-logo.svg b/src/main/webapp/images/onedrive-logo.svg
similarity index 100%
rename from war/images/onedrive-logo.svg
rename to src/main/webapp/images/onedrive-logo.svg
diff --git a/war/images/osa_database.png b/src/main/webapp/images/osa_database.png
similarity index 100%
rename from war/images/osa_database.png
rename to src/main/webapp/images/osa_database.png
diff --git a/war/images/osa_drive-harddisk.png b/src/main/webapp/images/osa_drive-harddisk.png
similarity index 100%
rename from war/images/osa_drive-harddisk.png
rename to src/main/webapp/images/osa_drive-harddisk.png
diff --git a/war/images/plant-uml-atlas.png b/src/main/webapp/images/plant-uml-atlas.png
similarity index 100%
rename from war/images/plant-uml-atlas.png
rename to src/main/webapp/images/plant-uml-atlas.png
diff --git a/war/images/plus.png b/src/main/webapp/images/plus.png
similarity index 100%
rename from war/images/plus.png
rename to src/main/webapp/images/plus.png
diff --git a/war/images/refresh.png b/src/main/webapp/images/refresh.png
similarity index 100%
rename from war/images/refresh.png
rename to src/main/webapp/images/refresh.png
diff --git a/war/images/round-drop.png b/src/main/webapp/images/round-drop.png
similarity index 100%
rename from war/images/round-drop.png
rename to src/main/webapp/images/round-drop.png
diff --git a/war/images/safari-pinned-tab.svg b/src/main/webapp/images/safari-pinned-tab.svg
similarity index 100%
rename from war/images/safari-pinned-tab.svg
rename to src/main/webapp/images/safari-pinned-tab.svg
diff --git a/war/images/samepage-icon-color.svg b/src/main/webapp/images/samepage-icon-color.svg
similarity index 100%
rename from war/images/samepage-icon-color.svg
rename to src/main/webapp/images/samepage-icon-color.svg
diff --git a/war/images/search.png b/src/main/webapp/images/search.png
similarity index 100%
rename from war/images/search.png
rename to src/main/webapp/images/search.png
diff --git a/war/images/sidebar-android.png b/src/main/webapp/images/sidebar-android.png
similarity index 100%
rename from war/images/sidebar-android.png
rename to src/main/webapp/images/sidebar-android.png
diff --git a/war/images/sidebar-archimate.png b/src/main/webapp/images/sidebar-archimate.png
similarity index 100%
rename from war/images/sidebar-archimate.png
rename to src/main/webapp/images/sidebar-archimate.png
diff --git a/war/images/sidebar-archimate3.png b/src/main/webapp/images/sidebar-archimate3.png
similarity index 100%
rename from war/images/sidebar-archimate3.png
rename to src/main/webapp/images/sidebar-archimate3.png
diff --git a/war/images/sidebar-arrows.png b/src/main/webapp/images/sidebar-arrows.png
similarity index 100%
rename from war/images/sidebar-arrows.png
rename to src/main/webapp/images/sidebar-arrows.png
diff --git a/war/images/sidebar-arrows2.png b/src/main/webapp/images/sidebar-arrows2.png
similarity index 100%
rename from war/images/sidebar-arrows2.png
rename to src/main/webapp/images/sidebar-arrows2.png
diff --git a/war/images/sidebar-atlassian.png b/src/main/webapp/images/sidebar-atlassian.png
similarity index 100%
rename from war/images/sidebar-atlassian.png
rename to src/main/webapp/images/sidebar-atlassian.png
diff --git a/war/images/sidebar-aws.png b/src/main/webapp/images/sidebar-aws.png
similarity index 100%
rename from war/images/sidebar-aws.png
rename to src/main/webapp/images/sidebar-aws.png
diff --git a/war/images/sidebar-aws3.png b/src/main/webapp/images/sidebar-aws3.png
similarity index 100%
rename from war/images/sidebar-aws3.png
rename to src/main/webapp/images/sidebar-aws3.png
diff --git a/war/images/sidebar-aws3d.png b/src/main/webapp/images/sidebar-aws3d.png
similarity index 100%
rename from war/images/sidebar-aws3d.png
rename to src/main/webapp/images/sidebar-aws3d.png
diff --git a/war/images/sidebar-azure.png b/src/main/webapp/images/sidebar-azure.png
similarity index 100%
rename from war/images/sidebar-azure.png
rename to src/main/webapp/images/sidebar-azure.png
diff --git a/war/images/sidebar-basic.png b/src/main/webapp/images/sidebar-basic.png
similarity index 100%
rename from war/images/sidebar-basic.png
rename to src/main/webapp/images/sidebar-basic.png
diff --git a/war/images/sidebar-bootstrap.png b/src/main/webapp/images/sidebar-bootstrap.png
similarity index 100%
rename from war/images/sidebar-bootstrap.png
rename to src/main/webapp/images/sidebar-bootstrap.png
diff --git a/war/images/sidebar-bpmn.png b/src/main/webapp/images/sidebar-bpmn.png
similarity index 100%
rename from war/images/sidebar-bpmn.png
rename to src/main/webapp/images/sidebar-bpmn.png
diff --git a/war/images/sidebar-cabinets.png b/src/main/webapp/images/sidebar-cabinets.png
similarity index 100%
rename from war/images/sidebar-cabinets.png
rename to src/main/webapp/images/sidebar-cabinets.png
diff --git a/war/images/sidebar-cisco.png b/src/main/webapp/images/sidebar-cisco.png
similarity index 100%
rename from war/images/sidebar-cisco.png
rename to src/main/webapp/images/sidebar-cisco.png
diff --git a/war/images/sidebar-citrix.png b/src/main/webapp/images/sidebar-citrix.png
similarity index 100%
rename from war/images/sidebar-citrix.png
rename to src/main/webapp/images/sidebar-citrix.png
diff --git a/war/images/sidebar-clipart.png b/src/main/webapp/images/sidebar-clipart.png
similarity index 100%
rename from war/images/sidebar-clipart.png
rename to src/main/webapp/images/sidebar-clipart.png
diff --git a/war/images/sidebar-eip.png b/src/main/webapp/images/sidebar-eip.png
similarity index 100%
rename from war/images/sidebar-eip.png
rename to src/main/webapp/images/sidebar-eip.png
diff --git a/war/images/sidebar-electrical.png b/src/main/webapp/images/sidebar-electrical.png
similarity index 100%
rename from war/images/sidebar-electrical.png
rename to src/main/webapp/images/sidebar-electrical.png
diff --git a/war/images/sidebar-er.png b/src/main/webapp/images/sidebar-er.png
similarity index 100%
rename from war/images/sidebar-er.png
rename to src/main/webapp/images/sidebar-er.png
diff --git a/war/images/sidebar-floorplans.png b/src/main/webapp/images/sidebar-floorplans.png
similarity index 100%
rename from war/images/sidebar-floorplans.png
rename to src/main/webapp/images/sidebar-floorplans.png
diff --git a/war/images/sidebar-flowchart.png b/src/main/webapp/images/sidebar-flowchart.png
similarity index 100%
rename from war/images/sidebar-flowchart.png
rename to src/main/webapp/images/sidebar-flowchart.png
diff --git a/war/images/sidebar-gcp.png b/src/main/webapp/images/sidebar-gcp.png
similarity index 100%
rename from war/images/sidebar-gcp.png
rename to src/main/webapp/images/sidebar-gcp.png
diff --git a/war/images/sidebar-general.png b/src/main/webapp/images/sidebar-general.png
similarity index 100%
rename from war/images/sidebar-general.png
rename to src/main/webapp/images/sidebar-general.png
diff --git a/war/images/sidebar-gmdl.png b/src/main/webapp/images/sidebar-gmdl.png
similarity index 100%
rename from war/images/sidebar-gmdl.png
rename to src/main/webapp/images/sidebar-gmdl.png
diff --git a/war/images/sidebar-ibm.png b/src/main/webapp/images/sidebar-ibm.png
similarity index 100%
rename from war/images/sidebar-ibm.png
rename to src/main/webapp/images/sidebar-ibm.png
diff --git a/war/images/sidebar-ios.png b/src/main/webapp/images/sidebar-ios.png
similarity index 100%
rename from war/images/sidebar-ios.png
rename to src/main/webapp/images/sidebar-ios.png
diff --git a/war/images/sidebar-leanmapping.png b/src/main/webapp/images/sidebar-leanmapping.png
similarity index 100%
rename from war/images/sidebar-leanmapping.png
rename to src/main/webapp/images/sidebar-leanmapping.png
diff --git a/war/images/sidebar-mockups.png b/src/main/webapp/images/sidebar-mockups.png
similarity index 100%
rename from war/images/sidebar-mockups.png
rename to src/main/webapp/images/sidebar-mockups.png
diff --git a/war/images/sidebar-mscae.png b/src/main/webapp/images/sidebar-mscae.png
similarity index 100%
rename from war/images/sidebar-mscae.png
rename to src/main/webapp/images/sidebar-mscae.png
diff --git a/war/images/sidebar-network.png b/src/main/webapp/images/sidebar-network.png
similarity index 100%
rename from war/images/sidebar-network.png
rename to src/main/webapp/images/sidebar-network.png
diff --git a/war/images/sidebar-office.png b/src/main/webapp/images/sidebar-office.png
similarity index 100%
rename from war/images/sidebar-office.png
rename to src/main/webapp/images/sidebar-office.png
diff --git a/war/images/sidebar-pid.png b/src/main/webapp/images/sidebar-pid.png
similarity index 100%
rename from war/images/sidebar-pid.png
rename to src/main/webapp/images/sidebar-pid.png
diff --git a/war/images/sidebar-rack.png b/src/main/webapp/images/sidebar-rack.png
similarity index 100%
rename from war/images/sidebar-rack.png
rename to src/main/webapp/images/sidebar-rack.png
diff --git a/war/images/sidebar-signs.png b/src/main/webapp/images/sidebar-signs.png
similarity index 100%
rename from war/images/sidebar-signs.png
rename to src/main/webapp/images/sidebar-signs.png
diff --git a/war/images/sidebar-sitemap.png b/src/main/webapp/images/sidebar-sitemap.png
similarity index 100%
rename from war/images/sidebar-sitemap.png
rename to src/main/webapp/images/sidebar-sitemap.png
diff --git a/war/images/sidebar-sysml.png b/src/main/webapp/images/sidebar-sysml.png
similarity index 100%
rename from war/images/sidebar-sysml.png
rename to src/main/webapp/images/sidebar-sysml.png
diff --git a/war/images/sidebar-uml.png b/src/main/webapp/images/sidebar-uml.png
similarity index 100%
rename from war/images/sidebar-uml.png
rename to src/main/webapp/images/sidebar-uml.png
diff --git a/war/images/sidebar-veeam.png b/src/main/webapp/images/sidebar-veeam.png
similarity index 100%
rename from war/images/sidebar-veeam.png
rename to src/main/webapp/images/sidebar-veeam.png
diff --git a/war/images/sidebar-webIcons.png b/src/main/webapp/images/sidebar-webIcons.png
similarity index 100%
rename from war/images/sidebar-webIcons.png
rename to src/main/webapp/images/sidebar-webIcons.png
diff --git a/war/images/spin.gif b/src/main/webapp/images/spin.gif
similarity index 100%
rename from war/images/spin.gif
rename to src/main/webapp/images/spin.gif
diff --git a/war/images/sprites.png b/src/main/webapp/images/sprites.png
similarity index 100%
rename from war/images/sprites.png
rename to src/main/webapp/images/sprites.png
diff --git a/war/images/stop-flat-icon-80.png b/src/main/webapp/images/stop-flat-icon-80.png
similarity index 100%
rename from war/images/stop-flat-icon-80.png
rename to src/main/webapp/images/stop-flat-icon-80.png
diff --git a/war/images/submenu.gif b/src/main/webapp/images/submenu.gif
similarity index 100%
rename from war/images/submenu.gif
rename to src/main/webapp/images/submenu.gif
diff --git a/war/images/tooltip.png b/src/main/webapp/images/tooltip.png
similarity index 100%
rename from war/images/tooltip.png
rename to src/main/webapp/images/tooltip.png
diff --git a/war/images/touch-submenu.png b/src/main/webapp/images/touch-submenu.png
similarity index 100%
rename from war/images/touch-submenu.png
rename to src/main/webapp/images/touch-submenu.png
diff --git a/war/images/transparent.gif b/src/main/webapp/images/transparent.gif
similarity index 100%
rename from war/images/transparent.gif
rename to src/main/webapp/images/transparent.gif
diff --git a/war/images/trello-logo-white-orange.svg b/src/main/webapp/images/trello-logo-white-orange.svg
similarity index 100%
rename from war/images/trello-logo-white-orange.svg
rename to src/main/webapp/images/trello-logo-white-orange.svg
diff --git a/war/images/trello-logo-white.svg b/src/main/webapp/images/trello-logo-white.svg
similarity index 100%
rename from war/images/trello-logo-white.svg
rename to src/main/webapp/images/trello-logo-white.svg
diff --git a/war/images/trello-logo.svg b/src/main/webapp/images/trello-logo.svg
similarity index 100%
rename from war/images/trello-logo.svg
rename to src/main/webapp/images/trello-logo.svg
diff --git a/war/images/triangle-down.png b/src/main/webapp/images/triangle-down.png
similarity index 100%
rename from war/images/triangle-down.png
rename to src/main/webapp/images/triangle-down.png
diff --git a/war/images/triangle-left.png b/src/main/webapp/images/triangle-left.png
similarity index 100%
rename from war/images/triangle-left.png
rename to src/main/webapp/images/triangle-left.png
diff --git a/war/images/triangle-right.png b/src/main/webapp/images/triangle-right.png
similarity index 100%
rename from war/images/triangle-right.png
rename to src/main/webapp/images/triangle-right.png
diff --git a/war/images/triangle-up.png b/src/main/webapp/images/triangle-up.png
similarity index 100%
rename from war/images/triangle-up.png
rename to src/main/webapp/images/triangle-up.png
diff --git a/war/images/tweet.png b/src/main/webapp/images/tweet.png
similarity index 100%
rename from war/images/tweet.png
rename to src/main/webapp/images/tweet.png
diff --git a/war/images/unlocked.png b/src/main/webapp/images/unlocked.png
similarity index 100%
rename from war/images/unlocked.png
rename to src/main/webapp/images/unlocked.png
diff --git a/war/images/youtube.png b/src/main/webapp/images/youtube.png
similarity index 100%
rename from war/images/youtube.png
rename to src/main/webapp/images/youtube.png
diff --git a/war/img/clipart/Battery_0_128x128.png b/src/main/webapp/img/clipart/Battery_0_128x128.png
similarity index 100%
rename from war/img/clipart/Battery_0_128x128.png
rename to src/main/webapp/img/clipart/Battery_0_128x128.png
diff --git a/war/img/clipart/Battery_100_128x128.png b/src/main/webapp/img/clipart/Battery_100_128x128.png
similarity index 100%
rename from war/img/clipart/Battery_100_128x128.png
rename to src/main/webapp/img/clipart/Battery_100_128x128.png
diff --git a/war/img/clipart/Battery_50_128x128.png b/src/main/webapp/img/clipart/Battery_50_128x128.png
similarity index 100%
rename from war/img/clipart/Battery_50_128x128.png
rename to src/main/webapp/img/clipart/Battery_50_128x128.png
diff --git a/war/img/clipart/Battery_75_128x128.png b/src/main/webapp/img/clipart/Battery_75_128x128.png
similarity index 100%
rename from war/img/clipart/Battery_75_128x128.png
rename to src/main/webapp/img/clipart/Battery_75_128x128.png
diff --git a/war/img/clipart/Battery_allstates_128x128.png b/src/main/webapp/img/clipart/Battery_allstates_128x128.png
similarity index 100%
rename from war/img/clipart/Battery_allstates_128x128.png
rename to src/main/webapp/img/clipart/Battery_allstates_128x128.png
diff --git a/war/img/clipart/Bluetooth_128x128.png b/src/main/webapp/img/clipart/Bluetooth_128x128.png
similarity index 100%
rename from war/img/clipart/Bluetooth_128x128.png
rename to src/main/webapp/img/clipart/Bluetooth_128x128.png
diff --git a/war/img/clipart/Earth_globe_128x128.png b/src/main/webapp/img/clipart/Earth_globe_128x128.png
similarity index 100%
rename from war/img/clipart/Earth_globe_128x128.png
rename to src/main/webapp/img/clipart/Earth_globe_128x128.png
diff --git a/war/img/clipart/Empty_Folder_128x128.png b/src/main/webapp/img/clipart/Empty_Folder_128x128.png
similarity index 100%
rename from war/img/clipart/Empty_Folder_128x128.png
rename to src/main/webapp/img/clipart/Empty_Folder_128x128.png
diff --git a/war/img/clipart/Full_Folder_128x128.png b/src/main/webapp/img/clipart/Full_Folder_128x128.png
similarity index 100%
rename from war/img/clipart/Full_Folder_128x128.png
rename to src/main/webapp/img/clipart/Full_Folder_128x128.png
diff --git a/war/img/clipart/Gear_128x128.png b/src/main/webapp/img/clipart/Gear_128x128.png
similarity index 100%
rename from war/img/clipart/Gear_128x128.png
rename to src/main/webapp/img/clipart/Gear_128x128.png
diff --git a/war/img/clipart/Keys_128x128.png b/src/main/webapp/img/clipart/Keys_128x128.png
similarity index 100%
rename from war/img/clipart/Keys_128x128.png
rename to src/main/webapp/img/clipart/Keys_128x128.png
diff --git a/war/img/clipart/Lock_128x128.png b/src/main/webapp/img/clipart/Lock_128x128.png
similarity index 100%
rename from war/img/clipart/Lock_128x128.png
rename to src/main/webapp/img/clipart/Lock_128x128.png
diff --git a/war/img/clipart/Mouse_Pointer_128x128.png b/src/main/webapp/img/clipart/Mouse_Pointer_128x128.png
similarity index 100%
rename from war/img/clipart/Mouse_Pointer_128x128.png
rename to src/main/webapp/img/clipart/Mouse_Pointer_128x128.png
diff --git a/war/img/clipart/Plug_128x128.png b/src/main/webapp/img/clipart/Plug_128x128.png
similarity index 100%
rename from war/img/clipart/Plug_128x128.png
rename to src/main/webapp/img/clipart/Plug_128x128.png
diff --git a/war/img/clipart/Ships_Wheel_128x128.png b/src/main/webapp/img/clipart/Ships_Wheel_128x128.png
similarity index 100%
rename from war/img/clipart/Ships_Wheel_128x128.png
rename to src/main/webapp/img/clipart/Ships_Wheel_128x128.png
diff --git a/war/img/clipart/Star_128x128.png b/src/main/webapp/img/clipart/Star_128x128.png
similarity index 100%
rename from war/img/clipart/Star_128x128.png
rename to src/main/webapp/img/clipart/Star_128x128.png
diff --git a/war/img/clipart/Tire_128x128.png b/src/main/webapp/img/clipart/Tire_128x128.png
similarity index 100%
rename from war/img/clipart/Tire_128x128.png
rename to src/main/webapp/img/clipart/Tire_128x128.png
diff --git a/war/img/computers/Antivirus_128x128.png b/src/main/webapp/img/computers/Antivirus_128x128.png
similarity index 100%
rename from war/img/computers/Antivirus_128x128.png
rename to src/main/webapp/img/computers/Antivirus_128x128.png
diff --git a/war/img/computers/Data_Filtering_128x128.png b/src/main/webapp/img/computers/Data_Filtering_128x128.png
similarity index 100%
rename from war/img/computers/Data_Filtering_128x128.png
rename to src/main/webapp/img/computers/Data_Filtering_128x128.png
diff --git a/war/img/computers/Database_128x128.png b/src/main/webapp/img/computers/Database_128x128.png
similarity index 100%
rename from war/img/computers/Database_128x128.png
rename to src/main/webapp/img/computers/Database_128x128.png
diff --git a/war/img/computers/Database_Add_128x128.png b/src/main/webapp/img/computers/Database_Add_128x128.png
similarity index 100%
rename from war/img/computers/Database_Add_128x128.png
rename to src/main/webapp/img/computers/Database_Add_128x128.png
diff --git a/war/img/computers/Database_Minus_128x128.png b/src/main/webapp/img/computers/Database_Minus_128x128.png
similarity index 100%
rename from war/img/computers/Database_Minus_128x128.png
rename to src/main/webapp/img/computers/Database_Minus_128x128.png
diff --git a/war/img/computers/Database_Move_Stack_128x128.png b/src/main/webapp/img/computers/Database_Move_Stack_128x128.png
similarity index 100%
rename from war/img/computers/Database_Move_Stack_128x128.png
rename to src/main/webapp/img/computers/Database_Move_Stack_128x128.png
diff --git a/war/img/computers/Database_Remove_128x128.png b/src/main/webapp/img/computers/Database_Remove_128x128.png
similarity index 100%
rename from war/img/computers/Database_Remove_128x128.png
rename to src/main/webapp/img/computers/Database_Remove_128x128.png
diff --git a/war/img/computers/Fujitsu_Tablet_128x128.png b/src/main/webapp/img/computers/Fujitsu_Tablet_128x128.png
similarity index 100%
rename from war/img/computers/Fujitsu_Tablet_128x128.png
rename to src/main/webapp/img/computers/Fujitsu_Tablet_128x128.png
diff --git a/war/img/computers/Harddrive_128x128.png b/src/main/webapp/img/computers/Harddrive_128x128.png
similarity index 100%
rename from war/img/computers/Harddrive_128x128.png
rename to src/main/webapp/img/computers/Harddrive_128x128.png
diff --git a/war/img/computers/IBM_Tablet_128x128.png b/src/main/webapp/img/computers/IBM_Tablet_128x128.png
similarity index 100%
rename from war/img/computers/IBM_Tablet_128x128.png
rename to src/main/webapp/img/computers/IBM_Tablet_128x128.png
diff --git a/war/img/computers/Laptop_128x128.png b/src/main/webapp/img/computers/Laptop_128x128.png
similarity index 100%
rename from war/img/computers/Laptop_128x128.png
rename to src/main/webapp/img/computers/Laptop_128x128.png
diff --git a/war/img/computers/MacBook_128x128.png b/src/main/webapp/img/computers/MacBook_128x128.png
similarity index 100%
rename from war/img/computers/MacBook_128x128.png
rename to src/main/webapp/img/computers/MacBook_128x128.png
diff --git a/war/img/computers/Mainframe_128x128.png b/src/main/webapp/img/computers/Mainframe_128x128.png
similarity index 100%
rename from war/img/computers/Mainframe_128x128.png
rename to src/main/webapp/img/computers/Mainframe_128x128.png
diff --git a/war/img/computers/Monitor_128x128.png b/src/main/webapp/img/computers/Monitor_128x128.png
similarity index 100%
rename from war/img/computers/Monitor_128x128.png
rename to src/main/webapp/img/computers/Monitor_128x128.png
diff --git a/war/img/computers/Monitor_Tower_128x128.png b/src/main/webapp/img/computers/Monitor_Tower_128x128.png
similarity index 100%
rename from war/img/computers/Monitor_Tower_128x128.png
rename to src/main/webapp/img/computers/Monitor_Tower_128x128.png
diff --git a/war/img/computers/Monitor_Tower_Behind_128x128.png b/src/main/webapp/img/computers/Monitor_Tower_Behind_128x128.png
similarity index 100%
rename from war/img/computers/Monitor_Tower_Behind_128x128.png
rename to src/main/webapp/img/computers/Monitor_Tower_Behind_128x128.png
diff --git a/war/img/computers/Netbook_128x128.png b/src/main/webapp/img/computers/Netbook_128x128.png
similarity index 100%
rename from war/img/computers/Netbook_128x128.png
rename to src/main/webapp/img/computers/Netbook_128x128.png
diff --git a/war/img/computers/Network_128x128.png b/src/main/webapp/img/computers/Network_128x128.png
similarity index 100%
rename from war/img/computers/Network_128x128.png
rename to src/main/webapp/img/computers/Network_128x128.png
diff --git a/war/img/computers/Network_2_128x128.png b/src/main/webapp/img/computers/Network_2_128x128.png
similarity index 100%
rename from war/img/computers/Network_2_128x128.png
rename to src/main/webapp/img/computers/Network_2_128x128.png
diff --git a/war/img/computers/Printer_128x128.png b/src/main/webapp/img/computers/Printer_128x128.png
similarity index 100%
rename from war/img/computers/Printer_128x128.png
rename to src/main/webapp/img/computers/Printer_128x128.png
diff --git a/war/img/computers/Printer_Commercial_128x128.png b/src/main/webapp/img/computers/Printer_Commercial_128x128.png
similarity index 100%
rename from war/img/computers/Printer_Commercial_128x128.png
rename to src/main/webapp/img/computers/Printer_Commercial_128x128.png
diff --git a/war/img/computers/Secure_System_128x128.png b/src/main/webapp/img/computers/Secure_System_128x128.png
similarity index 100%
rename from war/img/computers/Secure_System_128x128.png
rename to src/main/webapp/img/computers/Secure_System_128x128.png
diff --git a/war/img/computers/Server_128x128.png b/src/main/webapp/img/computers/Server_128x128.png
similarity index 100%
rename from war/img/computers/Server_128x128.png
rename to src/main/webapp/img/computers/Server_128x128.png
diff --git a/war/img/computers/Server_Rack_128x128.png b/src/main/webapp/img/computers/Server_Rack_128x128.png
similarity index 100%
rename from war/img/computers/Server_Rack_128x128.png
rename to src/main/webapp/img/computers/Server_Rack_128x128.png
diff --git a/war/img/computers/Server_Rack_Empty_128x128.png b/src/main/webapp/img/computers/Server_Rack_Empty_128x128.png
similarity index 100%
rename from war/img/computers/Server_Rack_Empty_128x128.png
rename to src/main/webapp/img/computers/Server_Rack_Empty_128x128.png
diff --git a/war/img/computers/Server_Rack_Partial_128x128.png b/src/main/webapp/img/computers/Server_Rack_Partial_128x128.png
similarity index 100%
rename from war/img/computers/Server_Rack_Partial_128x128.png
rename to src/main/webapp/img/computers/Server_Rack_Partial_128x128.png
diff --git a/war/img/computers/Server_Tower_128x128.png b/src/main/webapp/img/computers/Server_Tower_128x128.png
similarity index 100%
rename from war/img/computers/Server_Tower_128x128.png
rename to src/main/webapp/img/computers/Server_Tower_128x128.png
diff --git a/war/img/computers/Software_128x128.png b/src/main/webapp/img/computers/Software_128x128.png
similarity index 100%
rename from war/img/computers/Software_128x128.png
rename to src/main/webapp/img/computers/Software_128x128.png
diff --git a/war/img/computers/Stylus_128x128.png b/src/main/webapp/img/computers/Stylus_128x128.png
similarity index 100%
rename from war/img/computers/Stylus_128x128.png
rename to src/main/webapp/img/computers/Stylus_128x128.png
diff --git a/war/img/computers/Touch_128x128.png b/src/main/webapp/img/computers/Touch_128x128.png
similarity index 100%
rename from war/img/computers/Touch_128x128.png
rename to src/main/webapp/img/computers/Touch_128x128.png
diff --git a/war/img/computers/USB_Hub_128x128.png b/src/main/webapp/img/computers/USB_Hub_128x128.png
similarity index 100%
rename from war/img/computers/USB_Hub_128x128.png
rename to src/main/webapp/img/computers/USB_Hub_128x128.png
diff --git a/war/img/computers/Virtual_Application_128x128.png b/src/main/webapp/img/computers/Virtual_Application_128x128.png
similarity index 100%
rename from war/img/computers/Virtual_Application_128x128.png
rename to src/main/webapp/img/computers/Virtual_Application_128x128.png
diff --git a/war/img/computers/Virtual_Machine_128x128.png b/src/main/webapp/img/computers/Virtual_Machine_128x128.png
similarity index 100%
rename from war/img/computers/Virtual_Machine_128x128.png
rename to src/main/webapp/img/computers/Virtual_Machine_128x128.png
diff --git a/war/img/computers/Virus_128x128.png b/src/main/webapp/img/computers/Virus_128x128.png
similarity index 100%
rename from war/img/computers/Virus_128x128.png
rename to src/main/webapp/img/computers/Virus_128x128.png
diff --git a/war/img/computers/Workstation_128x128.png b/src/main/webapp/img/computers/Workstation_128x128.png
similarity index 100%
rename from war/img/computers/Workstation_128x128.png
rename to src/main/webapp/img/computers/Workstation_128x128.png
diff --git a/war/img/computers/iMac_128x128.png b/src/main/webapp/img/computers/iMac_128x128.png
similarity index 100%
rename from war/img/computers/iMac_128x128.png
rename to src/main/webapp/img/computers/iMac_128x128.png
diff --git a/war/img/computers/iPad_128x128.png b/src/main/webapp/img/computers/iPad_128x128.png
similarity index 100%
rename from war/img/computers/iPad_128x128.png
rename to src/main/webapp/img/computers/iPad_128x128.png
diff --git a/war/img/finance/Arrow_Down_128x128.png b/src/main/webapp/img/finance/Arrow_Down_128x128.png
similarity index 100%
rename from war/img/finance/Arrow_Down_128x128.png
rename to src/main/webapp/img/finance/Arrow_Down_128x128.png
diff --git a/war/img/finance/Arrow_Up_128x128.png b/src/main/webapp/img/finance/Arrow_Up_128x128.png
similarity index 100%
rename from war/img/finance/Arrow_Up_128x128.png
rename to src/main/webapp/img/finance/Arrow_Up_128x128.png
diff --git a/war/img/finance/Coins_128x128.png b/src/main/webapp/img/finance/Coins_128x128.png
similarity index 100%
rename from war/img/finance/Coins_128x128.png
rename to src/main/webapp/img/finance/Coins_128x128.png
diff --git a/war/img/finance/Credit_Card_128x128.png b/src/main/webapp/img/finance/Credit_Card_128x128.png
similarity index 100%
rename from war/img/finance/Credit_Card_128x128.png
rename to src/main/webapp/img/finance/Credit_Card_128x128.png
diff --git a/war/img/finance/Dollar_128x128.png b/src/main/webapp/img/finance/Dollar_128x128.png
similarity index 100%
rename from war/img/finance/Dollar_128x128.png
rename to src/main/webapp/img/finance/Dollar_128x128.png
diff --git a/war/img/finance/Graph_128x128.png b/src/main/webapp/img/finance/Graph_128x128.png
similarity index 100%
rename from war/img/finance/Graph_128x128.png
rename to src/main/webapp/img/finance/Graph_128x128.png
diff --git a/war/img/finance/Pie_Chart_128x128.png b/src/main/webapp/img/finance/Pie_Chart_128x128.png
similarity index 100%
rename from war/img/finance/Pie_Chart_128x128.png
rename to src/main/webapp/img/finance/Pie_Chart_128x128.png
diff --git a/war/img/finance/Piggy_Bank_128x128.png b/src/main/webapp/img/finance/Piggy_Bank_128x128.png
similarity index 100%
rename from war/img/finance/Piggy_Bank_128x128.png
rename to src/main/webapp/img/finance/Piggy_Bank_128x128.png
diff --git a/war/img/finance/Safe_128x128.png b/src/main/webapp/img/finance/Safe_128x128.png
similarity index 100%
rename from war/img/finance/Safe_128x128.png
rename to src/main/webapp/img/finance/Safe_128x128.png
diff --git a/war/img/finance/Shopping_Cart_128x128.png b/src/main/webapp/img/finance/Shopping_Cart_128x128.png
similarity index 100%
rename from war/img/finance/Shopping_Cart_128x128.png
rename to src/main/webapp/img/finance/Shopping_Cart_128x128.png
diff --git a/war/img/finance/Stock_Down_128x128.png b/src/main/webapp/img/finance/Stock_Down_128x128.png
similarity index 100%
rename from war/img/finance/Stock_Down_128x128.png
rename to src/main/webapp/img/finance/Stock_Down_128x128.png
diff --git a/war/img/finance/Stock_Up_128x128.png b/src/main/webapp/img/finance/Stock_Up_128x128.png
similarity index 100%
rename from war/img/finance/Stock_Up_128x128.png
rename to src/main/webapp/img/finance/Stock_Up_128x128.png
diff --git a/war/img/lib/atlassian/Atlassian_Logo.svg b/src/main/webapp/img/lib/atlassian/Atlassian_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Atlassian_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Atlassian_Logo.svg
diff --git a/war/img/lib/atlassian/Bamboo_Logo.svg b/src/main/webapp/img/lib/atlassian/Bamboo_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Bamboo_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Bamboo_Logo.svg
diff --git a/war/img/lib/atlassian/Bitbucket_Logo.svg b/src/main/webapp/img/lib/atlassian/Bitbucket_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Bitbucket_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Bitbucket_Logo.svg
diff --git a/war/img/lib/atlassian/Clover_Logo.svg b/src/main/webapp/img/lib/atlassian/Clover_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Clover_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Clover_Logo.svg
diff --git a/war/img/lib/atlassian/Confluence_Logo.svg b/src/main/webapp/img/lib/atlassian/Confluence_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Confluence_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Confluence_Logo.svg
diff --git a/war/img/lib/atlassian/Crowd_Logo.svg b/src/main/webapp/img/lib/atlassian/Crowd_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Crowd_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Crowd_Logo.svg
diff --git a/war/img/lib/atlassian/Crucible_Logo.svg b/src/main/webapp/img/lib/atlassian/Crucible_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Crucible_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Crucible_Logo.svg
diff --git a/war/img/lib/atlassian/Fisheye_Logo.svg b/src/main/webapp/img/lib/atlassian/Fisheye_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Fisheye_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Fisheye_Logo.svg
diff --git a/war/img/lib/atlassian/Hipchat_Logo.svg b/src/main/webapp/img/lib/atlassian/Hipchat_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Hipchat_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Hipchat_Logo.svg
diff --git a/war/img/lib/atlassian/Jira_Core_Logo.svg b/src/main/webapp/img/lib/atlassian/Jira_Core_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Jira_Core_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Jira_Core_Logo.svg
diff --git a/war/img/lib/atlassian/Jira_Logo.svg b/src/main/webapp/img/lib/atlassian/Jira_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Jira_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Jira_Logo.svg
diff --git a/war/img/lib/atlassian/Jira_Service_Desk_Logo.svg b/src/main/webapp/img/lib/atlassian/Jira_Service_Desk_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Jira_Service_Desk_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Jira_Service_Desk_Logo.svg
diff --git a/war/img/lib/atlassian/Jira_Software_Logo.svg b/src/main/webapp/img/lib/atlassian/Jira_Software_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Jira_Software_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Jira_Software_Logo.svg
diff --git a/war/img/lib/atlassian/Sourcetree_Logo.svg b/src/main/webapp/img/lib/atlassian/Sourcetree_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Sourcetree_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Sourcetree_Logo.svg
diff --git a/war/img/lib/atlassian/Statuspage_Logo.svg b/src/main/webapp/img/lib/atlassian/Statuspage_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Statuspage_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Statuspage_Logo.svg
diff --git a/war/img/lib/atlassian/Stride_Logo.svg b/src/main/webapp/img/lib/atlassian/Stride_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Stride_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Stride_Logo.svg
diff --git a/war/img/lib/atlassian/Trello_Logo.svg b/src/main/webapp/img/lib/atlassian/Trello_Logo.svg
similarity index 100%
rename from war/img/lib/atlassian/Trello_Logo.svg
rename to src/main/webapp/img/lib/atlassian/Trello_Logo.svg
diff --git a/war/img/lib/clip_art/computers/Antivirus_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Antivirus_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Antivirus_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Antivirus_128x128.png
diff --git a/war/img/lib/clip_art/computers/Data_Filtering_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Data_Filtering_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Data_Filtering_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Data_Filtering_128x128.png
diff --git a/war/img/lib/clip_art/computers/Database_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Database_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Database_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Database_128x128.png
diff --git a/war/img/lib/clip_art/computers/Database_Add_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Database_Add_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Database_Add_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Database_Add_128x128.png
diff --git a/war/img/lib/clip_art/computers/Database_Minus_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Database_Minus_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Database_Minus_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Database_Minus_128x128.png
diff --git a/war/img/lib/clip_art/computers/Database_Move_Stack_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Database_Move_Stack_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Database_Move_Stack_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Database_Move_Stack_128x128.png
diff --git a/war/img/lib/clip_art/computers/Database_Remove_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Database_Remove_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Database_Remove_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Database_Remove_128x128.png
diff --git a/war/img/lib/clip_art/computers/Fujitsu_Tablet_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Fujitsu_Tablet_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Fujitsu_Tablet_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Fujitsu_Tablet_128x128.png
diff --git a/war/img/lib/clip_art/computers/Harddrive_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Harddrive_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Harddrive_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Harddrive_128x128.png
diff --git a/war/img/lib/clip_art/computers/IBM_Tablet_128x128.png b/src/main/webapp/img/lib/clip_art/computers/IBM_Tablet_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/IBM_Tablet_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/IBM_Tablet_128x128.png
diff --git a/war/img/lib/clip_art/computers/Laptop_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Laptop_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Laptop_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Laptop_128x128.png
diff --git a/war/img/lib/clip_art/computers/MacBook_128x128.png b/src/main/webapp/img/lib/clip_art/computers/MacBook_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/MacBook_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/MacBook_128x128.png
diff --git a/war/img/lib/clip_art/computers/Mainframe_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Mainframe_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Mainframe_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Mainframe_128x128.png
diff --git a/war/img/lib/clip_art/computers/Monitor_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Monitor_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Monitor_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Monitor_128x128.png
diff --git a/war/img/lib/clip_art/computers/Monitor_Tower_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Monitor_Tower_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Monitor_Tower_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Monitor_Tower_128x128.png
diff --git a/war/img/lib/clip_art/computers/Monitor_Tower_Behind_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Monitor_Tower_Behind_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Monitor_Tower_Behind_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Monitor_Tower_Behind_128x128.png
diff --git a/war/img/lib/clip_art/computers/Netbook_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Netbook_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Netbook_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Netbook_128x128.png
diff --git a/war/img/lib/clip_art/computers/Network_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Network_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Network_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Network_128x128.png
diff --git a/war/img/lib/clip_art/computers/Network_2_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Network_2_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Network_2_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Network_2_128x128.png
diff --git a/war/img/lib/clip_art/computers/Printer_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Printer_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Printer_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Printer_128x128.png
diff --git a/war/img/lib/clip_art/computers/Printer_Commercial_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Printer_Commercial_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Printer_Commercial_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Printer_Commercial_128x128.png
diff --git a/war/img/lib/clip_art/computers/Secure_System_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Secure_System_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Secure_System_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Secure_System_128x128.png
diff --git a/war/img/lib/clip_art/computers/Server_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Server_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Server_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Server_128x128.png
diff --git a/war/img/lib/clip_art/computers/Server_Rack_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Server_Rack_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Server_Rack_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Server_Rack_128x128.png
diff --git a/war/img/lib/clip_art/computers/Server_Rack_Empty_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Server_Rack_Empty_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Server_Rack_Empty_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Server_Rack_Empty_128x128.png
diff --git a/war/img/lib/clip_art/computers/Server_Rack_Partial_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Server_Rack_Partial_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Server_Rack_Partial_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Server_Rack_Partial_128x128.png
diff --git a/war/img/lib/clip_art/computers/Server_Tower_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Server_Tower_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Server_Tower_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Server_Tower_128x128.png
diff --git a/war/img/lib/clip_art/computers/Software_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Software_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Software_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Software_128x128.png
diff --git a/war/img/lib/clip_art/computers/Stylus_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Stylus_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Stylus_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Stylus_128x128.png
diff --git a/war/img/lib/clip_art/computers/Touch_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Touch_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Touch_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Touch_128x128.png
diff --git a/war/img/lib/clip_art/computers/USB_Hub_128x128.png b/src/main/webapp/img/lib/clip_art/computers/USB_Hub_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/USB_Hub_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/USB_Hub_128x128.png
diff --git a/war/img/lib/clip_art/computers/Virtual_Application_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Virtual_Application_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Virtual_Application_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Virtual_Application_128x128.png
diff --git a/war/img/lib/clip_art/computers/Virtual_Machine_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Virtual_Machine_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Virtual_Machine_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Virtual_Machine_128x128.png
diff --git a/war/img/lib/clip_art/computers/Virus_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Virus_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Virus_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Virus_128x128.png
diff --git a/war/img/lib/clip_art/computers/Workstation_128x128.png b/src/main/webapp/img/lib/clip_art/computers/Workstation_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/Workstation_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/Workstation_128x128.png
diff --git a/war/img/lib/clip_art/computers/iMac_128x128.png b/src/main/webapp/img/lib/clip_art/computers/iMac_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/iMac_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/iMac_128x128.png
diff --git a/war/img/lib/clip_art/computers/iPad_128x128.png b/src/main/webapp/img/lib/clip_art/computers/iPad_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/computers/iPad_128x128.png
rename to src/main/webapp/img/lib/clip_art/computers/iPad_128x128.png
diff --git a/war/img/lib/clip_art/finance/Arrow_Down_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Arrow_Down_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Arrow_Down_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Arrow_Down_128x128.png
diff --git a/war/img/lib/clip_art/finance/Arrow_Up_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Arrow_Up_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Arrow_Up_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Arrow_Up_128x128.png
diff --git a/war/img/lib/clip_art/finance/Coins_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Coins_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Coins_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Coins_128x128.png
diff --git a/war/img/lib/clip_art/finance/Credit_Card_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Credit_Card_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Credit_Card_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Credit_Card_128x128.png
diff --git a/war/img/lib/clip_art/finance/Dollar_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Dollar_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Dollar_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Dollar_128x128.png
diff --git a/war/img/lib/clip_art/finance/Graph_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Graph_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Graph_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Graph_128x128.png
diff --git a/war/img/lib/clip_art/finance/Pie_Chart_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Pie_Chart_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Pie_Chart_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Pie_Chart_128x128.png
diff --git a/war/img/lib/clip_art/finance/Piggy_Bank_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Piggy_Bank_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Piggy_Bank_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Piggy_Bank_128x128.png
diff --git a/war/img/lib/clip_art/finance/Safe_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Safe_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Safe_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Safe_128x128.png
diff --git a/war/img/lib/clip_art/finance/Shopping_Cart_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Shopping_Cart_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Shopping_Cart_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Shopping_Cart_128x128.png
diff --git a/war/img/lib/clip_art/finance/Stock_Down_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Stock_Down_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Stock_Down_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Stock_Down_128x128.png
diff --git a/war/img/lib/clip_art/finance/Stock_Up_128x128.png b/src/main/webapp/img/lib/clip_art/finance/Stock_Up_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/finance/Stock_Up_128x128.png
rename to src/main/webapp/img/lib/clip_art/finance/Stock_Up_128x128.png
diff --git a/war/img/lib/clip_art/general/Battery_0_128x128.png b/src/main/webapp/img/lib/clip_art/general/Battery_0_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Battery_0_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Battery_0_128x128.png
diff --git a/war/img/lib/clip_art/general/Battery_100_128x128.png b/src/main/webapp/img/lib/clip_art/general/Battery_100_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Battery_100_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Battery_100_128x128.png
diff --git a/war/img/lib/clip_art/general/Battery_50_128x128.png b/src/main/webapp/img/lib/clip_art/general/Battery_50_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Battery_50_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Battery_50_128x128.png
diff --git a/war/img/lib/clip_art/general/Battery_75_128x128.png b/src/main/webapp/img/lib/clip_art/general/Battery_75_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Battery_75_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Battery_75_128x128.png
diff --git a/war/img/lib/clip_art/general/Battery_allstates_128x128.png b/src/main/webapp/img/lib/clip_art/general/Battery_allstates_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Battery_allstates_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Battery_allstates_128x128.png
diff --git a/war/img/lib/clip_art/general/Bluetooth_128x128.png b/src/main/webapp/img/lib/clip_art/general/Bluetooth_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Bluetooth_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Bluetooth_128x128.png
diff --git a/war/img/lib/clip_art/general/Earth_globe_128x128.png b/src/main/webapp/img/lib/clip_art/general/Earth_globe_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Earth_globe_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Earth_globe_128x128.png
diff --git a/war/img/lib/clip_art/general/Empty_Folder_128x128.png b/src/main/webapp/img/lib/clip_art/general/Empty_Folder_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Empty_Folder_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Empty_Folder_128x128.png
diff --git a/war/img/lib/clip_art/general/Full_Folder_128x128.png b/src/main/webapp/img/lib/clip_art/general/Full_Folder_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Full_Folder_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Full_Folder_128x128.png
diff --git a/war/img/lib/clip_art/general/Gear_128x128.png b/src/main/webapp/img/lib/clip_art/general/Gear_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Gear_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Gear_128x128.png
diff --git a/war/img/lib/clip_art/general/Keys_128x128.png b/src/main/webapp/img/lib/clip_art/general/Keys_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Keys_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Keys_128x128.png
diff --git a/war/img/lib/clip_art/general/Lock_128x128.png b/src/main/webapp/img/lib/clip_art/general/Lock_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Lock_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Lock_128x128.png
diff --git a/war/img/lib/clip_art/general/Mouse_Pointer_128x128.png b/src/main/webapp/img/lib/clip_art/general/Mouse_Pointer_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Mouse_Pointer_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Mouse_Pointer_128x128.png
diff --git a/war/img/lib/clip_art/general/Plug_128x128.png b/src/main/webapp/img/lib/clip_art/general/Plug_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Plug_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Plug_128x128.png
diff --git a/war/img/lib/clip_art/general/Ships_Wheel_128x128.png b/src/main/webapp/img/lib/clip_art/general/Ships_Wheel_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Ships_Wheel_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Ships_Wheel_128x128.png
diff --git a/war/img/lib/clip_art/general/Star_128x128.png b/src/main/webapp/img/lib/clip_art/general/Star_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Star_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Star_128x128.png
diff --git a/war/img/lib/clip_art/general/Tire_128x128.png b/src/main/webapp/img/lib/clip_art/general/Tire_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/general/Tire_128x128.png
rename to src/main/webapp/img/lib/clip_art/general/Tire_128x128.png
diff --git a/war/img/lib/clip_art/networking/Bridge_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Bridge_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Bridge_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Bridge_128x128.png
diff --git a/war/img/lib/clip_art/networking/Certificate_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Certificate_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Certificate_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Certificate_128x128.png
diff --git a/war/img/lib/clip_art/networking/Certificate_Off_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Certificate_Off_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Certificate_Off_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Certificate_Off_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Computer_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Computer_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Computer_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Computer_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Computer_Private_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Computer_Private_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Computer_Private_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Computer_Private_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Rack_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Rack_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Rack_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Rack_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Rack_Private_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Rack_Private_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Rack_Private_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Rack_Private_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Server_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Server_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Server_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Server_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Server_Private_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Server_Private_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Server_Private_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Server_Private_128x128.png
diff --git a/war/img/lib/clip_art/networking/Cloud_Storage_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Cloud_Storage_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Cloud_Storage_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Cloud_Storage_128x128.png
diff --git a/war/img/lib/clip_art/networking/Concentrator_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Concentrator_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Concentrator_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Concentrator_128x128.png
diff --git a/war/img/lib/clip_art/networking/Email_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Email_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Email_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Email_128x128.png
diff --git a/war/img/lib/clip_art/networking/Firewall-page1_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Firewall-page1_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Firewall-page1_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Firewall-page1_128x128.png
diff --git a/war/img/lib/clip_art/networking/Firewall_02_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Firewall_02_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Firewall_02_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Firewall_02_128x128.png
diff --git a/war/img/lib/clip_art/networking/Firewall_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Firewall_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Firewall_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Firewall_128x128.png
diff --git a/war/img/lib/clip_art/networking/Ip_Camera_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Ip_Camera_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Ip_Camera_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Ip_Camera_128x128.png
diff --git a/war/img/lib/clip_art/networking/Modem_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Modem_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Modem_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Modem_128x128.png
diff --git a/war/img/lib/clip_art/networking/Print_Server_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Print_Server_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Print_Server_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Print_Server_128x128.png
diff --git a/war/img/lib/clip_art/networking/Print_Server_Wireless_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Print_Server_Wireless_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Print_Server_Wireless_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Print_Server_Wireless_128x128.png
diff --git a/war/img/lib/clip_art/networking/Repeater_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Repeater_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Repeater_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Repeater_128x128.png
diff --git a/war/img/lib/clip_art/networking/Router_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Router_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Router_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Router_128x128.png
diff --git a/war/img/lib/clip_art/networking/Router_Icon_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Router_Icon_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Router_Icon_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Router_Icon_128x128.png
diff --git a/war/img/lib/clip_art/networking/Switch_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Switch_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Switch_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Switch_128x128.png
diff --git a/war/img/lib/clip_art/networking/UPS_128x128.png b/src/main/webapp/img/lib/clip_art/networking/UPS_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/UPS_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/UPS_128x128.png
diff --git a/war/img/lib/clip_art/networking/Wireless_Router_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Wireless_Router_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Wireless_Router_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Wireless_Router_128x128.png
diff --git a/war/img/lib/clip_art/networking/Wireless_Router_N_128x128.png b/src/main/webapp/img/lib/clip_art/networking/Wireless_Router_N_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/Wireless_Router_N_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/Wireless_Router_N_128x128.png
diff --git a/war/img/lib/clip_art/networking/power_distribution_unit_128x128.png b/src/main/webapp/img/lib/clip_art/networking/power_distribution_unit_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/networking/power_distribution_unit_128x128.png
rename to src/main/webapp/img/lib/clip_art/networking/power_distribution_unit_128x128.png
diff --git a/war/img/lib/clip_art/people/Construction_Worker_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Construction_Worker_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Construction_Worker_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Construction_Worker_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Construction_Worker_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Construction_Worker_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Construction_Worker_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Construction_Worker_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Construction_Worker_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Construction_Worker_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Construction_Worker_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Construction_Worker_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Construction_Worker_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Construction_Worker_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Construction_Worker_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Construction_Worker_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Doctor_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Doctor_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Doctor_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Doctor_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Doctor_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Doctor_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Doctor_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Doctor_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Doctor_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Doctor_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Doctor_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Doctor_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Doctor_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Doctor_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Doctor_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Doctor_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Farmer_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Farmer_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Farmer_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Farmer_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Farmer_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Farmer_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Farmer_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Farmer_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Farmer_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Farmer_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Farmer_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Farmer_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Farmer_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Farmer_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Farmer_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Farmer_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Military_Officer_128x128.png b/src/main/webapp/img/lib/clip_art/people/Military_Officer_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Military_Officer_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Military_Officer_128x128.png
diff --git a/war/img/lib/clip_art/people/Military_Officer_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Military_Officer_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Military_Officer_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Military_Officer_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Military_Officer_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Military_Officer_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Military_Officer_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Military_Officer_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Military_Officer_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Military_Officer_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Military_Officer_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Military_Officer_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Man_Green_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Man_Green_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Man_Green_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Man_Green_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Man_Red_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Man_Red_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Man_Red_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Man_Red_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Woman_Green_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Woman_Green_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Woman_Green_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Woman_Green_128x128.png
diff --git a/war/img/lib/clip_art/people/Nurse_Woman_Red_128x128.png b/src/main/webapp/img/lib/clip_art/people/Nurse_Woman_Red_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Nurse_Woman_Red_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Nurse_Woman_Red_128x128.png
diff --git a/war/img/lib/clip_art/people/Pilot_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Pilot_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Pilot_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Pilot_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Pilot_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Pilot_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Pilot_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Pilot_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Pilot_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Pilot_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Pilot_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Pilot_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Pilot_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Pilot_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Pilot_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Pilot_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Scientist_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Scientist_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Scientist_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Scientist_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Scientist_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Scientist_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Scientist_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Scientist_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Scientist_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Scientist_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Scientist_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Scientist_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Scientist_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Scientist_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Scientist_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Scientist_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Security_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Security_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Security_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Security_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Security_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Security_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Security_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Security_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Security_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Security_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Security_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Security_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Security_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Security_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Security_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Security_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Soldier_128x128.png b/src/main/webapp/img/lib/clip_art/people/Soldier_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Soldier_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Soldier_128x128.png
diff --git a/war/img/lib/clip_art/people/Soldier_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Soldier_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Soldier_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Soldier_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Man_Blue_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Man_Blue_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Man_Blue_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Man_Blue_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Man_Green_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Man_Green_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Man_Green_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Man_Green_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Man_Green_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Man_Green_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Man_Green_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Man_Green_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Woman_Blue_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Woman_Blue_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Woman_Blue_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Woman_Blue_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Woman_Green_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Woman_Green_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Woman_Green_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Woman_Green_128x128.png
diff --git a/war/img/lib/clip_art/people/Suit_Woman_Green_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Suit_Woman_Green_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Suit_Woman_Green_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Suit_Woman_Green_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Tech_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Tech_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Tech_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Tech_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Tech_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Tech_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Tech_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Tech_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Telesales_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Telesales_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Telesales_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Telesales_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Telesales_Man_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Telesales_Man_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Telesales_Man_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Telesales_Man_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Telesales_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Telesales_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Telesales_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Telesales_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Telesales_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Telesales_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Telesales_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Telesales_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Waiter_128x128.png b/src/main/webapp/img/lib/clip_art/people/Waiter_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Waiter_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Waiter_128x128.png
diff --git a/war/img/lib/clip_art/people/Waiter_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Waiter_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Waiter_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Waiter_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Waiter_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Waiter_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Waiter_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Waiter_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Waiter_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Waiter_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Waiter_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Waiter_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Worker_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Worker_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Worker_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Worker_Black_128x128.png
diff --git a/war/img/lib/clip_art/people/Worker_Man_128x128.png b/src/main/webapp/img/lib/clip_art/people/Worker_Man_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Worker_Man_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Worker_Man_128x128.png
diff --git a/war/img/lib/clip_art/people/Worker_Woman_128x128.png b/src/main/webapp/img/lib/clip_art/people/Worker_Woman_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Worker_Woman_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Worker_Woman_128x128.png
diff --git a/war/img/lib/clip_art/people/Worker_Woman_Black_128x128.png b/src/main/webapp/img/lib/clip_art/people/Worker_Woman_Black_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/people/Worker_Woman_Black_128x128.png
rename to src/main/webapp/img/lib/clip_art/people/Worker_Woman_Black_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/BlackBerry_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/BlackBerry_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/BlackBerry_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/BlackBerry_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/Cellphone_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/Cellphone_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/Cellphone_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/Cellphone_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/HTC_smartphone_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/HTC_smartphone_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/HTC_smartphone_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/HTC_smartphone_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/Palm_Treo_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/Palm_Treo_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/Palm_Treo_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/Palm_Treo_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/Signal_tower_off_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/Signal_tower_off_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/Signal_tower_off_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/Signal_tower_off_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/Signal_tower_on_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/Signal_tower_on_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/Signal_tower_on_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/Signal_tower_on_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/Telephone_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/Telephone_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/Telephone_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/Telephone_128x128.png
diff --git a/war/img/lib/clip_art/telecommunication/iPhone_128x128.png b/src/main/webapp/img/lib/clip_art/telecommunication/iPhone_128x128.png
similarity index 100%
rename from war/img/lib/clip_art/telecommunication/iPhone_128x128.png
rename to src/main/webapp/img/lib/clip_art/telecommunication/iPhone_128x128.png
diff --git a/war/img/lib/ibm/analytics/analytics.svg b/src/main/webapp/img/lib/ibm/analytics/analytics.svg
similarity index 100%
rename from war/img/lib/ibm/analytics/analytics.svg
rename to src/main/webapp/img/lib/ibm/analytics/analytics.svg
diff --git a/war/img/lib/ibm/analytics/data_integration.svg b/src/main/webapp/img/lib/ibm/analytics/data_integration.svg
similarity index 100%
rename from war/img/lib/ibm/analytics/data_integration.svg
rename to src/main/webapp/img/lib/ibm/analytics/data_integration.svg
diff --git a/war/img/lib/ibm/analytics/data_repositories.svg b/src/main/webapp/img/lib/ibm/analytics/data_repositories.svg
similarity index 100%
rename from war/img/lib/ibm/analytics/data_repositories.svg
rename to src/main/webapp/img/lib/ibm/analytics/data_repositories.svg
diff --git a/war/img/lib/ibm/analytics/device_analytics.svg b/src/main/webapp/img/lib/ibm/analytics/device_analytics.svg
similarity index 100%
rename from war/img/lib/ibm/analytics/device_analytics.svg
rename to src/main/webapp/img/lib/ibm/analytics/device_analytics.svg
diff --git a/war/img/lib/ibm/analytics/streaming_computing.svg b/src/main/webapp/img/lib/ibm/analytics/streaming_computing.svg
similarity index 100%
rename from war/img/lib/ibm/analytics/streaming_computing.svg
rename to src/main/webapp/img/lib/ibm/analytics/streaming_computing.svg
diff --git a/war/img/lib/ibm/applications/actionable_insight.svg b/src/main/webapp/img/lib/ibm/applications/actionable_insight.svg
similarity index 100%
rename from war/img/lib/ibm/applications/actionable_insight.svg
rename to src/main/webapp/img/lib/ibm/applications/actionable_insight.svg
diff --git a/war/img/lib/ibm/applications/annotate.svg b/src/main/webapp/img/lib/ibm/applications/annotate.svg
similarity index 100%
rename from war/img/lib/ibm/applications/annotate.svg
rename to src/main/webapp/img/lib/ibm/applications/annotate.svg
diff --git a/war/img/lib/ibm/applications/api_developer_portal.svg b/src/main/webapp/img/lib/ibm/applications/api_developer_portal.svg
similarity index 100%
rename from war/img/lib/ibm/applications/api_developer_portal.svg
rename to src/main/webapp/img/lib/ibm/applications/api_developer_portal.svg
diff --git a/war/img/lib/ibm/applications/api_polyglot_runtimes.svg b/src/main/webapp/img/lib/ibm/applications/api_polyglot_runtimes.svg
similarity index 100%
rename from war/img/lib/ibm/applications/api_polyglot_runtimes.svg
rename to src/main/webapp/img/lib/ibm/applications/api_polyglot_runtimes.svg
diff --git a/war/img/lib/ibm/applications/app_server.svg b/src/main/webapp/img/lib/ibm/applications/app_server.svg
similarity index 100%
rename from war/img/lib/ibm/applications/app_server.svg
rename to src/main/webapp/img/lib/ibm/applications/app_server.svg
diff --git a/war/img/lib/ibm/applications/application_logic.svg b/src/main/webapp/img/lib/ibm/applications/application_logic.svg
similarity index 100%
rename from war/img/lib/ibm/applications/application_logic.svg
rename to src/main/webapp/img/lib/ibm/applications/application_logic.svg
diff --git a/war/img/lib/ibm/applications/automation_tools.svg b/src/main/webapp/img/lib/ibm/applications/automation_tools.svg
similarity index 100%
rename from war/img/lib/ibm/applications/automation_tools.svg
rename to src/main/webapp/img/lib/ibm/applications/automation_tools.svg
diff --git a/war/img/lib/ibm/applications/enterprise_applications.svg b/src/main/webapp/img/lib/ibm/applications/enterprise_applications.svg
similarity index 100%
rename from war/img/lib/ibm/applications/enterprise_applications.svg
rename to src/main/webapp/img/lib/ibm/applications/enterprise_applications.svg
diff --git a/war/img/lib/ibm/applications/index.svg b/src/main/webapp/img/lib/ibm/applications/index.svg
similarity index 100%
rename from war/img/lib/ibm/applications/index.svg
rename to src/main/webapp/img/lib/ibm/applications/index.svg
diff --git a/war/img/lib/ibm/applications/iot_application.svg b/src/main/webapp/img/lib/ibm/applications/iot_application.svg
similarity index 100%
rename from war/img/lib/ibm/applications/iot_application.svg
rename to src/main/webapp/img/lib/ibm/applications/iot_application.svg
diff --git a/war/img/lib/ibm/applications/microservice.svg b/src/main/webapp/img/lib/ibm/applications/microservice.svg
similarity index 100%
rename from war/img/lib/ibm/applications/microservice.svg
rename to src/main/webapp/img/lib/ibm/applications/microservice.svg
diff --git a/war/img/lib/ibm/applications/mobile_app.svg b/src/main/webapp/img/lib/ibm/applications/mobile_app.svg
similarity index 100%
rename from war/img/lib/ibm/applications/mobile_app.svg
rename to src/main/webapp/img/lib/ibm/applications/mobile_app.svg
diff --git a/war/img/lib/ibm/applications/ontology.svg b/src/main/webapp/img/lib/ibm/applications/ontology.svg
similarity index 100%
rename from war/img/lib/ibm/applications/ontology.svg
rename to src/main/webapp/img/lib/ibm/applications/ontology.svg
diff --git a/war/img/lib/ibm/applications/open_source_tools.svg b/src/main/webapp/img/lib/ibm/applications/open_source_tools.svg
similarity index 100%
rename from war/img/lib/ibm/applications/open_source_tools.svg
rename to src/main/webapp/img/lib/ibm/applications/open_source_tools.svg
diff --git a/war/img/lib/ibm/applications/runtime_services.svg b/src/main/webapp/img/lib/ibm/applications/runtime_services.svg
similarity index 100%
rename from war/img/lib/ibm/applications/runtime_services.svg
rename to src/main/webapp/img/lib/ibm/applications/runtime_services.svg
diff --git a/war/img/lib/ibm/applications/saas_applications.svg b/src/main/webapp/img/lib/ibm/applications/saas_applications.svg
similarity index 100%
rename from war/img/lib/ibm/applications/saas_applications.svg
rename to src/main/webapp/img/lib/ibm/applications/saas_applications.svg
diff --git a/war/img/lib/ibm/applications/service_broker.svg b/src/main/webapp/img/lib/ibm/applications/service_broker.svg
similarity index 100%
rename from war/img/lib/ibm/applications/service_broker.svg
rename to src/main/webapp/img/lib/ibm/applications/service_broker.svg
diff --git a/war/img/lib/ibm/applications/speech_to_text.svg b/src/main/webapp/img/lib/ibm/applications/speech_to_text.svg
similarity index 100%
rename from war/img/lib/ibm/applications/speech_to_text.svg
rename to src/main/webapp/img/lib/ibm/applications/speech_to_text.svg
diff --git a/war/img/lib/ibm/applications/visual_recognition.svg b/src/main/webapp/img/lib/ibm/applications/visual_recognition.svg
similarity index 100%
rename from war/img/lib/ibm/applications/visual_recognition.svg
rename to src/main/webapp/img/lib/ibm/applications/visual_recognition.svg
diff --git a/war/img/lib/ibm/applications/visualization.svg b/src/main/webapp/img/lib/ibm/applications/visualization.svg
similarity index 100%
rename from war/img/lib/ibm/applications/visualization.svg
rename to src/main/webapp/img/lib/ibm/applications/visualization.svg
diff --git a/war/img/lib/ibm/blockchain/blockchain.svg b/src/main/webapp/img/lib/ibm/blockchain/blockchain.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/blockchain.svg
rename to src/main/webapp/img/lib/ibm/blockchain/blockchain.svg
diff --git a/war/img/lib/ibm/blockchain/blockchain_developer.svg b/src/main/webapp/img/lib/ibm/blockchain/blockchain_developer.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/blockchain_developer.svg
rename to src/main/webapp/img/lib/ibm/blockchain/blockchain_developer.svg
diff --git a/war/img/lib/ibm/blockchain/certificate_authority.svg b/src/main/webapp/img/lib/ibm/blockchain/certificate_authority.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/certificate_authority.svg
rename to src/main/webapp/img/lib/ibm/blockchain/certificate_authority.svg
diff --git a/war/img/lib/ibm/blockchain/client_application.svg b/src/main/webapp/img/lib/ibm/blockchain/client_application.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/client_application.svg
rename to src/main/webapp/img/lib/ibm/blockchain/client_application.svg
diff --git a/war/img/lib/ibm/blockchain/e_cert.svg b/src/main/webapp/img/lib/ibm/blockchain/e_cert.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/e_cert.svg
rename to src/main/webapp/img/lib/ibm/blockchain/e_cert.svg
diff --git a/war/img/lib/ibm/blockchain/event.svg b/src/main/webapp/img/lib/ibm/blockchain/event.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/event.svg
rename to src/main/webapp/img/lib/ibm/blockchain/event.svg
diff --git a/war/img/lib/ibm/blockchain/existing_enterprise_systems.svg b/src/main/webapp/img/lib/ibm/blockchain/existing_enterprise_systems.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/existing_enterprise_systems.svg
rename to src/main/webapp/img/lib/ibm/blockchain/existing_enterprise_systems.svg
diff --git a/war/img/lib/ibm/blockchain/hyperledger_fabric.svg b/src/main/webapp/img/lib/ibm/blockchain/hyperledger_fabric.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/hyperledger_fabric.svg
rename to src/main/webapp/img/lib/ibm/blockchain/hyperledger_fabric.svg
diff --git a/war/img/lib/ibm/blockchain/ledger.svg b/src/main/webapp/img/lib/ibm/blockchain/ledger.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/ledger.svg
rename to src/main/webapp/img/lib/ibm/blockchain/ledger.svg
diff --git a/war/img/lib/ibm/blockchain/membership_services_provider_api.svg b/src/main/webapp/img/lib/ibm/blockchain/membership_services_provider_api.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/membership_services_provider_api.svg
rename to src/main/webapp/img/lib/ibm/blockchain/membership_services_provider_api.svg
diff --git a/war/img/lib/ibm/blockchain/services.svg b/src/main/webapp/img/lib/ibm/blockchain/services.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/services.svg
rename to src/main/webapp/img/lib/ibm/blockchain/services.svg
diff --git a/war/img/lib/ibm/blockchain/smart_contract.svg b/src/main/webapp/img/lib/ibm/blockchain/smart_contract.svg
similarity index 100%
rename from war/img/lib/ibm/blockchain/smart_contract.svg
rename to src/main/webapp/img/lib/ibm/blockchain/smart_contract.svg
diff --git a/war/img/lib/ibm/data/caches.svg b/src/main/webapp/img/lib/ibm/data/caches.svg
similarity index 100%
rename from war/img/lib/ibm/data/caches.svg
rename to src/main/webapp/img/lib/ibm/data/caches.svg
diff --git a/war/img/lib/ibm/data/cloud.svg b/src/main/webapp/img/lib/ibm/data/cloud.svg
similarity index 100%
rename from war/img/lib/ibm/data/cloud.svg
rename to src/main/webapp/img/lib/ibm/data/cloud.svg
diff --git a/war/img/lib/ibm/data/conversation_trained_deployed.svg b/src/main/webapp/img/lib/ibm/data/conversation_trained_deployed.svg
similarity index 100%
rename from war/img/lib/ibm/data/conversation_trained_deployed.svg
rename to src/main/webapp/img/lib/ibm/data/conversation_trained_deployed.svg
diff --git a/war/img/lib/ibm/data/data_services.svg b/src/main/webapp/img/lib/ibm/data/data_services.svg
similarity index 100%
rename from war/img/lib/ibm/data/data_services.svg
rename to src/main/webapp/img/lib/ibm/data/data_services.svg
diff --git a/war/img/lib/ibm/data/data_sources.svg b/src/main/webapp/img/lib/ibm/data/data_sources.svg
similarity index 100%
rename from war/img/lib/ibm/data/data_sources.svg
rename to src/main/webapp/img/lib/ibm/data/data_sources.svg
diff --git a/war/img/lib/ibm/data/device_identity_service.svg b/src/main/webapp/img/lib/ibm/data/device_identity_service.svg
similarity index 100%
rename from war/img/lib/ibm/data/device_identity_service.svg
rename to src/main/webapp/img/lib/ibm/data/device_identity_service.svg
diff --git a/war/img/lib/ibm/data/device_registry.svg b/src/main/webapp/img/lib/ibm/data/device_registry.svg
similarity index 100%
rename from war/img/lib/ibm/data/device_registry.svg
rename to src/main/webapp/img/lib/ibm/data/device_registry.svg
diff --git a/war/img/lib/ibm/data/enterprise_data.svg b/src/main/webapp/img/lib/ibm/data/enterprise_data.svg
similarity index 100%
rename from war/img/lib/ibm/data/enterprise_data.svg
rename to src/main/webapp/img/lib/ibm/data/enterprise_data.svg
diff --git a/war/img/lib/ibm/data/enterprise_user_directory.svg b/src/main/webapp/img/lib/ibm/data/enterprise_user_directory.svg
similarity index 100%
rename from war/img/lib/ibm/data/enterprise_user_directory.svg
rename to src/main/webapp/img/lib/ibm/data/enterprise_user_directory.svg
diff --git a/war/img/lib/ibm/data/file_repository.svg b/src/main/webapp/img/lib/ibm/data/file_repository.svg
similarity index 100%
rename from war/img/lib/ibm/data/file_repository.svg
rename to src/main/webapp/img/lib/ibm/data/file_repository.svg
diff --git a/war/img/lib/ibm/data/ground_truth.svg b/src/main/webapp/img/lib/ibm/data/ground_truth.svg
similarity index 100%
rename from war/img/lib/ibm/data/ground_truth.svg
rename to src/main/webapp/img/lib/ibm/data/ground_truth.svg
diff --git a/war/img/lib/ibm/data/model.svg b/src/main/webapp/img/lib/ibm/data/model.svg
similarity index 100%
rename from war/img/lib/ibm/data/model.svg
rename to src/main/webapp/img/lib/ibm/data/model.svg
diff --git a/war/img/lib/ibm/data/tms_data_interface.svg b/src/main/webapp/img/lib/ibm/data/tms_data_interface.svg
similarity index 100%
rename from war/img/lib/ibm/data/tms_data_interface.svg
rename to src/main/webapp/img/lib/ibm/data/tms_data_interface.svg
diff --git a/war/img/lib/ibm/devops/artifact_management.svg b/src/main/webapp/img/lib/ibm/devops/artifact_management.svg
similarity index 100%
rename from war/img/lib/ibm/devops/artifact_management.svg
rename to src/main/webapp/img/lib/ibm/devops/artifact_management.svg
diff --git a/war/img/lib/ibm/devops/build_test.svg b/src/main/webapp/img/lib/ibm/devops/build_test.svg
similarity index 100%
rename from war/img/lib/ibm/devops/build_test.svg
rename to src/main/webapp/img/lib/ibm/devops/build_test.svg
diff --git a/war/img/lib/ibm/devops/code_editor.svg b/src/main/webapp/img/lib/ibm/devops/code_editor.svg
similarity index 100%
rename from war/img/lib/ibm/devops/code_editor.svg
rename to src/main/webapp/img/lib/ibm/devops/code_editor.svg
diff --git a/war/img/lib/ibm/devops/collaborative_development.svg b/src/main/webapp/img/lib/ibm/devops/collaborative_development.svg
similarity index 100%
rename from war/img/lib/ibm/devops/collaborative_development.svg
rename to src/main/webapp/img/lib/ibm/devops/collaborative_development.svg
diff --git a/war/img/lib/ibm/devops/configuration_management.svg b/src/main/webapp/img/lib/ibm/devops/configuration_management.svg
similarity index 100%
rename from war/img/lib/ibm/devops/configuration_management.svg
rename to src/main/webapp/img/lib/ibm/devops/configuration_management.svg
diff --git a/war/img/lib/ibm/devops/continuous_deploy.svg b/src/main/webapp/img/lib/ibm/devops/continuous_deploy.svg
similarity index 100%
rename from war/img/lib/ibm/devops/continuous_deploy.svg
rename to src/main/webapp/img/lib/ibm/devops/continuous_deploy.svg
diff --git a/war/img/lib/ibm/devops/continuous_testing.svg b/src/main/webapp/img/lib/ibm/devops/continuous_testing.svg
similarity index 100%
rename from war/img/lib/ibm/devops/continuous_testing.svg
rename to src/main/webapp/img/lib/ibm/devops/continuous_testing.svg
diff --git a/war/img/lib/ibm/devops/devops.svg b/src/main/webapp/img/lib/ibm/devops/devops.svg
similarity index 100%
rename from war/img/lib/ibm/devops/devops.svg
rename to src/main/webapp/img/lib/ibm/devops/devops.svg
diff --git a/war/img/lib/ibm/devops/provision.svg b/src/main/webapp/img/lib/ibm/devops/provision.svg
similarity index 100%
rename from war/img/lib/ibm/devops/provision.svg
rename to src/main/webapp/img/lib/ibm/devops/provision.svg
diff --git a/war/img/lib/ibm/devops/release_management.svg b/src/main/webapp/img/lib/ibm/devops/release_management.svg
similarity index 100%
rename from war/img/lib/ibm/devops/release_management.svg
rename to src/main/webapp/img/lib/ibm/devops/release_management.svg
diff --git a/war/img/lib/ibm/infrastructure/channels.svg b/src/main/webapp/img/lib/ibm/infrastructure/channels.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/channels.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/channels.svg
diff --git a/war/img/lib/ibm/infrastructure/cloud_messaging.svg b/src/main/webapp/img/lib/ibm/infrastructure/cloud_messaging.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/cloud_messaging.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/cloud_messaging.svg
diff --git a/war/img/lib/ibm/infrastructure/dashboard.svg b/src/main/webapp/img/lib/ibm/infrastructure/dashboard.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/dashboard.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/dashboard.svg
diff --git a/war/img/lib/ibm/infrastructure/diagnostics.svg b/src/main/webapp/img/lib/ibm/infrastructure/diagnostics.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/diagnostics.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/diagnostics.svg
diff --git a/war/img/lib/ibm/infrastructure/edge_services.svg b/src/main/webapp/img/lib/ibm/infrastructure/edge_services.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/edge_services.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/edge_services.svg
diff --git a/war/img/lib/ibm/infrastructure/enterprise_messaging.svg b/src/main/webapp/img/lib/ibm/infrastructure/enterprise_messaging.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/enterprise_messaging.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/enterprise_messaging.svg
diff --git a/war/img/lib/ibm/infrastructure/event_feed.svg b/src/main/webapp/img/lib/ibm/infrastructure/event_feed.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/event_feed.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/event_feed.svg
diff --git a/war/img/lib/ibm/infrastructure/infrastructure_services.svg b/src/main/webapp/img/lib/ibm/infrastructure/infrastructure_services.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/infrastructure_services.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/infrastructure_services.svg
diff --git a/war/img/lib/ibm/infrastructure/interservice_communication.svg b/src/main/webapp/img/lib/ibm/infrastructure/interservice_communication.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/interservice_communication.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/interservice_communication.svg
diff --git a/war/img/lib/ibm/infrastructure/load_balancing_routing.svg b/src/main/webapp/img/lib/ibm/infrastructure/load_balancing_routing.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/load_balancing_routing.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/load_balancing_routing.svg
diff --git a/war/img/lib/ibm/infrastructure/microservices_mesh.svg b/src/main/webapp/img/lib/ibm/infrastructure/microservices_mesh.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/microservices_mesh.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/microservices_mesh.svg
diff --git a/war/img/lib/ibm/infrastructure/mobile_backend.svg b/src/main/webapp/img/lib/ibm/infrastructure/mobile_backend.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/mobile_backend.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/mobile_backend.svg
diff --git a/war/img/lib/ibm/infrastructure/mobile_provider_network.svg b/src/main/webapp/img/lib/ibm/infrastructure/mobile_provider_network.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/mobile_provider_network.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/mobile_provider_network.svg
diff --git a/war/img/lib/ibm/infrastructure/monitoring.svg b/src/main/webapp/img/lib/ibm/infrastructure/monitoring.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/monitoring.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/monitoring.svg
diff --git a/war/img/lib/ibm/infrastructure/monitoring_logging.svg b/src/main/webapp/img/lib/ibm/infrastructure/monitoring_logging.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/monitoring_logging.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/monitoring_logging.svg
diff --git a/war/img/lib/ibm/infrastructure/peer_services.svg b/src/main/webapp/img/lib/ibm/infrastructure/peer_services.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/peer_services.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/peer_services.svg
diff --git a/war/img/lib/ibm/infrastructure/service_discovery_configuration.svg b/src/main/webapp/img/lib/ibm/infrastructure/service_discovery_configuration.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/service_discovery_configuration.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/service_discovery_configuration.svg
diff --git a/war/img/lib/ibm/infrastructure/transformation_connectivity.svg b/src/main/webapp/img/lib/ibm/infrastructure/transformation_connectivity.svg
similarity index 100%
rename from war/img/lib/ibm/infrastructure/transformation_connectivity.svg
rename to src/main/webapp/img/lib/ibm/infrastructure/transformation_connectivity.svg
diff --git a/war/img/lib/ibm/management/alert_notification.svg b/src/main/webapp/img/lib/ibm/management/alert_notification.svg
similarity index 100%
rename from war/img/lib/ibm/management/alert_notification.svg
rename to src/main/webapp/img/lib/ibm/management/alert_notification.svg
diff --git a/war/img/lib/ibm/management/api_management.svg b/src/main/webapp/img/lib/ibm/management/api_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/api_management.svg
rename to src/main/webapp/img/lib/ibm/management/api_management.svg
diff --git a/war/img/lib/ibm/management/cloud_management.svg b/src/main/webapp/img/lib/ibm/management/cloud_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/cloud_management.svg
rename to src/main/webapp/img/lib/ibm/management/cloud_management.svg
diff --git a/war/img/lib/ibm/management/cluster_management.svg b/src/main/webapp/img/lib/ibm/management/cluster_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/cluster_management.svg
rename to src/main/webapp/img/lib/ibm/management/cluster_management.svg
diff --git a/war/img/lib/ibm/management/content_management.svg b/src/main/webapp/img/lib/ibm/management/content_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/content_management.svg
rename to src/main/webapp/img/lib/ibm/management/content_management.svg
diff --git a/war/img/lib/ibm/management/data_services.svg b/src/main/webapp/img/lib/ibm/management/data_services.svg
similarity index 100%
rename from war/img/lib/ibm/management/data_services.svg
rename to src/main/webapp/img/lib/ibm/management/data_services.svg
diff --git a/war/img/lib/ibm/management/device_management.svg b/src/main/webapp/img/lib/ibm/management/device_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/device_management.svg
rename to src/main/webapp/img/lib/ibm/management/device_management.svg
diff --git a/war/img/lib/ibm/management/information_governance.svg b/src/main/webapp/img/lib/ibm/management/information_governance.svg
similarity index 100%
rename from war/img/lib/ibm/management/information_governance.svg
rename to src/main/webapp/img/lib/ibm/management/information_governance.svg
diff --git a/war/img/lib/ibm/management/it_service_management.svg b/src/main/webapp/img/lib/ibm/management/it_service_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/it_service_management.svg
rename to src/main/webapp/img/lib/ibm/management/it_service_management.svg
diff --git a/war/img/lib/ibm/management/management.svg b/src/main/webapp/img/lib/ibm/management/management.svg
similarity index 100%
rename from war/img/lib/ibm/management/management.svg
rename to src/main/webapp/img/lib/ibm/management/management.svg
diff --git a/war/img/lib/ibm/management/monitoring_metrics.svg b/src/main/webapp/img/lib/ibm/management/monitoring_metrics.svg
similarity index 100%
rename from war/img/lib/ibm/management/monitoring_metrics.svg
rename to src/main/webapp/img/lib/ibm/management/monitoring_metrics.svg
diff --git a/war/img/lib/ibm/management/process_management.svg b/src/main/webapp/img/lib/ibm/management/process_management.svg
similarity index 100%
rename from war/img/lib/ibm/management/process_management.svg
rename to src/main/webapp/img/lib/ibm/management/process_management.svg
diff --git a/war/img/lib/ibm/management/provider_cloud_portal_service.svg b/src/main/webapp/img/lib/ibm/management/provider_cloud_portal_service.svg
similarity index 100%
rename from war/img/lib/ibm/management/provider_cloud_portal_service.svg
rename to src/main/webapp/img/lib/ibm/management/provider_cloud_portal_service.svg
diff --git a/war/img/lib/ibm/management/push_notifications.svg b/src/main/webapp/img/lib/ibm/management/push_notifications.svg
similarity index 100%
rename from war/img/lib/ibm/management/push_notifications.svg
rename to src/main/webapp/img/lib/ibm/management/push_notifications.svg
diff --git a/war/img/lib/ibm/management/service_management_tools.svg b/src/main/webapp/img/lib/ibm/management/service_management_tools.svg
similarity index 100%
rename from war/img/lib/ibm/management/service_management_tools.svg
rename to src/main/webapp/img/lib/ibm/management/service_management_tools.svg
diff --git a/war/img/lib/ibm/miscellaneous/bluemix.svg b/src/main/webapp/img/lib/ibm/miscellaneous/bluemix.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/bluemix.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/bluemix.svg
diff --git a/war/img/lib/ibm/miscellaneous/cloudant.svg b/src/main/webapp/img/lib/ibm/miscellaneous/cloudant.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/cloudant.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/cloudant.svg
diff --git a/war/img/lib/ibm/miscellaneous/cognitive_services.svg b/src/main/webapp/img/lib/ibm/miscellaneous/cognitive_services.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/cognitive_services.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/cognitive_services.svg
diff --git a/war/img/lib/ibm/miscellaneous/ibm_containers.svg b/src/main/webapp/img/lib/ibm/miscellaneous/ibm_containers.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/ibm_containers.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/ibm_containers.svg
diff --git a/war/img/lib/ibm/miscellaneous/ibm_public_cloud.svg b/src/main/webapp/img/lib/ibm/miscellaneous/ibm_public_cloud.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/ibm_public_cloud.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/ibm_public_cloud.svg
diff --git a/war/img/lib/ibm/miscellaneous/iot_cloud.svg b/src/main/webapp/img/lib/ibm/miscellaneous/iot_cloud.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/iot_cloud.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/iot_cloud.svg
diff --git a/war/img/lib/ibm/miscellaneous/microservices_application.svg b/src/main/webapp/img/lib/ibm/miscellaneous/microservices_application.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/microservices_application.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/microservices_application.svg
diff --git a/war/img/lib/ibm/miscellaneous/object_storage.svg b/src/main/webapp/img/lib/ibm/miscellaneous/object_storage.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/object_storage.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/object_storage.svg
diff --git a/war/img/lib/ibm/miscellaneous/offline_capabilities.svg b/src/main/webapp/img/lib/ibm/miscellaneous/offline_capabilities.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/offline_capabilities.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/offline_capabilities.svg
diff --git a/war/img/lib/ibm/miscellaneous/openwhisk.svg b/src/main/webapp/img/lib/ibm/miscellaneous/openwhisk.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/openwhisk.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/openwhisk.svg
diff --git a/war/img/lib/ibm/miscellaneous/peer_cloud.svg b/src/main/webapp/img/lib/ibm/miscellaneous/peer_cloud.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/peer_cloud.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/peer_cloud.svg
diff --git a/war/img/lib/ibm/miscellaneous/retrieve_rank.svg b/src/main/webapp/img/lib/ibm/miscellaneous/retrieve_rank.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/retrieve_rank.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/retrieve_rank.svg
diff --git a/war/img/lib/ibm/miscellaneous/scalable.svg b/src/main/webapp/img/lib/ibm/miscellaneous/scalable.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/scalable.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/scalable.svg
diff --git a/war/img/lib/ibm/miscellaneous/text_to_speech.svg b/src/main/webapp/img/lib/ibm/miscellaneous/text_to_speech.svg
similarity index 100%
rename from war/img/lib/ibm/miscellaneous/text_to_speech.svg
rename to src/main/webapp/img/lib/ibm/miscellaneous/text_to_speech.svg
diff --git a/war/img/lib/ibm/security/api_security.svg b/src/main/webapp/img/lib/ibm/security/api_security.svg
similarity index 100%
rename from war/img/lib/ibm/security/api_security.svg
rename to src/main/webapp/img/lib/ibm/security/api_security.svg
diff --git a/war/img/lib/ibm/security/blockchain_security_service.svg b/src/main/webapp/img/lib/ibm/security/blockchain_security_service.svg
similarity index 100%
rename from war/img/lib/ibm/security/blockchain_security_service.svg
rename to src/main/webapp/img/lib/ibm/security/blockchain_security_service.svg
diff --git a/war/img/lib/ibm/security/data_security.svg b/src/main/webapp/img/lib/ibm/security/data_security.svg
similarity index 100%
rename from war/img/lib/ibm/security/data_security.svg
rename to src/main/webapp/img/lib/ibm/security/data_security.svg
diff --git a/war/img/lib/ibm/security/firewall.svg b/src/main/webapp/img/lib/ibm/security/firewall.svg
similarity index 100%
rename from war/img/lib/ibm/security/firewall.svg
rename to src/main/webapp/img/lib/ibm/security/firewall.svg
diff --git a/war/img/lib/ibm/security/gateway.svg b/src/main/webapp/img/lib/ibm/security/gateway.svg
similarity index 100%
rename from war/img/lib/ibm/security/gateway.svg
rename to src/main/webapp/img/lib/ibm/security/gateway.svg
diff --git a/war/img/lib/ibm/security/governance_risk_compliance.svg b/src/main/webapp/img/lib/ibm/security/governance_risk_compliance.svg
similarity index 100%
rename from war/img/lib/ibm/security/governance_risk_compliance.svg
rename to src/main/webapp/img/lib/ibm/security/governance_risk_compliance.svg
diff --git a/war/img/lib/ibm/security/identity_access_management.svg b/src/main/webapp/img/lib/ibm/security/identity_access_management.svg
similarity index 100%
rename from war/img/lib/ibm/security/identity_access_management.svg
rename to src/main/webapp/img/lib/ibm/security/identity_access_management.svg
diff --git a/war/img/lib/ibm/security/identity_provider.svg b/src/main/webapp/img/lib/ibm/security/identity_provider.svg
similarity index 100%
rename from war/img/lib/ibm/security/identity_provider.svg
rename to src/main/webapp/img/lib/ibm/security/identity_provider.svg
diff --git a/war/img/lib/ibm/security/infrastructure_security.svg b/src/main/webapp/img/lib/ibm/security/infrastructure_security.svg
similarity index 100%
rename from war/img/lib/ibm/security/infrastructure_security.svg
rename to src/main/webapp/img/lib/ibm/security/infrastructure_security.svg
diff --git a/war/img/lib/ibm/security/physical_security.svg b/src/main/webapp/img/lib/ibm/security/physical_security.svg
similarity index 100%
rename from war/img/lib/ibm/security/physical_security.svg
rename to src/main/webapp/img/lib/ibm/security/physical_security.svg
diff --git a/war/img/lib/ibm/security/security_monitoring_intelligence.svg b/src/main/webapp/img/lib/ibm/security/security_monitoring_intelligence.svg
similarity index 100%
rename from war/img/lib/ibm/security/security_monitoring_intelligence.svg
rename to src/main/webapp/img/lib/ibm/security/security_monitoring_intelligence.svg
diff --git a/war/img/lib/ibm/security/security_services.svg b/src/main/webapp/img/lib/ibm/security/security_services.svg
similarity index 100%
rename from war/img/lib/ibm/security/security_services.svg
rename to src/main/webapp/img/lib/ibm/security/security_services.svg
diff --git a/war/img/lib/ibm/security/trustend_computing.svg b/src/main/webapp/img/lib/ibm/security/trustend_computing.svg
similarity index 100%
rename from war/img/lib/ibm/security/trustend_computing.svg
rename to src/main/webapp/img/lib/ibm/security/trustend_computing.svg
diff --git a/war/img/lib/ibm/security/vpn.svg b/src/main/webapp/img/lib/ibm/security/vpn.svg
similarity index 100%
rename from war/img/lib/ibm/security/vpn.svg
rename to src/main/webapp/img/lib/ibm/security/vpn.svg
diff --git a/war/img/lib/ibm/social/communities.svg b/src/main/webapp/img/lib/ibm/social/communities.svg
similarity index 100%
rename from war/img/lib/ibm/social/communities.svg
rename to src/main/webapp/img/lib/ibm/social/communities.svg
diff --git a/war/img/lib/ibm/social/file_sync.svg b/src/main/webapp/img/lib/ibm/social/file_sync.svg
similarity index 100%
rename from war/img/lib/ibm/social/file_sync.svg
rename to src/main/webapp/img/lib/ibm/social/file_sync.svg
diff --git a/war/img/lib/ibm/social/live_collaboration.svg b/src/main/webapp/img/lib/ibm/social/live_collaboration.svg
similarity index 100%
rename from war/img/lib/ibm/social/live_collaboration.svg
rename to src/main/webapp/img/lib/ibm/social/live_collaboration.svg
diff --git a/war/img/lib/ibm/social/messaging.svg b/src/main/webapp/img/lib/ibm/social/messaging.svg
similarity index 100%
rename from war/img/lib/ibm/social/messaging.svg
rename to src/main/webapp/img/lib/ibm/social/messaging.svg
diff --git a/war/img/lib/ibm/social/networking.svg b/src/main/webapp/img/lib/ibm/social/networking.svg
similarity index 100%
rename from war/img/lib/ibm/social/networking.svg
rename to src/main/webapp/img/lib/ibm/social/networking.svg
diff --git a/war/img/lib/ibm/users/browser.svg b/src/main/webapp/img/lib/ibm/users/browser.svg
similarity index 100%
rename from war/img/lib/ibm/users/browser.svg
rename to src/main/webapp/img/lib/ibm/users/browser.svg
diff --git a/war/img/lib/ibm/users/device.svg b/src/main/webapp/img/lib/ibm/users/device.svg
similarity index 100%
rename from war/img/lib/ibm/users/device.svg
rename to src/main/webapp/img/lib/ibm/users/device.svg
diff --git a/war/img/lib/ibm/users/integrated_digital_experiences.svg b/src/main/webapp/img/lib/ibm/users/integrated_digital_experiences.svg
similarity index 100%
rename from war/img/lib/ibm/users/integrated_digital_experiences.svg
rename to src/main/webapp/img/lib/ibm/users/integrated_digital_experiences.svg
diff --git a/war/img/lib/ibm/users/physical_entity.svg b/src/main/webapp/img/lib/ibm/users/physical_entity.svg
similarity index 100%
rename from war/img/lib/ibm/users/physical_entity.svg
rename to src/main/webapp/img/lib/ibm/users/physical_entity.svg
diff --git a/war/img/lib/ibm/users/sensor.svg b/src/main/webapp/img/lib/ibm/users/sensor.svg
similarity index 100%
rename from war/img/lib/ibm/users/sensor.svg
rename to src/main/webapp/img/lib/ibm/users/sensor.svg
diff --git a/war/img/lib/ibm/users/user.svg b/src/main/webapp/img/lib/ibm/users/user.svg
similarity index 100%
rename from war/img/lib/ibm/users/user.svg
rename to src/main/webapp/img/lib/ibm/users/user.svg
diff --git a/war/img/networking/Bridge_128x128.png b/src/main/webapp/img/networking/Bridge_128x128.png
similarity index 100%
rename from war/img/networking/Bridge_128x128.png
rename to src/main/webapp/img/networking/Bridge_128x128.png
diff --git a/war/img/networking/Certificate_128x128.png b/src/main/webapp/img/networking/Certificate_128x128.png
similarity index 100%
rename from war/img/networking/Certificate_128x128.png
rename to src/main/webapp/img/networking/Certificate_128x128.png
diff --git a/war/img/networking/Certificate_Off_128x128.png b/src/main/webapp/img/networking/Certificate_Off_128x128.png
similarity index 100%
rename from war/img/networking/Certificate_Off_128x128.png
rename to src/main/webapp/img/networking/Certificate_Off_128x128.png
diff --git a/war/img/networking/Cloud_128x128.png b/src/main/webapp/img/networking/Cloud_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_128x128.png
rename to src/main/webapp/img/networking/Cloud_128x128.png
diff --git a/war/img/networking/Cloud_Computer_128x128.png b/src/main/webapp/img/networking/Cloud_Computer_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Computer_128x128.png
rename to src/main/webapp/img/networking/Cloud_Computer_128x128.png
diff --git a/war/img/networking/Cloud_Computer_Private_128x128.png b/src/main/webapp/img/networking/Cloud_Computer_Private_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Computer_Private_128x128.png
rename to src/main/webapp/img/networking/Cloud_Computer_Private_128x128.png
diff --git a/war/img/networking/Cloud_Rack_128x128.png b/src/main/webapp/img/networking/Cloud_Rack_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Rack_128x128.png
rename to src/main/webapp/img/networking/Cloud_Rack_128x128.png
diff --git a/war/img/networking/Cloud_Rack_Private_128x128.png b/src/main/webapp/img/networking/Cloud_Rack_Private_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Rack_Private_128x128.png
rename to src/main/webapp/img/networking/Cloud_Rack_Private_128x128.png
diff --git a/war/img/networking/Cloud_Server_128x128.png b/src/main/webapp/img/networking/Cloud_Server_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Server_128x128.png
rename to src/main/webapp/img/networking/Cloud_Server_128x128.png
diff --git a/war/img/networking/Cloud_Server_Private_128x128.png b/src/main/webapp/img/networking/Cloud_Server_Private_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Server_Private_128x128.png
rename to src/main/webapp/img/networking/Cloud_Server_Private_128x128.png
diff --git a/war/img/networking/Cloud_Storage_128x128.png b/src/main/webapp/img/networking/Cloud_Storage_128x128.png
similarity index 100%
rename from war/img/networking/Cloud_Storage_128x128.png
rename to src/main/webapp/img/networking/Cloud_Storage_128x128.png
diff --git a/war/img/networking/Concentrator_128x128.png b/src/main/webapp/img/networking/Concentrator_128x128.png
similarity index 100%
rename from war/img/networking/Concentrator_128x128.png
rename to src/main/webapp/img/networking/Concentrator_128x128.png
diff --git a/war/img/networking/Data_Filtering_128x128.png b/src/main/webapp/img/networking/Data_Filtering_128x128.png
similarity index 100%
rename from war/img/networking/Data_Filtering_128x128.png
rename to src/main/webapp/img/networking/Data_Filtering_128x128.png
diff --git a/war/img/networking/Database_128x128.png b/src/main/webapp/img/networking/Database_128x128.png
similarity index 100%
rename from war/img/networking/Database_128x128.png
rename to src/main/webapp/img/networking/Database_128x128.png
diff --git a/war/img/networking/Database_Add_128x128.png b/src/main/webapp/img/networking/Database_Add_128x128.png
similarity index 100%
rename from war/img/networking/Database_Add_128x128.png
rename to src/main/webapp/img/networking/Database_Add_128x128.png
diff --git a/war/img/networking/Database_Minus_128x128.png b/src/main/webapp/img/networking/Database_Minus_128x128.png
similarity index 100%
rename from war/img/networking/Database_Minus_128x128.png
rename to src/main/webapp/img/networking/Database_Minus_128x128.png
diff --git a/war/img/networking/Database_Move_Stack_128x128.png b/src/main/webapp/img/networking/Database_Move_Stack_128x128.png
similarity index 100%
rename from war/img/networking/Database_Move_Stack_128x128.png
rename to src/main/webapp/img/networking/Database_Move_Stack_128x128.png
diff --git a/war/img/networking/Database_Remove_128x128.png b/src/main/webapp/img/networking/Database_Remove_128x128.png
similarity index 100%
rename from war/img/networking/Database_Remove_128x128.png
rename to src/main/webapp/img/networking/Database_Remove_128x128.png
diff --git a/war/img/networking/Email_128x128.png b/src/main/webapp/img/networking/Email_128x128.png
similarity index 100%
rename from war/img/networking/Email_128x128.png
rename to src/main/webapp/img/networking/Email_128x128.png
diff --git a/war/img/networking/Firewall-page1_128x128.png b/src/main/webapp/img/networking/Firewall-page1_128x128.png
similarity index 100%
rename from war/img/networking/Firewall-page1_128x128.png
rename to src/main/webapp/img/networking/Firewall-page1_128x128.png
diff --git a/war/img/networking/Firewall_02_128x128.png b/src/main/webapp/img/networking/Firewall_02_128x128.png
similarity index 100%
rename from war/img/networking/Firewall_02_128x128.png
rename to src/main/webapp/img/networking/Firewall_02_128x128.png
diff --git a/war/img/networking/Firewall_128x128.png b/src/main/webapp/img/networking/Firewall_128x128.png
similarity index 100%
rename from war/img/networking/Firewall_128x128.png
rename to src/main/webapp/img/networking/Firewall_128x128.png
diff --git a/war/img/networking/Ip_Camera_128x128.png b/src/main/webapp/img/networking/Ip_Camera_128x128.png
similarity index 100%
rename from war/img/networking/Ip_Camera_128x128.png
rename to src/main/webapp/img/networking/Ip_Camera_128x128.png
diff --git a/war/img/networking/Mainframe_128x128.png b/src/main/webapp/img/networking/Mainframe_128x128.png
similarity index 100%
rename from war/img/networking/Mainframe_128x128.png
rename to src/main/webapp/img/networking/Mainframe_128x128.png
diff --git a/war/img/networking/Modem_128x128.png b/src/main/webapp/img/networking/Modem_128x128.png
similarity index 100%
rename from war/img/networking/Modem_128x128.png
rename to src/main/webapp/img/networking/Modem_128x128.png
diff --git a/war/img/networking/Print_Server_128x128.png b/src/main/webapp/img/networking/Print_Server_128x128.png
similarity index 100%
rename from war/img/networking/Print_Server_128x128.png
rename to src/main/webapp/img/networking/Print_Server_128x128.png
diff --git a/war/img/networking/Print_Server_Wireless_128x128.png b/src/main/webapp/img/networking/Print_Server_Wireless_128x128.png
similarity index 100%
rename from war/img/networking/Print_Server_Wireless_128x128.png
rename to src/main/webapp/img/networking/Print_Server_Wireless_128x128.png
diff --git a/war/img/networking/Repeater_128x128.png b/src/main/webapp/img/networking/Repeater_128x128.png
similarity index 100%
rename from war/img/networking/Repeater_128x128.png
rename to src/main/webapp/img/networking/Repeater_128x128.png
diff --git a/war/img/networking/Router_128x128.png b/src/main/webapp/img/networking/Router_128x128.png
similarity index 100%
rename from war/img/networking/Router_128x128.png
rename to src/main/webapp/img/networking/Router_128x128.png
diff --git a/war/img/networking/Router_Icon_128x128.png b/src/main/webapp/img/networking/Router_Icon_128x128.png
similarity index 100%
rename from war/img/networking/Router_Icon_128x128.png
rename to src/main/webapp/img/networking/Router_Icon_128x128.png
diff --git a/war/img/networking/Server_128x128.png b/src/main/webapp/img/networking/Server_128x128.png
similarity index 100%
rename from war/img/networking/Server_128x128.png
rename to src/main/webapp/img/networking/Server_128x128.png
diff --git a/war/img/networking/Server_Rack_128x128.png b/src/main/webapp/img/networking/Server_Rack_128x128.png
similarity index 100%
rename from war/img/networking/Server_Rack_128x128.png
rename to src/main/webapp/img/networking/Server_Rack_128x128.png
diff --git a/war/img/networking/Server_Rack_Empty_128x128.png b/src/main/webapp/img/networking/Server_Rack_Empty_128x128.png
similarity index 100%
rename from war/img/networking/Server_Rack_Empty_128x128.png
rename to src/main/webapp/img/networking/Server_Rack_Empty_128x128.png
diff --git a/war/img/networking/Server_Rack_Partial_128x128.png b/src/main/webapp/img/networking/Server_Rack_Partial_128x128.png
similarity index 100%
rename from war/img/networking/Server_Rack_Partial_128x128.png
rename to src/main/webapp/img/networking/Server_Rack_Partial_128x128.png
diff --git a/war/img/networking/Switch_128x128.png b/src/main/webapp/img/networking/Switch_128x128.png
similarity index 100%
rename from war/img/networking/Switch_128x128.png
rename to src/main/webapp/img/networking/Switch_128x128.png
diff --git a/war/img/networking/UPS_128x128.png b/src/main/webapp/img/networking/UPS_128x128.png
similarity index 100%
rename from war/img/networking/UPS_128x128.png
rename to src/main/webapp/img/networking/UPS_128x128.png
diff --git a/war/img/networking/Wireless_Router_128x128.png b/src/main/webapp/img/networking/Wireless_Router_128x128.png
similarity index 100%
rename from war/img/networking/Wireless_Router_128x128.png
rename to src/main/webapp/img/networking/Wireless_Router_128x128.png
diff --git a/war/img/networking/Wireless_Router_N_128x128.png b/src/main/webapp/img/networking/Wireless_Router_N_128x128.png
similarity index 100%
rename from war/img/networking/Wireless_Router_N_128x128.png
rename to src/main/webapp/img/networking/Wireless_Router_N_128x128.png
diff --git a/war/img/networking/power_distribution_unit_128x128.png b/src/main/webapp/img/networking/power_distribution_unit_128x128.png
similarity index 100%
rename from war/img/networking/power_distribution_unit_128x128.png
rename to src/main/webapp/img/networking/power_distribution_unit_128x128.png
diff --git a/war/img/people/Construction_Worker_Man_128x128.png b/src/main/webapp/img/people/Construction_Worker_Man_128x128.png
similarity index 100%
rename from war/img/people/Construction_Worker_Man_128x128.png
rename to src/main/webapp/img/people/Construction_Worker_Man_128x128.png
diff --git a/war/img/people/Construction_Worker_Man_Black_128x128.png b/src/main/webapp/img/people/Construction_Worker_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Construction_Worker_Man_Black_128x128.png
rename to src/main/webapp/img/people/Construction_Worker_Man_Black_128x128.png
diff --git a/war/img/people/Construction_Worker_Woman_128x128.png b/src/main/webapp/img/people/Construction_Worker_Woman_128x128.png
similarity index 100%
rename from war/img/people/Construction_Worker_Woman_128x128.png
rename to src/main/webapp/img/people/Construction_Worker_Woman_128x128.png
diff --git a/war/img/people/Construction_Worker_Woman_Black_128x128.png b/src/main/webapp/img/people/Construction_Worker_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Construction_Worker_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Construction_Worker_Woman_Black_128x128.png
diff --git a/war/img/people/Doctor_Man_128x128.png b/src/main/webapp/img/people/Doctor_Man_128x128.png
similarity index 100%
rename from war/img/people/Doctor_Man_128x128.png
rename to src/main/webapp/img/people/Doctor_Man_128x128.png
diff --git a/war/img/people/Doctor_Man_Black_128x128.png b/src/main/webapp/img/people/Doctor_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Doctor_Man_Black_128x128.png
rename to src/main/webapp/img/people/Doctor_Man_Black_128x128.png
diff --git a/war/img/people/Doctor_Woman_128x128.png b/src/main/webapp/img/people/Doctor_Woman_128x128.png
similarity index 100%
rename from war/img/people/Doctor_Woman_128x128.png
rename to src/main/webapp/img/people/Doctor_Woman_128x128.png
diff --git a/war/img/people/Doctor_Woman_Black_128x128.png b/src/main/webapp/img/people/Doctor_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Doctor_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Doctor_Woman_Black_128x128.png
diff --git a/war/img/people/Farmer_Man_128x128.png b/src/main/webapp/img/people/Farmer_Man_128x128.png
similarity index 100%
rename from war/img/people/Farmer_Man_128x128.png
rename to src/main/webapp/img/people/Farmer_Man_128x128.png
diff --git a/war/img/people/Farmer_Man_Black_128x128.png b/src/main/webapp/img/people/Farmer_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Farmer_Man_Black_128x128.png
rename to src/main/webapp/img/people/Farmer_Man_Black_128x128.png
diff --git a/war/img/people/Farmer_Woman_128x128.png b/src/main/webapp/img/people/Farmer_Woman_128x128.png
similarity index 100%
rename from war/img/people/Farmer_Woman_128x128.png
rename to src/main/webapp/img/people/Farmer_Woman_128x128.png
diff --git a/war/img/people/Farmer_Woman_Black_128x128.png b/src/main/webapp/img/people/Farmer_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Farmer_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Farmer_Woman_Black_128x128.png
diff --git a/war/img/people/Military_Officer_128x128.png b/src/main/webapp/img/people/Military_Officer_128x128.png
similarity index 100%
rename from war/img/people/Military_Officer_128x128.png
rename to src/main/webapp/img/people/Military_Officer_128x128.png
diff --git a/war/img/people/Military_Officer_Black_128x128.png b/src/main/webapp/img/people/Military_Officer_Black_128x128.png
similarity index 100%
rename from war/img/people/Military_Officer_Black_128x128.png
rename to src/main/webapp/img/people/Military_Officer_Black_128x128.png
diff --git a/war/img/people/Military_Officer_Woman_128x128.png b/src/main/webapp/img/people/Military_Officer_Woman_128x128.png
similarity index 100%
rename from war/img/people/Military_Officer_Woman_128x128.png
rename to src/main/webapp/img/people/Military_Officer_Woman_128x128.png
diff --git a/war/img/people/Military_Officer_Woman_Black_128x128.png b/src/main/webapp/img/people/Military_Officer_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Military_Officer_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Military_Officer_Woman_Black_128x128.png
diff --git a/war/img/people/Nurse_Man_128x128.png b/src/main/webapp/img/people/Nurse_Man_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Man_128x128.png
rename to src/main/webapp/img/people/Nurse_Man_128x128.png
diff --git a/war/img/people/Nurse_Man_Black_128x128.png b/src/main/webapp/img/people/Nurse_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Man_Black_128x128.png
rename to src/main/webapp/img/people/Nurse_Man_Black_128x128.png
diff --git a/war/img/people/Nurse_Man_Green_128x128.png b/src/main/webapp/img/people/Nurse_Man_Green_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Man_Green_128x128.png
rename to src/main/webapp/img/people/Nurse_Man_Green_128x128.png
diff --git a/war/img/people/Nurse_Man_Red_128x128.png b/src/main/webapp/img/people/Nurse_Man_Red_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Man_Red_128x128.png
rename to src/main/webapp/img/people/Nurse_Man_Red_128x128.png
diff --git a/war/img/people/Nurse_Woman_128x128.png b/src/main/webapp/img/people/Nurse_Woman_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Woman_128x128.png
rename to src/main/webapp/img/people/Nurse_Woman_128x128.png
diff --git a/war/img/people/Nurse_Woman_Black_128x128.png b/src/main/webapp/img/people/Nurse_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Nurse_Woman_Black_128x128.png
diff --git a/war/img/people/Nurse_Woman_Green_128x128.png b/src/main/webapp/img/people/Nurse_Woman_Green_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Woman_Green_128x128.png
rename to src/main/webapp/img/people/Nurse_Woman_Green_128x128.png
diff --git a/war/img/people/Nurse_Woman_Red_128x128.png b/src/main/webapp/img/people/Nurse_Woman_Red_128x128.png
similarity index 100%
rename from war/img/people/Nurse_Woman_Red_128x128.png
rename to src/main/webapp/img/people/Nurse_Woman_Red_128x128.png
diff --git a/war/img/people/Pilot_Man_128x128.png b/src/main/webapp/img/people/Pilot_Man_128x128.png
similarity index 100%
rename from war/img/people/Pilot_Man_128x128.png
rename to src/main/webapp/img/people/Pilot_Man_128x128.png
diff --git a/war/img/people/Pilot_Man_Black_128x128.png b/src/main/webapp/img/people/Pilot_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Pilot_Man_Black_128x128.png
rename to src/main/webapp/img/people/Pilot_Man_Black_128x128.png
diff --git a/war/img/people/Pilot_Woman_128x128.png b/src/main/webapp/img/people/Pilot_Woman_128x128.png
similarity index 100%
rename from war/img/people/Pilot_Woman_128x128.png
rename to src/main/webapp/img/people/Pilot_Woman_128x128.png
diff --git a/war/img/people/Pilot_Woman_Black_128x128.png b/src/main/webapp/img/people/Pilot_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Pilot_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Pilot_Woman_Black_128x128.png
diff --git a/war/img/people/Scientist_Man_128x128.png b/src/main/webapp/img/people/Scientist_Man_128x128.png
similarity index 100%
rename from war/img/people/Scientist_Man_128x128.png
rename to src/main/webapp/img/people/Scientist_Man_128x128.png
diff --git a/war/img/people/Scientist_Man_Black_128x128.png b/src/main/webapp/img/people/Scientist_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Scientist_Man_Black_128x128.png
rename to src/main/webapp/img/people/Scientist_Man_Black_128x128.png
diff --git a/war/img/people/Scientist_Woman_128x128.png b/src/main/webapp/img/people/Scientist_Woman_128x128.png
similarity index 100%
rename from war/img/people/Scientist_Woman_128x128.png
rename to src/main/webapp/img/people/Scientist_Woman_128x128.png
diff --git a/war/img/people/Scientist_Woman_Black_128x128.png b/src/main/webapp/img/people/Scientist_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Scientist_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Scientist_Woman_Black_128x128.png
diff --git a/war/img/people/Security_Man_128x128.png b/src/main/webapp/img/people/Security_Man_128x128.png
similarity index 100%
rename from war/img/people/Security_Man_128x128.png
rename to src/main/webapp/img/people/Security_Man_128x128.png
diff --git a/war/img/people/Security_Man_Black_128x128.png b/src/main/webapp/img/people/Security_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Security_Man_Black_128x128.png
rename to src/main/webapp/img/people/Security_Man_Black_128x128.png
diff --git a/war/img/people/Security_Woman_128x128.png b/src/main/webapp/img/people/Security_Woman_128x128.png
similarity index 100%
rename from war/img/people/Security_Woman_128x128.png
rename to src/main/webapp/img/people/Security_Woman_128x128.png
diff --git a/war/img/people/Security_Woman_Black_128x128.png b/src/main/webapp/img/people/Security_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Security_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Security_Woman_Black_128x128.png
diff --git a/war/img/people/Soldier_128x128.png b/src/main/webapp/img/people/Soldier_128x128.png
similarity index 100%
rename from war/img/people/Soldier_128x128.png
rename to src/main/webapp/img/people/Soldier_128x128.png
diff --git a/war/img/people/Soldier_Black_128x128.png b/src/main/webapp/img/people/Soldier_Black_128x128.png
similarity index 100%
rename from war/img/people/Soldier_Black_128x128.png
rename to src/main/webapp/img/people/Soldier_Black_128x128.png
diff --git a/war/img/people/Suit_Man_128x128.png b/src/main/webapp/img/people/Suit_Man_128x128.png
similarity index 100%
rename from war/img/people/Suit_Man_128x128.png
rename to src/main/webapp/img/people/Suit_Man_128x128.png
diff --git a/war/img/people/Suit_Man_Black_128x128.png b/src/main/webapp/img/people/Suit_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Suit_Man_Black_128x128.png
rename to src/main/webapp/img/people/Suit_Man_Black_128x128.png
diff --git a/war/img/people/Suit_Man_Blue_128x128.png b/src/main/webapp/img/people/Suit_Man_Blue_128x128.png
similarity index 100%
rename from war/img/people/Suit_Man_Blue_128x128.png
rename to src/main/webapp/img/people/Suit_Man_Blue_128x128.png
diff --git a/war/img/people/Suit_Man_Green_128x128.png b/src/main/webapp/img/people/Suit_Man_Green_128x128.png
similarity index 100%
rename from war/img/people/Suit_Man_Green_128x128.png
rename to src/main/webapp/img/people/Suit_Man_Green_128x128.png
diff --git a/war/img/people/Suit_Man_Green_Black_128x128.png b/src/main/webapp/img/people/Suit_Man_Green_Black_128x128.png
similarity index 100%
rename from war/img/people/Suit_Man_Green_Black_128x128.png
rename to src/main/webapp/img/people/Suit_Man_Green_Black_128x128.png
diff --git a/war/img/people/Suit_Woman_128x128.png b/src/main/webapp/img/people/Suit_Woman_128x128.png
similarity index 100%
rename from war/img/people/Suit_Woman_128x128.png
rename to src/main/webapp/img/people/Suit_Woman_128x128.png
diff --git a/war/img/people/Suit_Woman_Black_128x128.png b/src/main/webapp/img/people/Suit_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Suit_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Suit_Woman_Black_128x128.png
diff --git a/war/img/people/Suit_Woman_Blue_128x128.png b/src/main/webapp/img/people/Suit_Woman_Blue_128x128.png
similarity index 100%
rename from war/img/people/Suit_Woman_Blue_128x128.png
rename to src/main/webapp/img/people/Suit_Woman_Blue_128x128.png
diff --git a/war/img/people/Suit_Woman_Green_128x128.png b/src/main/webapp/img/people/Suit_Woman_Green_128x128.png
similarity index 100%
rename from war/img/people/Suit_Woman_Green_128x128.png
rename to src/main/webapp/img/people/Suit_Woman_Green_128x128.png
diff --git a/war/img/people/Suit_Woman_Green_Black_128x128.png b/src/main/webapp/img/people/Suit_Woman_Green_Black_128x128.png
similarity index 100%
rename from war/img/people/Suit_Woman_Green_Black_128x128.png
rename to src/main/webapp/img/people/Suit_Woman_Green_Black_128x128.png
diff --git a/war/img/people/Tech_Man_128x128.png b/src/main/webapp/img/people/Tech_Man_128x128.png
similarity index 100%
rename from war/img/people/Tech_Man_128x128.png
rename to src/main/webapp/img/people/Tech_Man_128x128.png
diff --git a/war/img/people/Tech_Man_Black_128x128.png b/src/main/webapp/img/people/Tech_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Tech_Man_Black_128x128.png
rename to src/main/webapp/img/people/Tech_Man_Black_128x128.png
diff --git a/war/img/people/Telesales_Man_128x128.png b/src/main/webapp/img/people/Telesales_Man_128x128.png
similarity index 100%
rename from war/img/people/Telesales_Man_128x128.png
rename to src/main/webapp/img/people/Telesales_Man_128x128.png
diff --git a/war/img/people/Telesales_Man_Black_128x128.png b/src/main/webapp/img/people/Telesales_Man_Black_128x128.png
similarity index 100%
rename from war/img/people/Telesales_Man_Black_128x128.png
rename to src/main/webapp/img/people/Telesales_Man_Black_128x128.png
diff --git a/war/img/people/Telesales_Woman_128x128.png b/src/main/webapp/img/people/Telesales_Woman_128x128.png
similarity index 100%
rename from war/img/people/Telesales_Woman_128x128.png
rename to src/main/webapp/img/people/Telesales_Woman_128x128.png
diff --git a/war/img/people/Telesales_Woman_Black_128x128.png b/src/main/webapp/img/people/Telesales_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Telesales_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Telesales_Woman_Black_128x128.png
diff --git a/war/img/people/Waiter_128x128.png b/src/main/webapp/img/people/Waiter_128x128.png
similarity index 100%
rename from war/img/people/Waiter_128x128.png
rename to src/main/webapp/img/people/Waiter_128x128.png
diff --git a/war/img/people/Waiter_Black_128x128.png b/src/main/webapp/img/people/Waiter_Black_128x128.png
similarity index 100%
rename from war/img/people/Waiter_Black_128x128.png
rename to src/main/webapp/img/people/Waiter_Black_128x128.png
diff --git a/war/img/people/Waiter_Woman_128x128.png b/src/main/webapp/img/people/Waiter_Woman_128x128.png
similarity index 100%
rename from war/img/people/Waiter_Woman_128x128.png
rename to src/main/webapp/img/people/Waiter_Woman_128x128.png
diff --git a/war/img/people/Waiter_Woman_Black_128x128.png b/src/main/webapp/img/people/Waiter_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Waiter_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Waiter_Woman_Black_128x128.png
diff --git a/war/img/people/Worker_Black_128x128.png b/src/main/webapp/img/people/Worker_Black_128x128.png
similarity index 100%
rename from war/img/people/Worker_Black_128x128.png
rename to src/main/webapp/img/people/Worker_Black_128x128.png
diff --git a/war/img/people/Worker_Man_128x128.png b/src/main/webapp/img/people/Worker_Man_128x128.png
similarity index 100%
rename from war/img/people/Worker_Man_128x128.png
rename to src/main/webapp/img/people/Worker_Man_128x128.png
diff --git a/war/img/people/Worker_Woman_128x128.png b/src/main/webapp/img/people/Worker_Woman_128x128.png
similarity index 100%
rename from war/img/people/Worker_Woman_128x128.png
rename to src/main/webapp/img/people/Worker_Woman_128x128.png
diff --git a/war/img/people/Worker_Woman_Black_128x128.png b/src/main/webapp/img/people/Worker_Woman_Black_128x128.png
similarity index 100%
rename from war/img/people/Worker_Woman_Black_128x128.png
rename to src/main/webapp/img/people/Worker_Woman_Black_128x128.png
diff --git a/war/img/telecommunication/Battery_0_128x128.png b/src/main/webapp/img/telecommunication/Battery_0_128x128.png
similarity index 100%
rename from war/img/telecommunication/Battery_0_128x128.png
rename to src/main/webapp/img/telecommunication/Battery_0_128x128.png
diff --git a/war/img/telecommunication/Battery_100_128x128.png b/src/main/webapp/img/telecommunication/Battery_100_128x128.png
similarity index 100%
rename from war/img/telecommunication/Battery_100_128x128.png
rename to src/main/webapp/img/telecommunication/Battery_100_128x128.png
diff --git a/war/img/telecommunication/Battery_50_128x128.png b/src/main/webapp/img/telecommunication/Battery_50_128x128.png
similarity index 100%
rename from war/img/telecommunication/Battery_50_128x128.png
rename to src/main/webapp/img/telecommunication/Battery_50_128x128.png
diff --git a/war/img/telecommunication/Battery_75_128x128.png b/src/main/webapp/img/telecommunication/Battery_75_128x128.png
similarity index 100%
rename from war/img/telecommunication/Battery_75_128x128.png
rename to src/main/webapp/img/telecommunication/Battery_75_128x128.png
diff --git a/war/img/telecommunication/Battery_allstates_128x128.png b/src/main/webapp/img/telecommunication/Battery_allstates_128x128.png
similarity index 100%
rename from war/img/telecommunication/Battery_allstates_128x128.png
rename to src/main/webapp/img/telecommunication/Battery_allstates_128x128.png
diff --git a/war/img/telecommunication/BlackBerry_128x128.png b/src/main/webapp/img/telecommunication/BlackBerry_128x128.png
similarity index 100%
rename from war/img/telecommunication/BlackBerry_128x128.png
rename to src/main/webapp/img/telecommunication/BlackBerry_128x128.png
diff --git a/war/img/telecommunication/Cellphone_128x128.png b/src/main/webapp/img/telecommunication/Cellphone_128x128.png
similarity index 100%
rename from war/img/telecommunication/Cellphone_128x128.png
rename to src/main/webapp/img/telecommunication/Cellphone_128x128.png
diff --git a/war/img/telecommunication/HTC_smartphone_128x128.png b/src/main/webapp/img/telecommunication/HTC_smartphone_128x128.png
similarity index 100%
rename from war/img/telecommunication/HTC_smartphone_128x128.png
rename to src/main/webapp/img/telecommunication/HTC_smartphone_128x128.png
diff --git a/war/img/telecommunication/Palm_Treo_128x128.png b/src/main/webapp/img/telecommunication/Palm_Treo_128x128.png
similarity index 100%
rename from war/img/telecommunication/Palm_Treo_128x128.png
rename to src/main/webapp/img/telecommunication/Palm_Treo_128x128.png
diff --git a/war/img/telecommunication/Signal_tower_off_128x128.png b/src/main/webapp/img/telecommunication/Signal_tower_off_128x128.png
similarity index 100%
rename from war/img/telecommunication/Signal_tower_off_128x128.png
rename to src/main/webapp/img/telecommunication/Signal_tower_off_128x128.png
diff --git a/war/img/telecommunication/Signal_tower_on_128x128.png b/src/main/webapp/img/telecommunication/Signal_tower_on_128x128.png
similarity index 100%
rename from war/img/telecommunication/Signal_tower_on_128x128.png
rename to src/main/webapp/img/telecommunication/Signal_tower_on_128x128.png
diff --git a/war/img/telecommunication/iPhone_128x128.png b/src/main/webapp/img/telecommunication/iPhone_128x128.png
similarity index 100%
rename from war/img/telecommunication/iPhone_128x128.png
rename to src/main/webapp/img/telecommunication/iPhone_128x128.png
diff --git a/war/index.html b/src/main/webapp/index.html
similarity index 100%
rename from war/index.html
rename to src/main/webapp/index.html
diff --git a/war/js/app.min.js b/src/main/webapp/js/app.min.js
similarity index 99%
rename from war/js/app.min.js
rename to src/main/webapp/js/app.min.js
index c2e471c1f84a652e8a9b332c2388c5552c7e89b3..8ea97891cce443ed2a8c6390977814695ed64286 100644
--- a/war/js/app.min.js
+++ b/src/main/webapp/js/app.min.js
@@ -6534,7 +6534,7 @@ mxEvent.addListener(R,"focus",function(){N.checked=!0});mxEvent.addListener(V,"f
 "12px";mxUtils.write(e,mxResources.get("paperSize"));k.appendChild(e);e=document.createElement("div");e.style.marginBottom="12px";var T=PageSetupDialog.addPageFormatPanel(e,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);k.appendChild(e);e=document.createElement("span");mxUtils.write(e,mxResources.get("pageScale"));k.appendChild(e);var U=document.createElement("input");U.style.cssText="margin:0 8px 0 8px;";U.setAttribute("value","100 %");U.style.width="60px";k.appendChild(U);
 h.appendChild(k);e=document.createElement("div");e.style.cssText="text-align:right;margin:62px 0 0 0;";k=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});k.className="geBtn";a.editor.cancelFirst&&e.appendChild(k);a.isOffline()||(p=mxUtils.button(mxResources.get("help"),function(){window.open("https://desk.draw.io/support/solutions/articles/16000048947")}),p.className="geBtn",e.appendChild(p));PrintDialog.previewEnabled&&(p=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();
 d(!1)}),p.className="geBtn",e.appendChild(p));p=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();d(!0)});p.className="geBtn gePrimaryBtn";e.appendChild(p);a.editor.cancelFirst||e.appendChild(k);h.appendChild(e);this.container=h}})();function ChangeShadow(a,b){this.ui=a;this.previous=this.visible=b}ChangeShadow.prototype.execute=function(){this.visible=this.previous;this.previous=this.ui.editor.graph.shadowVisible;this.ui.editor.graph.setShadowVisible(this.visible)};
-(function(){var a=new mxObjectCodec(new ChangeShadow,["ui","previous"]);a.afterDecode=function(a,d,c){c.previous=c.visible;return c};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="7.9.8";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';
+(function(){var a=new mxObjectCodec(new ChangeShadow,["ui","previous"]);a.afterDecode=function(a,d,c){c.previous=c.visible;return c};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="8.0.0";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';
 EditorUi.prototype.emptyLibraryXml="<mxlibrary>[]</mxlibrary>";EditorUi.prototype.mode=null;EditorUi.prototype.sidebarFooterHeight=36;EditorUi.prototype.defaultCustomShapeStyle="shape=stencil(tZRtTsQgEEBPw1+DJR7AoN6DbWftpAgE0Ortd/jYRGq72R+YNE2YgTePloEJGWblgA18ZuKFDcMj5/Sm8boZq+BgjCX4pTyqk6ZlKROitwusOMXKQDODx5iy4pXxZ5qTHiFHawxB0JrQZH7lCabQ0Fr+XWC1/E8zcsT/gAi+Subo2/3Mh6d/oJb5nU1b5tW7r2knautaa3T+U32o7f7vZwpJkaNDLORJjcu7t59m2jXxqX9un+tt022acsfmoKaQZ+vhhswZtS6Ne/ThQGt0IV0N3Yyv6P3CeT9/tHO0XFI5cAE=);whiteSpace=wrap;html=1;";
 EditorUi.prototype.maxBackgroundSize=1600;EditorUi.prototype.maxImageSize=520;EditorUi.prototype.resampleThreshold=1E5;EditorUi.prototype.maxImageBytes=1E6;EditorUi.prototype.maxBackgroundBytes=25E5;EditorUi.prototype.currentFile=null;EditorUi.prototype.printPdfExport=!1;EditorUi.prototype.pdfPageExport=!0;EditorUi.prototype.formatEnabled="0"!=urlParams.format;(function(){EditorUi.prototype.useCanvasForExport=!1;EditorUi.prototype.jpgSupported=!1;try{var a=document.createElement("canvas");EditorUi.prototype.canvasSupported=
 !(!a.getContext||!a.getContext("2d"))}catch(t){}try{var b=document.createElement("canvas"),c=new Image;c.onload=function(){try{b.getContext("2d").drawImage(c,0,0);var a=b.toDataURL("image/png");EditorUi.prototype.useCanvasForExport=null!=a&&6<a.length}catch(p){}};c.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(t){}try{b=
@@ -6594,47 +6594,47 @@ h.documentElement.getElementsByTagName("diagram"),h=0;h<k.length;h++){var n=mxUt
 !this.isOffline()&&(new XMLHttpRequest).upload&&this.isRemoteFileFormat(c,l)&&null!=q?this.parseFile(q,mxUtils.bind(this,function(a){4==a.readyState&&(this.spinner.stop(),200<=a.status&&299>=a.status?x(a.responseText,"text/xml"):this.handleError({message:mxResources.get(413==a.status?"drawingTooLarge":"invalidOrMissingFile")},mxResources.get("errorLoadingFile")))})):x(c,d)}}));a.stopPropagation();a.preventDefault()})),mxEvent.addListener(f,"dragleave",function(a){null!=e?e.style.border="3px dotted lightGray":
 (f.style.border="3px solid transparent",f.style.cursor="");a.stopPropagation();a.preventDefault()}));l=l.cloneNode(!1);l.setAttribute("src",IMAGE_PATH+"/edit.gif");l.setAttribute("title",mxResources.get("edit"));k.insertBefore(l,k.firstChild);mxEvent.addListener(l,"click",F);mxEvent.addListener(f,"dblclick",function(a){mxEvent.getSource(a)==f&&F(a)});c=l.cloneNode(!1);c.setAttribute("src",Editor.plusImage);c.setAttribute("title",mxResources.get("add"));k.insertBefore(c,k.firstChild);mxEvent.addListener(c,
 "click",G);this.isOffline()||".scratchpad"!=a.title||null==EditorUi.scratchpadHelpLink||(c=document.createElement("span"),c.setAttribute("title",mxResources.get("help")),c.style.cssText="color:gray;text-decoration:none;",c.className="geButton",mxUtils.write(c,"?"),mxEvent.addGestureListeners(c,mxUtils.bind(this,function(a){this.openLink(EditorUi.scratchpadHelpLink);mxEvent.consume(a)})),k.insertBefore(c,k.firstChild))}n.appendChild(k);n.style.paddingRight=18*k.childNodes.length+"px"}};"1"==urlParams.offline||
-EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("atlas"==uiTheme?("undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=
-46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);
-b.setAttribute("title",mxResources.get("hide"));a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});"dark"==uiTheme&&(Graph.prototype.defaultThemeName="darkTheme",Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor=
-"#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
-Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="));EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display="none",this.refresh())};
-EditorUi.prototype.showFooter=function(a){var b=document.getElementById("geFooter");null!=b&&(this.footerHeight=a,b.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,c,d,e){a=new ImageDialog(this,a,b,c,d,e);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=!0;this.editor.graph.model.execute(a)});
-var b=new BackgroundImageDialog(this,mxUtils.bind(this,function(b){a(b)}));this.showDialog(b.container,360,200,!0,!0);b.init()};EditorUi.prototype.showLibraryDialog=function(a,b,c,d,e){a=new LibraryDialog(this,a,b,c,d,e);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");a.style.position="absolute";
-a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,c){var d=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():
-function(){},e=null!=a&&null!=a.error?a.error:a;if(null!=e||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var g=mxResources.get("ok"),h=null;b=null!=b?b:mxResources.get("error");if(null!=e)if(null!=e.retry&&(g=mxResources.get("cancel"),h=function(){d();e.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&e.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));else if(404==e.code||
-404==e.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&e.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var f=window.location.hash;null!=f&&"#G"==f.substring(0,2)&&(f=f.substring(2),a+=' <a href="https://drive.google.com/open?id='+f+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else e.code==App.ERROR_TIMEOUT?a=mxUtils.htmlEntities(mxResources.get("timeout")):
-e.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=e.message?a=mxUtils.htmlEntities(e.message):null!=e.response&&null!=e.response.error&&(a=mxUtils.htmlEntities(e.response.error));this.showError(b,a,g,c,h)}else null!=c&&c()};EditorUi.prototype.showError=function(a,b,c,d,e,f,k){a=new ErrorDialog(this,a,b,c,d,e,f,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,null,a,mxResources.get("ok"),b);this.showDialog(c.container,
-340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,c,d,e){var g=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){g();null!=b&&b()},function(){g();null!=c&&c()},d,e)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=function(){return mxClient.IS_CHROMEAPP||
-!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,c){var d=a.toDataURL("image/"+c);if(6>=d.length||d==a.cloneNode(!1).toDataURL("image/"+c))throw{message:"Invalid image"};null!=b&&(d=this.writeGraphModelToPng(d,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return d};EditorUi.prototype.saveCanvas=function(a,
-b,c){var d="jpeg"==c?"jpg":c,e=this.getBaseFilename()+"."+d;a=this.createImageDataUri(a,b,c);this.saveData(e,d,a.substring(a.lastIndexOf(",")+1),"image/"+c,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};EditorUi.prototype.doSaveLocalFile=function(a,
-b,c,d,e){if(window.Blob&&navigator.msSaveOrOpenBlob)a=d?this.base64ToBlob(a,c):new Blob([a],{type:c}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)c=window.open("about:blank","_blank"),null==c?mxUtils.popup(a,!0):(c.document.write(a),c.document.close(),c.document.execCommand("SaveAs",!0,b),c.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height="380px",this.showDialog(b.container,620,
-460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var g=document.createElement("a"),h=!mxClient.IS_SF&&"undefined"!==typeof g.download;if(h||this.isOffline()){g.href=URL.createObjectURL(d?this.base64ToBlob(a,c):new Blob([a],{type:c}));h?g.download=b:g.setAttribute("target","_blank");document.body.appendChild(g);try{window.setTimeout(function(){URL.revokeObjectURL(g.href)},0),g.click(),g.parentNode.removeChild(g)}catch(A){}}else this.createEchoRequest(a,b,c,d,e).simulate(document,
-"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,c,d,e,f){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=c?"&mime="+c:"")+(null!=e?"&format="+e:"")+(null!=f?"&base64="+f:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(d?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),d=c.length,e=Math.ceil(d/1024),g=Array(e),h=0;h<e;++h){for(var f=1024*h,k=Math.min(f+1024,d),u=Array(k-f),l=0;f<k;++l,++f)u[l]=c[f].charCodeAt(0);g[h]=
-new Uint8Array(u)}return new Blob(g,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,c,d,e,f,k){f=null!=f?f:!1;k=null!=k?k:"vsdx"!=e&&(!mxClient.IS_IOS||!navigator.standalone);e=this.getServiceCount(f);b=new CreateDialog(this,b,mxUtils.bind(this,function(b,e){try{if("_blank"==e)if(null==c||"image/"!=c.substring(0,6)||"image/svg"==c.substring(0,9)&&!mxClient.IS_SVG){var g=window.open("about:blank");null==g?mxUtils.popup(a,!0):(g.document.write(mxUtils.htmlEntities(a,!1)),g.document.close())}else this.openInNewWindow(a,
-c,d);else e==App.MODE_DEVICE?this.doSaveLocalFile(a,b,c,d):null!=b&&0<b.length&&this.pickFolder(e,mxUtils.bind(this,function(g){try{this.exportFile(a,b,c,d,e,g)}catch(B){this.handleError(B)}}))}catch(x){this.handleError(x)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,f,k,null,null,4<e?3:4,a,c,d);this.showDialog(b.container,380,e==(mxClient.IS_IOS?0:1)?160:4<e?390:270,!0,!0);b.init()};EditorUi.prototype.openInNewWindow=function(a,b,c){if(mxClient.IS_GC||
-mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var d=window.open("about:blank");null==d?mxUtils.popup(a,!0):("image/svg+xml"==b?d.document.write("<html>"+a+"</html>"):d.document.write('<html><img src="data:'+b+(c?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),d.document.close())}else d=window.open("data:"+b+(c?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==d&&mxUtils.popup(a,!0)};var b=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=
-function(a){if(this.isExportToCanvas()){this.exportDialog=null;var c=a(mxUtils.bind(this,function(a){var b=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",b);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)b.apply(this);else{this.exportDialog=document.createElement("div");var d=c.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");
-this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=d.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+
-this.chromelessToolbar.offsetHeight+4+"px";d=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=d.zIndex;var e=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});e.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){e.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height="auto";this.exportDialog.style.padding="10px";var c=this.createImageDataUri(a,
-null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",c);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(c.substring(c.indexOf(",")+1),"image/png",!0);b.apply(this,arguments)}))}),null,this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();
-this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",b);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}b.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,c,d,e){this.isLocalFileSave()?this.saveLocalFile(c,a,d,e,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,g){return this.createEchoRequest(c,a,d,e,b,g)}),c,e,d)};EditorUi.prototype.saveRequest=function(a,b,c,d,e,f,k){k=null!=k?k:!mxClient.IS_IOS||
-!navigator.standalone;var g=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,e){if("_blank"==e||null!=a&&0<a.length){var g=c("_blank"==e?null:a,e==App.MODE_DEVICE||null==e||"_blank"==e?"0":"1");null!=g&&(e==App.MODE_DEVICE||"_blank"==e?g.simulate(document,"_blank"):this.pickFolder(e,mxUtils.bind(this,function(c){f=null!=f?f:"pdf"==b?"application/pdf":"image/"+b;if(null!=d)try{this.exportFile(d,a,f,!0,e,c)}catch(w){this.handleError(w)}else this.spinner.spin(document.body,
-mxResources.get("saving"))&&g.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=g.getStatus()&&299>=g.getStatus())try{this.exportFile(g.getText(),a,f,!0,e,c)}catch(w){this.handleError(w)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,!1,k,null,null,4<g?3:4,d,f,e);this.showDialog(a.container,380,g==
-(mxClient.IS_IOS?0:1)?160:4<g?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,c,d,e,f){};EditorUi.prototype.pickFolder=function(a,b,c){b(null)};EditorUi.prototype.exportSvg=function(a,b,c,d,e,f,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var g=this.editor.graph.isSelectionEmpty();c=null!=c?c:g;g=b?null:this.editor.graph.background;g==mxConstants.NONE&&(g=null);null==g&&0==b&&(g=
-"#ffffff");var h=this.editor.graph.getSvg(g,a,k,l,null,c);d&&this.editor.graph.addSvgShadow(h);var n=this.getBaseFilename()+".svg",q=mxUtils.bind(this,function(a){this.spinner.stop();e&&a.setAttribute("content",this.getFileData(!0,null,null,null,c,m));if(null!=this.editor.fontCss){var b=a.ownerDocument,b=null!=b.createElementNS?b.createElementNS(mxConstants.NS_SVG,"style"):b.createElement("style");b.setAttribute("type","text/css");mxUtils.setTextContent(b,this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(b)}var d=
-'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||d.length<=MAX_REQUEST_SIZE?this.saveData(n,"svg",d,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(d)}))});this.convertMath(this.editor.graph,h,!1,mxUtils.bind(this,function(){f?(null==this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(h,q,this.thumbImageCache)):
-q(h)}))}};EditorUi.prototype.addCheckbox=function(a,b,c,d,e,f){f=null!=f?f:!0;var g=document.createElement("input");g.style.marginRight="8px";g.style.marginTop="16px";g.setAttribute("type","checkbox");c&&(g.setAttribute("checked","checked"),g.defaultChecked=!0);d&&g.setAttribute("disabled","disabled");f&&(a.appendChild(g),mxUtils.write(a,b),e||mxUtils.br(a));return g};EditorUi.prototype.addEditButton=function(a,b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft=
-"24px";var d=this.getCurrentFile(),e="";null!=d&&d.getMode()!=App.MODE_DEVICE&&d.getMode()!=App.MODE_BROWSER&&(e=window.location.href);var g=document.createElement("select");g.style.width="120px";g.style.marginLeft="8px";g.style.marginRight="10px";g.className="geBtn";d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("makeCopy"));g.appendChild(d);d=document.createElement("option");d.setAttribute("value","custom");mxUtils.write(d,mxResources.get("custom")+
-"...");g.appendChild(d);a.appendChild(g);mxEvent.addListener(g,"change",mxUtils.bind(this,function(){if("custom"==g.value){var a=new FilenameDialog(this,e,mxResources.get("ok"),function(a){null!=a?e=a:g.value="blank"},mxResources.get("url"),null,null,null,null,function(){g.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||b.checked)?g.removeAttribute("disabled"):g.setAttribute("disabled","disabled")}));
-mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===g.value?"_blank":e:null},getEditInput:function(){return c},getEditSelect:function(){return g}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){h.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=g&&g!=mxConstants.NONE?"border:1px solid black;background-color:"+g:"background-position:center center;background-repeat:no-repeat;background-image:url('"+Dialog.prototype.closeImage+"')")+';"></div>'}
-mxUtils.write(a,mxResources.get("links")+":");var d=document.createElement("select");d.style.width="100px";d.style.marginLeft="8px";d.style.marginRight="10px";d.className="geBtn";var e=document.createElement("option");e.setAttribute("value","auto");mxUtils.write(e,mxResources.get("automatic"));d.appendChild(e);e=document.createElement("option");e.setAttribute("value","blank");mxUtils.write(e,mxResources.get("openInNewWindow"));d.appendChild(e);e=document.createElement("option");e.setAttribute("value",
-"self");mxUtils.write(e,mxResources.get("openInThisWindow"));d.appendChild(e);b&&(e=document.createElement("option"),e.setAttribute("value","frame"),mxUtils.write(e,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),d.appendChild(e));a.appendChild(d);mxUtils.write(a,mxResources.get("borderColor")+":");var g="#0000ff",h=null,h=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(g||"none",function(a){g=a;c()});mxEvent.consume(a)}));c();h.style.padding=mxClient.IS_FF?
-"4px 2px 4px 2px":"4px";h.style.marginLeft="4px";h.style.height="22px";h.style.width="22px";h.style.position="relative";h.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";h.className="geColorBtn";a.appendChild(h);mxUtils.br(a);return{getColor:function(){return g},getTarget:function(){return d.value},focus:function(){d.focus()}}};EditorUi.prototype.createLink=function(a,b,c,d,e,f,k,l){var g=this.getCurrentFile(),h=[];d&&(h.push("lightbox=1"),"auto"!=a&&h.push("target="+a),null!=
-b&&b!=mxConstants.NONE&&h.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=e&&0<e.length&&h.push("edit="+encodeURIComponent(e)),f&&h.push("layers=1"),this.editor.graph.foldingEnabled&&h.push("nav=1"));if(c&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&h.push("page="+a);break}a=!0;null!=k?c="#U"+encodeURIComponent(k):(g=this.getCurrentFile(),l||null==g||g.constructor!=window.DriveFile?c="#R"+encodeURIComponent(c?this.getFileData(!0,
-null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(c="#"+g.getHash(),a=!1));a&&null!=g&&null!=g.getTitle()&&g.getTitle()!=this.defaultFilename&&h.push("title="+encodeURIComponent(g.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<h.length?"?"+h.join("&"):"")+c};EditorUi.prototype.createHtml=function(a,b,c,d,e,f,k,l,
-m,u,x){this.getBasenames();var g={};""!=e&&e!=mxConstants.NONE&&(g.highlight=e);"auto"!==d&&(g.target=d);m||(g.lightbox=!1);g.nav=this.editor.graph.foldingEnabled;c=parseInt(c);isNaN(c)||100==c||(g.zoom=c/100);c=[];k&&(c.push("pages"),g.resize=!0,null!=this.pages&&null!=this.currentPage&&(g.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(c.push("zoom"),g.resize=!0);l&&c.push("layers");0<c.length&&(m&&c.push("lightbox"),g.toolbar=c.join(" "));null!=u&&0<u.length&&(g.edit=u);null!=a?g.url=a:
-g.xml=this.getFileData(!0,null,null,null,null,!k);b='<div class="mxgraph" style="'+(f?"max-width:100%;":"")+(""!=c?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(g))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";x(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
+EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);b.setAttribute("title",mxResources.get("hide"));
+a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});EditorUi.initTheme=function(){"atlas"==uiTheme?(mxClient.link("stylesheet","styles/atlas.css"),"undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",
+Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"dark"==uiTheme&&(mxClient.link("stylesheet","styles/dark.css"),Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultThemeName="darkTheme",
+Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor="#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
+Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="))};EditorUi.initTheme();EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display=
+"none",this.refresh())};EditorUi.prototype.showFooter=function(a){var b=document.getElementById("geFooter");null!=b&&(this.footerHeight=a,b.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,c,d,e){a=new ImageDialog(this,a,b,c,d,e);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=
+!0;this.editor.graph.model.execute(a)});var b=new BackgroundImageDialog(this,mxUtils.bind(this,function(b){a(b)}));this.showDialog(b.container,360,200,!0,!0);b.init()};EditorUi.prototype.showLibraryDialog=function(a,b,c,d,e){a=new LibraryDialog(this,a,b,c,d,e);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");
+a.style.position="absolute";a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,c){var d=null!=this.spinner&&null!=
+this.spinner.pause?this.spinner.pause():function(){},e=null!=a&&null!=a.error?a.error:a;if(null!=e||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var g=mxResources.get("ok"),h=null;b=null!=b?b:mxResources.get("error");if(null!=e)if(null!=e.retry&&(g=mxResources.get("cancel"),h=function(){d();e.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&e.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));
+else if(404==e.code||404==e.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&e.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var f=window.location.hash;null!=f&&"#G"==f.substring(0,2)&&(f=f.substring(2),a+=' <a href="https://drive.google.com/open?id='+f+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else e.code==App.ERROR_TIMEOUT?a=
+mxUtils.htmlEntities(mxResources.get("timeout")):e.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=e.message?a=mxUtils.htmlEntities(e.message):null!=e.response&&null!=e.response.error&&(a=mxUtils.htmlEntities(e.response.error));this.showError(b,a,g,c,h)}else null!=c&&c()};EditorUi.prototype.showError=function(a,b,c,d,e,f,k){a=new ErrorDialog(this,a,b,c,d,e,f,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,
+null,a,mxResources.get("ok"),b);this.showDialog(c.container,340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,c,d,e){var g=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){g();null!=b&&b()},function(){g();null!=c&&c()},d,e)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=
+function(){return mxClient.IS_CHROMEAPP||!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,c){var d=a.toDataURL("image/"+c);if(6>=d.length||d==a.cloneNode(!1).toDataURL("image/"+c))throw{message:"Invalid image"};null!=b&&(d=this.writeGraphModelToPng(d,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return d};
+EditorUi.prototype.saveCanvas=function(a,b,c){var d="jpeg"==c?"jpg":c,e=this.getBaseFilename()+"."+d;a=this.createImageDataUri(a,b,c);this.saveData(e,d,a.substring(a.lastIndexOf(",")+1),"image/"+c,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};
+EditorUi.prototype.doSaveLocalFile=function(a,b,c,d,e){if(window.Blob&&navigator.msSaveOrOpenBlob)a=d?this.base64ToBlob(a,c):new Blob([a],{type:c}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)c=window.open("about:blank","_blank"),null==c?mxUtils.popup(a,!0):(c.document.write(a),c.document.close(),c.document.execCommand("SaveAs",!0,b),c.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height=
+"380px",this.showDialog(b.container,620,460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var g=document.createElement("a"),h=!mxClient.IS_SF&&"undefined"!==typeof g.download;if(h||this.isOffline()){g.href=URL.createObjectURL(d?this.base64ToBlob(a,c):new Blob([a],{type:c}));h?g.download=b:g.setAttribute("target","_blank");document.body.appendChild(g);try{window.setTimeout(function(){URL.revokeObjectURL(g.href)},0),g.click(),g.parentNode.removeChild(g)}catch(A){}}else this.createEchoRequest(a,
+b,c,d,e).simulate(document,"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,c,d,e,f){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=c?"&mime="+c:"")+(null!=e?"&format="+e:"")+(null!=f?"&base64="+f:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(d?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),d=c.length,e=Math.ceil(d/1024),g=Array(e),h=0;h<e;++h){for(var f=1024*h,k=Math.min(f+1024,d),u=Array(k-f),l=0;f<k;++l,++f)u[l]=
+c[f].charCodeAt(0);g[h]=new Uint8Array(u)}return new Blob(g,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,c,d,e,f,k){f=null!=f?f:!1;k=null!=k?k:"vsdx"!=e&&(!mxClient.IS_IOS||!navigator.standalone);e=this.getServiceCount(f);b=new CreateDialog(this,b,mxUtils.bind(this,function(b,e){try{if("_blank"==e)if(null==c||"image/"!=c.substring(0,6)||"image/svg"==c.substring(0,9)&&!mxClient.IS_SVG){var g=window.open("about:blank");null==g?mxUtils.popup(a,!0):(g.document.write(mxUtils.htmlEntities(a,
+!1)),g.document.close())}else this.openInNewWindow(a,c,d);else e==App.MODE_DEVICE?this.doSaveLocalFile(a,b,c,d):null!=b&&0<b.length&&this.pickFolder(e,mxUtils.bind(this,function(g){try{this.exportFile(a,b,c,d,e,g)}catch(B){this.handleError(B)}}))}catch(x){this.handleError(x)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,f,k,null,null,4<e?3:4,a,c,d);this.showDialog(b.container,380,e==(mxClient.IS_IOS?0:1)?160:4<e?390:270,!0,!0);b.init()};
+EditorUi.prototype.openInNewWindow=function(a,b,c){if(mxClient.IS_GC||mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var d=window.open("about:blank");null==d?mxUtils.popup(a,!0):("image/svg+xml"==b?d.document.write("<html>"+a+"</html>"):d.document.write('<html><img src="data:'+b+(c?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),d.document.close())}else d=window.open("data:"+b+(c?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==d&&mxUtils.popup(a,
+!0)};var b=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=function(a){if(this.isExportToCanvas()){this.exportDialog=null;var c=a(mxUtils.bind(this,function(a){var b=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",b);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)b.apply(this);else{this.exportDialog=document.createElement("div");
+var d=c.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=
+d.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+this.chromelessToolbar.offsetHeight+4+"px";d=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=d.zIndex;var e=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});e.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){e.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height=
+"auto";this.exportDialog.style.padding="10px";var c=this.createImageDataUri(a,null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",c);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(c.substring(c.indexOf(",")+1),"image/png",!0);b.apply(this,arguments)}))}),null,
+this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",b);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}b.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,c,d,e){this.isLocalFileSave()?this.saveLocalFile(c,a,d,e,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,g){return this.createEchoRequest(c,a,d,e,b,g)}),c,
+e,d)};EditorUi.prototype.saveRequest=function(a,b,c,d,e,f,k){k=null!=k?k:!mxClient.IS_IOS||!navigator.standalone;var g=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,e){if("_blank"==e||null!=a&&0<a.length){var g=c("_blank"==e?null:a,e==App.MODE_DEVICE||null==e||"_blank"==e?"0":"1");null!=g&&(e==App.MODE_DEVICE||"_blank"==e?g.simulate(document,"_blank"):this.pickFolder(e,mxUtils.bind(this,function(c){f=null!=f?f:"pdf"==b?"application/pdf":"image/"+b;if(null!=d)try{this.exportFile(d,
+a,f,!0,e,c)}catch(w){this.handleError(w)}else this.spinner.spin(document.body,mxResources.get("saving"))&&g.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=g.getStatus()&&299>=g.getStatus())try{this.exportFile(g.getText(),a,f,!0,e,c)}catch(w){this.handleError(w)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),
+!1,!1,k,null,null,4<g?3:4,d,f,e);this.showDialog(a.container,380,g==(mxClient.IS_IOS?0:1)?160:4<g?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,c,d,e,f){};EditorUi.prototype.pickFolder=function(a,b,c){b(null)};EditorUi.prototype.exportSvg=function(a,b,c,d,e,f,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var g=this.editor.graph.isSelectionEmpty();c=null!=c?c:g;g=b?null:this.editor.graph.background;
+g==mxConstants.NONE&&(g=null);null==g&&0==b&&(g="#ffffff");var h=this.editor.graph.getSvg(g,a,k,l,null,c);d&&this.editor.graph.addSvgShadow(h);var n=this.getBaseFilename()+".svg",q=mxUtils.bind(this,function(a){this.spinner.stop();e&&a.setAttribute("content",this.getFileData(!0,null,null,null,c,m));if(null!=this.editor.fontCss){var b=a.ownerDocument,b=null!=b.createElementNS?b.createElementNS(mxConstants.NS_SVG,"style"):b.createElement("style");b.setAttribute("type","text/css");mxUtils.setTextContent(b,
+this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(b)}var d='<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||d.length<=MAX_REQUEST_SIZE?this.saveData(n,"svg",d,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(d)}))});this.convertMath(this.editor.graph,h,!1,mxUtils.bind(this,function(){f?(null==
+this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(h,q,this.thumbImageCache)):q(h)}))}};EditorUi.prototype.addCheckbox=function(a,b,c,d,e,f){f=null!=f?f:!0;var g=document.createElement("input");g.style.marginRight="8px";g.style.marginTop="16px";g.setAttribute("type","checkbox");c&&(g.setAttribute("checked","checked"),g.defaultChecked=!0);d&&g.setAttribute("disabled","disabled");f&&(a.appendChild(g),mxUtils.write(a,b),e||mxUtils.br(a));return g};EditorUi.prototype.addEditButton=function(a,
+b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft="24px";var d=this.getCurrentFile(),e="";null!=d&&d.getMode()!=App.MODE_DEVICE&&d.getMode()!=App.MODE_BROWSER&&(e=window.location.href);var g=document.createElement("select");g.style.width="120px";g.style.marginLeft="8px";g.style.marginRight="10px";g.className="geBtn";d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("makeCopy"));g.appendChild(d);d=document.createElement("option");
+d.setAttribute("value","custom");mxUtils.write(d,mxResources.get("custom")+"...");g.appendChild(d);a.appendChild(g);mxEvent.addListener(g,"change",mxUtils.bind(this,function(){if("custom"==g.value){var a=new FilenameDialog(this,e,mxResources.get("ok"),function(a){null!=a?e=a:g.value="blank"},mxResources.get("url"),null,null,null,null,function(){g.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||
+b.checked)?g.removeAttribute("disabled"):g.setAttribute("disabled","disabled")}));mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===g.value?"_blank":e:null},getEditInput:function(){return c},getEditSelect:function(){return g}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){h.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=g&&g!=mxConstants.NONE?"border:1px solid black;background-color:"+g:"background-position:center center;background-repeat:no-repeat;background-image:url('"+
+Dialog.prototype.closeImage+"')")+';"></div>'}mxUtils.write(a,mxResources.get("links")+":");var d=document.createElement("select");d.style.width="100px";d.style.marginLeft="8px";d.style.marginRight="10px";d.className="geBtn";var e=document.createElement("option");e.setAttribute("value","auto");mxUtils.write(e,mxResources.get("automatic"));d.appendChild(e);e=document.createElement("option");e.setAttribute("value","blank");mxUtils.write(e,mxResources.get("openInNewWindow"));d.appendChild(e);e=document.createElement("option");
+e.setAttribute("value","self");mxUtils.write(e,mxResources.get("openInThisWindow"));d.appendChild(e);b&&(e=document.createElement("option"),e.setAttribute("value","frame"),mxUtils.write(e,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),d.appendChild(e));a.appendChild(d);mxUtils.write(a,mxResources.get("borderColor")+":");var g="#0000ff",h=null,h=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(g||"none",function(a){g=a;c()});mxEvent.consume(a)}));c();h.style.padding=
+mxClient.IS_FF?"4px 2px 4px 2px":"4px";h.style.marginLeft="4px";h.style.height="22px";h.style.width="22px";h.style.position="relative";h.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";h.className="geColorBtn";a.appendChild(h);mxUtils.br(a);return{getColor:function(){return g},getTarget:function(){return d.value},focus:function(){d.focus()}}};EditorUi.prototype.createLink=function(a,b,c,d,e,f,k,l){var g=this.getCurrentFile(),h=[];d&&(h.push("lightbox=1"),"auto"!=a&&h.push("target="+
+a),null!=b&&b!=mxConstants.NONE&&h.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=e&&0<e.length&&h.push("edit="+encodeURIComponent(e)),f&&h.push("layers=1"),this.editor.graph.foldingEnabled&&h.push("nav=1"));if(c&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&h.push("page="+a);break}a=!0;null!=k?c="#U"+encodeURIComponent(k):(g=this.getCurrentFile(),l||null==g||g.constructor!=window.DriveFile?c="#R"+encodeURIComponent(c?
+this.getFileData(!0,null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(c="#"+g.getHash(),a=!1));a&&null!=g&&null!=g.getTitle()&&g.getTitle()!=this.defaultFilename&&h.push("title="+encodeURIComponent(g.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<h.length?"?"+h.join("&"):"")+c};EditorUi.prototype.createHtml=function(a,
+b,c,d,e,f,k,l,m,u,x){this.getBasenames();var g={};""!=e&&e!=mxConstants.NONE&&(g.highlight=e);"auto"!==d&&(g.target=d);m||(g.lightbox=!1);g.nav=this.editor.graph.foldingEnabled;c=parseInt(c);isNaN(c)||100==c||(g.zoom=c/100);c=[];k&&(c.push("pages"),g.resize=!0,null!=this.pages&&null!=this.currentPage&&(g.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(c.push("zoom"),g.resize=!0);l&&c.push("layers");0<c.length&&(m&&c.push("lightbox"),g.toolbar=c.join(" "));null!=u&&0<u.length&&(g.edit=u);null!=
+a?g.url=a:g.xml=this.getFileData(!0,null,null,null,null,!k);b='<div class="mxgraph" style="'+(f?"max-width:100%;":"")+(""!=c?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(g))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";x(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
 '">\x3c/script>')};EditorUi.prototype.showHtmlDialog=function(a,b,c,d){var e=document.createElement("div");e.style.whiteSpace="nowrap";var g=document.createElement("h3");mxUtils.write(g,mxResources.get("html"));g.style.cssText="width:100%;text-align:center;margin-top:0px;margin-bottom:12px";e.appendChild(g);var h=document.createElement("div");h.style.cssText="border-bottom:1px solid lightGray;padding-bottom:8px;margin-bottom:12px;";var f=document.createElement("input");f.style.cssText="margin-right:8px;margin-top:8px;margin-bottom:8px;";
 f.setAttribute("value","url");f.setAttribute("type","radio");f.setAttribute("name","type-embedhtmldialog");g=f.cloneNode(!0);g.setAttribute("value","copy");h.appendChild(g);var n=document.createElement("span");mxUtils.write(n,mxResources.get("includeCopyOfMyDiagram"));h.appendChild(n);mxUtils.br(h);h.appendChild(f);n=document.createElement("span");mxUtils.write(n,mxResources.get("publicDiagramUrl"));h.appendChild(n);var k=this.getCurrentFile();null==c&&null!=k&&k.constructor==window.DriveFile&&(n=
 document.createElement("a"),n.style.paddingLeft="12px",n.style.color="gray",n.setAttribute("href","javascript:void(0);"),mxUtils.write(n,mxResources.get("share")),h.appendChild(n),mxEvent.addListener(n,"click",mxUtils.bind(this,function(){this.hideDialog();this.drive.showPermissions(k.getId())})));g.setAttribute("checked","checked");null==c&&f.setAttribute("disabled","disabled");e.appendChild(h);var l=this.addLinkSection(e),m=this.addCheckbox(e,mxResources.get("zoom"),!0,null,!0);mxUtils.write(e,
@@ -7138,15 +7138,15 @@ App.getStoredMode=function(){var a=null;null==a&&isLocalStorage&&(a=localStorage
 2)?(mxscript(App.DROPBOX_URL),mxscript(App.DROPINS_URL,null,"dropboxjs",App.DROPBOX_APPKEY)):"0"==urlParams.chrome&&(window.DropboxClient=null):window.DropboxClient=null),"function"===typeof window.OneDriveClient&&("0"!=urlParams.od&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?App.mode==App.MODE_ONEDRIVE||null!=window.location.hash&&"#W"==window.location.hash.substring(0,2)?mxscript(App.ONEDRIVE_URL):"0"==urlParams.chrome&&(window.OneDriveClient=null):window.OneDriveClient=
 null),"function"===typeof window.TrelloClient&&("0"!=urlParams.tr&&isSvgBrowser&&(null==document.documentMode||10<=document.documentMode)?App.mode==App.MODE_TRELLO||null!=window.location.hash&&"#T"==window.location.hash.substring(0,2)?(mxscript(App.TRELLO_JQUERY_URL),mxscript(App.TRELLO_URL)):"0"==urlParams.chrome&&(window.TrelloClient=null):window.TrelloClient=null)),"undefined"==typeof JSON&&mxscript("js/json/json2.min.js")))})();
 App.main=function(a,b){var d=null;EditorUi.enableLogging&&(window.onerror=function(a,b,c,e,f){try{if(a!=d&&(null==a||null==b||-1==a.indexOf("Script error")&&-1==a.indexOf("extension"))&&null!=a&&0>a.indexOf("DocumentClosedError")){d=a;var g=new Image,k=0<=a.indexOf("NetworkError")||0<=a.indexOf("SecurityError")||0<=a.indexOf("NS_ERROR_FAILURE")||0<=a.indexOf("out of memory")?"CONFIG":"SEVERE";g.src=(null!=window.DRAWIO_LOG_URL?window.DRAWIO_LOG_URL:"")+"/log?severity="+k+"&v="+encodeURIComponent(EditorUi.VERSION)+
-"&msg=clientError:"+encodeURIComponent(a)+":url:"+encodeURIComponent(window.location.href)+":lnum:"+encodeURIComponent(c)+(null!=e?":colno:"+encodeURIComponent(e):"")+(null!=f&&null!=f.stack?"&stack="+encodeURIComponent(f.stack):"")}}catch(v){}});"atlas"==uiTheme?mxClient.link("stylesheet","styles/atlas.css"):"dark"==uiTheme&&mxClient.link("stylesheet","styles/dark.css");if(null!=window.mxscript){if("1"==urlParams.offline){mxscript("js/shapes.min.js");var c=document.createElement("iframe");c.setAttribute("width",
-"0");c.setAttribute("height","0");c.setAttribute("src","offline.html");document.body.appendChild(c)}if("0"!=urlParams.plugins&&"1"!=urlParams.offline){var c=mxSettings.getPlugins(),e=urlParams.p;App.initPluginCallback();if(null!=e){var f="";"1"==urlParams.drawdev&&(f=document.location.protocol+"//drawhost.jgraph.com/");for(var k=e.split(";"),e=0;e<k.length;e++){var l=App.pluginRegistry[k[e]];null!=l?mxscript(f+l):null!=window.console&&console.log("Unknown plugin:",k[e])}}else"0"==urlParams.chrome||
-EditorUi.isElectronApp||mxscript(App.FOOTER_PLUGIN_URL);if(null!=c&&0<c.length&&"0"!=urlParams.plugins){f=window.location.protocol+"//"+window.location.host;k=!0;for(e=0;e<c.length&&k;e++)"/"!=c[e].charAt(0)&&c[e].substring(0,f.length)!=f&&(k=!1);if(k||mxUtils.confirm(mxResources.replacePlaceholders("The page has requested to load the following plugin(s):\n \n {1}\n \n Would you like to load these plugin(s) now?\n \n NOTE : Only allow plugins to run if you fully understand the security implications of doing so.\n",
-[c.join("\n")]).replace(/\\n/g,"\n")))for(e=0;e<c.length;e++)try{mxscript(c[e])}catch(m){}}}"function"===typeof window.DriveClient&&"undefined"===typeof gapi&&("1"!=urlParams.embed&&"0"!=urlParams.gapi||"1"==urlParams.embed&&"1"==urlParams.gapi)&&isSvgBrowser&&isLocalStorage&&(null==document.documentMode||10<=document.documentMode)?mxscript("https://apis.google.com/js/api.js?onload=DrawGapiClientCallback"):"undefined"===typeof window.gapi&&(window.DriveClient=null)}"0"!=urlParams.math&&Editor.initMath();
-mxResources.loadDefaultBundle=!1;c=mxResources.getDefaultBundle(RESOURCE_BASE,mxLanguage)||mxResources.getSpecialBundle(RESOURCE_BASE,mxLanguage);mxUtils.getAll("1"!=urlParams.dev?[c]:[c,"dark"==uiTheme?STYLE_PATH+"/dark-default.xml":STYLE_PATH+"/default.xml"],function(c){mxResources.parse(c[0].getText());1<c.length&&(Graph.prototype.defaultThemes[Graph.prototype.defaultThemeName]=c[1].getDocumentElement());c=null!=b?b():new App(new Editor("0"==urlParams.chrome));if(null!=window.mxscript){if("function"===
-typeof window.DropboxClient&&null==window.Dropbox&&null!=window.DrawDropboxClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.db||"1"==urlParams.embed&&"1"==urlParams.db)&&isSvgBrowser&&(null==document.documentMode||9<document.documentMode))mxscript(App.DROPBOX_URL,function(){mxscript(App.DROPINS_URL,function(){DrawDropboxClientCallback()},"dropboxjs",App.DROPBOX_APPKEY)});else if("undefined"===typeof window.Dropbox||"undefined"===typeof window.Dropbox.choose)window.DropboxClient=null;"function"===
-typeof window.OneDriveClient&&"undefined"===typeof OneDrive&&null!=window.DrawOneDriveClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.od||"1"==urlParams.embed&&"1"==urlParams.od)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?mxscript(App.ONEDRIVE_URL,window.DrawOneDriveClientCallback):"undefined"===typeof window.OneDrive&&(window.OneDriveClient=null);"function"===typeof window.TrelloClient&&"undefined"===typeof window.Trello&&null!=window.DrawTrelloClientCallback&&("1"!=
-urlParams.embed&&"0"!=urlParams.tr||"1"==urlParams.embed&&"1"==urlParams.tr)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?mxscript(App.TRELLO_JQUERY_URL,function(){mxscript(App.TRELLO_URL,function(){DrawTrelloClientCallback()})}):"undefined"===typeof window.Trello&&(window.TrelloClient=null)}null!=a&&a(c);"0"!=urlParams.chrome&&"1"==urlParams.test&&(mxLog.show(),mxLog.debug("Started in "+((new Date).getTime()-t0.getTime())+"ms"),mxLog.debug("Export:",EXPORT_URL),mxLog.debug("Development mode:",
-"1"==urlParams.dev?"active":"inactive"),mxLog.debug("Test mode:","1"==urlParams.test?"active":"inactive"))},function(){document.getElementById("geStatus").innerHTML='Error loading page. <a href="javascript:void(0);" onclick="location.reload();">Please try refreshing.</a>'})};mxUtils.extend(App,EditorUi);App.prototype.defaultUserPicture="https://lh3.googleusercontent.com/-HIzvXUy6QUY/AAAAAAAAAAI/AAAAAAAAAAA/giuR7PQyjEk/photo.jpg?sz=30";App.prototype.shareImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowOTgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMjU2NzdEMTcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMjU2NzdEMDcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNjgwMTE3NDA3MjA2ODExODcxRkM4MUY1OTFDMjQ5OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrM/fs0AAADgSURBVHjaYmDAA/7//88MwgzkAKDGFiD+BsQ/QWxSNaf9RwN37twpI8WAS+gGfP78+RpQSoRYA36iG/D379+vQClNdLVMOMz4gi7w79+/n0CKg1gD9qELvH379hzIHGK9oA508ieY8//8+fO5rq4uFCilRKwL1JmYmNhhHEZGRiZ+fn6Q2meEbDYG4u3/cYCfP38uA7kOm0ZOIJ7zn0jw48ePPiDFhmzArv8kgi9fvuwB+w5qwH9ykjswbFSZyM4sEMDPBDTlL5BxkFSd7969OwZ2BZKYGhDzkmjOJ4AAAwBhpRqGnEFb8QAAAABJRU5ErkJggg==";
+"&msg=clientError:"+encodeURIComponent(a)+":url:"+encodeURIComponent(window.location.href)+":lnum:"+encodeURIComponent(c)+(null!=e?":colno:"+encodeURIComponent(e):"")+(null!=f&&null!=f.stack?"&stack="+encodeURIComponent(f.stack):"")}}catch(v){}});if(null!=window.mxscript){if("1"==urlParams.offline){mxscript("js/shapes.min.js");var c=document.createElement("iframe");c.setAttribute("width","0");c.setAttribute("height","0");c.setAttribute("src","offline.html");document.body.appendChild(c)}if("0"!=urlParams.plugins&&
+"1"!=urlParams.offline){var c=mxSettings.getPlugins(),e=urlParams.p;App.initPluginCallback();if(null!=e){var f="";"1"==urlParams.drawdev&&(f=document.location.protocol+"//drawhost.jgraph.com/");for(var k=e.split(";"),e=0;e<k.length;e++){var l=App.pluginRegistry[k[e]];null!=l?mxscript(f+l):null!=window.console&&console.log("Unknown plugin:",k[e])}}else"0"==urlParams.chrome||EditorUi.isElectronApp||mxscript(App.FOOTER_PLUGIN_URL);if(null!=c&&0<c.length&&"0"!=urlParams.plugins){f=window.location.protocol+
+"//"+window.location.host;k=!0;for(e=0;e<c.length&&k;e++)"/"!=c[e].charAt(0)&&c[e].substring(0,f.length)!=f&&(k=!1);if(k||mxUtils.confirm(mxResources.replacePlaceholders("The page has requested to load the following plugin(s):\n \n {1}\n \n Would you like to load these plugin(s) now?\n \n NOTE : Only allow plugins to run if you fully understand the security implications of doing so.\n",[c.join("\n")]).replace(/\\n/g,"\n")))for(e=0;e<c.length;e++)try{mxscript(c[e])}catch(m){}}}"function"===typeof window.DriveClient&&
+"undefined"===typeof gapi&&("1"!=urlParams.embed&&"0"!=urlParams.gapi||"1"==urlParams.embed&&"1"==urlParams.gapi)&&isSvgBrowser&&isLocalStorage&&(null==document.documentMode||10<=document.documentMode)?mxscript("https://apis.google.com/js/api.js?onload=DrawGapiClientCallback"):"undefined"===typeof window.gapi&&(window.DriveClient=null)}"0"!=urlParams.math&&Editor.initMath();mxResources.loadDefaultBundle=!1;c=mxResources.getDefaultBundle(RESOURCE_BASE,mxLanguage)||mxResources.getSpecialBundle(RESOURCE_BASE,
+mxLanguage);mxUtils.getAll("1"!=urlParams.dev?[c]:[c,"dark"==uiTheme?STYLE_PATH+"/dark-default.xml":STYLE_PATH+"/default.xml"],function(c){mxResources.parse(c[0].getText());1<c.length&&(Graph.prototype.defaultThemes[Graph.prototype.defaultThemeName]=c[1].getDocumentElement());c=null!=b?b():new App(new Editor("0"==urlParams.chrome));if(null!=window.mxscript){if("function"===typeof window.DropboxClient&&null==window.Dropbox&&null!=window.DrawDropboxClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.db||
+"1"==urlParams.embed&&"1"==urlParams.db)&&isSvgBrowser&&(null==document.documentMode||9<document.documentMode))mxscript(App.DROPBOX_URL,function(){mxscript(App.DROPINS_URL,function(){DrawDropboxClientCallback()},"dropboxjs",App.DROPBOX_APPKEY)});else if("undefined"===typeof window.Dropbox||"undefined"===typeof window.Dropbox.choose)window.DropboxClient=null;"function"===typeof window.OneDriveClient&&"undefined"===typeof OneDrive&&null!=window.DrawOneDriveClientCallback&&("1"!=urlParams.embed&&"0"!=
+urlParams.od||"1"==urlParams.embed&&"1"==urlParams.od)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?mxscript(App.ONEDRIVE_URL,window.DrawOneDriveClientCallback):"undefined"===typeof window.OneDrive&&(window.OneDriveClient=null);"function"===typeof window.TrelloClient&&"undefined"===typeof window.Trello&&null!=window.DrawTrelloClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.tr||"1"==urlParams.embed&&"1"==urlParams.tr)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?
+mxscript(App.TRELLO_JQUERY_URL,function(){mxscript(App.TRELLO_URL,function(){DrawTrelloClientCallback()})}):"undefined"===typeof window.Trello&&(window.TrelloClient=null)}null!=a&&a(c);"0"!=urlParams.chrome&&"1"==urlParams.test&&(mxLog.show(),mxLog.debug("Started in "+((new Date).getTime()-t0.getTime())+"ms"),mxLog.debug("Export:",EXPORT_URL),mxLog.debug("Development mode:","1"==urlParams.dev?"active":"inactive"),mxLog.debug("Test mode:","1"==urlParams.test?"active":"inactive"))},function(){document.getElementById("geStatus").innerHTML=
+'Error loading page. <a href="javascript:void(0);" onclick="location.reload();">Please try refreshing.</a>'})};mxUtils.extend(App,EditorUi);App.prototype.defaultUserPicture="https://lh3.googleusercontent.com/-HIzvXUy6QUY/AAAAAAAAAAI/AAAAAAAAAAA/giuR7PQyjEk/photo.jpg?sz=30";App.prototype.shareImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowOTgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMjU2NzdEMTcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMjU2NzdEMDcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNjgwMTE3NDA3MjA2ODExODcxRkM4MUY1OTFDMjQ5OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrM/fs0AAADgSURBVHjaYmDAA/7//88MwgzkAKDGFiD+BsQ/QWxSNaf9RwN37twpI8WAS+gGfP78+RpQSoRYA36iG/D379+vQClNdLVMOMz4gi7w79+/n0CKg1gD9qELvH379hzIHGK9oA508ieY8//8+fO5rq4uFCilRKwL1JmYmNhhHEZGRiZ+fn6Q2meEbDYG4u3/cYCfP38uA7kOm0ZOIJ7zn0jw48ePPiDFhmzArv8kgi9fvuwB+w5qwH9ykjswbFSZyM4sEMDPBDTlL5BxkFSd7969OwZ2BZKYGhDzkmjOJ4AAAwBhpRqGnEFb8QAAAABJRU5ErkJggg==";
 App.prototype.chevronUpImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDg2NEE3NUY1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDg2NEE3NjA1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ODY0QTc1RDUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0ODY0QTc1RTUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg+qUokAAAAMUExURQAAANnZ2b+/v////5bgre4AAAAEdFJOU////wBAKqn0AAAAL0lEQVR42mJgRgMMRAswMKAKMDDARBjg8lARBoR6KImkH0wTbygT6YaS4DmAAAMAYPkClOEDDD0AAAAASUVORK5CYII=":
 IMAGE_PATH+"/chevron-up.png";
 App.prototype.chevronDownImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDg2NEE3NUI1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDg2NEE3NUM1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ODY0QTc1OTUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0ODY0QTc1QTUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsCtve8AAAAMUExURQAAANnZ2b+/v////5bgre4AAAAEdFJOU////wBAKqn0AAAALUlEQVR42mJgRgMMRAkwQEXBNAOcBSPhclB1cNVwfcxI+vEZykSpoSR6DiDAAF23ApT99bZ+AAAAAElFTkSuQmCC":IMAGE_PATH+
diff --git a/war/js/atlas-viewer.min.js b/src/main/webapp/js/atlas-viewer.min.js
similarity index 98%
rename from war/js/atlas-viewer.min.js
rename to src/main/webapp/js/atlas-viewer.min.js
index 0dd811f3408bf20d62511203606188c682ba7b0c..c85decf3eea37ae0713a7138f79ef1f093c5573b 100644
--- a/war/js/atlas-viewer.min.js
+++ b/src/main/webapp/js/atlas-viewer.min.js
@@ -2738,47 +2738,47 @@ g.documentElement.getElementsByTagName("diagram"),g=0;g<n.length;g++){var h=mxUt
 !this.isOffline()&&(new XMLHttpRequest).upload&&this.isRemoteFileFormat(c,r)&&null!=l?this.parseFile(l,mxUtils.bind(this,function(a){4==a.readyState&&(this.spinner.stop(),200<=a.status&&299>=a.status?v(a.responseText,"text/xml"):this.handleError({message:mxResources.get(413==a.status?"drawingTooLarge":"invalidOrMissingFile")},mxResources.get("errorLoadingFile")))})):v(c,d)}}));a.stopPropagation();a.preventDefault()})),mxEvent.addListener(k,"dragleave",function(a){null!=f?f.style.border="3px dotted lightGray":
 (k.style.border="3px solid transparent",k.style.cursor="");a.stopPropagation();a.preventDefault()}));m=m.cloneNode(!1);m.setAttribute("src",IMAGE_PATH+"/edit.gif");m.setAttribute("title",mxResources.get("edit"));u.insertBefore(m,u.firstChild);mxEvent.addListener(m,"click",E);mxEvent.addListener(k,"dblclick",function(a){mxEvent.getSource(a)==k&&E(a)});d=m.cloneNode(!1);d.setAttribute("src",Editor.plusImage);d.setAttribute("title",mxResources.get("add"));u.insertBefore(d,u.firstChild);mxEvent.addListener(d,
 "click",G);this.isOffline()||".scratchpad"!=a.title||null==EditorUi.scratchpadHelpLink||(d=document.createElement("span"),d.setAttribute("title",mxResources.get("help")),d.style.cssText="color:gray;text-decoration:none;",d.className="geButton",mxUtils.write(d,"?"),mxEvent.addGestureListeners(d,mxUtils.bind(this,function(a){this.openLink(EditorUi.scratchpadHelpLink);mxEvent.consume(a)})),u.insertBefore(d,u.firstChild))}l.appendChild(u);l.style.paddingRight=18*u.childNodes.length+"px"}};"1"==urlParams.offline||
-EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("atlas"==uiTheme?("undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=
-46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);
-b.setAttribute("title",mxResources.get("hide"));a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});"dark"==uiTheme&&(Graph.prototype.defaultThemeName="darkTheme",Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor=
-"#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
-Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="));EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display="none",this.refresh())};
-EditorUi.prototype.showFooter=function(a){var c=document.getElementById("geFooter");null!=c&&(this.footerHeight=a,c.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,d,e,p){a=new ImageDialog(this,a,b,d,e,p);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=!0;this.editor.graph.model.execute(a)});
-var c=new BackgroundImageDialog(this,mxUtils.bind(this,function(c){a(c)}));this.showDialog(c.container,360,200,!0,!0);c.init()};EditorUi.prototype.showLibraryDialog=function(a,b,d,e,p){a=new LibraryDialog(this,a,b,d,e,p);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");a.style.position="absolute";
-a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,d){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():
-function(){},f=null!=a&&null!=a.error?a.error:a;if(null!=f||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var e=mxResources.get("ok"),g=null;b=null!=b?b:mxResources.get("error");if(null!=f)if(null!=f.retry&&(e=mxResources.get("cancel"),g=function(){c();f.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));else if(404==f.code||
-404==f.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var k=window.location.hash;null!=k&&"#G"==k.substring(0,2)&&(k=k.substring(2),a+=' <a href="https://drive.google.com/open?id='+k+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else f.code==App.ERROR_TIMEOUT?a=mxUtils.htmlEntities(mxResources.get("timeout")):
-f.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=f.message?a=mxUtils.htmlEntities(f.message):null!=f.response&&null!=f.response.error&&(a=mxUtils.htmlEntities(f.response.error));this.showError(b,a,e,d,g)}else null!=d&&d()};EditorUi.prototype.showError=function(a,b,d,e,p,h,k){a=new ErrorDialog(this,a,b,d,e,p,h,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,null,a,mxResources.get("ok"),b);this.showDialog(c.container,
-340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,d,e,p){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){c();null!=b&&b()},function(){c();null!=d&&d()},e,p)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=function(){return mxClient.IS_CHROMEAPP||
-!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,d){var c=a.toDataURL("image/"+d);if(6>=c.length||c==a.cloneNode(!1).toDataURL("image/"+d))throw{message:"Invalid image"};null!=b&&(c=this.writeGraphModelToPng(c,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return c};EditorUi.prototype.saveCanvas=function(a,
-b,d){var c="jpeg"==d?"jpg":d,f=this.getBaseFilename()+"."+c;a=this.createImageDataUri(a,b,d);this.saveData(f,c,a.substring(a.lastIndexOf(",")+1),"image/"+d,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};EditorUi.prototype.doSaveLocalFile=function(a,
-b,d,e,p){if(window.Blob&&navigator.msSaveOrOpenBlob)a=e?this.base64ToBlob(a,d):new Blob([a],{type:d}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)d=window.open("about:blank","_blank"),null==d?mxUtils.popup(a,!0):(d.document.write(a),d.document.close(),d.document.execCommand("SaveAs",!0,b),d.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height="380px",this.showDialog(b.container,620,
-460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var c=document.createElement("a"),f=!mxClient.IS_SF&&"undefined"!==typeof c.download;if(f||this.isOffline()){c.href=URL.createObjectURL(e?this.base64ToBlob(a,d):new Blob([a],{type:d}));f?c.download=b:c.setAttribute("target","_blank");document.body.appendChild(c);try{window.setTimeout(function(){URL.revokeObjectURL(c.href)},0),c.click(),c.parentNode.removeChild(c)}catch(v){}}else this.createEchoRequest(a,b,d,e,p).simulate(document,
-"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,d,e,p,h){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=d?"&mime="+d:"")+(null!=p?"&format="+p:"")+(null!=h?"&base64="+h:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(e?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),d=c.length,f=Math.ceil(d/1024),e=Array(f),k=0;k<f;++k){for(var l=1024*k,m=Math.min(l+1024,d),u=Array(m-l),q=0;l<m;++q,++l)u[q]=c[l].charCodeAt(0);e[k]=
-new Uint8Array(u)}return new Blob(e,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,d,e,p,h,k){h=null!=h?h:!1;k=null!=k?k:"vsdx"!=p&&(!mxClient.IS_IOS||!navigator.standalone);p=this.getServiceCount(h);b=new CreateDialog(this,b,mxUtils.bind(this,function(c,b){try{if("_blank"==b)if(null==d||"image/"!=d.substring(0,6)||"image/svg"==d.substring(0,9)&&!mxClient.IS_SVG){var f=window.open("about:blank");null==f?mxUtils.popup(a,!0):(f.document.write(mxUtils.htmlEntities(a,!1)),f.document.close())}else this.openInNewWindow(a,
-d,e);else b==App.MODE_DEVICE?this.doSaveLocalFile(a,c,d,e):null!=c&&0<c.length&&this.pickFolder(b,mxUtils.bind(this,function(f){try{this.exportFile(a,c,d,e,b,f)}catch(w){this.handleError(w)}}))}catch(A){this.handleError(A)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,h,k,null,null,4<p?3:4,a,d,e);this.showDialog(b.container,380,p==(mxClient.IS_IOS?0:1)?160:4<p?390:270,!0,!0);b.init()};EditorUi.prototype.openInNewWindow=function(a,b,d){if(mxClient.IS_GC||
-mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var c=window.open("about:blank");null==c?mxUtils.popup(a,!0):("image/svg+xml"==b?c.document.write("<html>"+a+"</html>"):c.document.write('<html><img src="data:'+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),c.document.close())}else c=window.open("data:"+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==c&&mxUtils.popup(a,!0)};var b=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=
-function(a){if(this.isExportToCanvas()){this.exportDialog=null;var c=a(mxUtils.bind(this,function(a){var b=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",b);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)b.apply(this);else{this.exportDialog=document.createElement("div");var d=c.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");
-this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=d.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+
-this.chromelessToolbar.offsetHeight+4+"px";d=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=d.zIndex;var f=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});f.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){f.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height="auto";this.exportDialog.style.padding="10px";var c=this.createImageDataUri(a,
-null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",c);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(c.substring(c.indexOf(",")+1),"image/png",!0);b.apply(this,arguments)}))}),null,this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();
-this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",b);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}b.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,d,e,p){this.isLocalFileSave()?this.saveLocalFile(d,a,e,p,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,c){return this.createEchoRequest(d,a,e,p,b,c)}),d,p,e)};EditorUi.prototype.saveRequest=function(a,b,d,e,p,h,k){k=null!=k?k:!mxClient.IS_IOS||
-!navigator.standalone;var c=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,c){if("_blank"==c||null!=a&&0<a.length){var f=d("_blank"==c?null:a,c==App.MODE_DEVICE||null==c||"_blank"==c?"0":"1");null!=f&&(c==App.MODE_DEVICE||"_blank"==c?f.simulate(document,"_blank"):this.pickFolder(c,mxUtils.bind(this,function(d){h=null!=h?h:"pdf"==b?"application/pdf":"image/"+b;if(null!=e)try{this.exportFile(e,a,h,!0,c,d)}catch(z){this.handleError(z)}else this.spinner.spin(document.body,
-mxResources.get("saving"))&&f.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=f.getStatus()&&299>=f.getStatus())try{this.exportFile(f.getText(),a,h,!0,c,d)}catch(z){this.handleError(z)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,!1,k,null,null,4<c?3:4,e,h,p);this.showDialog(a.container,380,c==
-(mxClient.IS_IOS?0:1)?160:4<c?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,d,e,p,h){};EditorUi.prototype.pickFolder=function(a,b,d){b(null)};EditorUi.prototype.exportSvg=function(a,b,d,e,p,h,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var c=this.editor.graph.isSelectionEmpty();d=null!=d?d:c;c=b?null:this.editor.graph.background;c==mxConstants.NONE&&(c=null);null==c&&0==b&&(c=
-"#ffffff");var f=this.editor.graph.getSvg(c,a,k,l,null,d);e&&this.editor.graph.addSvgShadow(f);var g=this.getBaseFilename()+".svg",n=mxUtils.bind(this,function(a){this.spinner.stop();p&&a.setAttribute("content",this.getFileData(!0,null,null,null,d,m));if(null!=this.editor.fontCss){var c=a.ownerDocument,c=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"style"):c.createElement("style");c.setAttribute("type","text/css");mxUtils.setTextContent(c,this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(c)}var b=
-'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||b.length<=MAX_REQUEST_SIZE?this.saveData(g,"svg",b,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(b)}))});this.convertMath(this.editor.graph,f,!1,mxUtils.bind(this,function(){h?(null==this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(f,n,this.thumbImageCache)):
-n(f)}))}};EditorUi.prototype.addCheckbox=function(a,b,d,e,p,h){h=null!=h?h:!0;var c=document.createElement("input");c.style.marginRight="8px";c.style.marginTop="16px";c.setAttribute("type","checkbox");d&&(c.setAttribute("checked","checked"),c.defaultChecked=!0);e&&c.setAttribute("disabled","disabled");h&&(a.appendChild(c),mxUtils.write(a,b),p||mxUtils.br(a));return c};EditorUi.prototype.addEditButton=function(a,b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft=
-"24px";var d=this.getCurrentFile(),f="";null!=d&&d.getMode()!=App.MODE_DEVICE&&d.getMode()!=App.MODE_BROWSER&&(f=window.location.href);var e=document.createElement("select");e.style.width="120px";e.style.marginLeft="8px";e.style.marginRight="10px";e.className="geBtn";d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("makeCopy"));e.appendChild(d);d=document.createElement("option");d.setAttribute("value","custom");mxUtils.write(d,mxResources.get("custom")+
-"...");e.appendChild(d);a.appendChild(e);mxEvent.addListener(e,"change",mxUtils.bind(this,function(){if("custom"==e.value){var a=new FilenameDialog(this,f,mxResources.get("ok"),function(a){null!=a?f=a:e.value="blank"},mxResources.get("url"),null,null,null,null,function(){e.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||b.checked)?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled")}));
-mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===e.value?"_blank":f:null},getEditInput:function(){return c},getEditSelect:function(){return e}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){k.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=e&&e!=mxConstants.NONE?"border:1px solid black;background-color:"+e:"background-position:center center;background-repeat:no-repeat;background-image:url('"+Dialog.prototype.closeImage+"')")+';"></div>'}
-mxUtils.write(a,mxResources.get("links")+":");var d=document.createElement("select");d.style.width="100px";d.style.marginLeft="8px";d.style.marginRight="10px";d.className="geBtn";var f=document.createElement("option");f.setAttribute("value","auto");mxUtils.write(f,mxResources.get("automatic"));d.appendChild(f);f=document.createElement("option");f.setAttribute("value","blank");mxUtils.write(f,mxResources.get("openInNewWindow"));d.appendChild(f);f=document.createElement("option");f.setAttribute("value",
-"self");mxUtils.write(f,mxResources.get("openInThisWindow"));d.appendChild(f);b&&(f=document.createElement("option"),f.setAttribute("value","frame"),mxUtils.write(f,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),d.appendChild(f));a.appendChild(d);mxUtils.write(a,mxResources.get("borderColor")+":");var e="#0000ff",k=null,k=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(e||"none",function(a){e=a;c()});mxEvent.consume(a)}));c();k.style.padding=mxClient.IS_FF?
-"4px 2px 4px 2px":"4px";k.style.marginLeft="4px";k.style.height="22px";k.style.width="22px";k.style.position="relative";k.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";k.className="geColorBtn";a.appendChild(k);mxUtils.br(a);return{getColor:function(){return e},getTarget:function(){return d.value},focus:function(){d.focus()}}};EditorUi.prototype.createLink=function(a,b,d,e,p,h,k,l){var c=this.getCurrentFile(),f=[];e&&(f.push("lightbox=1"),"auto"!=a&&f.push("target="+a),null!=
-b&&b!=mxConstants.NONE&&f.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=p&&0<p.length&&f.push("edit="+encodeURIComponent(p)),h&&f.push("layers=1"),this.editor.graph.foldingEnabled&&f.push("nav=1"));if(d&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&f.push("page="+a);break}a=!0;null!=k?d="#U"+encodeURIComponent(k):(c=this.getCurrentFile(),l||null==c||c.constructor!=window.DriveFile?d="#R"+encodeURIComponent(d?this.getFileData(!0,
-null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(d="#"+c.getHash(),a=!1));a&&null!=c&&null!=c.getTitle()&&c.getTitle()!=this.defaultFilename&&f.push("title="+encodeURIComponent(c.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<f.length?"?"+f.join("&"):"")+d};EditorUi.prototype.createHtml=function(a,b,d,e,p,h,k,l,
-m,u,q){this.getBasenames();var c={};""!=p&&p!=mxConstants.NONE&&(c.highlight=p);"auto"!==e&&(c.target=e);m||(c.lightbox=!1);c.nav=this.editor.graph.foldingEnabled;d=parseInt(d);isNaN(d)||100==d||(c.zoom=d/100);d=[];k&&(d.push("pages"),c.resize=!0,null!=this.pages&&null!=this.currentPage&&(c.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(d.push("zoom"),c.resize=!0);l&&d.push("layers");0<d.length&&(m&&d.push("lightbox"),c.toolbar=d.join(" "));null!=u&&0<u.length&&(c.edit=u);null!=a?c.url=a:
-c.xml=this.getFileData(!0,null,null,null,null,!k);b='<div class="mxgraph" style="'+(h?"max-width:100%;":"")+(""!=d?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(c))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";q(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
+EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);b.setAttribute("title",mxResources.get("hide"));
+a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});EditorUi.initTheme=function(){"atlas"==uiTheme?(mxClient.link("stylesheet","styles/atlas.css"),"undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",
+Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"dark"==uiTheme&&(mxClient.link("stylesheet","styles/dark.css"),Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultThemeName="darkTheme",
+Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor="#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
+Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="))};EditorUi.initTheme();EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display=
+"none",this.refresh())};EditorUi.prototype.showFooter=function(a){var c=document.getElementById("geFooter");null!=c&&(this.footerHeight=a,c.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,d,e,p){a=new ImageDialog(this,a,b,d,e,p);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=
+!0;this.editor.graph.model.execute(a)});var c=new BackgroundImageDialog(this,mxUtils.bind(this,function(c){a(c)}));this.showDialog(c.container,360,200,!0,!0);c.init()};EditorUi.prototype.showLibraryDialog=function(a,b,d,e,p){a=new LibraryDialog(this,a,b,d,e,p);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");
+a.style.position="absolute";a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,d){var c=null!=this.spinner&&null!=
+this.spinner.pause?this.spinner.pause():function(){},f=null!=a&&null!=a.error?a.error:a;if(null!=f||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var e=mxResources.get("ok"),g=null;b=null!=b?b:mxResources.get("error");if(null!=f)if(null!=f.retry&&(e=mxResources.get("cancel"),g=function(){c();f.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));
+else if(404==f.code||404==f.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var k=window.location.hash;null!=k&&"#G"==k.substring(0,2)&&(k=k.substring(2),a+=' <a href="https://drive.google.com/open?id='+k+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else f.code==App.ERROR_TIMEOUT?a=
+mxUtils.htmlEntities(mxResources.get("timeout")):f.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=f.message?a=mxUtils.htmlEntities(f.message):null!=f.response&&null!=f.response.error&&(a=mxUtils.htmlEntities(f.response.error));this.showError(b,a,e,d,g)}else null!=d&&d()};EditorUi.prototype.showError=function(a,b,d,e,p,h,k){a=new ErrorDialog(this,a,b,d,e,p,h,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,
+null,a,mxResources.get("ok"),b);this.showDialog(c.container,340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,d,e,p){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){c();null!=b&&b()},function(){c();null!=d&&d()},e,p)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=
+function(){return mxClient.IS_CHROMEAPP||!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,d){var c=a.toDataURL("image/"+d);if(6>=c.length||c==a.cloneNode(!1).toDataURL("image/"+d))throw{message:"Invalid image"};null!=b&&(c=this.writeGraphModelToPng(c,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return c};
+EditorUi.prototype.saveCanvas=function(a,b,d){var c="jpeg"==d?"jpg":d,f=this.getBaseFilename()+"."+c;a=this.createImageDataUri(a,b,d);this.saveData(f,c,a.substring(a.lastIndexOf(",")+1),"image/"+d,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};
+EditorUi.prototype.doSaveLocalFile=function(a,b,d,e,p){if(window.Blob&&navigator.msSaveOrOpenBlob)a=e?this.base64ToBlob(a,d):new Blob([a],{type:d}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)d=window.open("about:blank","_blank"),null==d?mxUtils.popup(a,!0):(d.document.write(a),d.document.close(),d.document.execCommand("SaveAs",!0,b),d.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height=
+"380px",this.showDialog(b.container,620,460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var c=document.createElement("a"),f=!mxClient.IS_SF&&"undefined"!==typeof c.download;if(f||this.isOffline()){c.href=URL.createObjectURL(e?this.base64ToBlob(a,d):new Blob([a],{type:d}));f?c.download=b:c.setAttribute("target","_blank");document.body.appendChild(c);try{window.setTimeout(function(){URL.revokeObjectURL(c.href)},0),c.click(),c.parentNode.removeChild(c)}catch(v){}}else this.createEchoRequest(a,
+b,d,e,p).simulate(document,"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,d,e,p,h){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=d?"&mime="+d:"")+(null!=p?"&format="+p:"")+(null!=h?"&base64="+h:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(e?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),d=c.length,f=Math.ceil(d/1024),e=Array(f),k=0;k<f;++k){for(var l=1024*k,m=Math.min(l+1024,d),u=Array(m-l),q=0;l<m;++q,++l)u[q]=
+c[l].charCodeAt(0);e[k]=new Uint8Array(u)}return new Blob(e,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,d,e,p,h,k){h=null!=h?h:!1;k=null!=k?k:"vsdx"!=p&&(!mxClient.IS_IOS||!navigator.standalone);p=this.getServiceCount(h);b=new CreateDialog(this,b,mxUtils.bind(this,function(c,b){try{if("_blank"==b)if(null==d||"image/"!=d.substring(0,6)||"image/svg"==d.substring(0,9)&&!mxClient.IS_SVG){var f=window.open("about:blank");null==f?mxUtils.popup(a,!0):(f.document.write(mxUtils.htmlEntities(a,
+!1)),f.document.close())}else this.openInNewWindow(a,d,e);else b==App.MODE_DEVICE?this.doSaveLocalFile(a,c,d,e):null!=c&&0<c.length&&this.pickFolder(b,mxUtils.bind(this,function(f){try{this.exportFile(a,c,d,e,b,f)}catch(w){this.handleError(w)}}))}catch(A){this.handleError(A)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,h,k,null,null,4<p?3:4,a,d,e);this.showDialog(b.container,380,p==(mxClient.IS_IOS?0:1)?160:4<p?390:270,!0,!0);b.init()};
+EditorUi.prototype.openInNewWindow=function(a,b,d){if(mxClient.IS_GC||mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var c=window.open("about:blank");null==c?mxUtils.popup(a,!0):("image/svg+xml"==b?c.document.write("<html>"+a+"</html>"):c.document.write('<html><img src="data:'+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),c.document.close())}else c=window.open("data:"+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==c&&mxUtils.popup(a,
+!0)};var b=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=function(a){if(this.isExportToCanvas()){this.exportDialog=null;var c=a(mxUtils.bind(this,function(a){var b=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",b);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)b.apply(this);else{this.exportDialog=document.createElement("div");
+var d=c.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=
+d.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+this.chromelessToolbar.offsetHeight+4+"px";d=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=d.zIndex;var f=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});f.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){f.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height=
+"auto";this.exportDialog.style.padding="10px";var c=this.createImageDataUri(a,null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",c);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(c.substring(c.indexOf(",")+1),"image/png",!0);b.apply(this,arguments)}))}),null,
+this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",b);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}b.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,d,e,p){this.isLocalFileSave()?this.saveLocalFile(d,a,e,p,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,c){return this.createEchoRequest(d,a,e,p,b,c)}),d,
+p,e)};EditorUi.prototype.saveRequest=function(a,b,d,e,p,h,k){k=null!=k?k:!mxClient.IS_IOS||!navigator.standalone;var c=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,c){if("_blank"==c||null!=a&&0<a.length){var f=d("_blank"==c?null:a,c==App.MODE_DEVICE||null==c||"_blank"==c?"0":"1");null!=f&&(c==App.MODE_DEVICE||"_blank"==c?f.simulate(document,"_blank"):this.pickFolder(c,mxUtils.bind(this,function(d){h=null!=h?h:"pdf"==b?"application/pdf":"image/"+b;if(null!=e)try{this.exportFile(e,
+a,h,!0,c,d)}catch(z){this.handleError(z)}else this.spinner.spin(document.body,mxResources.get("saving"))&&f.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=f.getStatus()&&299>=f.getStatus())try{this.exportFile(f.getText(),a,h,!0,c,d)}catch(z){this.handleError(z)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),
+!1,!1,k,null,null,4<c?3:4,e,h,p);this.showDialog(a.container,380,c==(mxClient.IS_IOS?0:1)?160:4<c?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,d,e,p,h){};EditorUi.prototype.pickFolder=function(a,b,d){b(null)};EditorUi.prototype.exportSvg=function(a,b,d,e,p,h,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var c=this.editor.graph.isSelectionEmpty();d=null!=d?d:c;c=b?null:this.editor.graph.background;
+c==mxConstants.NONE&&(c=null);null==c&&0==b&&(c="#ffffff");var f=this.editor.graph.getSvg(c,a,k,l,null,d);e&&this.editor.graph.addSvgShadow(f);var g=this.getBaseFilename()+".svg",n=mxUtils.bind(this,function(a){this.spinner.stop();p&&a.setAttribute("content",this.getFileData(!0,null,null,null,d,m));if(null!=this.editor.fontCss){var c=a.ownerDocument,c=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"style"):c.createElement("style");c.setAttribute("type","text/css");mxUtils.setTextContent(c,
+this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(c)}var b='<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||b.length<=MAX_REQUEST_SIZE?this.saveData(g,"svg",b,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(b)}))});this.convertMath(this.editor.graph,f,!1,mxUtils.bind(this,function(){h?(null==
+this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(f,n,this.thumbImageCache)):n(f)}))}};EditorUi.prototype.addCheckbox=function(a,b,d,e,p,h){h=null!=h?h:!0;var c=document.createElement("input");c.style.marginRight="8px";c.style.marginTop="16px";c.setAttribute("type","checkbox");d&&(c.setAttribute("checked","checked"),c.defaultChecked=!0);e&&c.setAttribute("disabled","disabled");h&&(a.appendChild(c),mxUtils.write(a,b),p||mxUtils.br(a));return c};EditorUi.prototype.addEditButton=function(a,
+b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft="24px";var d=this.getCurrentFile(),f="";null!=d&&d.getMode()!=App.MODE_DEVICE&&d.getMode()!=App.MODE_BROWSER&&(f=window.location.href);var e=document.createElement("select");e.style.width="120px";e.style.marginLeft="8px";e.style.marginRight="10px";e.className="geBtn";d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("makeCopy"));e.appendChild(d);d=document.createElement("option");
+d.setAttribute("value","custom");mxUtils.write(d,mxResources.get("custom")+"...");e.appendChild(d);a.appendChild(e);mxEvent.addListener(e,"change",mxUtils.bind(this,function(){if("custom"==e.value){var a=new FilenameDialog(this,f,mxResources.get("ok"),function(a){null!=a?f=a:e.value="blank"},mxResources.get("url"),null,null,null,null,function(){e.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||
+b.checked)?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled")}));mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===e.value?"_blank":f:null},getEditInput:function(){return c},getEditSelect:function(){return e}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){k.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=e&&e!=mxConstants.NONE?"border:1px solid black;background-color:"+e:"background-position:center center;background-repeat:no-repeat;background-image:url('"+
+Dialog.prototype.closeImage+"')")+';"></div>'}mxUtils.write(a,mxResources.get("links")+":");var d=document.createElement("select");d.style.width="100px";d.style.marginLeft="8px";d.style.marginRight="10px";d.className="geBtn";var f=document.createElement("option");f.setAttribute("value","auto");mxUtils.write(f,mxResources.get("automatic"));d.appendChild(f);f=document.createElement("option");f.setAttribute("value","blank");mxUtils.write(f,mxResources.get("openInNewWindow"));d.appendChild(f);f=document.createElement("option");
+f.setAttribute("value","self");mxUtils.write(f,mxResources.get("openInThisWindow"));d.appendChild(f);b&&(f=document.createElement("option"),f.setAttribute("value","frame"),mxUtils.write(f,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),d.appendChild(f));a.appendChild(d);mxUtils.write(a,mxResources.get("borderColor")+":");var e="#0000ff",k=null,k=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(e||"none",function(a){e=a;c()});mxEvent.consume(a)}));c();k.style.padding=
+mxClient.IS_FF?"4px 2px 4px 2px":"4px";k.style.marginLeft="4px";k.style.height="22px";k.style.width="22px";k.style.position="relative";k.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";k.className="geColorBtn";a.appendChild(k);mxUtils.br(a);return{getColor:function(){return e},getTarget:function(){return d.value},focus:function(){d.focus()}}};EditorUi.prototype.createLink=function(a,b,d,e,p,h,k,l){var c=this.getCurrentFile(),f=[];e&&(f.push("lightbox=1"),"auto"!=a&&f.push("target="+
+a),null!=b&&b!=mxConstants.NONE&&f.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=p&&0<p.length&&f.push("edit="+encodeURIComponent(p)),h&&f.push("layers=1"),this.editor.graph.foldingEnabled&&f.push("nav=1"));if(d&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&f.push("page="+a);break}a=!0;null!=k?d="#U"+encodeURIComponent(k):(c=this.getCurrentFile(),l||null==c||c.constructor!=window.DriveFile?d="#R"+encodeURIComponent(d?
+this.getFileData(!0,null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(d="#"+c.getHash(),a=!1));a&&null!=c&&null!=c.getTitle()&&c.getTitle()!=this.defaultFilename&&f.push("title="+encodeURIComponent(c.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<f.length?"?"+f.join("&"):"")+d};EditorUi.prototype.createHtml=function(a,
+b,d,e,p,h,k,l,m,u,q){this.getBasenames();var c={};""!=p&&p!=mxConstants.NONE&&(c.highlight=p);"auto"!==e&&(c.target=e);m||(c.lightbox=!1);c.nav=this.editor.graph.foldingEnabled;d=parseInt(d);isNaN(d)||100==d||(c.zoom=d/100);d=[];k&&(d.push("pages"),c.resize=!0,null!=this.pages&&null!=this.currentPage&&(c.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(d.push("zoom"),c.resize=!0);l&&d.push("layers");0<d.length&&(m&&d.push("lightbox"),c.toolbar=d.join(" "));null!=u&&0<u.length&&(c.edit=u);null!=
+a?c.url=a:c.xml=this.getFileData(!0,null,null,null,null,!k);b='<div class="mxgraph" style="'+(h?"max-width:100%;":"")+(""!=d?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(c))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";q(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
 '">\x3c/script>')};EditorUi.prototype.showHtmlDialog=function(a,b,d,e){var c=document.createElement("div");c.style.whiteSpace="nowrap";var f=document.createElement("h3");mxUtils.write(f,mxResources.get("html"));f.style.cssText="width:100%;text-align:center;margin-top:0px;margin-bottom:12px";c.appendChild(f);var g=document.createElement("div");g.style.cssText="border-bottom:1px solid lightGray;padding-bottom:8px;margin-bottom:12px;";var n=document.createElement("input");n.style.cssText="margin-right:8px;margin-top:8px;margin-bottom:8px;";
 n.setAttribute("value","url");n.setAttribute("type","radio");n.setAttribute("name","type-embedhtmldialog");f=n.cloneNode(!0);f.setAttribute("value","copy");g.appendChild(f);var k=document.createElement("span");mxUtils.write(k,mxResources.get("includeCopyOfMyDiagram"));g.appendChild(k);mxUtils.br(g);g.appendChild(n);k=document.createElement("span");mxUtils.write(k,mxResources.get("publicDiagramUrl"));g.appendChild(k);var l=this.getCurrentFile();null==d&&null!=l&&l.constructor==window.DriveFile&&(k=
 document.createElement("a"),k.style.paddingLeft="12px",k.style.color="gray",k.setAttribute("href","javascript:void(0);"),mxUtils.write(k,mxResources.get("share")),g.appendChild(k),mxEvent.addListener(k,"click",mxUtils.bind(this,function(){this.hideDialog();this.drive.showPermissions(l.getId())})));f.setAttribute("checked","checked");null==d&&n.setAttribute("disabled","disabled");c.appendChild(g);var m=this.addLinkSection(c),q=this.addCheckbox(c,mxResources.get("zoom"),!0,null,!0);mxUtils.write(c,
diff --git a/war/js/atlas.min.js b/src/main/webapp/js/atlas.min.js
similarity index 99%
rename from war/js/atlas.min.js
rename to src/main/webapp/js/atlas.min.js
index 5437380481f0fd2bc0096d5c7de36958f8320434..373cb2b66bc140263b47c0ef414f8f3ed952ac88 100644
--- a/war/js/atlas.min.js
+++ b/src/main/webapp/js/atlas.min.js
@@ -6534,7 +6534,7 @@ mxEvent.addListener(R,"focus",function(){N.checked=!0});mxEvent.addListener(V,"f
 "12px";mxUtils.write(d,mxResources.get("paperSize"));q.appendChild(d);d=document.createElement("div");d.style.marginBottom="12px";var T=PageSetupDialog.addPageFormatPanel(d,"printdialog",a.editor.graph.pageFormat||mxConstants.PAGE_FORMAT_A4_PORTRAIT);q.appendChild(d);d=document.createElement("span");mxUtils.write(d,mxResources.get("pageScale"));q.appendChild(d);var U=document.createElement("input");U.style.cssText="margin:0 8px 0 8px;";U.setAttribute("value","100 %");U.style.width="60px";q.appendChild(U);
 e.appendChild(q);d=document.createElement("div");d.style.cssText="text-align:right;margin:62px 0 0 0;";q=mxUtils.button(mxResources.get("cancel"),function(){a.hideDialog()});q.className="geBtn";a.editor.cancelFirst&&d.appendChild(q);a.isOffline()||(w=mxUtils.button(mxResources.get("help"),function(){window.open("https://desk.draw.io/support/solutions/articles/16000048947")}),w.className="geBtn",d.appendChild(w));PrintDialog.previewEnabled&&(w=mxUtils.button(mxResources.get("preview"),function(){a.hideDialog();
 b(!1)}),w.className="geBtn",d.appendChild(w));w=mxUtils.button(mxResources.get(PrintDialog.previewEnabled?"print":"ok"),function(){a.hideDialog();b(!0)});w.className="geBtn gePrimaryBtn";d.appendChild(w);a.editor.cancelFirst||d.appendChild(q);e.appendChild(d);this.container=e}})();function ChangeShadow(a,d){this.ui=a;this.previous=this.visible=d}ChangeShadow.prototype.execute=function(){this.visible=this.previous;this.previous=this.ui.editor.graph.shadowVisible;this.ui.editor.graph.setShadowVisible(this.visible)};
-(function(){var a=new mxObjectCodec(new ChangeShadow,["ui","previous"]);a.afterDecode=function(a,e,b){b.previous=b.visible;return b};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="7.9.8";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';
+(function(){var a=new mxObjectCodec(new ChangeShadow,["ui","previous"]);a.afterDecode=function(a,e,b){b.previous=b.visible;return b};mxCodecRegistry.register(a)})();(function(){EditorUi.VERSION="8.0.0";EditorUi.compactUi="atlas"!=uiTheme;EditorUi.enableLogging=/.*\.draw\.io$/.test(window.location.hostname);EditorUi.enablePlantUml=EditorUi.enableLogging;EditorUi.isElectronApp=null!=window&&null!=window.process&&null!=window.process.versions&&null!=window.process.versions.electron;EditorUi.scratchpadHelpLink="https://desk.draw.io/support/solutions/articles/16000042367";EditorUi.prototype.emptyDiagramXml='<mxGraphModel><root><mxCell id="0"/><mxCell id="1" parent="0"/></root></mxGraphModel>';
 EditorUi.prototype.emptyLibraryXml="<mxlibrary>[]</mxlibrary>";EditorUi.prototype.mode=null;EditorUi.prototype.sidebarFooterHeight=36;EditorUi.prototype.defaultCustomShapeStyle="shape=stencil(tZRtTsQgEEBPw1+DJR7AoN6DbWftpAgE0Ortd/jYRGq72R+YNE2YgTePloEJGWblgA18ZuKFDcMj5/Sm8boZq+BgjCX4pTyqk6ZlKROitwusOMXKQDODx5iy4pXxZ5qTHiFHawxB0JrQZH7lCabQ0Fr+XWC1/E8zcsT/gAi+Subo2/3Mh6d/oJb5nU1b5tW7r2knautaa3T+U32o7f7vZwpJkaNDLORJjcu7t59m2jXxqX9un+tt022acsfmoKaQZ+vhhswZtS6Ne/ThQGt0IV0N3Yyv6P3CeT9/tHO0XFI5cAE=);whiteSpace=wrap;html=1;";
 EditorUi.prototype.maxBackgroundSize=1600;EditorUi.prototype.maxImageSize=520;EditorUi.prototype.resampleThreshold=1E5;EditorUi.prototype.maxImageBytes=1E6;EditorUi.prototype.maxBackgroundBytes=25E5;EditorUi.prototype.currentFile=null;EditorUi.prototype.printPdfExport=!1;EditorUi.prototype.pdfPageExport=!0;EditorUi.prototype.formatEnabled="0"!=urlParams.format;(function(){EditorUi.prototype.useCanvasForExport=!1;EditorUi.prototype.jpgSupported=!1;try{var a=document.createElement("canvas");EditorUi.prototype.canvasSupported=
 !(!a.getContext||!a.getContext("2d"))}catch(q){}try{var f=document.createElement("canvas"),b=new Image;b.onload=function(){try{f.getContext("2d").drawImage(b,0,0);var a=f.toDataURL("image/png");EditorUi.prototype.useCanvasForExport=null!=a&&6<a.length}catch(t){}};b.src="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1px" height="1px" version="1.1"><foreignObject pointer-events="all" width="1" height="1"><div xmlns="http://www.w3.org/1999/xhtml"></div></foreignObject></svg>')))}catch(q){}try{f=
@@ -6594,47 +6594,47 @@ e.documentElement.getElementsByTagName("diagram"),e=0;e<k.length;e++){var n=mxUt
 !this.isOffline()&&(new XMLHttpRequest).upload&&this.isRemoteFileFormat(c,l)&&null!=t?this.parseFile(t,mxUtils.bind(this,function(a){4==a.readyState&&(this.spinner.stop(),200<=a.status&&299>=a.status?m(a.responseText,"text/xml"):this.handleError({message:mxResources.get(413==a.status?"drawingTooLarge":"invalidOrMissingFile")},mxResources.get("errorLoadingFile")))})):m(c,h)}}));a.stopPropagation();a.preventDefault()})),mxEvent.addListener(g,"dragleave",function(a){null!=f?f.style.border="3px dotted lightGray":
 (g.style.border="3px solid transparent",g.style.cursor="");a.stopPropagation();a.preventDefault()}));l=l.cloneNode(!1);l.setAttribute("src",IMAGE_PATH+"/edit.gif");l.setAttribute("title",mxResources.get("edit"));n.insertBefore(l,n.firstChild);mxEvent.addListener(l,"click",F);mxEvent.addListener(g,"dblclick",function(a){mxEvent.getSource(a)==g&&F(a)});h=l.cloneNode(!1);h.setAttribute("src",Editor.plusImage);h.setAttribute("title",mxResources.get("add"));n.insertBefore(h,n.firstChild);mxEvent.addListener(h,
 "click",G);this.isOffline()||".scratchpad"!=a.title||null==EditorUi.scratchpadHelpLink||(h=document.createElement("span"),h.setAttribute("title",mxResources.get("help")),h.style.cssText="color:gray;text-decoration:none;",h.className="geButton",mxUtils.write(h,"?"),mxEvent.addGestureListeners(h,mxUtils.bind(this,function(a){this.openLink(EditorUi.scratchpadHelpLink);mxEvent.consume(a)})),n.insertBefore(h,n.firstChild))}k.appendChild(n);k.style.paddingRight=18*n.childNodes.length+"px"}};"1"==urlParams.offline||
-EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("atlas"==uiTheme?("undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=
-46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);
-b.setAttribute("title",mxResources.get("hide"));a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});"dark"==uiTheme&&(Graph.prototype.defaultThemeName="darkTheme",Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor=
-"#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
-Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="));EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display="none",this.refresh())};
-EditorUi.prototype.showFooter=function(a){var c=document.getElementById("geFooter");null!=c&&(this.footerHeight=a,c.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,h,d,e){a=new ImageDialog(this,a,b,h,d,e);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=!0;this.editor.graph.model.execute(a)});
-var c=new BackgroundImageDialog(this,mxUtils.bind(this,function(c){a(c)}));this.showDialog(c.container,360,200,!0,!0);c.init()};EditorUi.prototype.showLibraryDialog=function(a,b,h,d,e){a=new LibraryDialog(this,a,b,h,d,e);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");a.style.position="absolute";
-a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,h){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():
-function(){},f=null!=a&&null!=a.error?a.error:a;if(null!=f||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var d=mxResources.get("ok"),e=null;b=null!=b?b:mxResources.get("error");if(null!=f)if(null!=f.retry&&(d=mxResources.get("cancel"),e=function(){c();f.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));else if(404==f.code||
-404==f.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var g=window.location.hash;null!=g&&"#G"==g.substring(0,2)&&(g=g.substring(2),a+=' <a href="https://drive.google.com/open?id='+g+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else f.code==App.ERROR_TIMEOUT?a=mxUtils.htmlEntities(mxResources.get("timeout")):
-f.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=f.message?a=mxUtils.htmlEntities(f.message):null!=f.response&&null!=f.response.error&&(a=mxUtils.htmlEntities(f.response.error));this.showError(b,a,d,h,e)}else null!=h&&h()};EditorUi.prototype.showError=function(a,b,h,d,e,g,k){a=new ErrorDialog(this,a,b,h,d,e,g,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,null,a,mxResources.get("ok"),b);this.showDialog(c.container,
-340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,h,d,e){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){c();null!=b&&b()},function(){c();null!=h&&h()},d,e)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=function(){return mxClient.IS_CHROMEAPP||
-!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,h){var c=a.toDataURL("image/"+h);if(6>=c.length||c==a.cloneNode(!1).toDataURL("image/"+h))throw{message:"Invalid image"};null!=b&&(c=this.writeGraphModelToPng(c,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return c};EditorUi.prototype.saveCanvas=function(a,
-b,h){var c="jpeg"==h?"jpg":h,f=this.getBaseFilename()+"."+c;a=this.createImageDataUri(a,b,h);this.saveData(f,c,a.substring(a.lastIndexOf(",")+1),"image/"+h,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};EditorUi.prototype.doSaveLocalFile=function(a,
-b,h,d,e){if(window.Blob&&navigator.msSaveOrOpenBlob)a=d?this.base64ToBlob(a,h):new Blob([a],{type:h}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)h=window.open("about:blank","_blank"),null==h?mxUtils.popup(a,!0):(h.document.write(a),h.document.close(),h.document.execCommand("SaveAs",!0,b),h.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height="380px",this.showDialog(b.container,620,
-460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var c=document.createElement("a"),f=!mxClient.IS_SF&&"undefined"!==typeof c.download;if(f||this.isOffline()){c.href=URL.createObjectURL(d?this.base64ToBlob(a,h):new Blob([a],{type:h}));f?c.download=b:c.setAttribute("target","_blank");document.body.appendChild(c);try{window.setTimeout(function(){URL.revokeObjectURL(c.href)},0),c.click(),c.parentNode.removeChild(c)}catch(z){}}else this.createEchoRequest(a,b,h,d,e).simulate(document,
-"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,h,d,e,g){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=h?"&mime="+h:"")+(null!=e?"&format="+e:"")+(null!=g?"&base64="+g:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(d?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),f=c.length,d=Math.ceil(f/1024),e=Array(d),g=0;g<d;++g){for(var k=1024*g,l=Math.min(k+1024,f),n=Array(l-k),x=0;k<l;++x,++k)n[x]=c[k].charCodeAt(0);e[g]=
-new Uint8Array(n)}return new Blob(e,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,h,d,e,g,k){g=null!=g?g:!1;k=null!=k?k:"vsdx"!=e&&(!mxClient.IS_IOS||!navigator.standalone);e=this.getServiceCount(g);b=new CreateDialog(this,b,mxUtils.bind(this,function(b,c){try{if("_blank"==c)if(null==h||"image/"!=h.substring(0,6)||"image/svg"==h.substring(0,9)&&!mxClient.IS_SVG){var f=window.open("about:blank");null==f?mxUtils.popup(a,!0):(f.document.write(mxUtils.htmlEntities(a,!1)),f.document.close())}else this.openInNewWindow(a,
-h,d);else c==App.MODE_DEVICE?this.doSaveLocalFile(a,b,h,d):null!=b&&0<b.length&&this.pickFolder(c,mxUtils.bind(this,function(f){try{this.exportFile(a,b,h,d,c,f)}catch(A){this.handleError(A)}}))}catch(x){this.handleError(x)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,g,k,null,null,4<e?3:4,a,h,d);this.showDialog(b.container,380,e==(mxClient.IS_IOS?0:1)?160:4<e?390:270,!0,!0);b.init()};EditorUi.prototype.openInNewWindow=function(a,b,h){if(mxClient.IS_GC||
-mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var c=window.open("about:blank");null==c?mxUtils.popup(a,!0):("image/svg+xml"==b?c.document.write("<html>"+a+"</html>"):c.document.write('<html><img src="data:'+b+(h?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),c.document.close())}else c=window.open("data:"+b+(h?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==c&&mxUtils.popup(a,!0)};var d=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=
-function(a){if(this.isExportToCanvas()){this.exportDialog=null;var b=a(mxUtils.bind(this,function(a){var c=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",c);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)c.apply(this);else{this.exportDialog=document.createElement("div");var f=b.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");
-this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=f.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+
-this.chromelessToolbar.offsetHeight+4+"px";f=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=f.zIndex;var h=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});h.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){h.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height="auto";this.exportDialog.style.padding="10px";var b=this.createImageDataUri(a,
-null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",b);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(b.substring(b.indexOf(",")+1),"image/png",!0);c.apply(this,arguments)}))}),null,this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();
-this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",c);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}d.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,h,d,e){this.isLocalFileSave()?this.saveLocalFile(h,a,d,e,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,c){return this.createEchoRequest(h,a,d,e,b,c)}),h,e,d)};EditorUi.prototype.saveRequest=function(a,b,h,d,e,g,k){k=null!=k?k:!mxClient.IS_IOS||
-!navigator.standalone;var c=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,c){if("_blank"==c||null!=a&&0<a.length){var f=h("_blank"==c?null:a,c==App.MODE_DEVICE||null==c||"_blank"==c?"0":"1");null!=f&&(c==App.MODE_DEVICE||"_blank"==c?f.simulate(document,"_blank"):this.pickFolder(c,mxUtils.bind(this,function(h){g=null!=g?g:"pdf"==b?"application/pdf":"image/"+b;if(null!=d)try{this.exportFile(d,a,g,!0,c,h)}catch(C){this.handleError(C)}else this.spinner.spin(document.body,
-mxResources.get("saving"))&&f.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=f.getStatus()&&299>=f.getStatus())try{this.exportFile(f.getText(),a,g,!0,c,h)}catch(C){this.handleError(C)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,!1,k,null,null,4<c?3:4,d,g,e);this.showDialog(a.container,380,c==
-(mxClient.IS_IOS?0:1)?160:4<c?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,h,d,e,g){};EditorUi.prototype.pickFolder=function(a,b,h){b(null)};EditorUi.prototype.exportSvg=function(a,b,h,d,e,g,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var c=this.editor.graph.isSelectionEmpty();h=null!=h?h:c;c=b?null:this.editor.graph.background;c==mxConstants.NONE&&(c=null);null==c&&0==b&&(c=
-"#ffffff");var f=this.editor.graph.getSvg(c,a,k,l,null,h);d&&this.editor.graph.addSvgShadow(f);var q=this.getBaseFilename()+".svg",u=mxUtils.bind(this,function(a){this.spinner.stop();e&&a.setAttribute("content",this.getFileData(!0,null,null,null,h,m));if(null!=this.editor.fontCss){var b=a.ownerDocument,b=null!=b.createElementNS?b.createElementNS(mxConstants.NS_SVG,"style"):b.createElement("style");b.setAttribute("type","text/css");mxUtils.setTextContent(b,this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(b)}var c=
-'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||c.length<=MAX_REQUEST_SIZE?this.saveData(q,"svg",c,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(c)}))});this.convertMath(this.editor.graph,f,!1,mxUtils.bind(this,function(){g?(null==this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(f,u,this.thumbImageCache)):
-u(f)}))}};EditorUi.prototype.addCheckbox=function(a,b,h,d,e,g){g=null!=g?g:!0;var c=document.createElement("input");c.style.marginRight="8px";c.style.marginTop="16px";c.setAttribute("type","checkbox");h&&(c.setAttribute("checked","checked"),c.defaultChecked=!0);d&&c.setAttribute("disabled","disabled");g&&(a.appendChild(c),mxUtils.write(a,b),e||mxUtils.br(a));return c};EditorUi.prototype.addEditButton=function(a,b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft=
-"24px";var f=this.getCurrentFile(),d="";null!=f&&f.getMode()!=App.MODE_DEVICE&&f.getMode()!=App.MODE_BROWSER&&(d=window.location.href);var e=document.createElement("select");e.style.width="120px";e.style.marginLeft="8px";e.style.marginRight="10px";e.className="geBtn";f=document.createElement("option");f.setAttribute("value","blank");mxUtils.write(f,mxResources.get("makeCopy"));e.appendChild(f);f=document.createElement("option");f.setAttribute("value","custom");mxUtils.write(f,mxResources.get("custom")+
-"...");e.appendChild(f);a.appendChild(e);mxEvent.addListener(e,"change",mxUtils.bind(this,function(){if("custom"==e.value){var a=new FilenameDialog(this,d,mxResources.get("ok"),function(a){null!=a?d=a:e.value="blank"},mxResources.get("url"),null,null,null,null,function(){e.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||b.checked)?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled")}));
-mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===e.value?"_blank":d:null},getEditInput:function(){return c},getEditSelect:function(){return e}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){g.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=e&&e!=mxConstants.NONE?"border:1px solid black;background-color:"+e:"background-position:center center;background-repeat:no-repeat;background-image:url('"+Dialog.prototype.closeImage+"')")+';"></div>'}
-mxUtils.write(a,mxResources.get("links")+":");var f=document.createElement("select");f.style.width="100px";f.style.marginLeft="8px";f.style.marginRight="10px";f.className="geBtn";var d=document.createElement("option");d.setAttribute("value","auto");mxUtils.write(d,mxResources.get("automatic"));f.appendChild(d);d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("openInNewWindow"));f.appendChild(d);d=document.createElement("option");d.setAttribute("value",
-"self");mxUtils.write(d,mxResources.get("openInThisWindow"));f.appendChild(d);b&&(d=document.createElement("option"),d.setAttribute("value","frame"),mxUtils.write(d,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),f.appendChild(d));a.appendChild(f);mxUtils.write(a,mxResources.get("borderColor")+":");var e="#0000ff",g=null,g=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(e||"none",function(a){e=a;c()});mxEvent.consume(a)}));c();g.style.padding=mxClient.IS_FF?
-"4px 2px 4px 2px":"4px";g.style.marginLeft="4px";g.style.height="22px";g.style.width="22px";g.style.position="relative";g.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";g.className="geColorBtn";a.appendChild(g);mxUtils.br(a);return{getColor:function(){return e},getTarget:function(){return f.value},focus:function(){f.focus()}}};EditorUi.prototype.createLink=function(a,b,d,e,g,k,l,m){var c=this.getCurrentFile(),f=[];e&&(f.push("lightbox=1"),"auto"!=a&&f.push("target="+a),null!=
-b&&b!=mxConstants.NONE&&f.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=g&&0<g.length&&f.push("edit="+encodeURIComponent(g)),k&&f.push("layers=1"),this.editor.graph.foldingEnabled&&f.push("nav=1"));if(d&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&f.push("page="+a);break}a=!0;null!=l?d="#U"+encodeURIComponent(l):(c=this.getCurrentFile(),m||null==c||c.constructor!=window.DriveFile?d="#R"+encodeURIComponent(d?this.getFileData(!0,
-null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(d="#"+c.getHash(),a=!1));a&&null!=c&&null!=c.getTitle()&&c.getTitle()!=this.defaultFilename&&f.push("title="+encodeURIComponent(c.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<f.length?"?"+f.join("&"):"")+d};EditorUi.prototype.createHtml=function(a,b,d,e,g,k,l,m,
-p,n,x){this.getBasenames();var c={};""!=g&&g!=mxConstants.NONE&&(c.highlight=g);"auto"!==e&&(c.target=e);p||(c.lightbox=!1);c.nav=this.editor.graph.foldingEnabled;d=parseInt(d);isNaN(d)||100==d||(c.zoom=d/100);d=[];l&&(d.push("pages"),c.resize=!0,null!=this.pages&&null!=this.currentPage&&(c.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(d.push("zoom"),c.resize=!0);m&&d.push("layers");0<d.length&&(p&&d.push("lightbox"),c.toolbar=d.join(" "));null!=n&&0<n.length&&(c.edit=n);null!=a?c.url=a:
-c.xml=this.getFileData(!0,null,null,null,null,!l);b='<div class="mxgraph" style="'+(k?"max-width:100%;":"")+(""!=d?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(c))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";x(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
+EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);b.setAttribute("title",mxResources.get("hide"));
+a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});EditorUi.initTheme=function(){"atlas"==uiTheme?(mxClient.link("stylesheet","styles/atlas.css"),"undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",
+Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"dark"==uiTheme&&(mxClient.link("stylesheet","styles/dark.css"),Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultThemeName="darkTheme",
+Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor="#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
+Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="))};EditorUi.initTheme();EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display=
+"none",this.refresh())};EditorUi.prototype.showFooter=function(a){var c=document.getElementById("geFooter");null!=c&&(this.footerHeight=a,c.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,h,d,e){a=new ImageDialog(this,a,b,h,d,e);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=
+!0;this.editor.graph.model.execute(a)});var c=new BackgroundImageDialog(this,mxUtils.bind(this,function(c){a(c)}));this.showDialog(c.container,360,200,!0,!0);c.init()};EditorUi.prototype.showLibraryDialog=function(a,b,h,d,e){a=new LibraryDialog(this,a,b,h,d,e);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");
+a.style.position="absolute";a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,h){var c=null!=this.spinner&&null!=
+this.spinner.pause?this.spinner.pause():function(){},f=null!=a&&null!=a.error?a.error:a;if(null!=f||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var d=mxResources.get("ok"),e=null;b=null!=b?b:mxResources.get("error");if(null!=f)if(null!=f.retry&&(d=mxResources.get("cancel"),e=function(){c();f.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));
+else if(404==f.code||404==f.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var g=window.location.hash;null!=g&&"#G"==g.substring(0,2)&&(g=g.substring(2),a+=' <a href="https://drive.google.com/open?id='+g+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else f.code==App.ERROR_TIMEOUT?a=
+mxUtils.htmlEntities(mxResources.get("timeout")):f.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=f.message?a=mxUtils.htmlEntities(f.message):null!=f.response&&null!=f.response.error&&(a=mxUtils.htmlEntities(f.response.error));this.showError(b,a,d,h,e)}else null!=h&&h()};EditorUi.prototype.showError=function(a,b,h,d,e,g,k){a=new ErrorDialog(this,a,b,h,d,e,g,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,
+null,a,mxResources.get("ok"),b);this.showDialog(c.container,340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,h,d,e){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){c();null!=b&&b()},function(){c();null!=h&&h()},d,e)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=
+function(){return mxClient.IS_CHROMEAPP||!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,h){var c=a.toDataURL("image/"+h);if(6>=c.length||c==a.cloneNode(!1).toDataURL("image/"+h))throw{message:"Invalid image"};null!=b&&(c=this.writeGraphModelToPng(c,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return c};
+EditorUi.prototype.saveCanvas=function(a,b,h){var c="jpeg"==h?"jpg":h,f=this.getBaseFilename()+"."+c;a=this.createImageDataUri(a,b,h);this.saveData(f,c,a.substring(a.lastIndexOf(",")+1),"image/"+h,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};
+EditorUi.prototype.doSaveLocalFile=function(a,b,h,d,e){if(window.Blob&&navigator.msSaveOrOpenBlob)a=d?this.base64ToBlob(a,h):new Blob([a],{type:h}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)h=window.open("about:blank","_blank"),null==h?mxUtils.popup(a,!0):(h.document.write(a),h.document.close(),h.document.execCommand("SaveAs",!0,b),h.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height=
+"380px",this.showDialog(b.container,620,460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var c=document.createElement("a"),f=!mxClient.IS_SF&&"undefined"!==typeof c.download;if(f||this.isOffline()){c.href=URL.createObjectURL(d?this.base64ToBlob(a,h):new Blob([a],{type:h}));f?c.download=b:c.setAttribute("target","_blank");document.body.appendChild(c);try{window.setTimeout(function(){URL.revokeObjectURL(c.href)},0),c.click(),c.parentNode.removeChild(c)}catch(z){}}else this.createEchoRequest(a,
+b,h,d,e).simulate(document,"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,h,d,e,g){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=h?"&mime="+h:"")+(null!=e?"&format="+e:"")+(null!=g?"&base64="+g:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(d?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),f=c.length,d=Math.ceil(f/1024),e=Array(d),g=0;g<d;++g){for(var k=1024*g,l=Math.min(k+1024,f),n=Array(l-k),x=0;k<l;++x,++k)n[x]=
+c[k].charCodeAt(0);e[g]=new Uint8Array(n)}return new Blob(e,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,h,d,e,g,k){g=null!=g?g:!1;k=null!=k?k:"vsdx"!=e&&(!mxClient.IS_IOS||!navigator.standalone);e=this.getServiceCount(g);b=new CreateDialog(this,b,mxUtils.bind(this,function(b,c){try{if("_blank"==c)if(null==h||"image/"!=h.substring(0,6)||"image/svg"==h.substring(0,9)&&!mxClient.IS_SVG){var f=window.open("about:blank");null==f?mxUtils.popup(a,!0):(f.document.write(mxUtils.htmlEntities(a,
+!1)),f.document.close())}else this.openInNewWindow(a,h,d);else c==App.MODE_DEVICE?this.doSaveLocalFile(a,b,h,d):null!=b&&0<b.length&&this.pickFolder(c,mxUtils.bind(this,function(f){try{this.exportFile(a,b,h,d,c,f)}catch(A){this.handleError(A)}}))}catch(x){this.handleError(x)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,g,k,null,null,4<e?3:4,a,h,d);this.showDialog(b.container,380,e==(mxClient.IS_IOS?0:1)?160:4<e?390:270,!0,!0);b.init()};
+EditorUi.prototype.openInNewWindow=function(a,b,h){if(mxClient.IS_GC||mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var c=window.open("about:blank");null==c?mxUtils.popup(a,!0):("image/svg+xml"==b?c.document.write("<html>"+a+"</html>"):c.document.write('<html><img src="data:'+b+(h?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),c.document.close())}else c=window.open("data:"+b+(h?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==c&&mxUtils.popup(a,
+!0)};var d=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=function(a){if(this.isExportToCanvas()){this.exportDialog=null;var b=a(mxUtils.bind(this,function(a){var c=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",c);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)c.apply(this);else{this.exportDialog=document.createElement("div");
+var f=b.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=
+f.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+this.chromelessToolbar.offsetHeight+4+"px";f=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=f.zIndex;var h=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});h.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){h.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height=
+"auto";this.exportDialog.style.padding="10px";var b=this.createImageDataUri(a,null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",b);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(b.substring(b.indexOf(",")+1),"image/png",!0);c.apply(this,arguments)}))}),null,
+this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",c);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}d.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,h,d,e){this.isLocalFileSave()?this.saveLocalFile(h,a,d,e,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,c){return this.createEchoRequest(h,a,d,e,b,c)}),h,
+e,d)};EditorUi.prototype.saveRequest=function(a,b,h,d,e,g,k){k=null!=k?k:!mxClient.IS_IOS||!navigator.standalone;var c=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,c){if("_blank"==c||null!=a&&0<a.length){var f=h("_blank"==c?null:a,c==App.MODE_DEVICE||null==c||"_blank"==c?"0":"1");null!=f&&(c==App.MODE_DEVICE||"_blank"==c?f.simulate(document,"_blank"):this.pickFolder(c,mxUtils.bind(this,function(h){g=null!=g?g:"pdf"==b?"application/pdf":"image/"+b;if(null!=d)try{this.exportFile(d,
+a,g,!0,c,h)}catch(C){this.handleError(C)}else this.spinner.spin(document.body,mxResources.get("saving"))&&f.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=f.getStatus()&&299>=f.getStatus())try{this.exportFile(f.getText(),a,g,!0,c,h)}catch(C){this.handleError(C)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),
+!1,!1,k,null,null,4<c?3:4,d,g,e);this.showDialog(a.container,380,c==(mxClient.IS_IOS?0:1)?160:4<c?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,h,d,e,g){};EditorUi.prototype.pickFolder=function(a,b,h){b(null)};EditorUi.prototype.exportSvg=function(a,b,h,d,e,g,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var c=this.editor.graph.isSelectionEmpty();h=null!=h?h:c;c=b?null:this.editor.graph.background;
+c==mxConstants.NONE&&(c=null);null==c&&0==b&&(c="#ffffff");var f=this.editor.graph.getSvg(c,a,k,l,null,h);d&&this.editor.graph.addSvgShadow(f);var q=this.getBaseFilename()+".svg",u=mxUtils.bind(this,function(a){this.spinner.stop();e&&a.setAttribute("content",this.getFileData(!0,null,null,null,h,m));if(null!=this.editor.fontCss){var b=a.ownerDocument,b=null!=b.createElementNS?b.createElementNS(mxConstants.NS_SVG,"style"):b.createElement("style");b.setAttribute("type","text/css");mxUtils.setTextContent(b,
+this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(b)}var c='<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||c.length<=MAX_REQUEST_SIZE?this.saveData(q,"svg",c,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(c)}))});this.convertMath(this.editor.graph,f,!1,mxUtils.bind(this,function(){g?(null==
+this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(f,u,this.thumbImageCache)):u(f)}))}};EditorUi.prototype.addCheckbox=function(a,b,h,d,e,g){g=null!=g?g:!0;var c=document.createElement("input");c.style.marginRight="8px";c.style.marginTop="16px";c.setAttribute("type","checkbox");h&&(c.setAttribute("checked","checked"),c.defaultChecked=!0);d&&c.setAttribute("disabled","disabled");g&&(a.appendChild(c),mxUtils.write(a,b),e||mxUtils.br(a));return c};EditorUi.prototype.addEditButton=function(a,
+b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft="24px";var f=this.getCurrentFile(),d="";null!=f&&f.getMode()!=App.MODE_DEVICE&&f.getMode()!=App.MODE_BROWSER&&(d=window.location.href);var e=document.createElement("select");e.style.width="120px";e.style.marginLeft="8px";e.style.marginRight="10px";e.className="geBtn";f=document.createElement("option");f.setAttribute("value","blank");mxUtils.write(f,mxResources.get("makeCopy"));e.appendChild(f);f=document.createElement("option");
+f.setAttribute("value","custom");mxUtils.write(f,mxResources.get("custom")+"...");e.appendChild(f);a.appendChild(e);mxEvent.addListener(e,"change",mxUtils.bind(this,function(){if("custom"==e.value){var a=new FilenameDialog(this,d,mxResources.get("ok"),function(a){null!=a?d=a:e.value="blank"},mxResources.get("url"),null,null,null,null,function(){e.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||
+b.checked)?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled")}));mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===e.value?"_blank":d:null},getEditInput:function(){return c},getEditSelect:function(){return e}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){g.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=e&&e!=mxConstants.NONE?"border:1px solid black;background-color:"+e:"background-position:center center;background-repeat:no-repeat;background-image:url('"+
+Dialog.prototype.closeImage+"')")+';"></div>'}mxUtils.write(a,mxResources.get("links")+":");var f=document.createElement("select");f.style.width="100px";f.style.marginLeft="8px";f.style.marginRight="10px";f.className="geBtn";var d=document.createElement("option");d.setAttribute("value","auto");mxUtils.write(d,mxResources.get("automatic"));f.appendChild(d);d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("openInNewWindow"));f.appendChild(d);d=document.createElement("option");
+d.setAttribute("value","self");mxUtils.write(d,mxResources.get("openInThisWindow"));f.appendChild(d);b&&(d=document.createElement("option"),d.setAttribute("value","frame"),mxUtils.write(d,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),f.appendChild(d));a.appendChild(f);mxUtils.write(a,mxResources.get("borderColor")+":");var e="#0000ff",g=null,g=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(e||"none",function(a){e=a;c()});mxEvent.consume(a)}));c();g.style.padding=
+mxClient.IS_FF?"4px 2px 4px 2px":"4px";g.style.marginLeft="4px";g.style.height="22px";g.style.width="22px";g.style.position="relative";g.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";g.className="geColorBtn";a.appendChild(g);mxUtils.br(a);return{getColor:function(){return e},getTarget:function(){return f.value},focus:function(){f.focus()}}};EditorUi.prototype.createLink=function(a,b,d,e,g,k,l,m){var c=this.getCurrentFile(),f=[];e&&(f.push("lightbox=1"),"auto"!=a&&f.push("target="+
+a),null!=b&&b!=mxConstants.NONE&&f.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=g&&0<g.length&&f.push("edit="+encodeURIComponent(g)),k&&f.push("layers=1"),this.editor.graph.foldingEnabled&&f.push("nav=1"));if(d&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&f.push("page="+a);break}a=!0;null!=l?d="#U"+encodeURIComponent(l):(c=this.getCurrentFile(),m||null==c||c.constructor!=window.DriveFile?d="#R"+encodeURIComponent(d?
+this.getFileData(!0,null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(d="#"+c.getHash(),a=!1));a&&null!=c&&null!=c.getTitle()&&c.getTitle()!=this.defaultFilename&&f.push("title="+encodeURIComponent(c.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<f.length?"?"+f.join("&"):"")+d};EditorUi.prototype.createHtml=function(a,
+b,d,e,g,k,l,m,p,n,x){this.getBasenames();var c={};""!=g&&g!=mxConstants.NONE&&(c.highlight=g);"auto"!==e&&(c.target=e);p||(c.lightbox=!1);c.nav=this.editor.graph.foldingEnabled;d=parseInt(d);isNaN(d)||100==d||(c.zoom=d/100);d=[];l&&(d.push("pages"),c.resize=!0,null!=this.pages&&null!=this.currentPage&&(c.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(d.push("zoom"),c.resize=!0);m&&d.push("layers");0<d.length&&(p&&d.push("lightbox"),c.toolbar=d.join(" "));null!=n&&0<n.length&&(c.edit=n);null!=
+a?c.url=a:c.xml=this.getFileData(!0,null,null,null,null,!l);b='<div class="mxgraph" style="'+(k?"max-width:100%;":"")+(""!=d?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(c))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";x(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
 '">\x3c/script>')};EditorUi.prototype.showHtmlDialog=function(a,b,d,e){var c=document.createElement("div");c.style.whiteSpace="nowrap";var f=document.createElement("h3");mxUtils.write(f,mxResources.get("html"));f.style.cssText="width:100%;text-align:center;margin-top:0px;margin-bottom:12px";c.appendChild(f);var h=document.createElement("div");h.style.cssText="border-bottom:1px solid lightGray;padding-bottom:8px;margin-bottom:12px;";var g=document.createElement("input");g.style.cssText="margin-right:8px;margin-top:8px;margin-bottom:8px;";
 g.setAttribute("value","url");g.setAttribute("type","radio");g.setAttribute("name","type-embedhtmldialog");f=g.cloneNode(!0);f.setAttribute("value","copy");h.appendChild(f);var k=document.createElement("span");mxUtils.write(k,mxResources.get("includeCopyOfMyDiagram"));h.appendChild(k);mxUtils.br(h);h.appendChild(g);k=document.createElement("span");mxUtils.write(k,mxResources.get("publicDiagramUrl"));h.appendChild(k);var n=this.getCurrentFile();null==d&&null!=n&&n.constructor==window.DriveFile&&(k=
 document.createElement("a"),k.style.paddingLeft="12px",k.style.color="gray",k.setAttribute("href","javascript:void(0);"),mxUtils.write(k,mxResources.get("share")),h.appendChild(k),mxEvent.addListener(k,"click",mxUtils.bind(this,function(){this.hideDialog();this.drive.showPermissions(n.getId())})));f.setAttribute("checked","checked");null==d&&g.setAttribute("disabled","disabled");c.appendChild(h);var l=this.addLinkSection(c),u=this.addCheckbox(c,mxResources.get("zoom"),!0,null,!0);mxUtils.write(c,
@@ -6823,15 +6823,15 @@ App.getStoredMode=function(){var a=null;null==a&&isLocalStorage&&(a=localStorage
 2)?(mxscript(App.DROPBOX_URL),mxscript(App.DROPINS_URL,null,"dropboxjs",App.DROPBOX_APPKEY)):"0"==urlParams.chrome&&(window.DropboxClient=null):window.DropboxClient=null),"function"===typeof window.OneDriveClient&&("0"!=urlParams.od&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?App.mode==App.MODE_ONEDRIVE||null!=window.location.hash&&"#W"==window.location.hash.substring(0,2)?mxscript(App.ONEDRIVE_URL):"0"==urlParams.chrome&&(window.OneDriveClient=null):window.OneDriveClient=
 null),"function"===typeof window.TrelloClient&&("0"!=urlParams.tr&&isSvgBrowser&&(null==document.documentMode||10<=document.documentMode)?App.mode==App.MODE_TRELLO||null!=window.location.hash&&"#T"==window.location.hash.substring(0,2)?(mxscript(App.TRELLO_JQUERY_URL),mxscript(App.TRELLO_URL)):"0"==urlParams.chrome&&(window.TrelloClient=null):window.TrelloClient=null)),"undefined"==typeof JSON&&mxscript("js/json/json2.min.js")))})();
 App.main=function(a,d){var e=null;EditorUi.enableLogging&&(window.onerror=function(a,b,d,g,k){try{if(a!=e&&(null==a||null==b||-1==a.indexOf("Script error")&&-1==a.indexOf("extension"))&&null!=a&&0>a.indexOf("DocumentClosedError")){e=a;var c=new Image,f=0<=a.indexOf("NetworkError")||0<=a.indexOf("SecurityError")||0<=a.indexOf("NS_ERROR_FAILURE")||0<=a.indexOf("out of memory")?"CONFIG":"SEVERE";c.src=(null!=window.DRAWIO_LOG_URL?window.DRAWIO_LOG_URL:"")+"/log?severity="+f+"&v="+encodeURIComponent(EditorUi.VERSION)+
-"&msg=clientError:"+encodeURIComponent(a)+":url:"+encodeURIComponent(window.location.href)+":lnum:"+encodeURIComponent(d)+(null!=g?":colno:"+encodeURIComponent(g):"")+(null!=k&&null!=k.stack?"&stack="+encodeURIComponent(k.stack):"")}}catch(w){}});"atlas"==uiTheme?mxClient.link("stylesheet","styles/atlas.css"):"dark"==uiTheme&&mxClient.link("stylesheet","styles/dark.css");if(null!=window.mxscript){if("1"==urlParams.offline){mxscript("js/shapes.min.js");var b=document.createElement("iframe");b.setAttribute("width",
-"0");b.setAttribute("height","0");b.setAttribute("src","offline.html");document.body.appendChild(b)}if("0"!=urlParams.plugins&&"1"!=urlParams.offline){var b=mxSettings.getPlugins(),g=urlParams.p;App.initPluginCallback();if(null!=g){var k="";"1"==urlParams.drawdev&&(k=document.location.protocol+"//drawhost.jgraph.com/");for(var l=g.split(";"),g=0;g<l.length;g++){var m=App.pluginRegistry[l[g]];null!=m?mxscript(k+m):null!=window.console&&console.log("Unknown plugin:",l[g])}}else"0"==urlParams.chrome||
-EditorUi.isElectronApp||mxscript(App.FOOTER_PLUGIN_URL);if(null!=b&&0<b.length&&"0"!=urlParams.plugins){k=window.location.protocol+"//"+window.location.host;l=!0;for(g=0;g<b.length&&l;g++)"/"!=b[g].charAt(0)&&b[g].substring(0,k.length)!=k&&(l=!1);if(l||mxUtils.confirm(mxResources.replacePlaceholders("The page has requested to load the following plugin(s):\n \n {1}\n \n Would you like to load these plugin(s) now?\n \n NOTE : Only allow plugins to run if you fully understand the security implications of doing so.\n",
-[b.join("\n")]).replace(/\\n/g,"\n")))for(g=0;g<b.length;g++)try{mxscript(b[g])}catch(p){}}}"function"===typeof window.DriveClient&&"undefined"===typeof gapi&&("1"!=urlParams.embed&&"0"!=urlParams.gapi||"1"==urlParams.embed&&"1"==urlParams.gapi)&&isSvgBrowser&&isLocalStorage&&(null==document.documentMode||10<=document.documentMode)?mxscript("https://apis.google.com/js/api.js?onload=DrawGapiClientCallback"):"undefined"===typeof window.gapi&&(window.DriveClient=null)}"0"!=urlParams.math&&Editor.initMath();
-mxResources.loadDefaultBundle=!1;b=mxResources.getDefaultBundle(RESOURCE_BASE,mxLanguage)||mxResources.getSpecialBundle(RESOURCE_BASE,mxLanguage);mxUtils.getAll("1"!=urlParams.dev?[b]:[b,"dark"==uiTheme?STYLE_PATH+"/dark-default.xml":STYLE_PATH+"/default.xml"],function(b){mxResources.parse(b[0].getText());1<b.length&&(Graph.prototype.defaultThemes[Graph.prototype.defaultThemeName]=b[1].getDocumentElement());b=null!=d?d():new App(new Editor("0"==urlParams.chrome));if(null!=window.mxscript){if("function"===
-typeof window.DropboxClient&&null==window.Dropbox&&null!=window.DrawDropboxClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.db||"1"==urlParams.embed&&"1"==urlParams.db)&&isSvgBrowser&&(null==document.documentMode||9<document.documentMode))mxscript(App.DROPBOX_URL,function(){mxscript(App.DROPINS_URL,function(){DrawDropboxClientCallback()},"dropboxjs",App.DROPBOX_APPKEY)});else if("undefined"===typeof window.Dropbox||"undefined"===typeof window.Dropbox.choose)window.DropboxClient=null;"function"===
-typeof window.OneDriveClient&&"undefined"===typeof OneDrive&&null!=window.DrawOneDriveClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.od||"1"==urlParams.embed&&"1"==urlParams.od)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?mxscript(App.ONEDRIVE_URL,window.DrawOneDriveClientCallback):"undefined"===typeof window.OneDrive&&(window.OneDriveClient=null);"function"===typeof window.TrelloClient&&"undefined"===typeof window.Trello&&null!=window.DrawTrelloClientCallback&&("1"!=
-urlParams.embed&&"0"!=urlParams.tr||"1"==urlParams.embed&&"1"==urlParams.tr)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?mxscript(App.TRELLO_JQUERY_URL,function(){mxscript(App.TRELLO_URL,function(){DrawTrelloClientCallback()})}):"undefined"===typeof window.Trello&&(window.TrelloClient=null)}null!=a&&a(b);"0"!=urlParams.chrome&&"1"==urlParams.test&&(mxLog.show(),mxLog.debug("Started in "+((new Date).getTime()-t0.getTime())+"ms"),mxLog.debug("Export:",EXPORT_URL),mxLog.debug("Development mode:",
-"1"==urlParams.dev?"active":"inactive"),mxLog.debug("Test mode:","1"==urlParams.test?"active":"inactive"))},function(){document.getElementById("geStatus").innerHTML='Error loading page. <a href="javascript:void(0);" onclick="location.reload();">Please try refreshing.</a>'})};mxUtils.extend(App,EditorUi);App.prototype.defaultUserPicture="https://lh3.googleusercontent.com/-HIzvXUy6QUY/AAAAAAAAAAI/AAAAAAAAAAA/giuR7PQyjEk/photo.jpg?sz=30";App.prototype.shareImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowOTgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMjU2NzdEMTcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMjU2NzdEMDcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNjgwMTE3NDA3MjA2ODExODcxRkM4MUY1OTFDMjQ5OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrM/fs0AAADgSURBVHjaYmDAA/7//88MwgzkAKDGFiD+BsQ/QWxSNaf9RwN37twpI8WAS+gGfP78+RpQSoRYA36iG/D379+vQClNdLVMOMz4gi7w79+/n0CKg1gD9qELvH379hzIHGK9oA508ieY8//8+fO5rq4uFCilRKwL1JmYmNhhHEZGRiZ+fn6Q2meEbDYG4u3/cYCfP38uA7kOm0ZOIJ7zn0jw48ePPiDFhmzArv8kgi9fvuwB+w5qwH9ykjswbFSZyM4sEMDPBDTlL5BxkFSd7969OwZ2BZKYGhDzkmjOJ4AAAwBhpRqGnEFb8QAAAABJRU5ErkJggg==";
+"&msg=clientError:"+encodeURIComponent(a)+":url:"+encodeURIComponent(window.location.href)+":lnum:"+encodeURIComponent(d)+(null!=g?":colno:"+encodeURIComponent(g):"")+(null!=k&&null!=k.stack?"&stack="+encodeURIComponent(k.stack):"")}}catch(w){}});if(null!=window.mxscript){if("1"==urlParams.offline){mxscript("js/shapes.min.js");var b=document.createElement("iframe");b.setAttribute("width","0");b.setAttribute("height","0");b.setAttribute("src","offline.html");document.body.appendChild(b)}if("0"!=urlParams.plugins&&
+"1"!=urlParams.offline){var b=mxSettings.getPlugins(),g=urlParams.p;App.initPluginCallback();if(null!=g){var k="";"1"==urlParams.drawdev&&(k=document.location.protocol+"//drawhost.jgraph.com/");for(var l=g.split(";"),g=0;g<l.length;g++){var m=App.pluginRegistry[l[g]];null!=m?mxscript(k+m):null!=window.console&&console.log("Unknown plugin:",l[g])}}else"0"==urlParams.chrome||EditorUi.isElectronApp||mxscript(App.FOOTER_PLUGIN_URL);if(null!=b&&0<b.length&&"0"!=urlParams.plugins){k=window.location.protocol+
+"//"+window.location.host;l=!0;for(g=0;g<b.length&&l;g++)"/"!=b[g].charAt(0)&&b[g].substring(0,k.length)!=k&&(l=!1);if(l||mxUtils.confirm(mxResources.replacePlaceholders("The page has requested to load the following plugin(s):\n \n {1}\n \n Would you like to load these plugin(s) now?\n \n NOTE : Only allow plugins to run if you fully understand the security implications of doing so.\n",[b.join("\n")]).replace(/\\n/g,"\n")))for(g=0;g<b.length;g++)try{mxscript(b[g])}catch(p){}}}"function"===typeof window.DriveClient&&
+"undefined"===typeof gapi&&("1"!=urlParams.embed&&"0"!=urlParams.gapi||"1"==urlParams.embed&&"1"==urlParams.gapi)&&isSvgBrowser&&isLocalStorage&&(null==document.documentMode||10<=document.documentMode)?mxscript("https://apis.google.com/js/api.js?onload=DrawGapiClientCallback"):"undefined"===typeof window.gapi&&(window.DriveClient=null)}"0"!=urlParams.math&&Editor.initMath();mxResources.loadDefaultBundle=!1;b=mxResources.getDefaultBundle(RESOURCE_BASE,mxLanguage)||mxResources.getSpecialBundle(RESOURCE_BASE,
+mxLanguage);mxUtils.getAll("1"!=urlParams.dev?[b]:[b,"dark"==uiTheme?STYLE_PATH+"/dark-default.xml":STYLE_PATH+"/default.xml"],function(b){mxResources.parse(b[0].getText());1<b.length&&(Graph.prototype.defaultThemes[Graph.prototype.defaultThemeName]=b[1].getDocumentElement());b=null!=d?d():new App(new Editor("0"==urlParams.chrome));if(null!=window.mxscript){if("function"===typeof window.DropboxClient&&null==window.Dropbox&&null!=window.DrawDropboxClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.db||
+"1"==urlParams.embed&&"1"==urlParams.db)&&isSvgBrowser&&(null==document.documentMode||9<document.documentMode))mxscript(App.DROPBOX_URL,function(){mxscript(App.DROPINS_URL,function(){DrawDropboxClientCallback()},"dropboxjs",App.DROPBOX_APPKEY)});else if("undefined"===typeof window.Dropbox||"undefined"===typeof window.Dropbox.choose)window.DropboxClient=null;"function"===typeof window.OneDriveClient&&"undefined"===typeof OneDrive&&null!=window.DrawOneDriveClientCallback&&("1"!=urlParams.embed&&"0"!=
+urlParams.od||"1"==urlParams.embed&&"1"==urlParams.od)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?mxscript(App.ONEDRIVE_URL,window.DrawOneDriveClientCallback):"undefined"===typeof window.OneDrive&&(window.OneDriveClient=null);"function"===typeof window.TrelloClient&&"undefined"===typeof window.Trello&&null!=window.DrawTrelloClientCallback&&("1"!=urlParams.embed&&"0"!=urlParams.tr||"1"==urlParams.embed&&"1"==urlParams.tr)&&(0>navigator.userAgent.indexOf("MSIE")||10<=document.documentMode)?
+mxscript(App.TRELLO_JQUERY_URL,function(){mxscript(App.TRELLO_URL,function(){DrawTrelloClientCallback()})}):"undefined"===typeof window.Trello&&(window.TrelloClient=null)}null!=a&&a(b);"0"!=urlParams.chrome&&"1"==urlParams.test&&(mxLog.show(),mxLog.debug("Started in "+((new Date).getTime()-t0.getTime())+"ms"),mxLog.debug("Export:",EXPORT_URL),mxLog.debug("Development mode:","1"==urlParams.dev?"active":"inactive"),mxLog.debug("Test mode:","1"==urlParams.test?"active":"inactive"))},function(){document.getElementById("geStatus").innerHTML=
+'Error loading page. <a href="javascript:void(0);" onclick="location.reload();">Please try refreshing.</a>'})};mxUtils.extend(App,EditorUi);App.prototype.defaultUserPicture="https://lh3.googleusercontent.com/-HIzvXUy6QUY/AAAAAAAAAAI/AAAAAAAAAAA/giuR7PQyjEk/photo.jpg?sz=30";App.prototype.shareImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowOTgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxMjU2NzdEMTcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxMjU2NzdEMDcwRDIxMUUxQjc0MDkxRDhCNUQzOEFGRCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNjgwMTE3NDA3MjA2ODExODcxRkM4MUY1OTFDMjQ5OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowNzgwMTE3NDA3MjA2ODExODhDNkFGMDBEQkQ0RTgwOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrM/fs0AAADgSURBVHjaYmDAA/7//88MwgzkAKDGFiD+BsQ/QWxSNaf9RwN37twpI8WAS+gGfP78+RpQSoRYA36iG/D379+vQClNdLVMOMz4gi7w79+/n0CKg1gD9qELvH379hzIHGK9oA508ieY8//8+fO5rq4uFCilRKwL1JmYmNhhHEZGRiZ+fn6Q2meEbDYG4u3/cYCfP38uA7kOm0ZOIJ7zn0jw48ePPiDFhmzArv8kgi9fvuwB+w5qwH9ykjswbFSZyM4sEMDPBDTlL5BxkFSd7969OwZ2BZKYGhDzkmjOJ4AAAwBhpRqGnEFb8QAAAABJRU5ErkJggg==";
 App.prototype.chevronUpImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDg2NEE3NUY1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDg2NEE3NjA1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ODY0QTc1RDUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0ODY0QTc1RTUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg+qUokAAAAMUExURQAAANnZ2b+/v////5bgre4AAAAEdFJOU////wBAKqn0AAAAL0lEQVR42mJgRgMMRAswMKAKMDDARBjg8lARBoR6KImkH0wTbygT6YaS4DmAAAMAYPkClOEDDD0AAAAASUVORK5CYII=":
 IMAGE_PATH+"/chevron-up.png";
 App.prototype.chevronDownImage=mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDg2NEE3NUI1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDg2NEE3NUM1MUVBMTFFM0I3MUVEMTc0N0YyOUI4QzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0ODY0QTc1OTUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0ODY0QTc1QTUxRUExMUUzQjcxRUQxNzQ3RjI5QjhDMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsCtve8AAAAMUExURQAAANnZ2b+/v////5bgre4AAAAEdFJOU////wBAKqn0AAAALUlEQVR42mJgRgMMRAkwQEXBNAOcBSPhclB1cNVwfcxI+vEZykSpoSR6DiDAAF23ApT99bZ+AAAAAElFTkSuQmCC":IMAGE_PATH+
diff --git a/war/js/deflate/base64.js b/src/main/webapp/js/deflate/base64.js
similarity index 100%
rename from war/js/deflate/base64.js
rename to src/main/webapp/js/deflate/base64.js
diff --git a/war/js/deflate/pako.min.js b/src/main/webapp/js/deflate/pako.min.js
similarity index 100%
rename from war/js/deflate/pako.min.js
rename to src/main/webapp/js/deflate/pako.min.js
diff --git a/war/js/diagramly/App.js b/src/main/webapp/js/diagramly/App.js
similarity index 99%
rename from war/js/diagramly/App.js
rename to src/main/webapp/js/diagramly/App.js
index f3b35a2d2cbeaa09e3f580b6f87b6df0a8199753..14a1f598279d576d78c975de94f289b7678c38d5 100644
--- a/war/js/diagramly/App.js
+++ b/src/main/webapp/js/diagramly/App.js
@@ -440,18 +440,6 @@ App.main = function(callback, createUi)
 		};
 	}
 
-	/**
-	 * Lazy loading of additional CSS for atlas theme.
-	 */
-	if (uiTheme == 'atlas')
-	{
-		mxClient.link('stylesheet', 'styles/atlas.css');
-	}
-	else if (uiTheme == 'dark')
-	{
-		mxClient.link('stylesheet', 'styles/dark.css');
-	}
-	
 	if (window.mxscript != null)
 	{
 		/**
diff --git a/war/js/diagramly/ChatWindow.js b/src/main/webapp/js/diagramly/ChatWindow.js
similarity index 100%
rename from war/js/diagramly/ChatWindow.js
rename to src/main/webapp/js/diagramly/ChatWindow.js
diff --git a/war/js/diagramly/DevTools.js b/src/main/webapp/js/diagramly/DevTools.js
similarity index 100%
rename from war/js/diagramly/DevTools.js
rename to src/main/webapp/js/diagramly/DevTools.js
diff --git a/war/js/diagramly/Devel.js b/src/main/webapp/js/diagramly/Devel.js
similarity index 100%
rename from war/js/diagramly/Devel.js
rename to src/main/webapp/js/diagramly/Devel.js
diff --git a/war/js/diagramly/Dialogs.js b/src/main/webapp/js/diagramly/Dialogs.js
similarity index 100%
rename from war/js/diagramly/Dialogs.js
rename to src/main/webapp/js/diagramly/Dialogs.js
diff --git a/war/js/diagramly/DistanceGuides.js b/src/main/webapp/js/diagramly/DistanceGuides.js
similarity index 100%
rename from war/js/diagramly/DistanceGuides.js
rename to src/main/webapp/js/diagramly/DistanceGuides.js
diff --git a/war/js/diagramly/DrawioClient.js b/src/main/webapp/js/diagramly/DrawioClient.js
similarity index 100%
rename from war/js/diagramly/DrawioClient.js
rename to src/main/webapp/js/diagramly/DrawioClient.js
diff --git a/war/js/diagramly/DrawioFile.js b/src/main/webapp/js/diagramly/DrawioFile.js
similarity index 100%
rename from war/js/diagramly/DrawioFile.js
rename to src/main/webapp/js/diagramly/DrawioFile.js
diff --git a/war/js/diagramly/DrawioUser.js b/src/main/webapp/js/diagramly/DrawioUser.js
similarity index 100%
rename from war/js/diagramly/DrawioUser.js
rename to src/main/webapp/js/diagramly/DrawioUser.js
diff --git a/war/js/diagramly/DriveClient.js b/src/main/webapp/js/diagramly/DriveClient.js
similarity index 100%
rename from war/js/diagramly/DriveClient.js
rename to src/main/webapp/js/diagramly/DriveClient.js
diff --git a/war/js/diagramly/DriveFile.js b/src/main/webapp/js/diagramly/DriveFile.js
similarity index 100%
rename from war/js/diagramly/DriveFile.js
rename to src/main/webapp/js/diagramly/DriveFile.js
diff --git a/war/js/diagramly/DriveLibrary.js b/src/main/webapp/js/diagramly/DriveLibrary.js
similarity index 100%
rename from war/js/diagramly/DriveLibrary.js
rename to src/main/webapp/js/diagramly/DriveLibrary.js
diff --git a/war/js/diagramly/DriveRealtime.js b/src/main/webapp/js/diagramly/DriveRealtime.js
similarity index 100%
rename from war/js/diagramly/DriveRealtime.js
rename to src/main/webapp/js/diagramly/DriveRealtime.js
diff --git a/war/js/diagramly/DropboxClient.js b/src/main/webapp/js/diagramly/DropboxClient.js
similarity index 100%
rename from war/js/diagramly/DropboxClient.js
rename to src/main/webapp/js/diagramly/DropboxClient.js
diff --git a/war/js/diagramly/DropboxFile.js b/src/main/webapp/js/diagramly/DropboxFile.js
similarity index 100%
rename from war/js/diagramly/DropboxFile.js
rename to src/main/webapp/js/diagramly/DropboxFile.js
diff --git a/war/js/diagramly/DropboxLibrary.js b/src/main/webapp/js/diagramly/DropboxLibrary.js
similarity index 100%
rename from war/js/diagramly/DropboxLibrary.js
rename to src/main/webapp/js/diagramly/DropboxLibrary.js
diff --git a/war/js/diagramly/Editor.js b/src/main/webapp/js/diagramly/Editor.js
similarity index 100%
rename from war/js/diagramly/Editor.js
rename to src/main/webapp/js/diagramly/Editor.js
diff --git a/war/js/diagramly/EditorUi.js b/src/main/webapp/js/diagramly/EditorUi.js
similarity index 99%
rename from war/js/diagramly/EditorUi.js
rename to src/main/webapp/js/diagramly/EditorUi.js
index ef2d9c9ddd080e8dfb5e8fa19edf0d4388be69da..8bbdca03b8a1d6a45b6e456dd86586e0b696bfac 100644
--- a/war/js/diagramly/EditorUi.js
+++ b/src/main/webapp/js/diagramly/EditorUi.js
@@ -2238,31 +2238,11 @@
     }
     else
     {
-	    	if (uiTheme == 'atlas')
-	    	{
-	    		if (typeof Toolbar !== 'undefined')
-	    		{
-	    			Toolbar.prototype.unselectedBackground = (mxClient.IS_QUIRKS) ? 'none' : 'linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)';
-	    			Toolbar.prototype.selectedBackground = 'rgb(242, 242, 242)';
-	    		}
-	    		
-	    		Editor.prototype.initialTopSpacing = 3;
-	    		EditorUi.prototype.menubarHeight = 41;
-	    		EditorUi.prototype.toolbarHeight = 38;
-	    		EditorUi.prototype.hsplitPosition = 188;
-	    		Sidebar.prototype.thumbWidth = 46;
-	    		Sidebar.prototype.thumbHeight = 46;
-	    		Sidebar.prototype.thumbPadding = (document.documentMode >= 5) ? 0 : 1;
-	    		Sidebar.prototype.thumbBorder = 2;
-	    	}
-	    	else
-	    	{
-	    		if (urlParams['savesidebar'] == '1')
-	    		{
-	        		Sidebar.prototype.thumbWidth = 64;
-	        		Sidebar.prototype.thumbHeight = 64;
-	    		}
-	    	}
+    		if (urlParams['savesidebar'] == '1')
+    		{
+        		Sidebar.prototype.thumbWidth = 64;
+        		Sidebar.prototype.thumbHeight = 64;
+    		}
 
 		EditorUi.prototype.footerHeight = (screen.width >= 760 && screen.height >= 240) ? 46 : 0;
 		
@@ -2301,25 +2281,51 @@
 		};
     }
     
-    if (uiTheme == 'dark')
-	{
-    		Graph.prototype.defaultThemeName = 'darkTheme';
-		Dialog.backdropColor = '#2a2a2a';
-		Graph.prototype.defaultPageBackgroundColor = '#2a2a2a';
-		Graph.prototype.defaultGraphBackground = null;
-		Graph.prototype.defaultPageBorderColor = '#505759';
-		Format.prototype.inactiveTabBackgroundColor = 'black';
-		BaseFormatPanel.prototype.buttonBackgroundColor = '#2a2a2a';
-		Sidebar.prototype.dragPreviewBorder = '1px dashed #cccccc';
-		mxGraphHandler.prototype.previewColor = '#cccccc';
-		StyleFormatPanel.prototype.defaultStrokeColor = '#cccccc';
-		
-		if (mxClient.IS_SVG)
-		{
-			Editor.helpImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=';
-			Editor.checkmarkImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg==';
+    EditorUi.initTheme = function()
+    {
+	    	if (uiTheme == 'atlas')
+	    	{
+	    		mxClient.link('stylesheet', 'styles/atlas.css');
+
+	    		if (typeof Toolbar !== 'undefined')
+	    		{
+	    			Toolbar.prototype.unselectedBackground = (mxClient.IS_QUIRKS) ? 'none' : 'linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)';
+	    			Toolbar.prototype.selectedBackground = 'rgb(242, 242, 242)';
+	    		}
+	    		
+	    		Editor.prototype.initialTopSpacing = 3;
+	    		EditorUi.prototype.menubarHeight = 41;
+	    		EditorUi.prototype.toolbarHeight = 38;
+	    		EditorUi.prototype.hsplitPosition = 188;
+	    		Sidebar.prototype.thumbWidth = 46;
+	    		Sidebar.prototype.thumbHeight = 46;
+	    		Sidebar.prototype.thumbPadding = (document.documentMode >= 5) ? 0 : 1;
+	    		Sidebar.prototype.thumbBorder = 2;
+	    	}
+	    	else if (uiTheme == 'dark')
+	    	{
+	    		mxClient.link('stylesheet', 'styles/dark.css');
+
+			Dialog.backdropColor = '#2a2a2a';
+	    		Graph.prototype.defaultThemeName = 'darkTheme';
+			Graph.prototype.defaultPageBackgroundColor = '#2a2a2a';
+			Graph.prototype.defaultGraphBackground = null;
+			Graph.prototype.defaultPageBorderColor = '#505759';
+			Format.prototype.inactiveTabBackgroundColor = 'black';
+			BaseFormatPanel.prototype.buttonBackgroundColor = '#2a2a2a';
+			Sidebar.prototype.dragPreviewBorder = '1px dashed #cccccc';
+			mxGraphHandler.prototype.previewColor = '#cccccc';
+			StyleFormatPanel.prototype.defaultStrokeColor = '#cccccc';
+			
+			if (mxClient.IS_SVG)
+			{
+				Editor.helpImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=';
+				Editor.checkmarkImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg==';
+			}
 		}
-	}
+    };
+    
+    EditorUi.initTheme();
     
     /**
      * Hides the footer.
diff --git a/war/js/diagramly/ElectronApp.js b/src/main/webapp/js/diagramly/ElectronApp.js
similarity index 99%
rename from war/js/diagramly/ElectronApp.js
rename to src/main/webapp/js/diagramly/ElectronApp.js
index a3ad6c9d11e93b2302017bca04b7acc5da917915..57e7d45db36187fe7ae19f1c996c0b203616c3d3 100644
--- a/war/js/diagramly/ElectronApp.js
+++ b/src/main/webapp/js/diagramly/ElectronApp.js
@@ -97,6 +97,8 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
 		
 		this.put('extras', new Menu(mxUtils.bind(this, function(menu, parent)
 		{
+			this.addSubmenu('theme', menu, parent);
+			menu.addSeparator(parent);
 			this.addMenuItems(menu, ['copyConnect', 'collapseExpand', '-'], parent);
 
 			if (typeof(MathJax) !== 'undefined')
diff --git a/war/js/diagramly/Embed.js b/src/main/webapp/js/diagramly/Embed.js
similarity index 100%
rename from war/js/diagramly/Embed.js
rename to src/main/webapp/js/diagramly/Embed.js
diff --git a/war/js/diagramly/Extensions.js b/src/main/webapp/js/diagramly/Extensions.js
similarity index 100%
rename from war/js/diagramly/Extensions.js
rename to src/main/webapp/js/diagramly/Extensions.js
diff --git a/war/js/diagramly/GitHubClient.js b/src/main/webapp/js/diagramly/GitHubClient.js
similarity index 100%
rename from war/js/diagramly/GitHubClient.js
rename to src/main/webapp/js/diagramly/GitHubClient.js
diff --git a/war/js/diagramly/GitHubFile.js b/src/main/webapp/js/diagramly/GitHubFile.js
similarity index 100%
rename from war/js/diagramly/GitHubFile.js
rename to src/main/webapp/js/diagramly/GitHubFile.js
diff --git a/war/js/diagramly/GitHubLibrary.js b/src/main/webapp/js/diagramly/GitHubLibrary.js
similarity index 100%
rename from war/js/diagramly/GitHubLibrary.js
rename to src/main/webapp/js/diagramly/GitHubLibrary.js
diff --git a/war/js/diagramly/GraphViewer.js b/src/main/webapp/js/diagramly/GraphViewer.js
similarity index 100%
rename from war/js/diagramly/GraphViewer.js
rename to src/main/webapp/js/diagramly/GraphViewer.js
diff --git a/war/js/diagramly/Init.js b/src/main/webapp/js/diagramly/Init.js
similarity index 100%
rename from war/js/diagramly/Init.js
rename to src/main/webapp/js/diagramly/Init.js
diff --git a/war/js/diagramly/LocalFile.js b/src/main/webapp/js/diagramly/LocalFile.js
similarity index 100%
rename from war/js/diagramly/LocalFile.js
rename to src/main/webapp/js/diagramly/LocalFile.js
diff --git a/war/js/diagramly/LocalLibrary.js b/src/main/webapp/js/diagramly/LocalLibrary.js
similarity index 100%
rename from war/js/diagramly/LocalLibrary.js
rename to src/main/webapp/js/diagramly/LocalLibrary.js
diff --git a/war/js/diagramly/Menus.js b/src/main/webapp/js/diagramly/Menus.js
similarity index 100%
rename from war/js/diagramly/Menus.js
rename to src/main/webapp/js/diagramly/Menus.js
diff --git a/war/js/diagramly/OneDriveClient.js b/src/main/webapp/js/diagramly/OneDriveClient.js
similarity index 100%
rename from war/js/diagramly/OneDriveClient.js
rename to src/main/webapp/js/diagramly/OneDriveClient.js
diff --git a/war/js/diagramly/OneDriveFile.js b/src/main/webapp/js/diagramly/OneDriveFile.js
similarity index 100%
rename from war/js/diagramly/OneDriveFile.js
rename to src/main/webapp/js/diagramly/OneDriveFile.js
diff --git a/war/js/diagramly/OneDriveLibrary.js b/src/main/webapp/js/diagramly/OneDriveLibrary.js
similarity index 100%
rename from war/js/diagramly/OneDriveLibrary.js
rename to src/main/webapp/js/diagramly/OneDriveLibrary.js
diff --git a/war/js/diagramly/Pages.js b/src/main/webapp/js/diagramly/Pages.js
similarity index 100%
rename from war/js/diagramly/Pages.js
rename to src/main/webapp/js/diagramly/Pages.js
diff --git a/war/js/diagramly/RealtimeMapping.js b/src/main/webapp/js/diagramly/RealtimeMapping.js
similarity index 100%
rename from war/js/diagramly/RealtimeMapping.js
rename to src/main/webapp/js/diagramly/RealtimeMapping.js
diff --git a/war/js/diagramly/Settings.js b/src/main/webapp/js/diagramly/Settings.js
similarity index 100%
rename from war/js/diagramly/Settings.js
rename to src/main/webapp/js/diagramly/Settings.js
diff --git a/war/js/diagramly/StorageFile.js b/src/main/webapp/js/diagramly/StorageFile.js
similarity index 100%
rename from war/js/diagramly/StorageFile.js
rename to src/main/webapp/js/diagramly/StorageFile.js
diff --git a/war/js/diagramly/StorageLibrary.js b/src/main/webapp/js/diagramly/StorageLibrary.js
similarity index 100%
rename from war/js/diagramly/StorageLibrary.js
rename to src/main/webapp/js/diagramly/StorageLibrary.js
diff --git a/war/js/diagramly/Trees.js b/src/main/webapp/js/diagramly/Trees.js
similarity index 100%
rename from war/js/diagramly/Trees.js
rename to src/main/webapp/js/diagramly/Trees.js
diff --git a/war/js/diagramly/TrelloClient.js b/src/main/webapp/js/diagramly/TrelloClient.js
similarity index 100%
rename from war/js/diagramly/TrelloClient.js
rename to src/main/webapp/js/diagramly/TrelloClient.js
diff --git a/war/js/diagramly/TrelloFile.js b/src/main/webapp/js/diagramly/TrelloFile.js
similarity index 100%
rename from war/js/diagramly/TrelloFile.js
rename to src/main/webapp/js/diagramly/TrelloFile.js
diff --git a/war/js/diagramly/TrelloLibrary.js b/src/main/webapp/js/diagramly/TrelloLibrary.js
similarity index 100%
rename from war/js/diagramly/TrelloLibrary.js
rename to src/main/webapp/js/diagramly/TrelloLibrary.js
diff --git a/war/js/diagramly/UrlLibrary.js b/src/main/webapp/js/diagramly/UrlLibrary.js
similarity index 100%
rename from war/js/diagramly/UrlLibrary.js
rename to src/main/webapp/js/diagramly/UrlLibrary.js
diff --git a/war/js/diagramly/graphml/mxGraphMlCodec.js b/src/main/webapp/js/diagramly/graphml/mxGraphMlCodec.js
similarity index 100%
rename from war/js/diagramly/graphml/mxGraphMlCodec.js
rename to src/main/webapp/js/diagramly/graphml/mxGraphMlCodec.js
diff --git a/war/js/diagramly/ruler/mxRuler.js b/src/main/webapp/js/diagramly/ruler/mxRuler.js
similarity index 100%
rename from war/js/diagramly/ruler/mxRuler.js
rename to src/main/webapp/js/diagramly/ruler/mxRuler.js
diff --git a/war/js/diagramly/sidebar/Sidebar-AWS.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-AWS.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-AWS.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-AWS.js
diff --git a/war/js/diagramly/sidebar/Sidebar-AWS3.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-AWS3.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-AWS3.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-AWS3.js
diff --git a/war/js/diagramly/sidebar/Sidebar-AWS3D.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-AWS3D.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-AWS3D.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-AWS3D.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Advanced.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Advanced.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Advanced.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Advanced.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Android.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Android.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Android.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Android.js
diff --git a/war/js/diagramly/sidebar/Sidebar-ArchiMate.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-ArchiMate.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-ArchiMate.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-ArchiMate.js
diff --git a/war/js/diagramly/sidebar/Sidebar-ArchiMate3.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-ArchiMate3.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-ArchiMate3.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-ArchiMate3.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Arrows2.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Arrows2.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Arrows2.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Arrows2.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Atlassian.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Atlassian.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Atlassian.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Atlassian.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Azure.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Azure.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Azure.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Azure.js
diff --git a/war/js/diagramly/sidebar/Sidebar-BPMN.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-BPMN.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-BPMN.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-BPMN.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Basic.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Basic.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Basic.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Basic.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Bootstrap.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Bootstrap.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Bootstrap.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Bootstrap.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Cabinet.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Cabinet.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Cabinet.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Cabinet.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Citrix.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Citrix.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Citrix.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Citrix.js
diff --git a/war/js/diagramly/sidebar/Sidebar-EIP.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-EIP.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-EIP.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-EIP.js
diff --git a/war/js/diagramly/sidebar/Sidebar-ER.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-ER.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-ER.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-ER.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Electrical.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Electrical.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Electrical.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Electrical.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Floorplan.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Floorplan.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Floorplan.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Floorplan.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Flowchart.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Flowchart.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Flowchart.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Flowchart.js
diff --git a/war/js/diagramly/sidebar/Sidebar-GCP.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-GCP.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-GCP.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-GCP.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Gmdl.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Gmdl.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Gmdl.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Gmdl.js
diff --git a/war/js/diagramly/sidebar/Sidebar-IBM.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-IBM.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-IBM.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-IBM.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Ios.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Ios.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Ios.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Ios.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Ios7.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Ios7.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Ios7.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Ios7.js
diff --git a/war/js/diagramly/sidebar/Sidebar-LeanMapping.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-LeanMapping.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-LeanMapping.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-LeanMapping.js
diff --git a/war/js/diagramly/sidebar/Sidebar-MSCAE.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-MSCAE.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-MSCAE.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-MSCAE.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Mockup.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Mockup.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Mockup.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Mockup.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Network.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Network.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Network.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Network.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Office.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Office.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Office.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Office.js
diff --git a/war/js/diagramly/sidebar/Sidebar-PID.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-PID.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-PID.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-PID.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Rack.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Rack.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Rack.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Rack.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Sitemap.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Sitemap.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Sitemap.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Sitemap.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Sysml.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Sysml.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Sysml.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Sysml.js
diff --git a/war/js/diagramly/sidebar/Sidebar-Veeam.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-Veeam.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-Veeam.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-Veeam.js
diff --git a/war/js/diagramly/sidebar/Sidebar-WebIcons.js b/src/main/webapp/js/diagramly/sidebar/Sidebar-WebIcons.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar-WebIcons.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar-WebIcons.js
diff --git a/war/js/diagramly/sidebar/Sidebar.js b/src/main/webapp/js/diagramly/sidebar/Sidebar.js
similarity index 100%
rename from war/js/diagramly/sidebar/Sidebar.js
rename to src/main/webapp/js/diagramly/sidebar/Sidebar.js
diff --git a/war/js/diagramly/util/mxAsyncCanvas.js b/src/main/webapp/js/diagramly/util/mxAsyncCanvas.js
similarity index 100%
rename from war/js/diagramly/util/mxAsyncCanvas.js
rename to src/main/webapp/js/diagramly/util/mxAsyncCanvas.js
diff --git a/war/js/diagramly/util/mxJsCanvas.js b/src/main/webapp/js/diagramly/util/mxJsCanvas.js
similarity index 100%
rename from war/js/diagramly/util/mxJsCanvas.js
rename to src/main/webapp/js/diagramly/util/mxJsCanvas.js
diff --git a/war/js/diagramly/vsdx/VsdxExport.js b/src/main/webapp/js/diagramly/vsdx/VsdxExport.js
similarity index 100%
rename from war/js/diagramly/vsdx/VsdxExport.js
rename to src/main/webapp/js/diagramly/vsdx/VsdxExport.js
diff --git a/war/js/diagramly/vsdx/mxVsdxCanvas2D.js b/src/main/webapp/js/diagramly/vsdx/mxVsdxCanvas2D.js
similarity index 100%
rename from war/js/diagramly/vsdx/mxVsdxCanvas2D.js
rename to src/main/webapp/js/diagramly/vsdx/mxVsdxCanvas2D.js
diff --git a/war/js/embed-static.min.js b/src/main/webapp/js/embed-static.min.js
similarity index 99%
rename from war/js/embed-static.min.js
rename to src/main/webapp/js/embed-static.min.js
index 620fae1a5a4a4cb717528547c2e0c22ac7b4a96b..59c6ad41781786015601d70a0f5246e9ab029f35 100644
--- a/war/js/embed-static.min.js
+++ b/src/main/webapp/js/embed-static.min.js
@@ -184,7 +184,7 @@ f)+"\n"+u+"}":"{"+z.join(",")+"}";f=u;return l}}"function"!==typeof Date.prototy
 e=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,f,g,h={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},k;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,b,d){var e;g=f="";if("number"===typeof d)for(e=0;e<d;e+=1)g+=" ";else"string"===typeof d&&(g=d);if((k=b)&&"function"!==typeof b&&("object"!==typeof b||"number"!==typeof b.length))throw Error("JSON.stringify");return c("",{"":a})});
 "function"!==typeof JSON.parse&&(JSON.parse=function(a,b){function c(a,d){var e,f,g=a[d];if(g&&"object"===typeof g)for(e in g)Object.prototype.hasOwnProperty.call(g,e)&&(f=c(g,e),void 0!==f?g[e]=f:delete g[e]);return b.call(a,d,g)}var e;a=""+a;d.lastIndex=0;d.test(a)&&(a=a.replace(d,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
 "]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof b?c({"":e},""):e;throw new SyntaxError("JSON.parse");})})();"undefined"===typeof window.mxBasePath&&(window.mxBasePath="https://www.draw.io/mxgraph/");window.mxLoadStylesheets=window.mxLoadStylesheets||!1;window.mxLoadResources=window.mxLoadResources||!1;window.mxLanguage=window.mxLanguage||"en";window.urlParams=window.urlParams||{};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";
-window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"7.9.8",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
+window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"8.0.0",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
 0>navigator.userAgent.indexOf("Edge/"),IS_OP:0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/"),IS_OT:0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&
 0>navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_IOS:navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1,IS_GC:0<=navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:0<=navigator.userAgent.indexOf("Firefox/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&
 0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||
diff --git a/war/js/embed.dev.js b/src/main/webapp/js/embed.dev.js
similarity index 100%
rename from war/js/embed.dev.js
rename to src/main/webapp/js/embed.dev.js
diff --git a/war/js/embed.min.js b/src/main/webapp/js/embed.min.js
similarity index 100%
rename from war/js/embed.min.js
rename to src/main/webapp/js/embed.min.js
diff --git a/war/js/extensions.min.js b/src/main/webapp/js/extensions.min.js
similarity index 100%
rename from war/js/extensions.min.js
rename to src/main/webapp/js/extensions.min.js
diff --git a/war/js/jscolor/jscolor.js b/src/main/webapp/js/jscolor/jscolor.js
similarity index 100%
rename from war/js/jscolor/jscolor.js
rename to src/main/webapp/js/jscolor/jscolor.js
diff --git a/war/js/json/json2.min.js b/src/main/webapp/js/json/json2.min.js
similarity index 100%
rename from war/js/json/json2.min.js
rename to src/main/webapp/js/json/json2.min.js
diff --git a/war/js/jszip/jszip.min.js b/src/main/webapp/js/jszip/jszip.min.js
similarity index 100%
rename from war/js/jszip/jszip.min.js
rename to src/main/webapp/js/jszip/jszip.min.js
diff --git a/war/js/mxgraph/Actions.js b/src/main/webapp/js/mxgraph/Actions.js
similarity index 100%
rename from war/js/mxgraph/Actions.js
rename to src/main/webapp/js/mxgraph/Actions.js
diff --git a/war/js/mxgraph/Dialogs.js b/src/main/webapp/js/mxgraph/Dialogs.js
similarity index 100%
rename from war/js/mxgraph/Dialogs.js
rename to src/main/webapp/js/mxgraph/Dialogs.js
diff --git a/war/js/mxgraph/Editor.js b/src/main/webapp/js/mxgraph/Editor.js
similarity index 100%
rename from war/js/mxgraph/Editor.js
rename to src/main/webapp/js/mxgraph/Editor.js
diff --git a/war/js/mxgraph/EditorUi.js b/src/main/webapp/js/mxgraph/EditorUi.js
similarity index 100%
rename from war/js/mxgraph/EditorUi.js
rename to src/main/webapp/js/mxgraph/EditorUi.js
diff --git a/war/js/mxgraph/Format.js b/src/main/webapp/js/mxgraph/Format.js
similarity index 100%
rename from war/js/mxgraph/Format.js
rename to src/main/webapp/js/mxgraph/Format.js
diff --git a/war/js/mxgraph/Graph.js b/src/main/webapp/js/mxgraph/Graph.js
similarity index 100%
rename from war/js/mxgraph/Graph.js
rename to src/main/webapp/js/mxgraph/Graph.js
diff --git a/war/js/mxgraph/Init.js b/src/main/webapp/js/mxgraph/Init.js
similarity index 100%
rename from war/js/mxgraph/Init.js
rename to src/main/webapp/js/mxgraph/Init.js
diff --git a/war/js/mxgraph/Menus.js b/src/main/webapp/js/mxgraph/Menus.js
similarity index 100%
rename from war/js/mxgraph/Menus.js
rename to src/main/webapp/js/mxgraph/Menus.js
diff --git a/war/js/mxgraph/Shapes.js b/src/main/webapp/js/mxgraph/Shapes.js
similarity index 100%
rename from war/js/mxgraph/Shapes.js
rename to src/main/webapp/js/mxgraph/Shapes.js
diff --git a/war/js/mxgraph/Sidebar.js b/src/main/webapp/js/mxgraph/Sidebar.js
similarity index 100%
rename from war/js/mxgraph/Sidebar.js
rename to src/main/webapp/js/mxgraph/Sidebar.js
diff --git a/war/js/mxgraph/Toolbar.js b/src/main/webapp/js/mxgraph/Toolbar.js
similarity index 100%
rename from war/js/mxgraph/Toolbar.js
rename to src/main/webapp/js/mxgraph/Toolbar.js
diff --git a/war/js/reader.min.js b/src/main/webapp/js/reader.min.js
similarity index 99%
rename from war/js/reader.min.js
rename to src/main/webapp/js/reader.min.js
index 4369a5b97fc27b5e999bcd92699f04f781cacb81..90c8f611a9326f43fb9deaea206011332b181eaf 100644
--- a/war/js/reader.min.js
+++ b/src/main/webapp/js/reader.min.js
@@ -184,7 +184,7 @@ f)+"\n"+u+"}":"{"+z.join(",")+"}";f=u;return l}}"function"!==typeof Date.prototy
 e=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,f,g,h={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},k;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,b,d){var e;g=f="";if("number"===typeof d)for(e=0;e<d;e+=1)g+=" ";else"string"===typeof d&&(g=d);if((k=b)&&"function"!==typeof b&&("object"!==typeof b||"number"!==typeof b.length))throw Error("JSON.stringify");return c("",{"":a})});
 "function"!==typeof JSON.parse&&(JSON.parse=function(a,b){function c(a,d){var e,f,g=a[d];if(g&&"object"===typeof g)for(e in g)Object.prototype.hasOwnProperty.call(g,e)&&(f=c(g,e),void 0!==f?g[e]=f:delete g[e]);return b.call(a,d,g)}var e;a=""+a;d.lastIndex=0;d.test(a)&&(a=a.replace(d,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
 "]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof b?c({"":e},""):e;throw new SyntaxError("JSON.parse");})})();"undefined"===typeof window.mxBasePath&&(window.mxBasePath="https://www.draw.io/mxgraph/");window.mxLoadStylesheets=window.mxLoadStylesheets||!1;window.mxLoadResources=window.mxLoadResources||!1;window.mxLanguage=window.mxLanguage||"en";window.urlParams=window.urlParams||{};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";
-window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"7.9.8",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
+window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"8.0.0",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
 0>navigator.userAgent.indexOf("Edge/"),IS_OP:0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/"),IS_OT:0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&
 0>navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_IOS:navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1,IS_GC:0<=navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:0<=navigator.userAgent.indexOf("Firefox/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&
 0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||
diff --git a/war/js/sanitizer/sanitizer.min.js b/src/main/webapp/js/sanitizer/sanitizer.min.js
similarity index 100%
rename from war/js/sanitizer/sanitizer.min.js
rename to src/main/webapp/js/sanitizer/sanitizer.min.js
diff --git a/war/js/shapes.min.js b/src/main/webapp/js/shapes.min.js
similarity index 100%
rename from war/js/shapes.min.js
rename to src/main/webapp/js/shapes.min.js
diff --git a/war/js/spin/spin.min.js b/src/main/webapp/js/spin/spin.min.js
similarity index 100%
rename from war/js/spin/spin.min.js
rename to src/main/webapp/js/spin/spin.min.js
diff --git a/war/js/stencils.min.js b/src/main/webapp/js/stencils.min.js
similarity index 100%
rename from war/js/stencils.min.js
rename to src/main/webapp/js/stencils.min.js
diff --git a/war/js/viewer.min.js b/src/main/webapp/js/viewer.min.js
similarity index 98%
rename from war/js/viewer.min.js
rename to src/main/webapp/js/viewer.min.js
index 708a5d15785ff2dcc9b68b43893c6bfd6353e715..1389a78473d74aec206ceb131b801ac5ca6c77b6 100644
--- a/war/js/viewer.min.js
+++ b/src/main/webapp/js/viewer.min.js
@@ -2738,47 +2738,47 @@ g.documentElement.getElementsByTagName("diagram"),g=0;g<n.length;g++){var h=mxUt
 !this.isOffline()&&(new XMLHttpRequest).upload&&this.isRemoteFileFormat(c,r)&&null!=l?this.parseFile(l,mxUtils.bind(this,function(a){4==a.readyState&&(this.spinner.stop(),200<=a.status&&299>=a.status?v(a.responseText,"text/xml"):this.handleError({message:mxResources.get(413==a.status?"drawingTooLarge":"invalidOrMissingFile")},mxResources.get("errorLoadingFile")))})):v(c,d)}}));a.stopPropagation();a.preventDefault()})),mxEvent.addListener(k,"dragleave",function(a){null!=f?f.style.border="3px dotted lightGray":
 (k.style.border="3px solid transparent",k.style.cursor="");a.stopPropagation();a.preventDefault()}));m=m.cloneNode(!1);m.setAttribute("src",IMAGE_PATH+"/edit.gif");m.setAttribute("title",mxResources.get("edit"));u.insertBefore(m,u.firstChild);mxEvent.addListener(m,"click",E);mxEvent.addListener(k,"dblclick",function(a){mxEvent.getSource(a)==k&&E(a)});d=m.cloneNode(!1);d.setAttribute("src",Editor.plusImage);d.setAttribute("title",mxResources.get("add"));u.insertBefore(d,u.firstChild);mxEvent.addListener(d,
 "click",G);this.isOffline()||".scratchpad"!=a.title||null==EditorUi.scratchpadHelpLink||(d=document.createElement("span"),d.setAttribute("title",mxResources.get("help")),d.style.cssText="color:gray;text-decoration:none;",d.className="geButton",mxUtils.write(d,"?"),mxEvent.addGestureListeners(d,mxUtils.bind(this,function(a){this.openLink(EditorUi.scratchpadHelpLink);mxEvent.consume(a)})),u.insertBefore(d,u.firstChild))}l.appendChild(u);l.style.paddingRight=18*u.childNodes.length+"px"}};"1"==urlParams.offline||
-EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("atlas"==uiTheme?("undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=
-46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);
-b.setAttribute("title",mxResources.get("hide"));a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});"dark"==uiTheme&&(Graph.prototype.defaultThemeName="darkTheme",Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor=
-"#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
-Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="));EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display="none",this.refresh())};
-EditorUi.prototype.showFooter=function(a){var c=document.getElementById("geFooter");null!=c&&(this.footerHeight=a,c.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,d,e,p){a=new ImageDialog(this,a,b,d,e,p);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=!0;this.editor.graph.model.execute(a)});
-var c=new BackgroundImageDialog(this,mxUtils.bind(this,function(c){a(c)}));this.showDialog(c.container,360,200,!0,!0);c.init()};EditorUi.prototype.showLibraryDialog=function(a,b,d,e,p){a=new LibraryDialog(this,a,b,d,e,p);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");a.style.position="absolute";
-a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,d){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():
-function(){},f=null!=a&&null!=a.error?a.error:a;if(null!=f||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var e=mxResources.get("ok"),g=null;b=null!=b?b:mxResources.get("error");if(null!=f)if(null!=f.retry&&(e=mxResources.get("cancel"),g=function(){c();f.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));else if(404==f.code||
-404==f.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var k=window.location.hash;null!=k&&"#G"==k.substring(0,2)&&(k=k.substring(2),a+=' <a href="https://drive.google.com/open?id='+k+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else f.code==App.ERROR_TIMEOUT?a=mxUtils.htmlEntities(mxResources.get("timeout")):
-f.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=f.message?a=mxUtils.htmlEntities(f.message):null!=f.response&&null!=f.response.error&&(a=mxUtils.htmlEntities(f.response.error));this.showError(b,a,e,d,g)}else null!=d&&d()};EditorUi.prototype.showError=function(a,b,d,e,p,h,k){a=new ErrorDialog(this,a,b,d,e,p,h,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,null,a,mxResources.get("ok"),b);this.showDialog(c.container,
-340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,d,e,p){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){c();null!=b&&b()},function(){c();null!=d&&d()},e,p)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=function(){return mxClient.IS_CHROMEAPP||
-!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,d){var c=a.toDataURL("image/"+d);if(6>=c.length||c==a.cloneNode(!1).toDataURL("image/"+d))throw{message:"Invalid image"};null!=b&&(c=this.writeGraphModelToPng(c,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return c};EditorUi.prototype.saveCanvas=function(a,
-b,d){var c="jpeg"==d?"jpg":d,f=this.getBaseFilename()+"."+c;a=this.createImageDataUri(a,b,d);this.saveData(f,c,a.substring(a.lastIndexOf(",")+1),"image/"+d,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};EditorUi.prototype.doSaveLocalFile=function(a,
-b,d,e,p){if(window.Blob&&navigator.msSaveOrOpenBlob)a=e?this.base64ToBlob(a,d):new Blob([a],{type:d}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)d=window.open("about:blank","_blank"),null==d?mxUtils.popup(a,!0):(d.document.write(a),d.document.close(),d.document.execCommand("SaveAs",!0,b),d.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height="380px",this.showDialog(b.container,620,
-460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var c=document.createElement("a"),f=!mxClient.IS_SF&&"undefined"!==typeof c.download;if(f||this.isOffline()){c.href=URL.createObjectURL(e?this.base64ToBlob(a,d):new Blob([a],{type:d}));f?c.download=b:c.setAttribute("target","_blank");document.body.appendChild(c);try{window.setTimeout(function(){URL.revokeObjectURL(c.href)},0),c.click(),c.parentNode.removeChild(c)}catch(v){}}else this.createEchoRequest(a,b,d,e,p).simulate(document,
-"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,d,e,p,h){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=d?"&mime="+d:"")+(null!=p?"&format="+p:"")+(null!=h?"&base64="+h:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(e?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),d=c.length,f=Math.ceil(d/1024),e=Array(f),k=0;k<f;++k){for(var l=1024*k,m=Math.min(l+1024,d),u=Array(m-l),q=0;l<m;++q,++l)u[q]=c[l].charCodeAt(0);e[k]=
-new Uint8Array(u)}return new Blob(e,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,d,e,p,h,k){h=null!=h?h:!1;k=null!=k?k:"vsdx"!=p&&(!mxClient.IS_IOS||!navigator.standalone);p=this.getServiceCount(h);b=new CreateDialog(this,b,mxUtils.bind(this,function(c,b){try{if("_blank"==b)if(null==d||"image/"!=d.substring(0,6)||"image/svg"==d.substring(0,9)&&!mxClient.IS_SVG){var f=window.open("about:blank");null==f?mxUtils.popup(a,!0):(f.document.write(mxUtils.htmlEntities(a,!1)),f.document.close())}else this.openInNewWindow(a,
-d,e);else b==App.MODE_DEVICE?this.doSaveLocalFile(a,c,d,e):null!=c&&0<c.length&&this.pickFolder(b,mxUtils.bind(this,function(f){try{this.exportFile(a,c,d,e,b,f)}catch(w){this.handleError(w)}}))}catch(A){this.handleError(A)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,h,k,null,null,4<p?3:4,a,d,e);this.showDialog(b.container,380,p==(mxClient.IS_IOS?0:1)?160:4<p?390:270,!0,!0);b.init()};EditorUi.prototype.openInNewWindow=function(a,b,d){if(mxClient.IS_GC||
-mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var c=window.open("about:blank");null==c?mxUtils.popup(a,!0):("image/svg+xml"==b?c.document.write("<html>"+a+"</html>"):c.document.write('<html><img src="data:'+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),c.document.close())}else c=window.open("data:"+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==c&&mxUtils.popup(a,!0)};var b=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=
-function(a){if(this.isExportToCanvas()){this.exportDialog=null;var c=a(mxUtils.bind(this,function(a){var b=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",b);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)b.apply(this);else{this.exportDialog=document.createElement("div");var d=c.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");
-this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=d.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+
-this.chromelessToolbar.offsetHeight+4+"px";d=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=d.zIndex;var f=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});f.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){f.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height="auto";this.exportDialog.style.padding="10px";var c=this.createImageDataUri(a,
-null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",c);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(c.substring(c.indexOf(",")+1),"image/png",!0);b.apply(this,arguments)}))}),null,this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();
-this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",b);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}b.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,d,e,p){this.isLocalFileSave()?this.saveLocalFile(d,a,e,p,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,c){return this.createEchoRequest(d,a,e,p,b,c)}),d,p,e)};EditorUi.prototype.saveRequest=function(a,b,d,e,p,h,k){k=null!=k?k:!mxClient.IS_IOS||
-!navigator.standalone;var c=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,c){if("_blank"==c||null!=a&&0<a.length){var f=d("_blank"==c?null:a,c==App.MODE_DEVICE||null==c||"_blank"==c?"0":"1");null!=f&&(c==App.MODE_DEVICE||"_blank"==c?f.simulate(document,"_blank"):this.pickFolder(c,mxUtils.bind(this,function(d){h=null!=h?h:"pdf"==b?"application/pdf":"image/"+b;if(null!=e)try{this.exportFile(e,a,h,!0,c,d)}catch(z){this.handleError(z)}else this.spinner.spin(document.body,
-mxResources.get("saving"))&&f.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=f.getStatus()&&299>=f.getStatus())try{this.exportFile(f.getText(),a,h,!0,c,d)}catch(z){this.handleError(z)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,!1,k,null,null,4<c?3:4,e,h,p);this.showDialog(a.container,380,c==
-(mxClient.IS_IOS?0:1)?160:4<c?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,d,e,p,h){};EditorUi.prototype.pickFolder=function(a,b,d){b(null)};EditorUi.prototype.exportSvg=function(a,b,d,e,p,h,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var c=this.editor.graph.isSelectionEmpty();d=null!=d?d:c;c=b?null:this.editor.graph.background;c==mxConstants.NONE&&(c=null);null==c&&0==b&&(c=
-"#ffffff");var f=this.editor.graph.getSvg(c,a,k,l,null,d);e&&this.editor.graph.addSvgShadow(f);var g=this.getBaseFilename()+".svg",n=mxUtils.bind(this,function(a){this.spinner.stop();p&&a.setAttribute("content",this.getFileData(!0,null,null,null,d,m));if(null!=this.editor.fontCss){var c=a.ownerDocument,c=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"style"):c.createElement("style");c.setAttribute("type","text/css");mxUtils.setTextContent(c,this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(c)}var b=
-'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||b.length<=MAX_REQUEST_SIZE?this.saveData(g,"svg",b,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(b)}))});this.convertMath(this.editor.graph,f,!1,mxUtils.bind(this,function(){h?(null==this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(f,n,this.thumbImageCache)):
-n(f)}))}};EditorUi.prototype.addCheckbox=function(a,b,d,e,p,h){h=null!=h?h:!0;var c=document.createElement("input");c.style.marginRight="8px";c.style.marginTop="16px";c.setAttribute("type","checkbox");d&&(c.setAttribute("checked","checked"),c.defaultChecked=!0);e&&c.setAttribute("disabled","disabled");h&&(a.appendChild(c),mxUtils.write(a,b),p||mxUtils.br(a));return c};EditorUi.prototype.addEditButton=function(a,b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft=
-"24px";var d=this.getCurrentFile(),f="";null!=d&&d.getMode()!=App.MODE_DEVICE&&d.getMode()!=App.MODE_BROWSER&&(f=window.location.href);var e=document.createElement("select");e.style.width="120px";e.style.marginLeft="8px";e.style.marginRight="10px";e.className="geBtn";d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("makeCopy"));e.appendChild(d);d=document.createElement("option");d.setAttribute("value","custom");mxUtils.write(d,mxResources.get("custom")+
-"...");e.appendChild(d);a.appendChild(e);mxEvent.addListener(e,"change",mxUtils.bind(this,function(){if("custom"==e.value){var a=new FilenameDialog(this,f,mxResources.get("ok"),function(a){null!=a?f=a:e.value="blank"},mxResources.get("url"),null,null,null,null,function(){e.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||b.checked)?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled")}));
-mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===e.value?"_blank":f:null},getEditInput:function(){return c},getEditSelect:function(){return e}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){k.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=e&&e!=mxConstants.NONE?"border:1px solid black;background-color:"+e:"background-position:center center;background-repeat:no-repeat;background-image:url('"+Dialog.prototype.closeImage+"')")+';"></div>'}
-mxUtils.write(a,mxResources.get("links")+":");var d=document.createElement("select");d.style.width="100px";d.style.marginLeft="8px";d.style.marginRight="10px";d.className="geBtn";var f=document.createElement("option");f.setAttribute("value","auto");mxUtils.write(f,mxResources.get("automatic"));d.appendChild(f);f=document.createElement("option");f.setAttribute("value","blank");mxUtils.write(f,mxResources.get("openInNewWindow"));d.appendChild(f);f=document.createElement("option");f.setAttribute("value",
-"self");mxUtils.write(f,mxResources.get("openInThisWindow"));d.appendChild(f);b&&(f=document.createElement("option"),f.setAttribute("value","frame"),mxUtils.write(f,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),d.appendChild(f));a.appendChild(d);mxUtils.write(a,mxResources.get("borderColor")+":");var e="#0000ff",k=null,k=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(e||"none",function(a){e=a;c()});mxEvent.consume(a)}));c();k.style.padding=mxClient.IS_FF?
-"4px 2px 4px 2px":"4px";k.style.marginLeft="4px";k.style.height="22px";k.style.width="22px";k.style.position="relative";k.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";k.className="geColorBtn";a.appendChild(k);mxUtils.br(a);return{getColor:function(){return e},getTarget:function(){return d.value},focus:function(){d.focus()}}};EditorUi.prototype.createLink=function(a,b,d,e,p,h,k,l){var c=this.getCurrentFile(),f=[];e&&(f.push("lightbox=1"),"auto"!=a&&f.push("target="+a),null!=
-b&&b!=mxConstants.NONE&&f.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=p&&0<p.length&&f.push("edit="+encodeURIComponent(p)),h&&f.push("layers=1"),this.editor.graph.foldingEnabled&&f.push("nav=1"));if(d&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&f.push("page="+a);break}a=!0;null!=k?d="#U"+encodeURIComponent(k):(c=this.getCurrentFile(),l||null==c||c.constructor!=window.DriveFile?d="#R"+encodeURIComponent(d?this.getFileData(!0,
-null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(d="#"+c.getHash(),a=!1));a&&null!=c&&null!=c.getTitle()&&c.getTitle()!=this.defaultFilename&&f.push("title="+encodeURIComponent(c.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<f.length?"?"+f.join("&"):"")+d};EditorUi.prototype.createHtml=function(a,b,d,e,p,h,k,l,
-m,u,q){this.getBasenames();var c={};""!=p&&p!=mxConstants.NONE&&(c.highlight=p);"auto"!==e&&(c.target=e);m||(c.lightbox=!1);c.nav=this.editor.graph.foldingEnabled;d=parseInt(d);isNaN(d)||100==d||(c.zoom=d/100);d=[];k&&(d.push("pages"),c.resize=!0,null!=this.pages&&null!=this.currentPage&&(c.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(d.push("zoom"),c.resize=!0);l&&d.push("layers");0<d.length&&(m&&d.push("lightbox"),c.toolbar=d.join(" "));null!=u&&0<u.length&&(c.edit=u);null!=a?c.url=a:
-c.xml=this.getFileData(!0,null,null,null,null,!k);b='<div class="mxgraph" style="'+(h?"max-width:100%;":"")+(""!=d?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(c))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";q(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
+EditorUi.isElectronApp?EditorUi.prototype.footerHeight=4:("1"==urlParams.savesidebar&&(Sidebar.prototype.thumbWidth=64,Sidebar.prototype.thumbHeight=64),EditorUi.prototype.footerHeight=760<=screen.width&&240<=screen.height?46:0,EditorUi.prototype.createFooter=function(){var a=document.getElementById("geFooter");if(null!=a){a.style.visibility="visible";var b=document.createElement("img");b.setAttribute("border","0");b.setAttribute("src",Dialog.prototype.closeImage);b.setAttribute("title",mxResources.get("hide"));
+a.appendChild(b);mxClient.IS_QUIRKS&&(b.style.position="relative",b.style.styleFloat="right",b.style.top="-30px",b.style.left="164px",b.style.cursor="pointer");mxEvent.addListener(b,"click",mxUtils.bind(this,function(){this.hideFooter()}))}return a});EditorUi.initTheme=function(){"atlas"==uiTheme?(mxClient.link("stylesheet","styles/atlas.css"),"undefined"!==typeof Toolbar&&(Toolbar.prototype.unselectedBackground=mxClient.IS_QUIRKS?"none":"linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)",
+Toolbar.prototype.selectedBackground="rgb(242, 242, 242)"),Editor.prototype.initialTopSpacing=3,EditorUi.prototype.menubarHeight=41,EditorUi.prototype.toolbarHeight=38,EditorUi.prototype.hsplitPosition=188,Sidebar.prototype.thumbWidth=46,Sidebar.prototype.thumbHeight=46,Sidebar.prototype.thumbPadding=5<=document.documentMode?0:1,Sidebar.prototype.thumbBorder=2):"dark"==uiTheme&&(mxClient.link("stylesheet","styles/dark.css"),Dialog.backdropColor="#2a2a2a",Graph.prototype.defaultThemeName="darkTheme",
+Graph.prototype.defaultPageBackgroundColor="#2a2a2a",Graph.prototype.defaultGraphBackground=null,Graph.prototype.defaultPageBorderColor="#505759",Format.prototype.inactiveTabBackgroundColor="black",BaseFormatPanel.prototype.buttonBackgroundColor="#2a2a2a",Sidebar.prototype.dragPreviewBorder="1px dashed #cccccc",mxGraphHandler.prototype.previewColor="#cccccc",StyleFormatPanel.prototype.defaultStrokeColor="#cccccc",mxClient.IS_SVG&&(Editor.helpImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=",
+Editor.checkmarkImage="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg=="))};EditorUi.initTheme();EditorUi.prototype.hideFooter=function(){var a=document.getElementById("geFooter");null!=a&&(this.footerHeight=0,a.style.display=
+"none",this.refresh())};EditorUi.prototype.showFooter=function(a){var c=document.getElementById("geFooter");null!=c&&(this.footerHeight=a,c.style.display="inline",this.refresh())};EditorUi.prototype.showImageDialog=function(a,b,d,e,p){a=new ImageDialog(this,a,b,d,e,p);this.showDialog(a.container,Graph.fileSupport?440:360,Graph.fileSupport?200:90,!0,!0);a.init()};EditorUi.prototype.showBackgroundImageDialog=function(a){a=null!=a?a:mxUtils.bind(this,function(a){a=new ChangePageSetup(this,null,a);a.ignoreColor=
+!0;this.editor.graph.model.execute(a)});var c=new BackgroundImageDialog(this,mxUtils.bind(this,function(c){a(c)}));this.showDialog(c.container,360,200,!0,!0);c.init()};EditorUi.prototype.showLibraryDialog=function(a,b,d,e,p){a=new LibraryDialog(this,a,b,d,e,p);this.showDialog(a.container,620,440,!0,!1,mxUtils.bind(this,function(a){a&&null==this.getCurrentFile()&&"1"!=urlParams.embed&&this.showSplash()}));a.init()};EditorUi.prototype.createSidebarFooterContainer=function(){var a=this.createDiv("geSidebarContainer");
+a.style.position="absolute";a.style.overflow="hidden";a.style.borderWidth="3px";var b=document.createElement("a");b.setAttribute("href","javascript:void(0);");b.className="geTitle";b.style.height="100%";b.style.paddingTop="9px";mxUtils.write(b,mxResources.get("moreShapes")+"...");mxEvent.addListener(b,"click",mxUtils.bind(this,function(a){this.actions.get("shapes").funct();mxEvent.consume(a)}));a.appendChild(b);return a};EditorUi.prototype.handleError=function(a,b,d){var c=null!=this.spinner&&null!=
+this.spinner.pause?this.spinner.pause():function(){},f=null!=a&&null!=a.error?a.error:a;if(null!=f||null!=b){a=mxUtils.htmlEntities(mxResources.get("unknownError"));var e=mxResources.get("ok"),g=null;b=null!=b?b:mxResources.get("error");if(null!=f)if(null!=f.retry&&(e=mxResources.get("cancel"),g=function(){c();f.retry()}),"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.FORBIDDEN)a=mxUtils.htmlEntities(mxResources.get("forbidden"));
+else if(404==f.code||404==f.status||"undefined"!=typeof gapi&&"undefined"!=typeof gapi.drive&&"undefined"!=typeof gapi.drive.realtime&&f.type==gapi.drive.realtime.ErrorType.NOT_FOUND){a=mxUtils.htmlEntities(mxResources.get("fileNotFoundOrDenied"));var k=window.location.hash;null!=k&&"#G"==k.substring(0,2)&&(k=k.substring(2),a+=' <a href="https://drive.google.com/open?id='+k+'" target="_blank">'+mxUtils.htmlEntities(mxResources.get("tryOpeningViaThisPage"))+"</a>")}else f.code==App.ERROR_TIMEOUT?a=
+mxUtils.htmlEntities(mxResources.get("timeout")):f.code==App.ERROR_BUSY?a=mxUtils.htmlEntities(mxResources.get("busy")):null!=f.message?a=mxUtils.htmlEntities(f.message):null!=f.response&&null!=f.response.error&&(a=mxUtils.htmlEntities(f.response.error));this.showError(b,a,e,d,g)}else null!=d&&d()};EditorUi.prototype.showError=function(a,b,d,e,p,h,k){a=new ErrorDialog(this,a,b,d,e,p,h,k);this.showDialog(a.container,340,150,!0,!1);a.init()};EditorUi.prototype.alert=function(a,b){var c=new ErrorDialog(this,
+null,a,mxResources.get("ok"),b);this.showDialog(c.container,340,100,!0,!1);c.init()};EditorUi.prototype.confirm=function(a,b,d,e,p){var c=null!=this.spinner&&null!=this.spinner.pause?this.spinner.pause():function(){};this.showDialog((new ConfirmDialog(this,a,function(){c();null!=b&&b()},function(){c();null!=d&&d()},e,p)).container,340,90,!0,!1)};EditorUi.prototype.setCurrentFile=function(a){this.currentFile=a};EditorUi.prototype.getCurrentFile=function(){return this.currentFile};EditorUi.prototype.isExportToCanvas=
+function(){return mxClient.IS_CHROMEAPP||!this.editor.graph.mathEnabled&&this.useCanvasForExport};EditorUi.prototype.createSvgDataUri=function(a){return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(a)))};EditorUi.prototype.createImageDataUri=function(a,b,d){var c=a.toDataURL("image/"+d);if(6>=c.length||c==a.cloneNode(!1).toDataURL("image/"+d))throw{message:"Invalid image"};null!=b&&(c=this.writeGraphModelToPng(c,"zTXt","mxGraphModel",atob(this.editor.graph.compress(b))));return c};
+EditorUi.prototype.saveCanvas=function(a,b,d){var c="jpeg"==d?"jpg":d,f=this.getBaseFilename()+"."+c;a=this.createImageDataUri(a,b,d);this.saveData(f,c,a.substring(a.lastIndexOf(",")+1),"image/"+d,!0)};EditorUi.prototype.isLocalFileSave=function(){return"remote"!=urlParams.save&&(mxClient.IS_IE||"undefined"!==typeof window.Blob&&"undefined"!==typeof window.URL)&&9!=document.documentMode&&8!=document.documentMode&&7!=document.documentMode&&!mxClient.IS_QUIRKS||this.isOfflineApp()||mxClient.IS_IOS};
+EditorUi.prototype.doSaveLocalFile=function(a,b,d,e,p){if(window.Blob&&navigator.msSaveOrOpenBlob)a=e?this.base64ToBlob(a,d):new Blob([a],{type:d}),navigator.msSaveOrOpenBlob(a,b);else if(mxClient.IS_IE)d=window.open("about:blank","_blank"),null==d?mxUtils.popup(a,!0):(d.document.write(a),d.document.close(),d.document.execCommand("SaveAs",!0,b),d.close());else if(mxClient.IS_IOS)b=new TextareaDialog(this,b+":",a,null,null,mxResources.get("close")),b.textarea.style.width="600px",b.textarea.style.height=
+"380px",this.showDialog(b.container,620,460,!0,!0),b.init(),document.execCommand("selectall",!1,null);else{var c=document.createElement("a"),f=!mxClient.IS_SF&&"undefined"!==typeof c.download;if(f||this.isOffline()){c.href=URL.createObjectURL(e?this.base64ToBlob(a,d):new Blob([a],{type:d}));f?c.download=b:c.setAttribute("target","_blank");document.body.appendChild(c);try{window.setTimeout(function(){URL.revokeObjectURL(c.href)},0),c.click(),c.parentNode.removeChild(c)}catch(v){}}else this.createEchoRequest(a,
+b,d,e,p).simulate(document,"_blank")}};EditorUi.prototype.createEchoRequest=function(a,b,d,e,p,h){a="xml="+encodeURIComponent(a);return new mxXmlRequest(SAVE_URL,a+(null!=d?"&mime="+d:"")+(null!=p?"&format="+p:"")+(null!=h?"&base64="+h:"")+(null!=b?"&filename="+encodeURIComponent(b):"")+(e?"&binary=1":""))};EditorUi.prototype.base64ToBlob=function(a,b){b=b||"";for(var c=atob(a),d=c.length,f=Math.ceil(d/1024),e=Array(f),k=0;k<f;++k){for(var l=1024*k,m=Math.min(l+1024,d),u=Array(m-l),q=0;l<m;++q,++l)u[q]=
+c[l].charCodeAt(0);e[k]=new Uint8Array(u)}return new Blob(e,{type:b})};EditorUi.prototype.saveLocalFile=function(a,b,d,e,p,h,k){h=null!=h?h:!1;k=null!=k?k:"vsdx"!=p&&(!mxClient.IS_IOS||!navigator.standalone);p=this.getServiceCount(h);b=new CreateDialog(this,b,mxUtils.bind(this,function(c,b){try{if("_blank"==b)if(null==d||"image/"!=d.substring(0,6)||"image/svg"==d.substring(0,9)&&!mxClient.IS_SVG){var f=window.open("about:blank");null==f?mxUtils.popup(a,!0):(f.document.write(mxUtils.htmlEntities(a,
+!1)),f.document.close())}else this.openInNewWindow(a,d,e);else b==App.MODE_DEVICE?this.doSaveLocalFile(a,c,d,e):null!=c&&0<c.length&&this.pickFolder(b,mxUtils.bind(this,function(f){try{this.exportFile(a,c,d,e,b,f)}catch(w){this.handleError(w)}}))}catch(A){this.handleError(A)}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),!1,h,k,null,null,4<p?3:4,a,d,e);this.showDialog(b.container,380,p==(mxClient.IS_IOS?0:1)?160:4<p?390:270,!0,!0);b.init()};
+EditorUi.prototype.openInNewWindow=function(a,b,d){if(mxClient.IS_GC||mxClient.IS_EDGE||11==document.documentMode||10==document.documentMode){var c=window.open("about:blank");null==c?mxUtils.popup(a,!0):("image/svg+xml"==b?c.document.write("<html>"+a+"</html>"):c.document.write('<html><img src="data:'+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))+'"/></html>'),c.document.close())}else c=window.open("data:"+b+(d?";base64,"+a:";charset=utf8,"+encodeURIComponent(a))),null==c&&mxUtils.popup(a,
+!0)};var b=EditorUi.prototype.addChromelessToolbarItems;EditorUi.prototype.addChromelessToolbarItems=function(a){if(this.isExportToCanvas()){this.exportDialog=null;var c=a(mxUtils.bind(this,function(a){var b=mxUtils.bind(this,function(){mxEvent.removeListener(this.editor.graph.container,"click",b);null!=this.exportDialog&&(this.exportDialog.parentNode.removeChild(this.exportDialog),this.exportDialog=null)});if(null!=this.exportDialog)b.apply(this);else{this.exportDialog=document.createElement("div");
+var d=c.getBoundingClientRect();mxUtils.setPrefixedStyle(this.exportDialog.style,"borderRadius","5px");this.exportDialog.style.position="fixed";this.exportDialog.style.textAlign="center";this.exportDialog.style.fontFamily="Helvetica,Arial";this.exportDialog.style.backgroundColor="#000000";this.exportDialog.style.width="50px";this.exportDialog.style.height="50px";this.exportDialog.style.padding="4px 2px 4px 2px";this.exportDialog.style.color="#ffffff";mxUtils.setOpacity(this.exportDialog,70);this.exportDialog.style.left=
+d.left+"px";this.exportDialog.style.bottom=parseInt(this.chromelessToolbar.style.bottom)+this.chromelessToolbar.offsetHeight+4+"px";d=mxUtils.getCurrentStyle(this.editor.graph.container);this.exportDialog.style.zIndex=d.zIndex;var f=new Spinner({lines:8,length:6,width:5,radius:6,rotate:0,color:"#fff",speed:1.5,trail:60,shadow:!1,hwaccel:!1,top:"28px",zIndex:2E9});f.spin(this.exportDialog);this.exportToCanvas(mxUtils.bind(this,function(a){f.stop();this.exportDialog.style.width="auto";this.exportDialog.style.height=
+"auto";this.exportDialog.style.padding="10px";var c=this.createImageDataUri(a,null,"png");a=document.createElement("img");a.style.maxWidth="140px";a.style.maxHeight="140px";a.style.cursor="pointer";a.setAttribute("title",mxResources.get("openInNewWindow"));a.setAttribute("border","0");a.setAttribute("src",c);this.exportDialog.appendChild(a);mxEvent.addListener(a,"click",mxUtils.bind(this,function(){this.openInNewWindow(c.substring(c.indexOf(",")+1),"image/png",!0);b.apply(this,arguments)}))}),null,
+this.thumbImageCache,null,mxUtils.bind(this,function(a){this.spinner.stop();this.handleError(a)}));mxEvent.addListener(this.editor.graph.container,"click",b);document.body.appendChild(this.exportDialog)}mxEvent.consume(a)}),Editor.cameraLargeImage,mxResources.get("export"))}b.apply(this,arguments)};EditorUi.prototype.saveData=function(a,b,d,e,p){this.isLocalFileSave()?this.saveLocalFile(d,a,e,p,b):this.saveRequest(a,b,mxUtils.bind(this,function(a,c){return this.createEchoRequest(d,a,e,p,b,c)}),d,
+p,e)};EditorUi.prototype.saveRequest=function(a,b,d,e,p,h,k){k=null!=k?k:!mxClient.IS_IOS||!navigator.standalone;var c=this.getServiceCount(!1);a=new CreateDialog(this,a,mxUtils.bind(this,function(a,c){if("_blank"==c||null!=a&&0<a.length){var f=d("_blank"==c?null:a,c==App.MODE_DEVICE||null==c||"_blank"==c?"0":"1");null!=f&&(c==App.MODE_DEVICE||"_blank"==c?f.simulate(document,"_blank"):this.pickFolder(c,mxUtils.bind(this,function(d){h=null!=h?h:"pdf"==b?"application/pdf":"image/"+b;if(null!=e)try{this.exportFile(e,
+a,h,!0,c,d)}catch(z){this.handleError(z)}else this.spinner.spin(document.body,mxResources.get("saving"))&&f.send(mxUtils.bind(this,function(){this.spinner.stop();if(200<=f.getStatus()&&299>=f.getStatus())try{this.exportFile(f.getText(),a,h,!0,c,d)}catch(z){this.handleError(z)}else this.handleError({message:mxResources.get("errorSavingFile")})}),function(a){this.spinner.stop();this.handleError(a)})})))}}),mxUtils.bind(this,function(){this.hideDialog()}),mxResources.get("saveAs"),mxResources.get("download"),
+!1,!1,k,null,null,4<c?3:4,e,h,p);this.showDialog(a.container,380,c==(mxClient.IS_IOS?0:1)?160:4<c?390:270,!0,!0);a.init()};EditorUi.prototype.getEditBlankXml=function(){return this.getFileData(!0)};EditorUi.prototype.exportFile=function(a,b,d,e,p,h){};EditorUi.prototype.pickFolder=function(a,b,d){b(null)};EditorUi.prototype.exportSvg=function(a,b,d,e,p,h,k,l,m){if(this.spinner.spin(document.body,mxResources.get("export"))){var c=this.editor.graph.isSelectionEmpty();d=null!=d?d:c;c=b?null:this.editor.graph.background;
+c==mxConstants.NONE&&(c=null);null==c&&0==b&&(c="#ffffff");var f=this.editor.graph.getSvg(c,a,k,l,null,d);e&&this.editor.graph.addSvgShadow(f);var g=this.getBaseFilename()+".svg",n=mxUtils.bind(this,function(a){this.spinner.stop();p&&a.setAttribute("content",this.getFileData(!0,null,null,null,d,m));if(null!=this.editor.fontCss){var c=a.ownerDocument,c=null!=c.createElementNS?c.createElementNS(mxConstants.NS_SVG,"style"):c.createElement("style");c.setAttribute("type","text/css");mxUtils.setTextContent(c,
+this.editor.fontCss);a.getElementsByTagName("defs")[0].appendChild(c)}var b='<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n'+mxUtils.getXml(a);this.isLocalFileSave()||b.length<=MAX_REQUEST_SIZE?this.saveData(g,"svg",b,"image/svg+xml"):this.handleError({message:mxResources.get("drawingTooLarge")},mxResources.get("error"),mxUtils.bind(this,function(){mxUtils.popup(b)}))});this.convertMath(this.editor.graph,f,!1,mxUtils.bind(this,function(){h?(null==
+this.thumbImageCache&&(this.thumbImageCache={}),this.convertImages(f,n,this.thumbImageCache)):n(f)}))}};EditorUi.prototype.addCheckbox=function(a,b,d,e,p,h){h=null!=h?h:!0;var c=document.createElement("input");c.style.marginRight="8px";c.style.marginTop="16px";c.setAttribute("type","checkbox");d&&(c.setAttribute("checked","checked"),c.defaultChecked=!0);e&&c.setAttribute("disabled","disabled");h&&(a.appendChild(c),mxUtils.write(a,b),p||mxUtils.br(a));return c};EditorUi.prototype.addEditButton=function(a,
+b){var c=this.addCheckbox(a,mxResources.get("edit")+":",!0,null,!0);c.style.marginLeft="24px";var d=this.getCurrentFile(),f="";null!=d&&d.getMode()!=App.MODE_DEVICE&&d.getMode()!=App.MODE_BROWSER&&(f=window.location.href);var e=document.createElement("select");e.style.width="120px";e.style.marginLeft="8px";e.style.marginRight="10px";e.className="geBtn";d=document.createElement("option");d.setAttribute("value","blank");mxUtils.write(d,mxResources.get("makeCopy"));e.appendChild(d);d=document.createElement("option");
+d.setAttribute("value","custom");mxUtils.write(d,mxResources.get("custom")+"...");e.appendChild(d);a.appendChild(e);mxEvent.addListener(e,"change",mxUtils.bind(this,function(){if("custom"==e.value){var a=new FilenameDialog(this,f,mxResources.get("ok"),function(a){null!=a?f=a:e.value="blank"},mxResources.get("url"),null,null,null,null,function(){e.value="blank"});this.showDialog(a.container,300,80,!0,!1);a.init()}}));mxEvent.addListener(c,"change",mxUtils.bind(this,function(){c.checked&&(null==b||
+b.checked)?e.removeAttribute("disabled"):e.setAttribute("disabled","disabled")}));mxUtils.br(a);return{getLink:function(){return c.checked?"blank"===e.value?"_blank":f:null},getEditInput:function(){return c},getEditSelect:function(){return e}}};EditorUi.prototype.addLinkSection=function(a,b){function c(){k.innerHTML='<div style="width:100%;height:100%;box-sizing:border-box;'+(null!=e&&e!=mxConstants.NONE?"border:1px solid black;background-color:"+e:"background-position:center center;background-repeat:no-repeat;background-image:url('"+
+Dialog.prototype.closeImage+"')")+';"></div>'}mxUtils.write(a,mxResources.get("links")+":");var d=document.createElement("select");d.style.width="100px";d.style.marginLeft="8px";d.style.marginRight="10px";d.className="geBtn";var f=document.createElement("option");f.setAttribute("value","auto");mxUtils.write(f,mxResources.get("automatic"));d.appendChild(f);f=document.createElement("option");f.setAttribute("value","blank");mxUtils.write(f,mxResources.get("openInNewWindow"));d.appendChild(f);f=document.createElement("option");
+f.setAttribute("value","self");mxUtils.write(f,mxResources.get("openInThisWindow"));d.appendChild(f);b&&(f=document.createElement("option"),f.setAttribute("value","frame"),mxUtils.write(f,mxResources.get("openInThisWindow")+" ("+mxResources.get("iframe")+")"),d.appendChild(f));a.appendChild(d);mxUtils.write(a,mxResources.get("borderColor")+":");var e="#0000ff",k=null,k=mxUtils.button("",mxUtils.bind(this,function(a){this.pickColor(e||"none",function(a){e=a;c()});mxEvent.consume(a)}));c();k.style.padding=
+mxClient.IS_FF?"4px 2px 4px 2px":"4px";k.style.marginLeft="4px";k.style.height="22px";k.style.width="22px";k.style.position="relative";k.style.top=mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE?"6px":"1px";k.className="geColorBtn";a.appendChild(k);mxUtils.br(a);return{getColor:function(){return e},getTarget:function(){return d.value},focus:function(){d.focus()}}};EditorUi.prototype.createLink=function(a,b,d,e,p,h,k,l){var c=this.getCurrentFile(),f=[];e&&(f.push("lightbox=1"),"auto"!=a&&f.push("target="+
+a),null!=b&&b!=mxConstants.NONE&&f.push("highlight="+("#"==b.charAt(0)?b.substring(1):b)),null!=p&&0<p.length&&f.push("edit="+encodeURIComponent(p)),h&&f.push("layers=1"),this.editor.graph.foldingEnabled&&f.push("nav=1"));if(d&&null!=this.pages&&null!=this.currentPage)for(a=0;a<this.pages.length;a++)if(this.pages[a]==this.currentPage){0<a&&f.push("page="+a);break}a=!0;null!=k?d="#U"+encodeURIComponent(k):(c=this.getCurrentFile(),l||null==c||c.constructor!=window.DriveFile?d="#R"+encodeURIComponent(d?
+this.getFileData(!0,null,null,null,null,null,null,!0):this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml()))):(d="#"+c.getHash(),a=!1));a&&null!=c&&null!=c.getTitle()&&c.getTitle()!=this.defaultFilename&&f.push("title="+encodeURIComponent(c.getTitle()));return(mxClient.IS_CHROMEAPP||EditorUi.isElectronApp||!/.*\.draw\.io$/.test(window.location.hostname)?"https://www.draw.io/":"https://"+window.location.host+"/")+(0<f.length?"?"+f.join("&"):"")+d};EditorUi.prototype.createHtml=function(a,
+b,d,e,p,h,k,l,m,u,q){this.getBasenames();var c={};""!=p&&p!=mxConstants.NONE&&(c.highlight=p);"auto"!==e&&(c.target=e);m||(c.lightbox=!1);c.nav=this.editor.graph.foldingEnabled;d=parseInt(d);isNaN(d)||100==d||(c.zoom=d/100);d=[];k&&(d.push("pages"),c.resize=!0,null!=this.pages&&null!=this.currentPage&&(c.page=mxUtils.indexOf(this.pages,this.currentPage)));b&&(d.push("zoom"),c.resize=!0);l&&d.push("layers");0<d.length&&(m&&d.push("lightbox"),c.toolbar=d.join(" "));null!=u&&0<u.length&&(c.edit=u);null!=
+a?c.url=a:c.xml=this.getFileData(!0,null,null,null,null,!k);b='<div class="mxgraph" style="'+(h?"max-width:100%;":"")+(""!=d?"border:1px solid transparent;":"")+'" data-mxgraph="'+mxUtils.htmlEntities(JSON.stringify(c))+'"></div>';a=null!=a?"&fetch="+encodeURIComponent(a):"";q(b,'<script type="text/javascript" src="'+(0<a.length?("1"==urlParams.dev?"https://test.draw.io/embed2.js?dev=1":"https://www.draw.io/embed2.js?")+a:"1"==urlParams.dev?"https://test.draw.io/js/viewer.min.js":"https://www.draw.io/js/viewer.min.js")+
 '">\x3c/script>')};EditorUi.prototype.showHtmlDialog=function(a,b,d,e){var c=document.createElement("div");c.style.whiteSpace="nowrap";var f=document.createElement("h3");mxUtils.write(f,mxResources.get("html"));f.style.cssText="width:100%;text-align:center;margin-top:0px;margin-bottom:12px";c.appendChild(f);var g=document.createElement("div");g.style.cssText="border-bottom:1px solid lightGray;padding-bottom:8px;margin-bottom:12px;";var n=document.createElement("input");n.style.cssText="margin-right:8px;margin-top:8px;margin-bottom:8px;";
 n.setAttribute("value","url");n.setAttribute("type","radio");n.setAttribute("name","type-embedhtmldialog");f=n.cloneNode(!0);f.setAttribute("value","copy");g.appendChild(f);var k=document.createElement("span");mxUtils.write(k,mxResources.get("includeCopyOfMyDiagram"));g.appendChild(k);mxUtils.br(g);g.appendChild(n);k=document.createElement("span");mxUtils.write(k,mxResources.get("publicDiagramUrl"));g.appendChild(k);var l=this.getCurrentFile();null==d&&null!=l&&l.constructor==window.DriveFile&&(k=
 document.createElement("a"),k.style.paddingLeft="12px",k.style.color="gray",k.setAttribute("href","javascript:void(0);"),mxUtils.write(k,mxResources.get("share")),g.appendChild(k),mxEvent.addListener(k,"click",mxUtils.bind(this,function(){this.hideDialog();this.drive.showPermissions(l.getId())})));f.setAttribute("checked","checked");null==d&&n.setAttribute("disabled","disabled");c.appendChild(g);var m=this.addLinkSection(c),q=this.addCheckbox(c,mxResources.get("zoom"),!0,null,!0);mxUtils.write(c,
diff --git a/war/js/vsdx.min.js b/src/main/webapp/js/vsdx.min.js
similarity index 100%
rename from war/js/vsdx.min.js
rename to src/main/webapp/js/vsdx.min.js
diff --git a/war/js/vsdx/bmpDecoder.js b/src/main/webapp/js/vsdx/bmpDecoder.js
similarity index 100%
rename from war/js/vsdx/bmpDecoder.js
rename to src/main/webapp/js/vsdx/bmpDecoder.js
diff --git a/war/js/vsdx/importer.js b/src/main/webapp/js/vsdx/importer.js
similarity index 100%
rename from war/js/vsdx/importer.js
rename to src/main/webapp/js/vsdx/importer.js
diff --git a/war/js/vsdx/resources/edgeNameU.txt b/src/main/webapp/js/vsdx/resources/edgeNameU.txt
similarity index 100%
rename from war/js/vsdx/resources/edgeNameU.txt
rename to src/main/webapp/js/vsdx/resources/edgeNameU.txt
diff --git a/war/js/vsdx/resources/nameU.txt b/src/main/webapp/js/vsdx/resources/nameU.txt
similarity index 100%
rename from war/js/vsdx/resources/nameU.txt
rename to src/main/webapp/js/vsdx/resources/nameU.txt
diff --git a/war/mxgraph/css/common.css b/src/main/webapp/mxgraph/css/common.css
similarity index 100%
rename from war/mxgraph/css/common.css
rename to src/main/webapp/mxgraph/css/common.css
diff --git a/war/mxgraph/css/explorer.css b/src/main/webapp/mxgraph/css/explorer.css
similarity index 100%
rename from war/mxgraph/css/explorer.css
rename to src/main/webapp/mxgraph/css/explorer.css
diff --git a/war/mxgraph/images/button.gif b/src/main/webapp/mxgraph/images/button.gif
similarity index 100%
rename from war/mxgraph/images/button.gif
rename to src/main/webapp/mxgraph/images/button.gif
diff --git a/war/mxgraph/images/close.gif b/src/main/webapp/mxgraph/images/close.gif
similarity index 100%
rename from war/mxgraph/images/close.gif
rename to src/main/webapp/mxgraph/images/close.gif
diff --git a/war/mxgraph/images/collapsed.gif b/src/main/webapp/mxgraph/images/collapsed.gif
similarity index 100%
rename from war/mxgraph/images/collapsed.gif
rename to src/main/webapp/mxgraph/images/collapsed.gif
diff --git a/war/mxgraph/images/error.gif b/src/main/webapp/mxgraph/images/error.gif
similarity index 100%
rename from war/mxgraph/images/error.gif
rename to src/main/webapp/mxgraph/images/error.gif
diff --git a/war/mxgraph/images/expanded.gif b/src/main/webapp/mxgraph/images/expanded.gif
similarity index 100%
rename from war/mxgraph/images/expanded.gif
rename to src/main/webapp/mxgraph/images/expanded.gif
diff --git a/war/mxgraph/images/maximize.gif b/src/main/webapp/mxgraph/images/maximize.gif
similarity index 100%
rename from war/mxgraph/images/maximize.gif
rename to src/main/webapp/mxgraph/images/maximize.gif
diff --git a/war/mxgraph/images/minimize.gif b/src/main/webapp/mxgraph/images/minimize.gif
similarity index 100%
rename from war/mxgraph/images/minimize.gif
rename to src/main/webapp/mxgraph/images/minimize.gif
diff --git a/war/mxgraph/images/normalize.gif b/src/main/webapp/mxgraph/images/normalize.gif
similarity index 100%
rename from war/mxgraph/images/normalize.gif
rename to src/main/webapp/mxgraph/images/normalize.gif
diff --git a/war/mxgraph/images/point.gif b/src/main/webapp/mxgraph/images/point.gif
similarity index 100%
rename from war/mxgraph/images/point.gif
rename to src/main/webapp/mxgraph/images/point.gif
diff --git a/war/mxgraph/images/resize.gif b/src/main/webapp/mxgraph/images/resize.gif
similarity index 100%
rename from war/mxgraph/images/resize.gif
rename to src/main/webapp/mxgraph/images/resize.gif
diff --git a/war/mxgraph/images/separator.gif b/src/main/webapp/mxgraph/images/separator.gif
similarity index 100%
rename from war/mxgraph/images/separator.gif
rename to src/main/webapp/mxgraph/images/separator.gif
diff --git a/war/mxgraph/images/submenu.gif b/src/main/webapp/mxgraph/images/submenu.gif
similarity index 100%
rename from war/mxgraph/images/submenu.gif
rename to src/main/webapp/mxgraph/images/submenu.gif
diff --git a/war/mxgraph/images/transparent.gif b/src/main/webapp/mxgraph/images/transparent.gif
similarity index 100%
rename from war/mxgraph/images/transparent.gif
rename to src/main/webapp/mxgraph/images/transparent.gif
diff --git a/war/mxgraph/images/warning.gif b/src/main/webapp/mxgraph/images/warning.gif
similarity index 100%
rename from war/mxgraph/images/warning.gif
rename to src/main/webapp/mxgraph/images/warning.gif
diff --git a/war/mxgraph/images/warning.png b/src/main/webapp/mxgraph/images/warning.png
similarity index 100%
rename from war/mxgraph/images/warning.png
rename to src/main/webapp/mxgraph/images/warning.png
diff --git a/war/mxgraph/images/window-title.gif b/src/main/webapp/mxgraph/images/window-title.gif
similarity index 100%
rename from war/mxgraph/images/window-title.gif
rename to src/main/webapp/mxgraph/images/window-title.gif
diff --git a/war/mxgraph/images/window.gif b/src/main/webapp/mxgraph/images/window.gif
similarity index 100%
rename from war/mxgraph/images/window.gif
rename to src/main/webapp/mxgraph/images/window.gif
diff --git a/war/offline.html b/src/main/webapp/offline.html
similarity index 100%
rename from war/offline.html
rename to src/main/webapp/offline.html
diff --git a/war/onedrive.html b/src/main/webapp/onedrive.html
similarity index 100%
rename from war/onedrive.html
rename to src/main/webapp/onedrive.html
diff --git a/war/onedrive2.html b/src/main/webapp/onedrive2.html
similarity index 100%
rename from war/onedrive2.html
rename to src/main/webapp/onedrive2.html
diff --git a/war/onedrive3.html b/src/main/webapp/onedrive3.html
similarity index 100%
rename from war/onedrive3.html
rename to src/main/webapp/onedrive3.html
diff --git a/war/open.html b/src/main/webapp/open.html
similarity index 100%
rename from war/open.html
rename to src/main/webapp/open.html
diff --git a/war/package.json b/src/main/webapp/package.json
similarity index 100%
rename from war/package.json
rename to src/main/webapp/package.json
diff --git a/war/plugins/animation.js b/src/main/webapp/plugins/animation.js
similarity index 100%
rename from war/plugins/animation.js
rename to src/main/webapp/plugins/animation.js
diff --git a/war/plugins/anonymize.js b/src/main/webapp/plugins/anonymize.js
similarity index 100%
rename from war/plugins/anonymize.js
rename to src/main/webapp/plugins/anonymize.js
diff --git a/war/plugins/doors.js b/src/main/webapp/plugins/doors.js
similarity index 100%
rename from war/plugins/doors.js
rename to src/main/webapp/plugins/doors.js
diff --git a/war/plugins/edgeConnection.js b/src/main/webapp/plugins/edgeConnection.js
similarity index 100%
rename from war/plugins/edgeConnection.js
rename to src/main/webapp/plugins/edgeConnection.js
diff --git a/war/plugins/electron.js b/src/main/webapp/plugins/electron.js
similarity index 100%
rename from war/plugins/electron.js
rename to src/main/webapp/plugins/electron.js
diff --git a/war/plugins/explore.js b/src/main/webapp/plugins/explore.js
similarity index 100%
rename from war/plugins/explore.js
rename to src/main/webapp/plugins/explore.js
diff --git a/war/plugins/import.js b/src/main/webapp/plugins/import.js
similarity index 100%
rename from war/plugins/import.js
rename to src/main/webapp/plugins/import.js
diff --git a/war/plugins/number.js b/src/main/webapp/plugins/number.js
similarity index 100%
rename from war/plugins/number.js
rename to src/main/webapp/plugins/number.js
diff --git a/war/plugins/p1.js b/src/main/webapp/plugins/p1.js
similarity index 100%
rename from war/plugins/p1.js
rename to src/main/webapp/plugins/p1.js
diff --git a/war/plugins/props.js b/src/main/webapp/plugins/props.js
similarity index 100%
rename from war/plugins/props.js
rename to src/main/webapp/plugins/props.js
diff --git a/war/plugins/replay.js b/src/main/webapp/plugins/replay.js
similarity index 100%
rename from war/plugins/replay.js
rename to src/main/webapp/plugins/replay.js
diff --git a/war/plugins/sql.js b/src/main/webapp/plugins/sql.js
similarity index 100%
rename from war/plugins/sql.js
rename to src/main/webapp/plugins/sql.js
diff --git a/war/plugins/svgdata.js b/src/main/webapp/plugins/svgdata.js
similarity index 100%
rename from war/plugins/svgdata.js
rename to src/main/webapp/plugins/svgdata.js
diff --git a/war/plugins/text.js b/src/main/webapp/plugins/text.js
similarity index 100%
rename from war/plugins/text.js
rename to src/main/webapp/plugins/text.js
diff --git a/war/plugins/tooltips.js b/src/main/webapp/plugins/tooltips.js
similarity index 100%
rename from war/plugins/tooltips.js
rename to src/main/webapp/plugins/tooltips.js
diff --git a/war/plugins/trees/handle-move.gif b/src/main/webapp/plugins/trees/handle-move.gif
similarity index 100%
rename from war/plugins/trees/handle-move.gif
rename to src/main/webapp/plugins/trees/handle-move.gif
diff --git a/war/plugins/trees/trees.js b/src/main/webapp/plugins/trees/trees.js
similarity index 100%
rename from war/plugins/trees/trees.js
rename to src/main/webapp/plugins/trees/trees.js
diff --git a/war/plugins/trello.js b/src/main/webapp/plugins/trello.js
similarity index 100%
rename from war/plugins/trello.js
rename to src/main/webapp/plugins/trello.js
diff --git a/war/plugins/update.js b/src/main/webapp/plugins/update.js
similarity index 100%
rename from war/plugins/update.js
rename to src/main/webapp/plugins/update.js
diff --git a/war/plugins/voice.js b/src/main/webapp/plugins/voice.js
similarity index 100%
rename from war/plugins/voice.js
rename to src/main/webapp/plugins/voice.js
diff --git a/war/resources/dia.txt b/src/main/webapp/resources/dia.txt
similarity index 100%
rename from war/resources/dia.txt
rename to src/main/webapp/resources/dia.txt
diff --git a/war/resources/dia_am.txt b/src/main/webapp/resources/dia_am.txt
similarity index 100%
rename from war/resources/dia_am.txt
rename to src/main/webapp/resources/dia_am.txt
diff --git a/war/resources/dia_ar.txt b/src/main/webapp/resources/dia_ar.txt
similarity index 100%
rename from war/resources/dia_ar.txt
rename to src/main/webapp/resources/dia_ar.txt
diff --git a/war/resources/dia_bg.txt b/src/main/webapp/resources/dia_bg.txt
similarity index 100%
rename from war/resources/dia_bg.txt
rename to src/main/webapp/resources/dia_bg.txt
diff --git a/war/resources/dia_bn.txt b/src/main/webapp/resources/dia_bn.txt
similarity index 100%
rename from war/resources/dia_bn.txt
rename to src/main/webapp/resources/dia_bn.txt
diff --git a/war/resources/dia_bs.txt b/src/main/webapp/resources/dia_bs.txt
similarity index 100%
rename from war/resources/dia_bs.txt
rename to src/main/webapp/resources/dia_bs.txt
diff --git a/war/resources/dia_ca.txt b/src/main/webapp/resources/dia_ca.txt
similarity index 100%
rename from war/resources/dia_ca.txt
rename to src/main/webapp/resources/dia_ca.txt
diff --git a/war/resources/dia_cs.txt b/src/main/webapp/resources/dia_cs.txt
similarity index 100%
rename from war/resources/dia_cs.txt
rename to src/main/webapp/resources/dia_cs.txt
diff --git a/war/resources/dia_da.txt b/src/main/webapp/resources/dia_da.txt
similarity index 100%
rename from war/resources/dia_da.txt
rename to src/main/webapp/resources/dia_da.txt
diff --git a/war/resources/dia_de.txt b/src/main/webapp/resources/dia_de.txt
similarity index 100%
rename from war/resources/dia_de.txt
rename to src/main/webapp/resources/dia_de.txt
diff --git a/war/resources/dia_el.txt b/src/main/webapp/resources/dia_el.txt
similarity index 100%
rename from war/resources/dia_el.txt
rename to src/main/webapp/resources/dia_el.txt
diff --git a/war/resources/dia_eo.txt b/src/main/webapp/resources/dia_eo.txt
similarity index 100%
rename from war/resources/dia_eo.txt
rename to src/main/webapp/resources/dia_eo.txt
diff --git a/war/resources/dia_es.txt b/src/main/webapp/resources/dia_es.txt
similarity index 100%
rename from war/resources/dia_es.txt
rename to src/main/webapp/resources/dia_es.txt
diff --git a/war/resources/dia_et.txt b/src/main/webapp/resources/dia_et.txt
similarity index 100%
rename from war/resources/dia_et.txt
rename to src/main/webapp/resources/dia_et.txt
diff --git a/war/resources/dia_fa.txt b/src/main/webapp/resources/dia_fa.txt
similarity index 100%
rename from war/resources/dia_fa.txt
rename to src/main/webapp/resources/dia_fa.txt
diff --git a/war/resources/dia_fi.txt b/src/main/webapp/resources/dia_fi.txt
similarity index 100%
rename from war/resources/dia_fi.txt
rename to src/main/webapp/resources/dia_fi.txt
diff --git a/war/resources/dia_fil.txt b/src/main/webapp/resources/dia_fil.txt
similarity index 100%
rename from war/resources/dia_fil.txt
rename to src/main/webapp/resources/dia_fil.txt
diff --git a/war/resources/dia_fr.txt b/src/main/webapp/resources/dia_fr.txt
similarity index 100%
rename from war/resources/dia_fr.txt
rename to src/main/webapp/resources/dia_fr.txt
diff --git a/war/resources/dia_gu.txt b/src/main/webapp/resources/dia_gu.txt
similarity index 100%
rename from war/resources/dia_gu.txt
rename to src/main/webapp/resources/dia_gu.txt
diff --git a/war/resources/dia_he.txt b/src/main/webapp/resources/dia_he.txt
similarity index 100%
rename from war/resources/dia_he.txt
rename to src/main/webapp/resources/dia_he.txt
diff --git a/war/resources/dia_hi.txt b/src/main/webapp/resources/dia_hi.txt
similarity index 100%
rename from war/resources/dia_hi.txt
rename to src/main/webapp/resources/dia_hi.txt
diff --git a/war/resources/dia_hr.txt b/src/main/webapp/resources/dia_hr.txt
similarity index 100%
rename from war/resources/dia_hr.txt
rename to src/main/webapp/resources/dia_hr.txt
diff --git a/war/resources/dia_hu.txt b/src/main/webapp/resources/dia_hu.txt
similarity index 100%
rename from war/resources/dia_hu.txt
rename to src/main/webapp/resources/dia_hu.txt
diff --git a/war/resources/dia_i18n.txt b/src/main/webapp/resources/dia_i18n.txt
similarity index 100%
rename from war/resources/dia_i18n.txt
rename to src/main/webapp/resources/dia_i18n.txt
diff --git a/war/resources/dia_id.txt b/src/main/webapp/resources/dia_id.txt
similarity index 100%
rename from war/resources/dia_id.txt
rename to src/main/webapp/resources/dia_id.txt
diff --git a/war/resources/dia_it.txt b/src/main/webapp/resources/dia_it.txt
similarity index 100%
rename from war/resources/dia_it.txt
rename to src/main/webapp/resources/dia_it.txt
diff --git a/war/resources/dia_ja.txt b/src/main/webapp/resources/dia_ja.txt
similarity index 100%
rename from war/resources/dia_ja.txt
rename to src/main/webapp/resources/dia_ja.txt
diff --git a/war/resources/dia_kn.txt b/src/main/webapp/resources/dia_kn.txt
similarity index 100%
rename from war/resources/dia_kn.txt
rename to src/main/webapp/resources/dia_kn.txt
diff --git a/war/resources/dia_ko.txt b/src/main/webapp/resources/dia_ko.txt
similarity index 100%
rename from war/resources/dia_ko.txt
rename to src/main/webapp/resources/dia_ko.txt
diff --git a/war/resources/dia_lt.txt b/src/main/webapp/resources/dia_lt.txt
similarity index 100%
rename from war/resources/dia_lt.txt
rename to src/main/webapp/resources/dia_lt.txt
diff --git a/war/resources/dia_lv.txt b/src/main/webapp/resources/dia_lv.txt
similarity index 100%
rename from war/resources/dia_lv.txt
rename to src/main/webapp/resources/dia_lv.txt
diff --git a/war/resources/dia_ml.txt b/src/main/webapp/resources/dia_ml.txt
similarity index 100%
rename from war/resources/dia_ml.txt
rename to src/main/webapp/resources/dia_ml.txt
diff --git a/war/resources/dia_mr.txt b/src/main/webapp/resources/dia_mr.txt
similarity index 100%
rename from war/resources/dia_mr.txt
rename to src/main/webapp/resources/dia_mr.txt
diff --git a/war/resources/dia_ms.txt b/src/main/webapp/resources/dia_ms.txt
similarity index 100%
rename from war/resources/dia_ms.txt
rename to src/main/webapp/resources/dia_ms.txt
diff --git a/war/resources/dia_nl.txt b/src/main/webapp/resources/dia_nl.txt
similarity index 100%
rename from war/resources/dia_nl.txt
rename to src/main/webapp/resources/dia_nl.txt
diff --git a/war/resources/dia_no.txt b/src/main/webapp/resources/dia_no.txt
similarity index 100%
rename from war/resources/dia_no.txt
rename to src/main/webapp/resources/dia_no.txt
diff --git a/war/resources/dia_pl.txt b/src/main/webapp/resources/dia_pl.txt
similarity index 100%
rename from war/resources/dia_pl.txt
rename to src/main/webapp/resources/dia_pl.txt
diff --git a/war/resources/dia_pt-br.txt b/src/main/webapp/resources/dia_pt-br.txt
similarity index 100%
rename from war/resources/dia_pt-br.txt
rename to src/main/webapp/resources/dia_pt-br.txt
diff --git a/war/resources/dia_pt.txt b/src/main/webapp/resources/dia_pt.txt
similarity index 100%
rename from war/resources/dia_pt.txt
rename to src/main/webapp/resources/dia_pt.txt
diff --git a/war/resources/dia_ro.txt b/src/main/webapp/resources/dia_ro.txt
similarity index 100%
rename from war/resources/dia_ro.txt
rename to src/main/webapp/resources/dia_ro.txt
diff --git a/war/resources/dia_ru.txt b/src/main/webapp/resources/dia_ru.txt
similarity index 100%
rename from war/resources/dia_ru.txt
rename to src/main/webapp/resources/dia_ru.txt
diff --git a/war/resources/dia_sk.txt b/src/main/webapp/resources/dia_sk.txt
similarity index 100%
rename from war/resources/dia_sk.txt
rename to src/main/webapp/resources/dia_sk.txt
diff --git a/war/resources/dia_sl.txt b/src/main/webapp/resources/dia_sl.txt
similarity index 100%
rename from war/resources/dia_sl.txt
rename to src/main/webapp/resources/dia_sl.txt
diff --git a/war/resources/dia_sr.txt b/src/main/webapp/resources/dia_sr.txt
similarity index 100%
rename from war/resources/dia_sr.txt
rename to src/main/webapp/resources/dia_sr.txt
diff --git a/war/resources/dia_sv.txt b/src/main/webapp/resources/dia_sv.txt
similarity index 100%
rename from war/resources/dia_sv.txt
rename to src/main/webapp/resources/dia_sv.txt
diff --git a/war/resources/dia_sw.txt b/src/main/webapp/resources/dia_sw.txt
similarity index 100%
rename from war/resources/dia_sw.txt
rename to src/main/webapp/resources/dia_sw.txt
diff --git a/war/resources/dia_ta.txt b/src/main/webapp/resources/dia_ta.txt
similarity index 100%
rename from war/resources/dia_ta.txt
rename to src/main/webapp/resources/dia_ta.txt
diff --git a/war/resources/dia_te.txt b/src/main/webapp/resources/dia_te.txt
similarity index 100%
rename from war/resources/dia_te.txt
rename to src/main/webapp/resources/dia_te.txt
diff --git a/war/resources/dia_th.txt b/src/main/webapp/resources/dia_th.txt
similarity index 100%
rename from war/resources/dia_th.txt
rename to src/main/webapp/resources/dia_th.txt
diff --git a/war/resources/dia_tr.txt b/src/main/webapp/resources/dia_tr.txt
similarity index 100%
rename from war/resources/dia_tr.txt
rename to src/main/webapp/resources/dia_tr.txt
diff --git a/war/resources/dia_uk.txt b/src/main/webapp/resources/dia_uk.txt
similarity index 100%
rename from war/resources/dia_uk.txt
rename to src/main/webapp/resources/dia_uk.txt
diff --git a/war/resources/dia_vi.txt b/src/main/webapp/resources/dia_vi.txt
similarity index 100%
rename from war/resources/dia_vi.txt
rename to src/main/webapp/resources/dia_vi.txt
diff --git a/war/resources/dia_zh-tw.txt b/src/main/webapp/resources/dia_zh-tw.txt
similarity index 100%
rename from war/resources/dia_zh-tw.txt
rename to src/main/webapp/resources/dia_zh-tw.txt
diff --git a/war/resources/dia_zh.txt b/src/main/webapp/resources/dia_zh.txt
similarity index 100%
rename from war/resources/dia_zh.txt
rename to src/main/webapp/resources/dia_zh.txt
diff --git a/war/shapes/bpmn/mxBpmnShape2.js b/src/main/webapp/shapes/bpmn/mxBpmnShape2.js
similarity index 100%
rename from war/shapes/bpmn/mxBpmnShape2.js
rename to src/main/webapp/shapes/bpmn/mxBpmnShape2.js
diff --git a/war/shapes/er/mxER.js b/src/main/webapp/shapes/er/mxER.js
similarity index 100%
rename from war/shapes/er/mxER.js
rename to src/main/webapp/shapes/er/mxER.js
diff --git a/war/shapes/ios7/mxIOS7Ui.js b/src/main/webapp/shapes/ios7/mxIOS7Ui.js
similarity index 100%
rename from war/shapes/ios7/mxIOS7Ui.js
rename to src/main/webapp/shapes/ios7/mxIOS7Ui.js
diff --git a/war/shapes/mockup/mxMockupButtons.js b/src/main/webapp/shapes/mockup/mxMockupButtons.js
similarity index 100%
rename from war/shapes/mockup/mxMockupButtons.js
rename to src/main/webapp/shapes/mockup/mxMockupButtons.js
diff --git a/war/shapes/mockup/mxMockupContainers.js b/src/main/webapp/shapes/mockup/mxMockupContainers.js
similarity index 100%
rename from war/shapes/mockup/mxMockupContainers.js
rename to src/main/webapp/shapes/mockup/mxMockupContainers.js
diff --git a/war/shapes/mockup/mxMockupForms.js b/src/main/webapp/shapes/mockup/mxMockupForms.js
similarity index 100%
rename from war/shapes/mockup/mxMockupForms.js
rename to src/main/webapp/shapes/mockup/mxMockupForms.js
diff --git a/war/shapes/mockup/mxMockupGraphics.js b/src/main/webapp/shapes/mockup/mxMockupGraphics.js
similarity index 100%
rename from war/shapes/mockup/mxMockupGraphics.js
rename to src/main/webapp/shapes/mockup/mxMockupGraphics.js
diff --git a/war/shapes/mockup/mxMockupMarkup.js b/src/main/webapp/shapes/mockup/mxMockupMarkup.js
similarity index 100%
rename from war/shapes/mockup/mxMockupMarkup.js
rename to src/main/webapp/shapes/mockup/mxMockupMarkup.js
diff --git a/war/shapes/mockup/mxMockupMisc.js b/src/main/webapp/shapes/mockup/mxMockupMisc.js
similarity index 100%
rename from war/shapes/mockup/mxMockupMisc.js
rename to src/main/webapp/shapes/mockup/mxMockupMisc.js
diff --git a/war/shapes/mockup/mxMockupNavigation.js b/src/main/webapp/shapes/mockup/mxMockupNavigation.js
similarity index 100%
rename from war/shapes/mockup/mxMockupNavigation.js
rename to src/main/webapp/shapes/mockup/mxMockupNavigation.js
diff --git a/war/shapes/mockup/mxMockupText.js b/src/main/webapp/shapes/mockup/mxMockupText.js
similarity index 100%
rename from war/shapes/mockup/mxMockupText.js
rename to src/main/webapp/shapes/mockup/mxMockupText.js
diff --git a/war/shapes/mockup/mxMockupiOS.js b/src/main/webapp/shapes/mockup/mxMockupiOS.js
similarity index 100%
rename from war/shapes/mockup/mxMockupiOS.js
rename to src/main/webapp/shapes/mockup/mxMockupiOS.js
diff --git a/war/shapes/mxAWS3D.js b/src/main/webapp/shapes/mxAWS3D.js
similarity index 100%
rename from war/shapes/mxAWS3D.js
rename to src/main/webapp/shapes/mxAWS3D.js
diff --git a/war/shapes/mxAndroid.js b/src/main/webapp/shapes/mxAndroid.js
similarity index 99%
rename from war/shapes/mxAndroid.js
rename to src/main/webapp/shapes/mxAndroid.js
index 2b9da292d915c6100a1442ffa5516eb001447182..5274eece8f2faaacdeb5c2c985387934930fb087 100644
--- a/war/shapes/mxAndroid.js
+++ b/src/main/webapp/shapes/mxAndroid.js
@@ -1293,7 +1293,7 @@ mxShapeAndroidQuickscroll2.prototype.paintVertexShape = function(c, x, y, w, h)
 	c.fill();
 	
 	c.setFontSize('12');
-	c.text((w - 18) * 0.5, dy, 0, 00, 'Aa', mxConstants.ALIGN_CENTER, mxConstants.ALIGN_MIDDLE, 0, null, 0, 0, 0);
+	c.text((w - 18) * 0.5, dy, 0, 0, 'Aa', mxConstants.ALIGN_CENTER, mxConstants.ALIGN_MIDDLE, 0, null, 0, 0, 0);
 };
 
 mxCellRenderer.registerShape(mxShapeAndroidQuickscroll2.prototype.cst.QUICKSCROLL, mxShapeAndroidQuickscroll2);
diff --git a/war/shapes/mxArchiMate.js b/src/main/webapp/shapes/mxArchiMate.js
similarity index 100%
rename from war/shapes/mxArchiMate.js
rename to src/main/webapp/shapes/mxArchiMate.js
diff --git a/war/shapes/mxArchiMate3.js b/src/main/webapp/shapes/mxArchiMate3.js
similarity index 100%
rename from war/shapes/mxArchiMate3.js
rename to src/main/webapp/shapes/mxArchiMate3.js
diff --git a/war/shapes/mxArrows.js b/src/main/webapp/shapes/mxArrows.js
similarity index 100%
rename from war/shapes/mxArrows.js
rename to src/main/webapp/shapes/mxArrows.js
diff --git a/war/shapes/mxBasic.js b/src/main/webapp/shapes/mxBasic.js
similarity index 100%
rename from war/shapes/mxBasic.js
rename to src/main/webapp/shapes/mxBasic.js
diff --git a/war/shapes/mxBootstrap.js b/src/main/webapp/shapes/mxBootstrap.js
similarity index 100%
rename from war/shapes/mxBootstrap.js
rename to src/main/webapp/shapes/mxBootstrap.js
diff --git a/war/shapes/mxCabinets.js b/src/main/webapp/shapes/mxCabinets.js
similarity index 100%
rename from war/shapes/mxCabinets.js
rename to src/main/webapp/shapes/mxCabinets.js
diff --git a/war/shapes/mxEip.js b/src/main/webapp/shapes/mxEip.js
similarity index 100%
rename from war/shapes/mxEip.js
rename to src/main/webapp/shapes/mxEip.js
diff --git a/war/shapes/mxElectrical.js b/src/main/webapp/shapes/mxElectrical.js
similarity index 100%
rename from war/shapes/mxElectrical.js
rename to src/main/webapp/shapes/mxElectrical.js
diff --git a/war/shapes/mxFloorplan.js b/src/main/webapp/shapes/mxFloorplan.js
similarity index 100%
rename from war/shapes/mxFloorplan.js
rename to src/main/webapp/shapes/mxFloorplan.js
diff --git a/war/shapes/mxGmdl.js b/src/main/webapp/shapes/mxGmdl.js
similarity index 100%
rename from war/shapes/mxGmdl.js
rename to src/main/webapp/shapes/mxGmdl.js
diff --git a/war/shapes/mxLeanMap.js b/src/main/webapp/shapes/mxLeanMap.js
similarity index 100%
rename from war/shapes/mxLeanMap.js
rename to src/main/webapp/shapes/mxLeanMap.js
diff --git a/war/shapes/mxNetworks.js b/src/main/webapp/shapes/mxNetworks.js
similarity index 100%
rename from war/shapes/mxNetworks.js
rename to src/main/webapp/shapes/mxNetworks.js
diff --git a/war/shapes/mxSysML.js b/src/main/webapp/shapes/mxSysML.js
similarity index 100%
rename from war/shapes/mxSysML.js
rename to src/main/webapp/shapes/mxSysML.js
diff --git a/war/shapes/pid2/mxPidInstruments.js b/src/main/webapp/shapes/pid2/mxPidInstruments.js
similarity index 100%
rename from war/shapes/pid2/mxPidInstruments.js
rename to src/main/webapp/shapes/pid2/mxPidInstruments.js
diff --git a/war/shapes/pid2/mxPidMisc.js b/src/main/webapp/shapes/pid2/mxPidMisc.js
similarity index 100%
rename from war/shapes/pid2/mxPidMisc.js
rename to src/main/webapp/shapes/pid2/mxPidMisc.js
diff --git a/war/shapes/pid2/mxPidValves.js b/src/main/webapp/shapes/pid2/mxPidValves.js
similarity index 100%
rename from war/shapes/pid2/mxPidValves.js
rename to src/main/webapp/shapes/pid2/mxPidValves.js
diff --git a/war/shapes/rack/mxRack.js b/src/main/webapp/shapes/rack/mxRack.js
similarity index 100%
rename from war/shapes/rack/mxRack.js
rename to src/main/webapp/shapes/rack/mxRack.js
diff --git a/war/shortcuts.svg b/src/main/webapp/shortcuts.svg
similarity index 100%
rename from war/shortcuts.svg
rename to src/main/webapp/shortcuts.svg
diff --git a/war/stencils/android/android.xml b/src/main/webapp/stencils/android/android.xml
similarity index 100%
rename from war/stencils/android/android.xml
rename to src/main/webapp/stencils/android/android.xml
diff --git a/war/stencils/arrows.xml b/src/main/webapp/stencils/arrows.xml
similarity index 100%
rename from war/stencils/arrows.xml
rename to src/main/webapp/stencils/arrows.xml
diff --git a/war/stencils/atlassian.xml b/src/main/webapp/stencils/atlassian.xml
similarity index 100%
rename from war/stencils/atlassian.xml
rename to src/main/webapp/stencils/atlassian.xml
diff --git a/war/stencils/aws/compute.xml b/src/main/webapp/stencils/aws/compute.xml
similarity index 100%
rename from war/stencils/aws/compute.xml
rename to src/main/webapp/stencils/aws/compute.xml
diff --git a/war/stencils/aws/content_delivery.xml b/src/main/webapp/stencils/aws/content_delivery.xml
similarity index 100%
rename from war/stencils/aws/content_delivery.xml
rename to src/main/webapp/stencils/aws/content_delivery.xml
diff --git a/war/stencils/aws/database.xml b/src/main/webapp/stencils/aws/database.xml
similarity index 100%
rename from war/stencils/aws/database.xml
rename to src/main/webapp/stencils/aws/database.xml
diff --git a/war/stencils/aws/deployment_management.xml b/src/main/webapp/stencils/aws/deployment_management.xml
similarity index 100%
rename from war/stencils/aws/deployment_management.xml
rename to src/main/webapp/stencils/aws/deployment_management.xml
diff --git a/war/stencils/aws/groups.xml b/src/main/webapp/stencils/aws/groups.xml
similarity index 100%
rename from war/stencils/aws/groups.xml
rename to src/main/webapp/stencils/aws/groups.xml
diff --git a/war/stencils/aws/messaging.xml b/src/main/webapp/stencils/aws/messaging.xml
similarity index 100%
rename from war/stencils/aws/messaging.xml
rename to src/main/webapp/stencils/aws/messaging.xml
diff --git a/war/stencils/aws/misc.xml b/src/main/webapp/stencils/aws/misc.xml
similarity index 100%
rename from war/stencils/aws/misc.xml
rename to src/main/webapp/stencils/aws/misc.xml
diff --git a/war/stencils/aws/networking.xml b/src/main/webapp/stencils/aws/networking.xml
similarity index 100%
rename from war/stencils/aws/networking.xml
rename to src/main/webapp/stencils/aws/networking.xml
diff --git a/war/stencils/aws/non_service_specific.xml b/src/main/webapp/stencils/aws/non_service_specific.xml
similarity index 100%
rename from war/stencils/aws/non_service_specific.xml
rename to src/main/webapp/stencils/aws/non_service_specific.xml
diff --git a/war/stencils/aws/on_demand_workforce.xml b/src/main/webapp/stencils/aws/on_demand_workforce.xml
similarity index 100%
rename from war/stencils/aws/on_demand_workforce.xml
rename to src/main/webapp/stencils/aws/on_demand_workforce.xml
diff --git a/war/stencils/aws/storage.xml b/src/main/webapp/stencils/aws/storage.xml
similarity index 100%
rename from war/stencils/aws/storage.xml
rename to src/main/webapp/stencils/aws/storage.xml
diff --git a/war/stencils/aws2/administration_and_security.xml b/src/main/webapp/stencils/aws2/administration_and_security.xml
similarity index 100%
rename from war/stencils/aws2/administration_and_security.xml
rename to src/main/webapp/stencils/aws2/administration_and_security.xml
diff --git a/war/stencils/aws2/analytics.xml b/src/main/webapp/stencils/aws2/analytics.xml
similarity index 100%
rename from war/stencils/aws2/analytics.xml
rename to src/main/webapp/stencils/aws2/analytics.xml
diff --git a/war/stencils/aws2/app_services.xml b/src/main/webapp/stencils/aws2/app_services.xml
similarity index 100%
rename from war/stencils/aws2/app_services.xml
rename to src/main/webapp/stencils/aws2/app_services.xml
diff --git a/war/stencils/aws2/compute_and_networking.xml b/src/main/webapp/stencils/aws2/compute_and_networking.xml
similarity index 100%
rename from war/stencils/aws2/compute_and_networking.xml
rename to src/main/webapp/stencils/aws2/compute_and_networking.xml
diff --git a/war/stencils/aws2/database.xml b/src/main/webapp/stencils/aws2/database.xml
similarity index 100%
rename from war/stencils/aws2/database.xml
rename to src/main/webapp/stencils/aws2/database.xml
diff --git a/war/stencils/aws2/deployment_and_management.xml b/src/main/webapp/stencils/aws2/deployment_and_management.xml
similarity index 100%
rename from war/stencils/aws2/deployment_and_management.xml
rename to src/main/webapp/stencils/aws2/deployment_and_management.xml
diff --git a/war/stencils/aws2/developer_tools.xml b/src/main/webapp/stencils/aws2/developer_tools.xml
similarity index 100%
rename from war/stencils/aws2/developer_tools.xml
rename to src/main/webapp/stencils/aws2/developer_tools.xml
diff --git a/war/stencils/aws2/enterprise_applications.xml b/src/main/webapp/stencils/aws2/enterprise_applications.xml
similarity index 100%
rename from war/stencils/aws2/enterprise_applications.xml
rename to src/main/webapp/stencils/aws2/enterprise_applications.xml
diff --git a/war/stencils/aws2/game_development.xml b/src/main/webapp/stencils/aws2/game_development.xml
similarity index 100%
rename from war/stencils/aws2/game_development.xml
rename to src/main/webapp/stencils/aws2/game_development.xml
diff --git a/war/stencils/aws2/internet_of_things.xml b/src/main/webapp/stencils/aws2/internet_of_things.xml
similarity index 100%
rename from war/stencils/aws2/internet_of_things.xml
rename to src/main/webapp/stencils/aws2/internet_of_things.xml
diff --git a/war/stencils/aws2/management_tools.xml b/src/main/webapp/stencils/aws2/management_tools.xml
similarity index 100%
rename from war/stencils/aws2/management_tools.xml
rename to src/main/webapp/stencils/aws2/management_tools.xml
diff --git a/war/stencils/aws2/mobile_services.xml b/src/main/webapp/stencils/aws2/mobile_services.xml
similarity index 100%
rename from war/stencils/aws2/mobile_services.xml
rename to src/main/webapp/stencils/aws2/mobile_services.xml
diff --git a/war/stencils/aws2/networking.xml b/src/main/webapp/stencils/aws2/networking.xml
similarity index 100%
rename from war/stencils/aws2/networking.xml
rename to src/main/webapp/stencils/aws2/networking.xml
diff --git a/war/stencils/aws2/non-service_specific.xml b/src/main/webapp/stencils/aws2/non-service_specific.xml
similarity index 100%
rename from war/stencils/aws2/non-service_specific.xml
rename to src/main/webapp/stencils/aws2/non-service_specific.xml
diff --git a/war/stencils/aws2/on-demand_workforce.xml b/src/main/webapp/stencils/aws2/on-demand_workforce.xml
similarity index 100%
rename from war/stencils/aws2/on-demand_workforce.xml
rename to src/main/webapp/stencils/aws2/on-demand_workforce.xml
diff --git a/war/stencils/aws2/sdks.xml b/src/main/webapp/stencils/aws2/sdks.xml
similarity index 100%
rename from war/stencils/aws2/sdks.xml
rename to src/main/webapp/stencils/aws2/sdks.xml
diff --git a/war/stencils/aws2/security_and_identity.xml b/src/main/webapp/stencils/aws2/security_and_identity.xml
similarity index 100%
rename from war/stencils/aws2/security_and_identity.xml
rename to src/main/webapp/stencils/aws2/security_and_identity.xml
diff --git a/war/stencils/aws2/storage_and_content_delivery.xml b/src/main/webapp/stencils/aws2/storage_and_content_delivery.xml
similarity index 100%
rename from war/stencils/aws2/storage_and_content_delivery.xml
rename to src/main/webapp/stencils/aws2/storage_and_content_delivery.xml
diff --git a/war/stencils/aws3.xml b/src/main/webapp/stencils/aws3.xml
similarity index 100%
rename from war/stencils/aws3.xml
rename to src/main/webapp/stencils/aws3.xml
diff --git a/war/stencils/aws3d.xml b/src/main/webapp/stencils/aws3d.xml
similarity index 100%
rename from war/stencils/aws3d.xml
rename to src/main/webapp/stencils/aws3d.xml
diff --git a/war/stencils/azure.xml b/src/main/webapp/stencils/azure.xml
similarity index 100%
rename from war/stencils/azure.xml
rename to src/main/webapp/stencils/azure.xml
diff --git a/war/stencils/basic.xml b/src/main/webapp/stencils/basic.xml
similarity index 100%
rename from war/stencils/basic.xml
rename to src/main/webapp/stencils/basic.xml
diff --git a/war/stencils/bootstrap.xml b/src/main/webapp/stencils/bootstrap.xml
similarity index 100%
rename from war/stencils/bootstrap.xml
rename to src/main/webapp/stencils/bootstrap.xml
diff --git a/war/stencils/bpmn.xml b/src/main/webapp/stencils/bpmn.xml
similarity index 100%
rename from war/stencils/bpmn.xml
rename to src/main/webapp/stencils/bpmn.xml
diff --git a/war/stencils/cabinets.xml b/src/main/webapp/stencils/cabinets.xml
similarity index 100%
rename from war/stencils/cabinets.xml
rename to src/main/webapp/stencils/cabinets.xml
diff --git a/war/stencils/cisco/buildings.xml b/src/main/webapp/stencils/cisco/buildings.xml
similarity index 100%
rename from war/stencils/cisco/buildings.xml
rename to src/main/webapp/stencils/cisco/buildings.xml
diff --git a/war/stencils/cisco/computers_and_peripherals.xml b/src/main/webapp/stencils/cisco/computers_and_peripherals.xml
similarity index 100%
rename from war/stencils/cisco/computers_and_peripherals.xml
rename to src/main/webapp/stencils/cisco/computers_and_peripherals.xml
diff --git a/war/stencils/cisco/controllers_and_modules.xml b/src/main/webapp/stencils/cisco/controllers_and_modules.xml
similarity index 100%
rename from war/stencils/cisco/controllers_and_modules.xml
rename to src/main/webapp/stencils/cisco/controllers_and_modules.xml
diff --git a/war/stencils/cisco/directors.xml b/src/main/webapp/stencils/cisco/directors.xml
similarity index 100%
rename from war/stencils/cisco/directors.xml
rename to src/main/webapp/stencils/cisco/directors.xml
diff --git a/war/stencils/cisco/hubs_and_gateways.xml b/src/main/webapp/stencils/cisco/hubs_and_gateways.xml
similarity index 100%
rename from war/stencils/cisco/hubs_and_gateways.xml
rename to src/main/webapp/stencils/cisco/hubs_and_gateways.xml
diff --git a/war/stencils/cisco/misc.xml b/src/main/webapp/stencils/cisco/misc.xml
similarity index 100%
rename from war/stencils/cisco/misc.xml
rename to src/main/webapp/stencils/cisco/misc.xml
diff --git a/war/stencils/cisco/modems_and_phones.xml b/src/main/webapp/stencils/cisco/modems_and_phones.xml
similarity index 100%
rename from war/stencils/cisco/modems_and_phones.xml
rename to src/main/webapp/stencils/cisco/modems_and_phones.xml
diff --git a/war/stencils/cisco/people.xml b/src/main/webapp/stencils/cisco/people.xml
similarity index 100%
rename from war/stencils/cisco/people.xml
rename to src/main/webapp/stencils/cisco/people.xml
diff --git a/war/stencils/cisco/routers.xml b/src/main/webapp/stencils/cisco/routers.xml
similarity index 100%
rename from war/stencils/cisco/routers.xml
rename to src/main/webapp/stencils/cisco/routers.xml
diff --git a/war/stencils/cisco/security.xml b/src/main/webapp/stencils/cisco/security.xml
similarity index 100%
rename from war/stencils/cisco/security.xml
rename to src/main/webapp/stencils/cisco/security.xml
diff --git a/war/stencils/cisco/servers.xml b/src/main/webapp/stencils/cisco/servers.xml
similarity index 100%
rename from war/stencils/cisco/servers.xml
rename to src/main/webapp/stencils/cisco/servers.xml
diff --git a/war/stencils/cisco/storage.xml b/src/main/webapp/stencils/cisco/storage.xml
similarity index 100%
rename from war/stencils/cisco/storage.xml
rename to src/main/webapp/stencils/cisco/storage.xml
diff --git a/war/stencils/cisco/switches.xml b/src/main/webapp/stencils/cisco/switches.xml
similarity index 100%
rename from war/stencils/cisco/switches.xml
rename to src/main/webapp/stencils/cisco/switches.xml
diff --git a/war/stencils/cisco/wireless.xml b/src/main/webapp/stencils/cisco/wireless.xml
similarity index 100%
rename from war/stencils/cisco/wireless.xml
rename to src/main/webapp/stencils/cisco/wireless.xml
diff --git a/war/stencils/citrix.xml b/src/main/webapp/stencils/citrix.xml
similarity index 100%
rename from war/stencils/citrix.xml
rename to src/main/webapp/stencils/citrix.xml
diff --git a/war/stencils/clipart/Gear_128x128.png b/src/main/webapp/stencils/clipart/Gear_128x128.png
similarity index 100%
rename from war/stencils/clipart/Gear_128x128.png
rename to src/main/webapp/stencils/clipart/Gear_128x128.png
diff --git a/war/stencils/eip.xml b/src/main/webapp/stencils/eip.xml
similarity index 100%
rename from war/stencils/eip.xml
rename to src/main/webapp/stencils/eip.xml
diff --git a/war/stencils/electrical/abstract.xml b/src/main/webapp/stencils/electrical/abstract.xml
similarity index 100%
rename from war/stencils/electrical/abstract.xml
rename to src/main/webapp/stencils/electrical/abstract.xml
diff --git a/war/stencils/electrical/capacitors.xml b/src/main/webapp/stencils/electrical/capacitors.xml
similarity index 100%
rename from war/stencils/electrical/capacitors.xml
rename to src/main/webapp/stencils/electrical/capacitors.xml
diff --git a/war/stencils/electrical/diodes.xml b/src/main/webapp/stencils/electrical/diodes.xml
similarity index 100%
rename from war/stencils/electrical/diodes.xml
rename to src/main/webapp/stencils/electrical/diodes.xml
diff --git a/war/stencils/electrical/electro-mechanical.xml b/src/main/webapp/stencils/electrical/electro-mechanical.xml
similarity index 100%
rename from war/stencils/electrical/electro-mechanical.xml
rename to src/main/webapp/stencils/electrical/electro-mechanical.xml
diff --git a/war/stencils/electrical/iec417.xml b/src/main/webapp/stencils/electrical/iec417.xml
similarity index 100%
rename from war/stencils/electrical/iec417.xml
rename to src/main/webapp/stencils/electrical/iec417.xml
diff --git a/war/stencils/electrical/iec_logic_gates.xml b/src/main/webapp/stencils/electrical/iec_logic_gates.xml
similarity index 100%
rename from war/stencils/electrical/iec_logic_gates.xml
rename to src/main/webapp/stencils/electrical/iec_logic_gates.xml
diff --git a/war/stencils/electrical/inductors.xml b/src/main/webapp/stencils/electrical/inductors.xml
similarity index 100%
rename from war/stencils/electrical/inductors.xml
rename to src/main/webapp/stencils/electrical/inductors.xml
diff --git a/war/stencils/electrical/instruments.xml b/src/main/webapp/stencils/electrical/instruments.xml
similarity index 100%
rename from war/stencils/electrical/instruments.xml
rename to src/main/webapp/stencils/electrical/instruments.xml
diff --git a/war/stencils/electrical/logic_gates.xml b/src/main/webapp/stencils/electrical/logic_gates.xml
similarity index 100%
rename from war/stencils/electrical/logic_gates.xml
rename to src/main/webapp/stencils/electrical/logic_gates.xml
diff --git a/war/stencils/electrical/miscellaneous.xml b/src/main/webapp/stencils/electrical/miscellaneous.xml
similarity index 100%
rename from war/stencils/electrical/miscellaneous.xml
rename to src/main/webapp/stencils/electrical/miscellaneous.xml
diff --git a/war/stencils/electrical/mosfets1.xml b/src/main/webapp/stencils/electrical/mosfets1.xml
similarity index 100%
rename from war/stencils/electrical/mosfets1.xml
rename to src/main/webapp/stencils/electrical/mosfets1.xml
diff --git a/war/stencils/electrical/mosfets2.xml b/src/main/webapp/stencils/electrical/mosfets2.xml
similarity index 100%
rename from war/stencils/electrical/mosfets2.xml
rename to src/main/webapp/stencils/electrical/mosfets2.xml
diff --git a/war/stencils/electrical/op_amps.xml b/src/main/webapp/stencils/electrical/op_amps.xml
similarity index 100%
rename from war/stencils/electrical/op_amps.xml
rename to src/main/webapp/stencils/electrical/op_amps.xml
diff --git a/war/stencils/electrical/opto_electronics.xml b/src/main/webapp/stencils/electrical/opto_electronics.xml
similarity index 100%
rename from war/stencils/electrical/opto_electronics.xml
rename to src/main/webapp/stencils/electrical/opto_electronics.xml
diff --git a/war/stencils/electrical/plc_ladder.xml b/src/main/webapp/stencils/electrical/plc_ladder.xml
similarity index 100%
rename from war/stencils/electrical/plc_ladder.xml
rename to src/main/webapp/stencils/electrical/plc_ladder.xml
diff --git a/war/stencils/electrical/power_semiconductors.xml b/src/main/webapp/stencils/electrical/power_semiconductors.xml
similarity index 100%
rename from war/stencils/electrical/power_semiconductors.xml
rename to src/main/webapp/stencils/electrical/power_semiconductors.xml
diff --git a/war/stencils/electrical/radio.xml b/src/main/webapp/stencils/electrical/radio.xml
similarity index 100%
rename from war/stencils/electrical/radio.xml
rename to src/main/webapp/stencils/electrical/radio.xml
diff --git a/war/stencils/electrical/resistors.xml b/src/main/webapp/stencils/electrical/resistors.xml
similarity index 100%
rename from war/stencils/electrical/resistors.xml
rename to src/main/webapp/stencils/electrical/resistors.xml
diff --git a/war/stencils/electrical/rot_mech.xml b/src/main/webapp/stencils/electrical/rot_mech.xml
similarity index 100%
rename from war/stencils/electrical/rot_mech.xml
rename to src/main/webapp/stencils/electrical/rot_mech.xml
diff --git a/war/stencils/electrical/signal_sources.xml b/src/main/webapp/stencils/electrical/signal_sources.xml
similarity index 100%
rename from war/stencils/electrical/signal_sources.xml
rename to src/main/webapp/stencils/electrical/signal_sources.xml
diff --git a/war/stencils/electrical/thermionic_devices.xml b/src/main/webapp/stencils/electrical/thermionic_devices.xml
similarity index 100%
rename from war/stencils/electrical/thermionic_devices.xml
rename to src/main/webapp/stencils/electrical/thermionic_devices.xml
diff --git a/war/stencils/electrical/transistors.xml b/src/main/webapp/stencils/electrical/transistors.xml
similarity index 100%
rename from war/stencils/electrical/transistors.xml
rename to src/main/webapp/stencils/electrical/transistors.xml
diff --git a/war/stencils/electrical/transmission.xml b/src/main/webapp/stencils/electrical/transmission.xml
similarity index 100%
rename from war/stencils/electrical/transmission.xml
rename to src/main/webapp/stencils/electrical/transmission.xml
diff --git a/war/stencils/electrical/waveforms.xml b/src/main/webapp/stencils/electrical/waveforms.xml
similarity index 100%
rename from war/stencils/electrical/waveforms.xml
rename to src/main/webapp/stencils/electrical/waveforms.xml
diff --git a/war/stencils/floorplan.xml b/src/main/webapp/stencils/floorplan.xml
similarity index 100%
rename from war/stencils/floorplan.xml
rename to src/main/webapp/stencils/floorplan.xml
diff --git a/war/stencils/flowchart.xml b/src/main/webapp/stencils/flowchart.xml
similarity index 100%
rename from war/stencils/flowchart.xml
rename to src/main/webapp/stencils/flowchart.xml
diff --git a/war/stencils/gcp/big_data.xml b/src/main/webapp/stencils/gcp/big_data.xml
similarity index 100%
rename from war/stencils/gcp/big_data.xml
rename to src/main/webapp/stencils/gcp/big_data.xml
diff --git a/war/stencils/gcp/compute.xml b/src/main/webapp/stencils/gcp/compute.xml
similarity index 100%
rename from war/stencils/gcp/compute.xml
rename to src/main/webapp/stencils/gcp/compute.xml
diff --git a/war/stencils/gcp/developer_tools.xml b/src/main/webapp/stencils/gcp/developer_tools.xml
similarity index 100%
rename from war/stencils/gcp/developer_tools.xml
rename to src/main/webapp/stencils/gcp/developer_tools.xml
diff --git a/war/stencils/gcp/extras.xml b/src/main/webapp/stencils/gcp/extras.xml
similarity index 100%
rename from war/stencils/gcp/extras.xml
rename to src/main/webapp/stencils/gcp/extras.xml
diff --git a/war/stencils/gcp/identity_and_security.xml b/src/main/webapp/stencils/gcp/identity_and_security.xml
similarity index 100%
rename from war/stencils/gcp/identity_and_security.xml
rename to src/main/webapp/stencils/gcp/identity_and_security.xml
diff --git a/war/stencils/gcp/machine_learning.xml b/src/main/webapp/stencils/gcp/machine_learning.xml
similarity index 100%
rename from war/stencils/gcp/machine_learning.xml
rename to src/main/webapp/stencils/gcp/machine_learning.xml
diff --git a/war/stencils/gcp/management_tools.xml b/src/main/webapp/stencils/gcp/management_tools.xml
similarity index 100%
rename from war/stencils/gcp/management_tools.xml
rename to src/main/webapp/stencils/gcp/management_tools.xml
diff --git a/war/stencils/gcp/networking.xml b/src/main/webapp/stencils/gcp/networking.xml
similarity index 100%
rename from war/stencils/gcp/networking.xml
rename to src/main/webapp/stencils/gcp/networking.xml
diff --git a/war/stencils/gcp/product_cards.xml b/src/main/webapp/stencils/gcp/product_cards.xml
similarity index 100%
rename from war/stencils/gcp/product_cards.xml
rename to src/main/webapp/stencils/gcp/product_cards.xml
diff --git a/war/stencils/gcp/storage_databases.xml b/src/main/webapp/stencils/gcp/storage_databases.xml
similarity index 100%
rename from war/stencils/gcp/storage_databases.xml
rename to src/main/webapp/stencils/gcp/storage_databases.xml
diff --git a/war/stencils/gmdl.xml b/src/main/webapp/stencils/gmdl.xml
similarity index 100%
rename from war/stencils/gmdl.xml
rename to src/main/webapp/stencils/gmdl.xml
diff --git a/war/stencils/ios7/icons.xml b/src/main/webapp/stencils/ios7/icons.xml
similarity index 100%
rename from war/stencils/ios7/icons.xml
rename to src/main/webapp/stencils/ios7/icons.xml
diff --git a/war/stencils/ios7/misc.xml b/src/main/webapp/stencils/ios7/misc.xml
similarity index 100%
rename from war/stencils/ios7/misc.xml
rename to src/main/webapp/stencils/ios7/misc.xml
diff --git a/war/stencils/lean_mapping.xml b/src/main/webapp/stencils/lean_mapping.xml
similarity index 100%
rename from war/stencils/lean_mapping.xml
rename to src/main/webapp/stencils/lean_mapping.xml
diff --git a/war/stencils/mockup/advertising.xml b/src/main/webapp/stencils/mockup/advertising.xml
similarity index 100%
rename from war/stencils/mockup/advertising.xml
rename to src/main/webapp/stencils/mockup/advertising.xml
diff --git a/war/stencils/mockup/calendars.xml b/src/main/webapp/stencils/mockup/calendars.xml
similarity index 100%
rename from war/stencils/mockup/calendars.xml
rename to src/main/webapp/stencils/mockup/calendars.xml
diff --git a/war/stencils/mockup/carousel.xml b/src/main/webapp/stencils/mockup/carousel.xml
similarity index 100%
rename from war/stencils/mockup/carousel.xml
rename to src/main/webapp/stencils/mockup/carousel.xml
diff --git a/war/stencils/mockup/charts_and_tables.xml b/src/main/webapp/stencils/mockup/charts_and_tables.xml
similarity index 100%
rename from war/stencils/mockup/charts_and_tables.xml
rename to src/main/webapp/stencils/mockup/charts_and_tables.xml
diff --git a/war/stencils/mockup/controls.xml b/src/main/webapp/stencils/mockup/controls.xml
similarity index 100%
rename from war/stencils/mockup/controls.xml
rename to src/main/webapp/stencils/mockup/controls.xml
diff --git a/war/stencils/mockup/form_elements.xml b/src/main/webapp/stencils/mockup/form_elements.xml
similarity index 100%
rename from war/stencils/mockup/form_elements.xml
rename to src/main/webapp/stencils/mockup/form_elements.xml
diff --git a/war/stencils/mockup/menus_and_buttons.xml b/src/main/webapp/stencils/mockup/menus_and_buttons.xml
similarity index 100%
rename from war/stencils/mockup/menus_and_buttons.xml
rename to src/main/webapp/stencils/mockup/menus_and_buttons.xml
diff --git a/war/stencils/mockup/misc.xml b/src/main/webapp/stencils/mockup/misc.xml
similarity index 100%
rename from war/stencils/mockup/misc.xml
rename to src/main/webapp/stencils/mockup/misc.xml
diff --git a/war/stencils/mockup/tabs.xml b/src/main/webapp/stencils/mockup/tabs.xml
similarity index 100%
rename from war/stencils/mockup/tabs.xml
rename to src/main/webapp/stencils/mockup/tabs.xml
diff --git a/war/stencils/mscae/cloud.xml b/src/main/webapp/stencils/mscae/cloud.xml
similarity index 100%
rename from war/stencils/mscae/cloud.xml
rename to src/main/webapp/stencils/mscae/cloud.xml
diff --git a/war/stencils/mscae/deprecated.xml b/src/main/webapp/stencils/mscae/deprecated.xml
similarity index 100%
rename from war/stencils/mscae/deprecated.xml
rename to src/main/webapp/stencils/mscae/deprecated.xml
diff --git a/war/stencils/mscae/enterprise.xml b/src/main/webapp/stencils/mscae/enterprise.xml
similarity index 100%
rename from war/stencils/mscae/enterprise.xml
rename to src/main/webapp/stencils/mscae/enterprise.xml
diff --git a/war/stencils/mscae/general.xml b/src/main/webapp/stencils/mscae/general.xml
similarity index 100%
rename from war/stencils/mscae/general.xml
rename to src/main/webapp/stencils/mscae/general.xml
diff --git a/war/stencils/mscae/intune.xml b/src/main/webapp/stencils/mscae/intune.xml
similarity index 100%
rename from war/stencils/mscae/intune.xml
rename to src/main/webapp/stencils/mscae/intune.xml
diff --git a/war/stencils/mscae/other.xml b/src/main/webapp/stencils/mscae/other.xml
similarity index 100%
rename from war/stencils/mscae/other.xml
rename to src/main/webapp/stencils/mscae/other.xml
diff --git a/war/stencils/mscae/system_center.xml b/src/main/webapp/stencils/mscae/system_center.xml
similarity index 100%
rename from war/stencils/mscae/system_center.xml
rename to src/main/webapp/stencils/mscae/system_center.xml
diff --git a/war/stencils/networks.xml b/src/main/webapp/stencils/networks.xml
similarity index 100%
rename from war/stencils/networks.xml
rename to src/main/webapp/stencils/networks.xml
diff --git a/war/stencils/office/clouds.xml b/src/main/webapp/stencils/office/clouds.xml
similarity index 100%
rename from war/stencils/office/clouds.xml
rename to src/main/webapp/stencils/office/clouds.xml
diff --git a/war/stencils/office/communications.xml b/src/main/webapp/stencils/office/communications.xml
similarity index 100%
rename from war/stencils/office/communications.xml
rename to src/main/webapp/stencils/office/communications.xml
diff --git a/war/stencils/office/concepts.xml b/src/main/webapp/stencils/office/concepts.xml
similarity index 100%
rename from war/stencils/office/concepts.xml
rename to src/main/webapp/stencils/office/concepts.xml
diff --git a/war/stencils/office/databases.xml b/src/main/webapp/stencils/office/databases.xml
similarity index 100%
rename from war/stencils/office/databases.xml
rename to src/main/webapp/stencils/office/databases.xml
diff --git a/war/stencils/office/devices.xml b/src/main/webapp/stencils/office/devices.xml
similarity index 100%
rename from war/stencils/office/devices.xml
rename to src/main/webapp/stencils/office/devices.xml
diff --git a/war/stencils/office/security.xml b/src/main/webapp/stencils/office/security.xml
similarity index 100%
rename from war/stencils/office/security.xml
rename to src/main/webapp/stencils/office/security.xml
diff --git a/war/stencils/office/servers.xml b/src/main/webapp/stencils/office/servers.xml
similarity index 100%
rename from war/stencils/office/servers.xml
rename to src/main/webapp/stencils/office/servers.xml
diff --git a/war/stencils/office/services.xml b/src/main/webapp/stencils/office/services.xml
similarity index 100%
rename from war/stencils/office/services.xml
rename to src/main/webapp/stencils/office/services.xml
diff --git a/war/stencils/office/sites.xml b/src/main/webapp/stencils/office/sites.xml
similarity index 100%
rename from war/stencils/office/sites.xml
rename to src/main/webapp/stencils/office/sites.xml
diff --git a/war/stencils/office/users.xml b/src/main/webapp/stencils/office/users.xml
similarity index 100%
rename from war/stencils/office/users.xml
rename to src/main/webapp/stencils/office/users.xml
diff --git a/war/stencils/pid/agitators.xml b/src/main/webapp/stencils/pid/agitators.xml
similarity index 100%
rename from war/stencils/pid/agitators.xml
rename to src/main/webapp/stencils/pid/agitators.xml
diff --git a/war/stencils/pid/apparatus_elements.xml b/src/main/webapp/stencils/pid/apparatus_elements.xml
similarity index 100%
rename from war/stencils/pid/apparatus_elements.xml
rename to src/main/webapp/stencils/pid/apparatus_elements.xml
diff --git a/war/stencils/pid/centrifuges.xml b/src/main/webapp/stencils/pid/centrifuges.xml
similarity index 100%
rename from war/stencils/pid/centrifuges.xml
rename to src/main/webapp/stencils/pid/centrifuges.xml
diff --git a/war/stencils/pid/compressors.xml b/src/main/webapp/stencils/pid/compressors.xml
similarity index 100%
rename from war/stencils/pid/compressors.xml
rename to src/main/webapp/stencils/pid/compressors.xml
diff --git a/war/stencils/pid/compressors_iso.xml b/src/main/webapp/stencils/pid/compressors_iso.xml
similarity index 100%
rename from war/stencils/pid/compressors_iso.xml
rename to src/main/webapp/stencils/pid/compressors_iso.xml
diff --git a/war/stencils/pid/crushers_grinding.xml b/src/main/webapp/stencils/pid/crushers_grinding.xml
similarity index 100%
rename from war/stencils/pid/crushers_grinding.xml
rename to src/main/webapp/stencils/pid/crushers_grinding.xml
diff --git a/war/stencils/pid/driers.xml b/src/main/webapp/stencils/pid/driers.xml
similarity index 100%
rename from war/stencils/pid/driers.xml
rename to src/main/webapp/stencils/pid/driers.xml
diff --git a/war/stencils/pid/engines.xml b/src/main/webapp/stencils/pid/engines.xml
similarity index 100%
rename from war/stencils/pid/engines.xml
rename to src/main/webapp/stencils/pid/engines.xml
diff --git a/war/stencils/pid/feeders.xml b/src/main/webapp/stencils/pid/feeders.xml
similarity index 100%
rename from war/stencils/pid/feeders.xml
rename to src/main/webapp/stencils/pid/feeders.xml
diff --git a/war/stencils/pid/filters.xml b/src/main/webapp/stencils/pid/filters.xml
similarity index 100%
rename from war/stencils/pid/filters.xml
rename to src/main/webapp/stencils/pid/filters.xml
diff --git a/war/stencils/pid/fittings.xml b/src/main/webapp/stencils/pid/fittings.xml
similarity index 100%
rename from war/stencils/pid/fittings.xml
rename to src/main/webapp/stencils/pid/fittings.xml
diff --git a/war/stencils/pid/flow_sensors.xml b/src/main/webapp/stencils/pid/flow_sensors.xml
similarity index 100%
rename from war/stencils/pid/flow_sensors.xml
rename to src/main/webapp/stencils/pid/flow_sensors.xml
diff --git a/war/stencils/pid/heat_exchangers.xml b/src/main/webapp/stencils/pid/heat_exchangers.xml
similarity index 100%
rename from war/stencils/pid/heat_exchangers.xml
rename to src/main/webapp/stencils/pid/heat_exchangers.xml
diff --git a/war/stencils/pid/instruments.xml b/src/main/webapp/stencils/pid/instruments.xml
similarity index 100%
rename from war/stencils/pid/instruments.xml
rename to src/main/webapp/stencils/pid/instruments.xml
diff --git a/war/stencils/pid/misc.xml b/src/main/webapp/stencils/pid/misc.xml
similarity index 100%
rename from war/stencils/pid/misc.xml
rename to src/main/webapp/stencils/pid/misc.xml
diff --git a/war/stencils/pid/mixers.xml b/src/main/webapp/stencils/pid/mixers.xml
similarity index 100%
rename from war/stencils/pid/mixers.xml
rename to src/main/webapp/stencils/pid/mixers.xml
diff --git a/war/stencils/pid/piping.xml b/src/main/webapp/stencils/pid/piping.xml
similarity index 100%
rename from war/stencils/pid/piping.xml
rename to src/main/webapp/stencils/pid/piping.xml
diff --git a/war/stencils/pid/pumps.xml b/src/main/webapp/stencils/pid/pumps.xml
similarity index 100%
rename from war/stencils/pid/pumps.xml
rename to src/main/webapp/stencils/pid/pumps.xml
diff --git a/war/stencils/pid/pumps_din.xml b/src/main/webapp/stencils/pid/pumps_din.xml
similarity index 100%
rename from war/stencils/pid/pumps_din.xml
rename to src/main/webapp/stencils/pid/pumps_din.xml
diff --git a/war/stencils/pid/pumps_iso.xml b/src/main/webapp/stencils/pid/pumps_iso.xml
similarity index 100%
rename from war/stencils/pid/pumps_iso.xml
rename to src/main/webapp/stencils/pid/pumps_iso.xml
diff --git a/war/stencils/pid/separators.xml b/src/main/webapp/stencils/pid/separators.xml
similarity index 100%
rename from war/stencils/pid/separators.xml
rename to src/main/webapp/stencils/pid/separators.xml
diff --git a/war/stencils/pid/shaping_machines.xml b/src/main/webapp/stencils/pid/shaping_machines.xml
similarity index 100%
rename from war/stencils/pid/shaping_machines.xml
rename to src/main/webapp/stencils/pid/shaping_machines.xml
diff --git a/war/stencils/pid/valves.xml b/src/main/webapp/stencils/pid/valves.xml
similarity index 100%
rename from war/stencils/pid/valves.xml
rename to src/main/webapp/stencils/pid/valves.xml
diff --git a/war/stencils/pid/vessels.xml b/src/main/webapp/stencils/pid/vessels.xml
similarity index 100%
rename from war/stencils/pid/vessels.xml
rename to src/main/webapp/stencils/pid/vessels.xml
diff --git a/war/stencils/rack/apc.xml b/src/main/webapp/stencils/rack/apc.xml
similarity index 100%
rename from war/stencils/rack/apc.xml
rename to src/main/webapp/stencils/rack/apc.xml
diff --git a/war/stencils/rack/cisco.xml b/src/main/webapp/stencils/rack/cisco.xml
similarity index 100%
rename from war/stencils/rack/cisco.xml
rename to src/main/webapp/stencils/rack/cisco.xml
diff --git a/war/stencils/rack/dell.xml b/src/main/webapp/stencils/rack/dell.xml
similarity index 100%
rename from war/stencils/rack/dell.xml
rename to src/main/webapp/stencils/rack/dell.xml
diff --git a/war/stencils/rack/f5.xml b/src/main/webapp/stencils/rack/f5.xml
similarity index 100%
rename from war/stencils/rack/f5.xml
rename to src/main/webapp/stencils/rack/f5.xml
diff --git a/war/stencils/rack/general.xml b/src/main/webapp/stencils/rack/general.xml
similarity index 100%
rename from war/stencils/rack/general.xml
rename to src/main/webapp/stencils/rack/general.xml
diff --git a/war/stencils/rack/hp.xml b/src/main/webapp/stencils/rack/hp.xml
similarity index 100%
rename from war/stencils/rack/hp.xml
rename to src/main/webapp/stencils/rack/hp.xml
diff --git a/war/stencils/rack/ibm.xml b/src/main/webapp/stencils/rack/ibm.xml
similarity index 100%
rename from war/stencils/rack/ibm.xml
rename to src/main/webapp/stencils/rack/ibm.xml
diff --git a/war/stencils/rack/oracle.xml b/src/main/webapp/stencils/rack/oracle.xml
similarity index 100%
rename from war/stencils/rack/oracle.xml
rename to src/main/webapp/stencils/rack/oracle.xml
diff --git a/war/stencils/signs/animals.xml b/src/main/webapp/stencils/signs/animals.xml
similarity index 100%
rename from war/stencils/signs/animals.xml
rename to src/main/webapp/stencils/signs/animals.xml
diff --git a/war/stencils/signs/food.xml b/src/main/webapp/stencils/signs/food.xml
similarity index 100%
rename from war/stencils/signs/food.xml
rename to src/main/webapp/stencils/signs/food.xml
diff --git a/war/stencils/signs/healthcare.xml b/src/main/webapp/stencils/signs/healthcare.xml
similarity index 100%
rename from war/stencils/signs/healthcare.xml
rename to src/main/webapp/stencils/signs/healthcare.xml
diff --git a/war/stencils/signs/nature.xml b/src/main/webapp/stencils/signs/nature.xml
similarity index 100%
rename from war/stencils/signs/nature.xml
rename to src/main/webapp/stencils/signs/nature.xml
diff --git a/war/stencils/signs/people.xml b/src/main/webapp/stencils/signs/people.xml
similarity index 100%
rename from war/stencils/signs/people.xml
rename to src/main/webapp/stencils/signs/people.xml
diff --git a/war/stencils/signs/safety.xml b/src/main/webapp/stencils/signs/safety.xml
similarity index 100%
rename from war/stencils/signs/safety.xml
rename to src/main/webapp/stencils/signs/safety.xml
diff --git a/war/stencils/signs/science.xml b/src/main/webapp/stencils/signs/science.xml
similarity index 100%
rename from war/stencils/signs/science.xml
rename to src/main/webapp/stencils/signs/science.xml
diff --git a/war/stencils/signs/sports.xml b/src/main/webapp/stencils/signs/sports.xml
similarity index 100%
rename from war/stencils/signs/sports.xml
rename to src/main/webapp/stencils/signs/sports.xml
diff --git a/war/stencils/signs/tech.xml b/src/main/webapp/stencils/signs/tech.xml
similarity index 100%
rename from war/stencils/signs/tech.xml
rename to src/main/webapp/stencils/signs/tech.xml
diff --git a/war/stencils/signs/transportation.xml b/src/main/webapp/stencils/signs/transportation.xml
similarity index 100%
rename from war/stencils/signs/transportation.xml
rename to src/main/webapp/stencils/signs/transportation.xml
diff --git a/war/stencils/signs/travel.xml b/src/main/webapp/stencils/signs/travel.xml
similarity index 100%
rename from war/stencils/signs/travel.xml
rename to src/main/webapp/stencils/signs/travel.xml
diff --git a/war/stencils/sitemap.xml b/src/main/webapp/stencils/sitemap.xml
similarity index 100%
rename from war/stencils/sitemap.xml
rename to src/main/webapp/stencils/sitemap.xml
diff --git a/war/stencils/veeam/2d.xml b/src/main/webapp/stencils/veeam/2d.xml
similarity index 100%
rename from war/stencils/veeam/2d.xml
rename to src/main/webapp/stencils/veeam/2d.xml
diff --git a/war/stencils/veeam/3d.xml b/src/main/webapp/stencils/veeam/3d.xml
similarity index 100%
rename from war/stencils/veeam/3d.xml
rename to src/main/webapp/stencils/veeam/3d.xml
diff --git a/war/stencils/webicons.xml b/src/main/webapp/stencils/webicons.xml
similarity index 100%
rename from war/stencils/webicons.xml
rename to src/main/webapp/stencils/webicons.xml
diff --git a/war/stencils/weblogos.xml b/src/main/webapp/stencils/weblogos.xml
similarity index 100%
rename from war/stencils/weblogos.xml
rename to src/main/webapp/stencils/weblogos.xml
diff --git a/war/styles/atlas.css b/src/main/webapp/styles/atlas.css
similarity index 100%
rename from war/styles/atlas.css
rename to src/main/webapp/styles/atlas.css
diff --git a/war/styles/dark-default.xml b/src/main/webapp/styles/dark-default.xml
similarity index 100%
rename from war/styles/dark-default.xml
rename to src/main/webapp/styles/dark-default.xml
diff --git a/src/main/webapp/styles/dark.css b/src/main/webapp/styles/dark.css
new file mode 100644
index 0000000000000000000000000000000000000000..4818fbe7e50af7305c2fcff7be6d5c9b3021931f
--- /dev/null
+++ b/src/main/webapp/styles/dark.css
@@ -0,0 +1,81 @@
+html body .geDiagramContainer, html body div.geMenubarContainer, html body .geFooterContainer>div>img, html body div.mxPopupMenu,  html body td.mxPopupMenuIcon, html body .geFormatContainer {
+	background-color: #2a2a2a;
+}
+html body .geFooterContainer, html body .geFooterContainer a, html body #geFooterItem1, html body textarea, html body .mxWindowTitle, html body .geDialogTitle, html body .geDialogFooter {
+	background:#2a2a2a;
+	color: #cccccc;
+}
+html body div.mxRubberband {
+	border:1px dashed #ffffff !important; background:#505759 !important;
+}
+html body .geToolbarContainer, html body .geSidebar, html body .geSidebarContainer .geTitle, html body input, html body textarea, html body button, html body .geColorBtn, html body .geBaseButton, html body .geSidebarTooltip {
+	background:#2a2a2a;
+	border-color:#505759;
+	box-shadow:none;
+	color: #cccccc;
+}
+html body .geSprite, html body .geSocialFooter img, html body .mxPopupMenuItem>img {
+	filter:invert(100%);
+}
+html body .geFormatContainer {
+	border-left: 1px solid #505759;
+}
+html body .geDiagramContainer {
+	border-bottom: 1px solid #505759;
+}
+html body .geSidebarContainer a, html body .geMenubarContainer a, html body .geToolbar a {
+	color: #cccccc;
+}
+html body .geMenubarMenu {
+	border-color:#505759 !important;
+}
+html body .geToolbarMenu, html body .geFooterContainer, html body .geFooterContainer td {
+	border-color:#505759;
+}
+html body div.mxPopupMenu {
+	border-color:#505759 !important;
+	box-shadow:none;
+}
+html body .geSidebarContainer, html body .geDiagramBackdrop {
+	background-color:#2a2a2a;
+	border-color:#505759;
+}
+html body .geBackgroundPage {
+	box-shadow:none;
+}
+html body .geBtn {
+	background:#2a2a2a !important;
+	border-color:#505759 !important;
+	color: #cccccc !important;
+}
+html body .gePrimaryBtn {
+	background:#505759 !important;
+	border-color:#cccccc !important;
+	color: #cccccc !important;
+}
+html body .geBtn:hover {
+	background:#000000 !important;
+}
+html body tr.mxPopupMenuItem {
+	color: #cccccc;
+}
+html body tr.mxPopupMenuItemHover {
+	background:#000000;
+	color: #cccccc;
+}
+html body .geSidebarContainer .geTitle:hover, html body .geMenubarContainer .geItem:hover, html body .geBaseButton:hover {
+	background:#000000;
+}
+html body .geHsplit, html body .geToolbarContainer .geSeparator, html body table.mxPopupMenu hr {
+	background-color:#505759;
+}
+html body .geToolbar {
+	border-color:#505759;
+	box-shadow:none;
+}
+html body .geDialog, html body div.mxWindow {
+	background:#2a2a2a;
+	border-color:#c0c0c0;
+	box-shadow:none;
+	color: #cccccc;
+}
diff --git a/war/styles/default-old.xml b/src/main/webapp/styles/default-old.xml
similarity index 100%
rename from war/styles/default-old.xml
rename to src/main/webapp/styles/default-old.xml
diff --git a/war/styles/default.xml b/src/main/webapp/styles/default.xml
similarity index 100%
rename from war/styles/default.xml
rename to src/main/webapp/styles/default.xml
diff --git a/war/styles/down.gif b/src/main/webapp/styles/down.gif
similarity index 100%
rename from war/styles/down.gif
rename to src/main/webapp/styles/down.gif
diff --git a/war/styles/grapheditor.css b/src/main/webapp/styles/grapheditor.css
similarity index 100%
rename from war/styles/grapheditor.css
rename to src/main/webapp/styles/grapheditor.css
diff --git a/war/styles/sprites.png b/src/main/webapp/styles/sprites.png
similarity index 100%
rename from war/styles/sprites.png
rename to src/main/webapp/styles/sprites.png
diff --git a/war/styles/thumb_horz.png b/src/main/webapp/styles/thumb_horz.png
similarity index 100%
rename from war/styles/thumb_horz.png
rename to src/main/webapp/styles/thumb_horz.png
diff --git a/war/styles/thumb_vertical.png b/src/main/webapp/styles/thumb_vertical.png
similarity index 100%
rename from war/styles/thumb_vertical.png
rename to src/main/webapp/styles/thumb_vertical.png
diff --git a/war/styles/up.gif b/src/main/webapp/styles/up.gif
similarity index 100%
rename from war/styles/up.gif
rename to src/main/webapp/styles/up.gif
diff --git a/war/templates/business/accd.png b/src/main/webapp/templates/business/accd.png
similarity index 100%
rename from war/templates/business/accd.png
rename to src/main/webapp/templates/business/accd.png
diff --git a/war/templates/business/accd.xml b/src/main/webapp/templates/business/accd.xml
similarity index 100%
rename from war/templates/business/accd.xml
rename to src/main/webapp/templates/business/accd.xml
diff --git a/war/templates/business/archimate.png b/src/main/webapp/templates/business/archimate.png
similarity index 100%
rename from war/templates/business/archimate.png
rename to src/main/webapp/templates/business/archimate.png
diff --git a/war/templates/business/archimate.xml b/src/main/webapp/templates/business/archimate.xml
similarity index 100%
rename from war/templates/business/archimate.xml
rename to src/main/webapp/templates/business/archimate.xml
diff --git a/war/templates/business/bpmn.png b/src/main/webapp/templates/business/bpmn.png
similarity index 100%
rename from war/templates/business/bpmn.png
rename to src/main/webapp/templates/business/bpmn.png
diff --git a/war/templates/business/bpmn.xml b/src/main/webapp/templates/business/bpmn.xml
similarity index 100%
rename from war/templates/business/bpmn.xml
rename to src/main/webapp/templates/business/bpmn.xml
diff --git a/war/templates/business/business_model_1.png b/src/main/webapp/templates/business/business_model_1.png
similarity index 100%
rename from war/templates/business/business_model_1.png
rename to src/main/webapp/templates/business/business_model_1.png
diff --git a/war/templates/business/business_model_1.xml b/src/main/webapp/templates/business/business_model_1.xml
similarity index 100%
rename from war/templates/business/business_model_1.xml
rename to src/main/webapp/templates/business/business_model_1.xml
diff --git a/war/templates/business/business_model_2.png b/src/main/webapp/templates/business/business_model_2.png
similarity index 100%
rename from war/templates/business/business_model_2.png
rename to src/main/webapp/templates/business/business_model_2.png
diff --git a/war/templates/business/business_model_2.xml b/src/main/webapp/templates/business/business_model_2.xml
similarity index 100%
rename from war/templates/business/business_model_2.xml
rename to src/main/webapp/templates/business/business_model_2.xml
diff --git a/war/templates/business/ishikawa_1.png b/src/main/webapp/templates/business/ishikawa_1.png
similarity index 100%
rename from war/templates/business/ishikawa_1.png
rename to src/main/webapp/templates/business/ishikawa_1.png
diff --git a/war/templates/business/ishikawa_1.xml b/src/main/webapp/templates/business/ishikawa_1.xml
similarity index 100%
rename from war/templates/business/ishikawa_1.xml
rename to src/main/webapp/templates/business/ishikawa_1.xml
diff --git a/war/templates/business/ishikawa_2.png b/src/main/webapp/templates/business/ishikawa_2.png
similarity index 100%
rename from war/templates/business/ishikawa_2.png
rename to src/main/webapp/templates/business/ishikawa_2.png
diff --git a/war/templates/business/ishikawa_2.xml b/src/main/webapp/templates/business/ishikawa_2.xml
similarity index 100%
rename from war/templates/business/ishikawa_2.xml
rename to src/main/webapp/templates/business/ishikawa_2.xml
diff --git a/war/templates/business/pert_1.png b/src/main/webapp/templates/business/pert_1.png
similarity index 100%
rename from war/templates/business/pert_1.png
rename to src/main/webapp/templates/business/pert_1.png
diff --git a/war/templates/business/pert_1.xml b/src/main/webapp/templates/business/pert_1.xml
similarity index 100%
rename from war/templates/business/pert_1.xml
rename to src/main/webapp/templates/business/pert_1.xml
diff --git a/war/templates/business/pert_2.png b/src/main/webapp/templates/business/pert_2.png
similarity index 100%
rename from war/templates/business/pert_2.png
rename to src/main/webapp/templates/business/pert_2.png
diff --git a/war/templates/business/pert_2.xml b/src/main/webapp/templates/business/pert_2.xml
similarity index 100%
rename from war/templates/business/pert_2.xml
rename to src/main/webapp/templates/business/pert_2.xml
diff --git a/war/templates/business/timeline_1.png b/src/main/webapp/templates/business/timeline_1.png
similarity index 100%
rename from war/templates/business/timeline_1.png
rename to src/main/webapp/templates/business/timeline_1.png
diff --git a/war/templates/business/timeline_1.xml b/src/main/webapp/templates/business/timeline_1.xml
similarity index 100%
rename from war/templates/business/timeline_1.xml
rename to src/main/webapp/templates/business/timeline_1.xml
diff --git a/war/templates/business/timeline_2.png b/src/main/webapp/templates/business/timeline_2.png
similarity index 100%
rename from war/templates/business/timeline_2.png
rename to src/main/webapp/templates/business/timeline_2.png
diff --git a/war/templates/business/timeline_2.xml b/src/main/webapp/templates/business/timeline_2.xml
similarity index 100%
rename from war/templates/business/timeline_2.xml
rename to src/main/webapp/templates/business/timeline_2.xml
diff --git a/war/templates/charts/coc.png b/src/main/webapp/templates/charts/coc.png
similarity index 100%
rename from war/templates/charts/coc.png
rename to src/main/webapp/templates/charts/coc.png
diff --git a/war/templates/charts/coc.xml b/src/main/webapp/templates/charts/coc.xml
similarity index 100%
rename from war/templates/charts/coc.xml
rename to src/main/webapp/templates/charts/coc.xml
diff --git a/war/templates/charts/org_chart_1.png b/src/main/webapp/templates/charts/org_chart_1.png
similarity index 100%
rename from war/templates/charts/org_chart_1.png
rename to src/main/webapp/templates/charts/org_chart_1.png
diff --git a/war/templates/charts/org_chart_1.xml b/src/main/webapp/templates/charts/org_chart_1.xml
similarity index 100%
rename from war/templates/charts/org_chart_1.xml
rename to src/main/webapp/templates/charts/org_chart_1.xml
diff --git a/war/templates/charts/org_chart_2.png b/src/main/webapp/templates/charts/org_chart_2.png
similarity index 100%
rename from war/templates/charts/org_chart_2.png
rename to src/main/webapp/templates/charts/org_chart_2.png
diff --git a/war/templates/charts/org_chart_2.xml b/src/main/webapp/templates/charts/org_chart_2.xml
similarity index 100%
rename from war/templates/charts/org_chart_2.xml
rename to src/main/webapp/templates/charts/org_chart_2.xml
diff --git a/war/templates/engineering/cabinet.png b/src/main/webapp/templates/engineering/cabinet.png
similarity index 100%
rename from war/templates/engineering/cabinet.png
rename to src/main/webapp/templates/engineering/cabinet.png
diff --git a/war/templates/engineering/cabinet.xml b/src/main/webapp/templates/engineering/cabinet.xml
similarity index 100%
rename from war/templates/engineering/cabinet.xml
rename to src/main/webapp/templates/engineering/cabinet.xml
diff --git a/war/templates/engineering/electrical_1.png b/src/main/webapp/templates/engineering/electrical_1.png
similarity index 100%
rename from war/templates/engineering/electrical_1.png
rename to src/main/webapp/templates/engineering/electrical_1.png
diff --git a/war/templates/engineering/electrical_1.xml b/src/main/webapp/templates/engineering/electrical_1.xml
similarity index 100%
rename from war/templates/engineering/electrical_1.xml
rename to src/main/webapp/templates/engineering/electrical_1.xml
diff --git a/war/templates/engineering/electrical_2.png b/src/main/webapp/templates/engineering/electrical_2.png
similarity index 100%
rename from war/templates/engineering/electrical_2.png
rename to src/main/webapp/templates/engineering/electrical_2.png
diff --git a/war/templates/engineering/electrical_2.xml b/src/main/webapp/templates/engineering/electrical_2.xml
similarity index 100%
rename from war/templates/engineering/electrical_2.xml
rename to src/main/webapp/templates/engineering/electrical_2.xml
diff --git a/war/templates/flowcharts/cross_functional_flowchart.png b/src/main/webapp/templates/flowcharts/cross_functional_flowchart.png
similarity index 100%
rename from war/templates/flowcharts/cross_functional_flowchart.png
rename to src/main/webapp/templates/flowcharts/cross_functional_flowchart.png
diff --git a/war/templates/flowcharts/cross_functional_flowchart.xml b/src/main/webapp/templates/flowcharts/cross_functional_flowchart.xml
similarity index 100%
rename from war/templates/flowcharts/cross_functional_flowchart.xml
rename to src/main/webapp/templates/flowcharts/cross_functional_flowchart.xml
diff --git a/war/templates/flowcharts/data_flow_1.png b/src/main/webapp/templates/flowcharts/data_flow_1.png
similarity index 100%
rename from war/templates/flowcharts/data_flow_1.png
rename to src/main/webapp/templates/flowcharts/data_flow_1.png
diff --git a/war/templates/flowcharts/data_flow_1.xml b/src/main/webapp/templates/flowcharts/data_flow_1.xml
similarity index 100%
rename from war/templates/flowcharts/data_flow_1.xml
rename to src/main/webapp/templates/flowcharts/data_flow_1.xml
diff --git a/war/templates/flowcharts/data_flow_2.png b/src/main/webapp/templates/flowcharts/data_flow_2.png
similarity index 100%
rename from war/templates/flowcharts/data_flow_2.png
rename to src/main/webapp/templates/flowcharts/data_flow_2.png
diff --git a/war/templates/flowcharts/data_flow_2.xml b/src/main/webapp/templates/flowcharts/data_flow_2.xml
similarity index 100%
rename from war/templates/flowcharts/data_flow_2.xml
rename to src/main/webapp/templates/flowcharts/data_flow_2.xml
diff --git a/war/templates/flowcharts/data_flow_3.png b/src/main/webapp/templates/flowcharts/data_flow_3.png
similarity index 100%
rename from war/templates/flowcharts/data_flow_3.png
rename to src/main/webapp/templates/flowcharts/data_flow_3.png
diff --git a/war/templates/flowcharts/data_flow_3.xml b/src/main/webapp/templates/flowcharts/data_flow_3.xml
similarity index 100%
rename from war/templates/flowcharts/data_flow_3.xml
rename to src/main/webapp/templates/flowcharts/data_flow_3.xml
diff --git a/war/templates/flowcharts/epc.png b/src/main/webapp/templates/flowcharts/epc.png
similarity index 100%
rename from war/templates/flowcharts/epc.png
rename to src/main/webapp/templates/flowcharts/epc.png
diff --git a/war/templates/flowcharts/epc.xml b/src/main/webapp/templates/flowcharts/epc.xml
similarity index 100%
rename from war/templates/flowcharts/epc.xml
rename to src/main/webapp/templates/flowcharts/epc.xml
diff --git a/war/templates/index.xml b/src/main/webapp/templates/index.xml
similarity index 100%
rename from war/templates/index.xml
rename to src/main/webapp/templates/index.xml
diff --git a/war/templates/layout/blog_wireframe.png b/src/main/webapp/templates/layout/blog_wireframe.png
similarity index 100%
rename from war/templates/layout/blog_wireframe.png
rename to src/main/webapp/templates/layout/blog_wireframe.png
diff --git a/war/templates/layout/blog_wireframe.xml b/src/main/webapp/templates/layout/blog_wireframe.xml
similarity index 100%
rename from war/templates/layout/blog_wireframe.xml
rename to src/main/webapp/templates/layout/blog_wireframe.xml
diff --git a/war/templates/layout/bootstrap.png b/src/main/webapp/templates/layout/bootstrap.png
similarity index 100%
rename from war/templates/layout/bootstrap.png
rename to src/main/webapp/templates/layout/bootstrap.png
diff --git a/war/templates/layout/bootstrap.xml b/src/main/webapp/templates/layout/bootstrap.xml
similarity index 100%
rename from war/templates/layout/bootstrap.xml
rename to src/main/webapp/templates/layout/bootstrap.xml
diff --git a/war/templates/layout/wireframe.png b/src/main/webapp/templates/layout/wireframe.png
similarity index 100%
rename from war/templates/layout/wireframe.png
rename to src/main/webapp/templates/layout/wireframe.png
diff --git a/war/templates/layout/wireframe.xml b/src/main/webapp/templates/layout/wireframe.xml
similarity index 100%
rename from war/templates/layout/wireframe.xml
rename to src/main/webapp/templates/layout/wireframe.xml
diff --git a/war/templates/maps/concept_map.png b/src/main/webapp/templates/maps/concept_map.png
similarity index 100%
rename from war/templates/maps/concept_map.png
rename to src/main/webapp/templates/maps/concept_map.png
diff --git a/war/templates/maps/concept_map.xml b/src/main/webapp/templates/maps/concept_map.xml
similarity index 100%
rename from war/templates/maps/concept_map.xml
rename to src/main/webapp/templates/maps/concept_map.xml
diff --git a/war/templates/maps/site_map.png b/src/main/webapp/templates/maps/site_map.png
similarity index 100%
rename from war/templates/maps/site_map.png
rename to src/main/webapp/templates/maps/site_map.png
diff --git a/war/templates/maps/site_map.xml b/src/main/webapp/templates/maps/site_map.xml
similarity index 100%
rename from war/templates/maps/site_map.xml
rename to src/main/webapp/templates/maps/site_map.xml
diff --git a/war/templates/network/active_directory.png b/src/main/webapp/templates/network/active_directory.png
similarity index 100%
rename from war/templates/network/active_directory.png
rename to src/main/webapp/templates/network/active_directory.png
diff --git a/war/templates/network/active_directory.xml b/src/main/webapp/templates/network/active_directory.xml
similarity index 100%
rename from war/templates/network/active_directory.xml
rename to src/main/webapp/templates/network/active_directory.xml
diff --git a/war/templates/network/aws.png b/src/main/webapp/templates/network/aws.png
similarity index 100%
rename from war/templates/network/aws.png
rename to src/main/webapp/templates/network/aws.png
diff --git a/war/templates/network/aws.xml b/src/main/webapp/templates/network/aws.xml
similarity index 100%
rename from war/templates/network/aws.xml
rename to src/main/webapp/templates/network/aws.xml
diff --git a/war/templates/network/aws_3d.png b/src/main/webapp/templates/network/aws_3d.png
similarity index 100%
rename from war/templates/network/aws_3d.png
rename to src/main/webapp/templates/network/aws_3d.png
diff --git a/war/templates/network/aws_3d.xml b/src/main/webapp/templates/network/aws_3d.xml
similarity index 100%
rename from war/templates/network/aws_3d.xml
rename to src/main/webapp/templates/network/aws_3d.xml
diff --git a/war/templates/network/azure.png b/src/main/webapp/templates/network/azure.png
similarity index 100%
rename from war/templates/network/azure.png
rename to src/main/webapp/templates/network/azure.png
diff --git a/war/templates/network/azure.xml b/src/main/webapp/templates/network/azure.xml
similarity index 100%
rename from war/templates/network/azure.xml
rename to src/main/webapp/templates/network/azure.xml
diff --git a/war/templates/network/cisco.png b/src/main/webapp/templates/network/cisco.png
similarity index 100%
rename from war/templates/network/cisco.png
rename to src/main/webapp/templates/network/cisco.png
diff --git a/war/templates/network/cisco.xml b/src/main/webapp/templates/network/cisco.xml
similarity index 100%
rename from war/templates/network/cisco.xml
rename to src/main/webapp/templates/network/cisco.xml
diff --git a/war/templates/network/citrix.png b/src/main/webapp/templates/network/citrix.png
similarity index 100%
rename from war/templates/network/citrix.png
rename to src/main/webapp/templates/network/citrix.png
diff --git a/war/templates/network/citrix.xml b/src/main/webapp/templates/network/citrix.xml
similarity index 100%
rename from war/templates/network/citrix.xml
rename to src/main/webapp/templates/network/citrix.xml
diff --git a/war/templates/network/ibm_bda_reference_architecture.png b/src/main/webapp/templates/network/ibm_bda_reference_architecture.png
similarity index 100%
rename from war/templates/network/ibm_bda_reference_architecture.png
rename to src/main/webapp/templates/network/ibm_bda_reference_architecture.png
diff --git a/war/templates/network/ibm_bda_reference_architecture.xml b/src/main/webapp/templates/network/ibm_bda_reference_architecture.xml
similarity index 100%
rename from war/templates/network/ibm_bda_reference_architecture.xml
rename to src/main/webapp/templates/network/ibm_bda_reference_architecture.xml
diff --git a/war/templates/network/ibm_cognitive_conversation.png b/src/main/webapp/templates/network/ibm_cognitive_conversation.png
similarity index 100%
rename from war/templates/network/ibm_cognitive_conversation.png
rename to src/main/webapp/templates/network/ibm_cognitive_conversation.png
diff --git a/war/templates/network/ibm_cognitive_conversation.xml b/src/main/webapp/templates/network/ibm_cognitive_conversation.xml
similarity index 100%
rename from war/templates/network/ibm_cognitive_conversation.xml
rename to src/main/webapp/templates/network/ibm_cognitive_conversation.xml
diff --git a/war/templates/network/ibm_cognitive_discovery.png b/src/main/webapp/templates/network/ibm_cognitive_discovery.png
similarity index 100%
rename from war/templates/network/ibm_cognitive_discovery.png
rename to src/main/webapp/templates/network/ibm_cognitive_discovery.png
diff --git a/war/templates/network/ibm_cognitive_discovery.xml b/src/main/webapp/templates/network/ibm_cognitive_discovery.xml
similarity index 100%
rename from war/templates/network/ibm_cognitive_discovery.xml
rename to src/main/webapp/templates/network/ibm_cognitive_discovery.xml
diff --git a/war/templates/network/ibm_iot_architecture.png b/src/main/webapp/templates/network/ibm_iot_architecture.png
similarity index 100%
rename from war/templates/network/ibm_iot_architecture.png
rename to src/main/webapp/templates/network/ibm_iot_architecture.png
diff --git a/war/templates/network/ibm_iot_architecture.xml b/src/main/webapp/templates/network/ibm_iot_architecture.xml
similarity index 100%
rename from war/templates/network/ibm_iot_architecture.xml
rename to src/main/webapp/templates/network/ibm_iot_architecture.xml
diff --git a/war/templates/network/ibm_microservices.png b/src/main/webapp/templates/network/ibm_microservices.png
similarity index 100%
rename from war/templates/network/ibm_microservices.png
rename to src/main/webapp/templates/network/ibm_microservices.png
diff --git a/war/templates/network/ibm_microservices.xml b/src/main/webapp/templates/network/ibm_microservices.xml
similarity index 100%
rename from war/templates/network/ibm_microservices.xml
rename to src/main/webapp/templates/network/ibm_microservices.xml
diff --git a/war/templates/network/ibm_private_cloud.png b/src/main/webapp/templates/network/ibm_private_cloud.png
similarity index 100%
rename from war/templates/network/ibm_private_cloud.png
rename to src/main/webapp/templates/network/ibm_private_cloud.png
diff --git a/war/templates/network/ibm_private_cloud.xml b/src/main/webapp/templates/network/ibm_private_cloud.xml
similarity index 100%
rename from war/templates/network/ibm_private_cloud.xml
rename to src/main/webapp/templates/network/ibm_private_cloud.xml
diff --git a/war/templates/network/ibm_vcenter_server_platform.png b/src/main/webapp/templates/network/ibm_vcenter_server_platform.png
similarity index 100%
rename from war/templates/network/ibm_vcenter_server_platform.png
rename to src/main/webapp/templates/network/ibm_vcenter_server_platform.png
diff --git a/war/templates/network/ibm_vcenter_server_platform.xml b/src/main/webapp/templates/network/ibm_vcenter_server_platform.xml
similarity index 100%
rename from war/templates/network/ibm_vcenter_server_platform.xml
rename to src/main/webapp/templates/network/ibm_vcenter_server_platform.xml
diff --git a/war/templates/network/internet.png b/src/main/webapp/templates/network/internet.png
similarity index 100%
rename from war/templates/network/internet.png
rename to src/main/webapp/templates/network/internet.png
diff --git a/war/templates/network/Internet.xml b/src/main/webapp/templates/network/internet.xml
similarity index 100%
rename from war/templates/network/Internet.xml
rename to src/main/webapp/templates/network/internet.xml
diff --git a/war/templates/network/lan.png b/src/main/webapp/templates/network/lan.png
similarity index 100%
rename from war/templates/network/lan.png
rename to src/main/webapp/templates/network/lan.png
diff --git a/war/templates/network/lan.xml b/src/main/webapp/templates/network/lan.xml
similarity index 100%
rename from war/templates/network/lan.xml
rename to src/main/webapp/templates/network/lan.xml
diff --git a/war/templates/network/telecomm.png b/src/main/webapp/templates/network/telecomm.png
similarity index 100%
rename from war/templates/network/telecomm.png
rename to src/main/webapp/templates/network/telecomm.png
diff --git a/war/templates/network/telecomm.xml b/src/main/webapp/templates/network/telecomm.xml
similarity index 100%
rename from war/templates/network/telecomm.xml
rename to src/main/webapp/templates/network/telecomm.xml
diff --git a/war/templates/network/veeam.png b/src/main/webapp/templates/network/veeam.png
similarity index 100%
rename from war/templates/network/veeam.png
rename to src/main/webapp/templates/network/veeam.png
diff --git a/war/templates/network/veeam.xml b/src/main/webapp/templates/network/veeam.xml
similarity index 100%
rename from war/templates/network/veeam.xml
rename to src/main/webapp/templates/network/veeam.xml
diff --git a/war/templates/network/wireless_home_network.png b/src/main/webapp/templates/network/wireless_home_network.png
similarity index 100%
rename from war/templates/network/wireless_home_network.png
rename to src/main/webapp/templates/network/wireless_home_network.png
diff --git a/war/templates/network/wireless_home_network.xml b/src/main/webapp/templates/network/wireless_home_network.xml
similarity index 100%
rename from war/templates/network/wireless_home_network.xml
rename to src/main/webapp/templates/network/wireless_home_network.xml
diff --git a/war/templates/other/block.png b/src/main/webapp/templates/other/block.png
similarity index 100%
rename from war/templates/other/block.png
rename to src/main/webapp/templates/other/block.png
diff --git a/war/templates/other/block.xml b/src/main/webapp/templates/other/block.xml
similarity index 100%
rename from war/templates/other/block.xml
rename to src/main/webapp/templates/other/block.xml
diff --git a/war/templates/other/decision_tree.png b/src/main/webapp/templates/other/decision_tree.png
similarity index 100%
rename from war/templates/other/decision_tree.png
rename to src/main/webapp/templates/other/decision_tree.png
diff --git a/war/templates/other/decision_tree.xml b/src/main/webapp/templates/other/decision_tree.xml
similarity index 100%
rename from war/templates/other/decision_tree.xml
rename to src/main/webapp/templates/other/decision_tree.xml
diff --git a/war/templates/other/educational.png b/src/main/webapp/templates/other/educational.png
similarity index 100%
rename from war/templates/other/educational.png
rename to src/main/webapp/templates/other/educational.png
diff --git a/war/templates/other/educational.xml b/src/main/webapp/templates/other/educational.xml
similarity index 100%
rename from war/templates/other/educational.xml
rename to src/main/webapp/templates/other/educational.xml
diff --git a/war/templates/other/floor_plan.png b/src/main/webapp/templates/other/floor_plan.png
similarity index 100%
rename from war/templates/other/floor_plan.png
rename to src/main/webapp/templates/other/floor_plan.png
diff --git a/war/templates/other/floor_plan.xml b/src/main/webapp/templates/other/floor_plan.xml
similarity index 100%
rename from war/templates/other/floor_plan.xml
rename to src/main/webapp/templates/other/floor_plan.xml
diff --git a/war/templates/other/infographic_1.png b/src/main/webapp/templates/other/infographic_1.png
similarity index 100%
rename from war/templates/other/infographic_1.png
rename to src/main/webapp/templates/other/infographic_1.png
diff --git a/war/templates/other/infographic_1.xml b/src/main/webapp/templates/other/infographic_1.xml
similarity index 100%
rename from war/templates/other/infographic_1.xml
rename to src/main/webapp/templates/other/infographic_1.xml
diff --git a/war/templates/other/infographic_2.png b/src/main/webapp/templates/other/infographic_2.png
similarity index 100%
rename from war/templates/other/infographic_2.png
rename to src/main/webapp/templates/other/infographic_2.png
diff --git a/war/templates/other/infographic_2.xml b/src/main/webapp/templates/other/infographic_2.xml
similarity index 100%
rename from war/templates/other/infographic_2.xml
rename to src/main/webapp/templates/other/infographic_2.xml
diff --git a/war/templates/other/lan_plan.png b/src/main/webapp/templates/other/lan_plan.png
similarity index 100%
rename from war/templates/other/lan_plan.png
rename to src/main/webapp/templates/other/lan_plan.png
diff --git a/war/templates/other/lan_plan.xml b/src/main/webapp/templates/other/lan_plan.xml
similarity index 100%
rename from war/templates/other/lan_plan.xml
rename to src/main/webapp/templates/other/lan_plan.xml
diff --git a/war/templates/software/class_1.png b/src/main/webapp/templates/software/class_1.png
similarity index 100%
rename from war/templates/software/class_1.png
rename to src/main/webapp/templates/software/class_1.png
diff --git a/war/templates/software/class_1.xml b/src/main/webapp/templates/software/class_1.xml
similarity index 100%
rename from war/templates/software/class_1.xml
rename to src/main/webapp/templates/software/class_1.xml
diff --git a/war/templates/software/class_2.png b/src/main/webapp/templates/software/class_2.png
similarity index 100%
rename from war/templates/software/class_2.png
rename to src/main/webapp/templates/software/class_2.png
diff --git a/war/templates/software/class_2.xml b/src/main/webapp/templates/software/class_2.xml
similarity index 100%
rename from war/templates/software/class_2.xml
rename to src/main/webapp/templates/software/class_2.xml
diff --git a/war/templates/software/component.png b/src/main/webapp/templates/software/component.png
similarity index 100%
rename from war/templates/software/component.png
rename to src/main/webapp/templates/software/component.png
diff --git a/war/templates/software/component.xml b/src/main/webapp/templates/software/component.xml
similarity index 100%
rename from war/templates/software/component.xml
rename to src/main/webapp/templates/software/component.xml
diff --git a/war/templates/software/database_1.png b/src/main/webapp/templates/software/database_1.png
similarity index 100%
rename from war/templates/software/database_1.png
rename to src/main/webapp/templates/software/database_1.png
diff --git a/war/templates/software/database_1.xml b/src/main/webapp/templates/software/database_1.xml
similarity index 100%
rename from war/templates/software/database_1.xml
rename to src/main/webapp/templates/software/database_1.xml
diff --git a/war/templates/software/database_2.png b/src/main/webapp/templates/software/database_2.png
similarity index 100%
rename from war/templates/software/database_2.png
rename to src/main/webapp/templates/software/database_2.png
diff --git a/war/templates/software/database_2.xml b/src/main/webapp/templates/software/database_2.xml
similarity index 100%
rename from war/templates/software/database_2.xml
rename to src/main/webapp/templates/software/database_2.xml
diff --git a/war/templates/software/database_3.png b/src/main/webapp/templates/software/database_3.png
similarity index 100%
rename from war/templates/software/database_3.png
rename to src/main/webapp/templates/software/database_3.png
diff --git a/war/templates/software/database_3.xml b/src/main/webapp/templates/software/database_3.xml
similarity index 100%
rename from war/templates/software/database_3.xml
rename to src/main/webapp/templates/software/database_3.xml
diff --git a/war/templates/software/eip.png b/src/main/webapp/templates/software/eip.png
similarity index 100%
rename from war/templates/software/eip.png
rename to src/main/webapp/templates/software/eip.png
diff --git a/war/templates/software/eip.xml b/src/main/webapp/templates/software/eip.xml
similarity index 100%
rename from war/templates/software/eip.xml
rename to src/main/webapp/templates/software/eip.xml
diff --git a/war/templates/software/entity_relationship.png b/src/main/webapp/templates/software/entity_relationship.png
similarity index 100%
rename from war/templates/software/entity_relationship.png
rename to src/main/webapp/templates/software/entity_relationship.png
diff --git a/war/templates/software/entity_relationship.xml b/src/main/webapp/templates/software/entity_relationship.xml
similarity index 100%
rename from war/templates/software/entity_relationship.xml
rename to src/main/webapp/templates/software/entity_relationship.xml
diff --git a/war/templates/tables/authority_matrix.png b/src/main/webapp/templates/tables/authority_matrix.png
similarity index 100%
rename from war/templates/tables/authority_matrix.png
rename to src/main/webapp/templates/tables/authority_matrix.png
diff --git a/war/templates/tables/authority_matrix.xml b/src/main/webapp/templates/tables/authority_matrix.xml
similarity index 100%
rename from war/templates/tables/authority_matrix.xml
rename to src/main/webapp/templates/tables/authority_matrix.xml
diff --git a/war/templates/tables/gantt_1.png b/src/main/webapp/templates/tables/gantt_1.png
similarity index 100%
rename from war/templates/tables/gantt_1.png
rename to src/main/webapp/templates/tables/gantt_1.png
diff --git a/war/templates/tables/gantt_1.xml b/src/main/webapp/templates/tables/gantt_1.xml
similarity index 100%
rename from war/templates/tables/gantt_1.xml
rename to src/main/webapp/templates/tables/gantt_1.xml
diff --git a/war/templates/tables/gantt_2.png b/src/main/webapp/templates/tables/gantt_2.png
similarity index 100%
rename from war/templates/tables/gantt_2.png
rename to src/main/webapp/templates/tables/gantt_2.png
diff --git a/war/templates/tables/gantt_2.xml b/src/main/webapp/templates/tables/gantt_2.xml
similarity index 100%
rename from war/templates/tables/gantt_2.xml
rename to src/main/webapp/templates/tables/gantt_2.xml
diff --git a/war/templates/tables/gantt_3.png b/src/main/webapp/templates/tables/gantt_3.png
similarity index 100%
rename from war/templates/tables/gantt_3.png
rename to src/main/webapp/templates/tables/gantt_3.png
diff --git a/war/templates/tables/gantt_3.xml b/src/main/webapp/templates/tables/gantt_3.xml
similarity index 100%
rename from war/templates/tables/gantt_3.xml
rename to src/main/webapp/templates/tables/gantt_3.xml
diff --git a/war/templates/uml/activity_diagram_1.png b/src/main/webapp/templates/uml/activity_diagram_1.png
similarity index 100%
rename from war/templates/uml/activity_diagram_1.png
rename to src/main/webapp/templates/uml/activity_diagram_1.png
diff --git a/war/templates/uml/activity_diagram_1.xml b/src/main/webapp/templates/uml/activity_diagram_1.xml
similarity index 100%
rename from war/templates/uml/activity_diagram_1.xml
rename to src/main/webapp/templates/uml/activity_diagram_1.xml
diff --git a/war/templates/uml/activity_diagram_2.png b/src/main/webapp/templates/uml/activity_diagram_2.png
similarity index 100%
rename from war/templates/uml/activity_diagram_2.png
rename to src/main/webapp/templates/uml/activity_diagram_2.png
diff --git a/war/templates/uml/activity_diagram_2.xml b/src/main/webapp/templates/uml/activity_diagram_2.xml
similarity index 100%
rename from war/templates/uml/activity_diagram_2.xml
rename to src/main/webapp/templates/uml/activity_diagram_2.xml
diff --git a/war/templates/uml/sequence_1.png b/src/main/webapp/templates/uml/sequence_1.png
similarity index 100%
rename from war/templates/uml/sequence_1.png
rename to src/main/webapp/templates/uml/sequence_1.png
diff --git a/war/templates/uml/sequence_1.xml b/src/main/webapp/templates/uml/sequence_1.xml
similarity index 100%
rename from war/templates/uml/sequence_1.xml
rename to src/main/webapp/templates/uml/sequence_1.xml
diff --git a/war/templates/uml/sequence_2.png b/src/main/webapp/templates/uml/sequence_2.png
similarity index 100%
rename from war/templates/uml/sequence_2.png
rename to src/main/webapp/templates/uml/sequence_2.png
diff --git a/war/templates/uml/sequence_2.xml b/src/main/webapp/templates/uml/sequence_2.xml
similarity index 100%
rename from war/templates/uml/sequence_2.xml
rename to src/main/webapp/templates/uml/sequence_2.xml
diff --git a/war/templates/uml/state_machine.png b/src/main/webapp/templates/uml/state_machine.png
similarity index 100%
rename from war/templates/uml/state_machine.png
rename to src/main/webapp/templates/uml/state_machine.png
diff --git a/war/templates/uml/state_machine.xml b/src/main/webapp/templates/uml/state_machine.xml
similarity index 100%
rename from war/templates/uml/state_machine.xml
rename to src/main/webapp/templates/uml/state_machine.xml
diff --git a/war/templates/uml/sysml.png b/src/main/webapp/templates/uml/sysml.png
similarity index 100%
rename from war/templates/uml/sysml.png
rename to src/main/webapp/templates/uml/sysml.png
diff --git a/war/templates/uml/sysml.xml b/src/main/webapp/templates/uml/sysml.xml
similarity index 100%
rename from war/templates/uml/sysml.xml
rename to src/main/webapp/templates/uml/sysml.xml
diff --git a/war/templates/uml/uml_1.png b/src/main/webapp/templates/uml/uml_1.png
similarity index 100%
rename from war/templates/uml/uml_1.png
rename to src/main/webapp/templates/uml/uml_1.png
diff --git a/war/templates/uml/uml_1.xml b/src/main/webapp/templates/uml/uml_1.xml
similarity index 100%
rename from war/templates/uml/uml_1.xml
rename to src/main/webapp/templates/uml/uml_1.xml
diff --git a/war/templates/uml/uml_2.png b/src/main/webapp/templates/uml/uml_2.png
similarity index 100%
rename from war/templates/uml/uml_2.png
rename to src/main/webapp/templates/uml/uml_2.png
diff --git a/war/templates/uml/uml_2.xml b/src/main/webapp/templates/uml/uml_2.xml
similarity index 100%
rename from war/templates/uml/uml_2.xml
rename to src/main/webapp/templates/uml/uml_2.xml
diff --git a/war/templates/venn/spider_1.png b/src/main/webapp/templates/venn/spider_1.png
similarity index 100%
rename from war/templates/venn/spider_1.png
rename to src/main/webapp/templates/venn/spider_1.png
diff --git a/war/templates/venn/spider_1.xml b/src/main/webapp/templates/venn/spider_1.xml
similarity index 100%
rename from war/templates/venn/spider_1.xml
rename to src/main/webapp/templates/venn/spider_1.xml
diff --git a/war/templates/venn/spider_2.png b/src/main/webapp/templates/venn/spider_2.png
similarity index 100%
rename from war/templates/venn/spider_2.png
rename to src/main/webapp/templates/venn/spider_2.png
diff --git a/war/templates/venn/spider_2.xml b/src/main/webapp/templates/venn/spider_2.xml
similarity index 100%
rename from war/templates/venn/spider_2.xml
rename to src/main/webapp/templates/venn/spider_2.xml
diff --git a/war/templates/venn/venn_1.png b/src/main/webapp/templates/venn/venn_1.png
similarity index 100%
rename from war/templates/venn/venn_1.png
rename to src/main/webapp/templates/venn/venn_1.png
diff --git a/war/templates/venn/venn_1.xml b/src/main/webapp/templates/venn/venn_1.xml
similarity index 100%
rename from war/templates/venn/venn_1.xml
rename to src/main/webapp/templates/venn/venn_1.xml
diff --git a/war/templates/venn/venn_2.png b/src/main/webapp/templates/venn/venn_2.png
similarity index 100%
rename from war/templates/venn/venn_2.png
rename to src/main/webapp/templates/venn/venn_2.png
diff --git a/war/templates/venn/venn_2.xml b/src/main/webapp/templates/venn/venn_2.xml
similarity index 100%
rename from war/templates/venn/venn_2.xml
rename to src/main/webapp/templates/venn/venn_2.xml
diff --git a/war/templates/venn/venn_3.png b/src/main/webapp/templates/venn/venn_3.png
similarity index 100%
rename from war/templates/venn/venn_3.png
rename to src/main/webapp/templates/venn/venn_3.png
diff --git a/war/templates/venn/venn_3.xml b/src/main/webapp/templates/venn/venn_3.xml
similarity index 100%
rename from war/templates/venn/venn_3.xml
rename to src/main/webapp/templates/venn/venn_3.xml
diff --git a/war/templates/venn/venn_4.png b/src/main/webapp/templates/venn/venn_4.png
similarity index 100%
rename from war/templates/venn/venn_4.png
rename to src/main/webapp/templates/venn/venn_4.png
diff --git a/war/templates/venn/venn_4.xml b/src/main/webapp/templates/venn/venn_4.xml
similarity index 100%
rename from war/templates/venn/venn_4.xml
rename to src/main/webapp/templates/venn/venn_4.xml
diff --git a/war/templates/venn/venn_5.png b/src/main/webapp/templates/venn/venn_5.png
similarity index 100%
rename from war/templates/venn/venn_5.png
rename to src/main/webapp/templates/venn/venn_5.png
diff --git a/war/templates/venn/venn_5.xml b/src/main/webapp/templates/venn/venn_5.xml
similarity index 100%
rename from war/templates/venn/venn_5.xml
rename to src/main/webapp/templates/venn/venn_5.xml
diff --git a/war/WEB-INF/appengine-web.xml b/war/WEB-INF/appengine-web.xml
deleted file mode 100644
index f56f11e21bd17360d91a0ed6ad3e33d0fe511736..0000000000000000000000000000000000000000
--- a/war/WEB-INF/appengine-web.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
-	<application>drawdotio</application>
-	
-	<!-- Configure java.util.logging -->
-	<system-properties>
-		<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
-	</system-properties>
-
-	<sessions-enabled>false</sessions-enabled>
-	<threadsafe>false</threadsafe>
-
-	<!-- Path patterns not supported in production -->
-	<static-files>
-	    	<include path="/**">
-			<http-header name="Access-Control-Allow-Origin" value="*"/>
-	    	</include>
-	</static-files>
-
-	<instance-class>F2</instance-class>
-	<automatic-scaling>
-    	<min-idle-instances>1</min-idle-instances>
-    	<max-idle-instances>1</max-idle-instances>
-	</automatic-scaling>
-</appengine-web-app>
\ No newline at end of file
diff --git a/war/WEB-INF/lib/appengine-api-labs.jar b/war/WEB-INF/lib/appengine-api-labs.jar
deleted file mode 100644
index 4d5cfcdb659cd3457481c4c5a1ed33566e836914..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/appengine-api-labs.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/appengine-endpoints-deps.jar b/war/WEB-INF/lib/appengine-endpoints-deps.jar
deleted file mode 100644
index 51baae38299d8f63b629727d110ca1cbe20f345a..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/appengine-endpoints-deps.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/appengine-endpoints.jar b/war/WEB-INF/lib/appengine-endpoints.jar
deleted file mode 100644
index 6b7dfd06f5f53941518fe9c598de77144289d70d..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/appengine-endpoints.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/appengine-jsr107cache-1.9.34.jar b/war/WEB-INF/lib/appengine-jsr107cache-1.9.34.jar
deleted file mode 100644
index 93644e9981bc5957b9cbbee97dc86c9991b3f3ba..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/appengine-jsr107cache-1.9.34.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/commons-codec-1.10.jar b/war/WEB-INF/lib/commons-codec-1.10.jar
deleted file mode 100644
index 1d7417c4031324cc6577a306cde57ae220f55523..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/commons-codec-1.10.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/commons-fileupload-1.3.2.jar b/war/WEB-INF/lib/commons-fileupload-1.3.2.jar
deleted file mode 100644
index 4975590e34f0990118d0063b601bd9ce62fc4a3e..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/commons-fileupload-1.3.2.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/commons-lang3-3.5.jar b/war/WEB-INF/lib/commons-lang3-3.5.jar
deleted file mode 100644
index 6328c8de419b8424a27705fb940d2cfeccafddd9..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/commons-lang3-3.5.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/commons-logging-1.2.jar b/war/WEB-INF/lib/commons-logging-1.2.jar
deleted file mode 100644
index 93a3b9f6db406c84e270e19b9a5e70f2e27ca513..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/commons-logging-1.2.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/gson-2.7.jar b/war/WEB-INF/lib/gson-2.7.jar
deleted file mode 100644
index be5b59b764b56819e35021933772ab07b41e2e0e..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/gson-2.7.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/httpclient-4.5.1.jar b/war/WEB-INF/lib/httpclient-4.5.1.jar
deleted file mode 100644
index b9c0c1c25022117fc273a4ee1453b2c90893bf08..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/httpclient-4.5.1.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/httpcore-4.4.3.jar b/war/WEB-INF/lib/httpcore-4.4.3.jar
deleted file mode 100644
index 9f91ef663e25f0a270a654e19b11fc66735de3bb..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/httpcore-4.4.3.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/httpmime-4.5.1.jar b/war/WEB-INF/lib/httpmime-4.5.1.jar
deleted file mode 100644
index 53a6420129a7961477a15f18de546c4fd5cdd983..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/httpmime-4.5.1.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/im4java-1.4.0.jar b/war/WEB-INF/lib/im4java-1.4.0.jar
deleted file mode 100644
index b08eba9811d2959b012ec77b9d8d9ed7ef681141..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/im4java-1.4.0.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/json-smart-1.3.1.jar b/war/WEB-INF/lib/json-smart-1.3.1.jar
deleted file mode 100644
index 2cf0bab72e7fcecc03b5d40d4ec8978dff101e64..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/json-smart-1.3.1.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/jsr107cache-1.1.jar b/war/WEB-INF/lib/jsr107cache-1.1.jar
deleted file mode 100644
index a94aa3184e039f6b7ee503dc24a0598e858e5c86..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/jsr107cache-1.1.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/junit-4.8.2.jar b/war/WEB-INF/lib/junit-4.8.2.jar
deleted file mode 100644
index 5b4bb849af9583fec1ea0a0ccc0d571ef49aa8ba..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/junit-4.8.2.jar and /dev/null differ
diff --git a/war/WEB-INF/lib/nimbus-jose-jwt-2.16.jar b/war/WEB-INF/lib/nimbus-jose-jwt-2.16.jar
deleted file mode 100644
index 91fc268013c80ec098a301a423bad7a4e48b0e0b..0000000000000000000000000000000000000000
Binary files a/war/WEB-INF/lib/nimbus-jose-jwt-2.16.jar and /dev/null differ
diff --git a/war/WEB-INF/logging.properties b/war/WEB-INF/logging.properties
deleted file mode 100644
index d22e3f05128feb099f076ee67036adee711ac065..0000000000000000000000000000000000000000
--- a/war/WEB-INF/logging.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-# A default java.util.logging configuration.
-# (All App Engine logging is through java.util.logging by default).
-#
-# To use this configuration, copy it into your application's WEB-INF
-# folder and add the following to your appengine-web.xml:
-# 
-# <system-properties>
-#   <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
-# </system-properties>
-#
-
-# Set the default logging level for all loggers to WARNING
-.level = CONFIG
diff --git a/war/styles/dark.css b/war/styles/dark.css
deleted file mode 100644
index 010d078b67d01e4d4f49453759f60da097ac83c9..0000000000000000000000000000000000000000
--- a/war/styles/dark.css
+++ /dev/null
@@ -1,94 +0,0 @@
-html body .geDiagramContainer, html body div.geMenubarContainer, html body .geFooterContainer>div>img, html body div.mxPopupMenu,  html body td.mxPopupMenuIcon, html body .geFormatContainer {
-	background-color: #2a2a2a;
-}
-html body .geFormatContainer {
-	border-left: 1px solid #505759;
-}
-html body .geDiagramContainer {
-	border-bottom: 1px solid #505759;
-}
-html body .geSidebarContainer a, html body .geMenubarContainer a, html body .geToolbar a {
-	color: #cccccc;
-}
-html body .geMenubarMenu {
-	border-color:#505759 !important;
-}
-html body .geToolbarMenu, html body .geFooterContainer, html body .geFooterContainer td {
-	border-color:#505759;
-}
-html body div.mxPopupMenu {
-	border-color:#505759 !important;
-	box-shadow:none;
-}
-html body .geSidebarContainer, html body .geDiagramBackdrop {
-	background-color:#2a2a2a;
-	border-color:#505759;
-}
-html body .geBackgroundPage {
-	box-shadow:none;
-}
-html body .geToolbarContainer, html body .geSidebar, html body .geSidebarContainer .geTitle, html body input, html body textarea, html body button {
-	background:#2a2a2a;
-	border-color:#505759;
-	color: #cccccc;
-}
-html body .geBtn {
-	background:#2a2a2a !important;
-	border-color:#505759 !important;
-	color: #cccccc !important;
-}
-html body .gePrimaryBtn {
-	background:#505759 !important;
-	border-color:#cccccc !important;
-	color: #cccccc !important;
-}
-html body .geBtn:hover {
-	background:black !important;
-}
-html body .geSprite {
-	background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAABeQCAMAAAByzXKPAAAA2FBMVEUAAADMzM3MzM3MzM3Hx8fMzM3MzM3MzM7JycnMzM7MzM3Nzc3MzM3MzM3MzM7Ly83MzM3Ly83MzM3MzMzMzM3Nzc7MzM7Nzc3MzM3Nzc3MzM7Nzc7MzM7Ly87KytDMzMzMzMzMzM3MzM3Nzc3Ly87MzM3MzM3MzM3///9KSkoAAACZmZnPz8/v7+8BAgHZ2dmsdw2EhIQAmJuPj4/f39+enp6MjIzAwMDy8vLk5OTIyMi5ubmsrKyBgYFzc3NlZWVXV1eAgICvr68PDw8/Pz8fHx9fX19PT08H++10AAAAKHRSTlMAf4jDBnHoexLv3KWOeFYilIVoNd/KvbWfg2JNQS8nHA/VsJpdR/jOKLnJ6gAACwtJREFUeNrs3ItS4kAQheF+nJMyXZSVwex9F97/oTbDoM3YHUk0CoTz1e7K/tXExKoxGEAZASD4PwQ1weisQGqQd9TNRrJ8w+rmWMuNejb/9TU7P7sZ5FpuhHu2RF3i60t0U3CgvoooNKg9EM62rmYSz87Yrsb7S0QTALdUWwxan0t02eJcOMUzN60ZKtOn17ZdopuHg6pUPrqI7qUSXQrGcwryTqGu7pCkdVkTxGVtRSxbzOqsMCmqKkZh8fHRsk0+PYlli1XO0VXRIZYsROv0mVfzkcmgDSuSrxikaFbPbtdMqZhcWwCtn1VotIXEq/m0QqqTr6ql/T75ivzntT6JpN6N7kR2kNoWB9u6opdBDzF2X+yiI1BeuSd6hm/fNz9+/tp2v//8/dewvqMS3RLUwgsCl6tAUIFDBk4rsvLBVUyo8T7wWTmiMSOLooOGw+L1SFNHE/qpo4rONS5gotdQmTq7vu0SXSe+2s3z++D3Nz62r/v68rsOXRccna0xVIIqYcWUardGqoF9OFt5/if6mK0G501kpaN++q3L44qXqlL0yKTo5NkeVncvVa0a5VImehsqc+bXtV2iu4FTZ+qEmw8Pl6nmXM0ezFglukmKLorwOXUYuEkdsvq7a+dilqKoi0YJo4RRSnw6kpkQeavyrbd0Ve726jivrxNNAti/l6qpvDY/TXulTcJhkj/jE32BFoBuxWhuR1ah5SeD+p0zyHq7o9W9POvCB/E7Kfh7sYjmaKOH4Chexy6vvzq3OW5ybqtROVQB6rrJXHWzfrvxPlgu2ujY2pyduXkrROuwxJqXcM3LjDUv4ZoXrnmiK4YmrGFGUzJqUjKkNuR4Ntzu5H3g22OJvhw8GcMnxIiWBCCqEtQGQBAbudUIWAyOnb/hiu4egPD7AFxsgtkheg2iaKOz7x8/+kfuDdcx0YzzvM364eUqTi3/Gfzx8DxP92bRNT//BO5jg6KZdUeDhmue6GbwYh3RdfvP3rnupA4FUXigLfe7d5CLt3NWJf7yEYzx/d/oFLY4nnZ2UmnBGtcXYtqP5a5/ho3DhCK2te1he6hHCjuba93E8XM6QsoHiEvUSGFnC0mWPSEHqHmYGqZGzn1esznXZc0TcjRiALEhDQ1HrppXa62b0axvQgpSrCPu3blVI4Una+jcnXb2BQkpndi3yac9gNw1b0hjXfXc5AnZUbm+vdYnoIgARpZ9e0IKcOQenpmG3bffntnZrGUPj5Dvxe7hrUVkndZwP8038LCz5rrs4RFyHGDKGJaUGIYU1XBspGoz619XNXt4hBwJwHJxnPZrxK621+LQinfazFrr8utsCTk8MSwHy8FwRhIpfFn1YnsxPV8FCClS8ChdClJ4sntp7vuEHKTmYUqYErlr3r+uqVnzhPipwMSt2hScuCWkOpQzc2tJhTO3hFSd/cduVSocuyWkShTs2xu/vskBimbZtyekAEfv4QksmbXYGCierGr28Aj5Ot8/cZu2H3DilpDqUM7MrSE3+h3O3BJSefYeu1WpVc+xW0LK4vqy024E0eqza110oovLcbPbGKhc3dTDaFGT3mp+Ov2wt3eXgyupyXI87jdOxPFwE8qo3jzv14Kh3Afi6E5EriTJyiwJNobOng4TtX0sp0nm3tk/vXo92D565/X6Wd/ZdmuXbUUio4mzwfXOnszc2Yb+XaLCjY1aMmyHzrYac4m6o/OrXtCS26a8M+j0HkZhTQaDZvcslB2TxmTerA3Hi4uzpSgnQfu00/nbbm6TymLaj2ahEPLjgP8OMIXuLGMDwPa5rwbgMFfjPS3ILwGAz2KHWvBqhJDC8DY2hPwgsEWPVCbokfV/hNrPMV/Wv67oIV81CNmLL2+8mSw8MTML5M/m/Bv88E0FIaXWvCo7Z9Z8jqxq1jwhRwawBPQJrWNAj/V5PU1HNeyOdAEFcAuAH9ATUnBL/98+vbw8Ze3z4+Nz1r6+vb1m7D/27mg7TSCKwvA8zh5qXGliV6/Tpn3/RyoDJkPmHDugiIj/18Yku6cjN1uMgPnV/Gr/lun7n3b8vUh3zZv01uy+pn+bzt8v6aF5/9l6bw7D9K35odaP5m2Y/v6tpP3M4wEw4jmxant5Ozr/AlL5f9SlKnf/I6+u15E3m9ctU55HYIMk+Xl9Vv2NnMaaWVMek5oVCuJMeuCmbAttY+fv/NTHKH+Sk++wXRrKafExOt3YusAmab/f6+Xlpft8XtpKqS1MSnMyXzqtmhqd7iTtbPykQ3AcAnB3/F3bvuemjZM2TZkqS1UKvZdPKdXBpmodvNknd127vXbLRqXs4rENen5+1nJpcuXdrD4Nd7NKJdaxybV0fzrdm3TfKN3wWIBV217Th9pQn/yKT09t8W1K8XFf5HazSS5KlYxMm/Ss2kkn35tv5/37k9r0OQnZQa2c5tjMJjuu0sEdW6gXfkf2iz7CdD+3n70NXI8HLEzDD9YN4pQjYHaaMjv7CgpKf/tPq9oy4LFImpJyb8DdUlCvTENyhbQ3aq+tzKybzJtyliIeh3rBa+LsqX9vXguz+Xtu04zn/dg69fxrA+dPe8GQCTL3sqZZU3bzeBQaGjUb1HGvJ541TUzamyvl2CUelpJrNsv2eLlHjU5wcdUhYIqwQI8HLlmBPTpQpy8edxa4Cyq5L4ZNTevrKiYPkIpfNQT8l/xU439bl/h1+sB0MrctScVtS8nw1l/hYVPg0Si6qRsrfsSSgj6ENu6S/s+neEy8WbPu+G0IAIYkLZNqaHJavzfOrAcmkGzk1sCp5muxJ9ZRlF3g1d8bRz9+1au/sbdPgVVTZ66X789MB8KQSf3xctHpaTYl5QV63KOpnbdkujk5ld/uaiq5s9PSAp3Hxn0fqKX563GpBuppODKpNDZVp5a27Ap+muSv689NOD6POyeNStX6KFctPdmrnVq7Mk3xzsy28c5v5pSUbgMbIEU3zbkK/mxJHNkDVulE54Pb+e47O0vngXXSWakKo1fg/TGBm1LQWakKl6zLe2MBS1F/K5tKMZbpN+VIBX921LqcmAMsy/bNdjOpdt7O+utyMh5wE1FKxdTX8FsqbKy+n66S/JW8WX9duw38PA9cje1bS3K6qRhNjxWrnbezdt1yG9jPA7cSJS+zqQrubBapNLBKUXIzk3ZzbucDnQfWSJelKnBUHli5C4+fq8BxeWDN/KveY5RMmkR9K1MVzGx1XfFGeMBickdNN1tu58P4znvrckAeuDHl42QD+jimVqT/fY+cxM6OWjdEcdkNcH2po7ZvMcrvZlS183a2tm6ao/PASqh6Ab0KJ2YLNBxYp1Odj27n03fOLJ0HVkeKZ8YqTFiEa2yAJURJ0YZBoY3NqfGyL7jlj0QFf9Zft7oN/KQPXK3zLdt5JWXnj0Z1/oO/rrMNdB44w5reAxPAPTnR+UDngU2JkrxMoaSCN5tFHhSAVTrR+eh1Pn1keZbOA+sjxQtjFThEB6zFnMfoMhU4RgesxZzH6DIVOEYH3KX6++Hxsj2wJf/au6MUBmEgiqLbudn/BgsipDgJY0Sihnughb5ONR+dRtpqCjQze176NCjbfSOGEqtjyEGoTbcLxe/wpGfk83zAwX+t172VPqPb8x7bS0uA0NR7UJJ/5HHQq823Cx4ISE+DkuTXzp/3ZzjpnTq96Tk20kRwal0IQm19THhxkgY1HV/GhiQdHj/N3fkBpFUAIYCk5+9ZUop6q/adAyS1l8eQ9/zGntea8nk+1uZRUKMJ8ehInee1uvH3+j1PTAhPD87+X8kPR4qyJ+Qn5o0AAAAASUVORK5CYII=');
-}
-html body .geDialogTitle, html body .geDialogFooter {
-	background:#2a2a2a;
-	color: #cccccc;
-}
-html body textarea, html body .mxWindowTitle {
-	background:#2a2a2a;
-	color: #cccccc;
-}
-html body tr.mxPopupMenuItem {
-	color: #cccccc;
-}
-html body tr.mxPopupMenuItemHover {
-	background:#000000;
-	color: #cccccc;
-}
-html body .geSidebarContainer .geTitle:hover, html body .geMenubarContainer .geItem:hover, html body .geBaseButton:hover {
-	background:#000000;
-}
-html body table.mxPopupMenu hr {
-	background-color:#505759;
-}
-html body .geFooterContainer, html body .geFooterContainer a, html body #geFooterItem1 {
-	background:#2a2a2a;
-	color: #cccccc;
-}
-html body .geHsplit, html body .geToolbarContainer .geSeparator {
-	background-color:#505759;
-}
-html body .geToolbar {
-	border-color:#505759;
-	box-shadow:none;
-}
-html body .geDialog, html body div.mxWindow {
-	background:#2a2a2a;
-	border-color:#c0c0c0;
-	box-shadow:none;
-	color: #cccccc;
-}
-html body .geColorBtn, html body .geBaseButton, html body .geSidebarTooltip {
-	background:#2a2a2a;
-	border-color:#505759;
-	box-shadow:none;
-	color: #cccccc;
-}