1/**
2 * Export mxFile as Vsdx file
3 */
4function VsdxExport(editorUi)
5{
6	var that = this;
7
8	var vsdxCanvas = new mxVsdxCanvas2D();
9
10	var idsMap = {};
11	var idsCounter = 1;
12	/**
13	 * Fill the required files in vsdx format which are constants in our exporter
14	 * @param zip JSZip of vsdx file
15	 * @param pageCount The number of pages in the mxFile
16	 */
17	function createVsdxSkeleton(zip, pageCount)
18	{
19		var files = {
20			"[Content_Types].xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Types xmlns='http://schemas.openxmlformats.org/package/2006/content-types'><Default Extension='png' ContentType='image/png'/><Default Extension='jpg' ContentType='image/jpeg'/><Default Extension='jpeg' ContentType='image/jpeg'/><Default Extension='svg' ContentType='image/svg+xml'/><Default Extension='bmp' ContentType='image/bmp'/><Default Extension='gif' ContentType='image/gif'/><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/masters/master1.xml' ContentType='application/vnd.ms-visio.master+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>",
21			"_rels/.rels" : "<?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>",
22			"docProps/app.xml" :  "<?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>",
23			"docProps/core.xml" : "<?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>",
24			"docProps/custom.xml" : "<?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' />",
25			"visio/document.xml": "<?xml version='1.0' encoding='utf-8' ?><VisioDocument xmlns='http://schemas.microsoft.com/office/visio/2012/main' xmlns:r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' xml:space='preserve'><DocumentSettings TopPage='0' DefaultTextStyle='3' DefaultLineStyle='3' DefaultFillStyle='3' DefaultGuideStyle='4'><GlueSettings>9</GlueSettings><SnapSettings>65847</SnapSettings><SnapExtensions>34</SnapExtensions><SnapAngles/><DynamicGridEnabled>1</DynamicGridEnabled><ProtectStyles>0</ProtectStyles><ProtectShapes>0</ProtectShapes><ProtectMasters>0</ProtectMasters><ProtectBkgnds>0</ProtectBkgnds></DocumentSettings><Colors><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'/><ColorEntry IX='48' RGB='#7F7F7F'/><ColorEntry IX='49' RGB='#99004D'/><ColorEntry IX='50' RGB='#FF0080'/><ColorEntry IX='51' RGB='#CC0066'/></Colors><FaceNames><FaceName NameU='Calibri' UnicodeRanges='-536859905 -1073732485 9 0' CharSets='536871423 0' Panose='2 15 5 2 2 2 4 3 2 4' Flags='325'/></FaceNames><StyleSheets><StyleSheet ID='0' NameU='No Style' IsCustomNameU='1' Name='No Style' IsCustomName='1'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LineWeight' V='0.01041666666666667'/><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='LineCap' V='0'/><Cell N='BeginArrowSize' V='2'/><Cell N='LineColorTrans' V='0'/><Cell N='CompoundType' V='0'/><Cell N='FillForegnd' V='1'/><Cell N='FillBkgnd' V='0'/><Cell N='FillPattern' V='1'/><Cell N='ShdwForegnd' V='0'/><Cell N='ShdwPattern' V='0'/><Cell N='FillForegndTrans' V='0'/><Cell N='FillBkgndTrans' V='0'/><Cell N='ShdwForegndTrans' V='0'/><Cell N='ShapeShdwType' V='0'/><Cell N='ShapeShdwOffsetX' V='0'/><Cell N='ShapeShdwOffsetY' V='0'/><Cell N='ShapeShdwObliqueAngle' V='0'/><Cell N='ShapeShdwScaleFactor' V='1'/><Cell N='ShapeShdwBlur' V='0'/><Cell N='ShapeShdwShow' 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.5'/><Cell N='TextDirection' V='0'/><Cell N='TextBkgndTrans' V='0'/><Cell N='LockWidth' V='0'/><Cell N='LockHeight' V='0'/><Cell N='LockMoveX' V='0'/><Cell N='LockMoveY' V='0'/><Cell N='LockAspect' V='0'/><Cell N='LockDelete' V='0'/><Cell N='LockBegin' V='0'/><Cell N='LockEnd' V='0'/><Cell N='LockRotate' V='0'/><Cell N='LockCrop' V='0'/><Cell N='LockVtxEdit' V='0'/><Cell N='LockTextEdit' V='0'/><Cell N='LockFormat' V='0'/><Cell N='LockGroup' V='0'/><Cell N='LockCalcWH' V='0'/><Cell N='LockSelect' V='0'/><Cell N='LockCustProp' V='0'/><Cell N='LockFromGroupFormat' V='0'/><Cell N='LockThemeColors' V='0'/><Cell N='LockThemeEffects' V='0'/><Cell N='LockThemeConnectors' V='0'/><Cell N='LockThemeFonts' V='0'/><Cell N='LockThemeIndex' V='0'/><Cell N='LockReplace' V='0'/><Cell N='LockVariation' V='0'/><Cell N='NoObjHandles' V='0'/><Cell N='NonPrinting' V='0'/><Cell N='NoCtlHandles' V='0'/><Cell N='NoAlignBox' V='0'/><Cell N='UpdateAlignBox' V='0'/><Cell N='HideText' V='0'/><Cell N='DynFeedback' V='0'/><Cell N='GlueType' V='0'/><Cell N='WalkPreference' V='0'/><Cell N='BegTrigger' V='0' F='No Formula'/><Cell N='EndTrigger' V='0' F='No Formula'/><Cell N='ObjType' V='0'/><Cell N='Comment' V=''/><Cell N='IsDropSource' V='0'/><Cell N='NoLiveDynamics' V='0'/><Cell N='LocalizeMerge' V='0'/><Cell N='NoProofing' V='0'/><Cell N='Calendar' V='0'/><Cell N='LangID' V='en-US'/><Cell N='ShapeKeywords' V=''/><Cell N='DropOnPageScale' V='1'/><Cell N='TheData' V='0' F='No Formula'/><Cell N='TheText' V='0' F='No Formula'/><Cell N='EventDblClick' V='0' F='No Formula'/><Cell N='EventXFMod' V='0' F='No Formula'/><Cell N='EventDrop' V='0' F='No Formula'/><Cell N='EventMultiDrop' V='0' F='No Formula'/><Cell N='HelpTopic' V=''/><Cell N='Copyright' V=''/><Cell N='LayerMember' V=''/><Cell N='XRulerDensity' V='32'/><Cell N='YRulerDensity' V='32'/><Cell N='XRulerOrigin' V='0'/><Cell N='YRulerOrigin' V='0'/><Cell N='XGridDensity' V='8'/><Cell N='YGridDensity' V='8'/><Cell N='XGridSpacing' V='0'/><Cell N='YGridSpacing' V='0'/><Cell N='XGridOrigin' V='0'/><Cell N='YGridOrigin' V='0'/><Cell N='Gamma' V='1'/><Cell N='Contrast' V='0.5'/><Cell N='Brightness' V='0.5'/><Cell N='Sharpen' V='0'/><Cell N='Blur' V='0'/><Cell N='Denoise' V='0'/><Cell N='Transparency' V='0'/><Cell N='SelectMode' V='1'/><Cell N='DisplayMode' V='2'/><Cell N='IsDropTarget' V='0'/><Cell N='IsSnapTarget' V='1'/><Cell N='IsTextEditTarget' V='1'/><Cell N='DontMoveChildren' V='0'/><Cell N='ShapePermeableX' V='0'/><Cell N='ShapePermeableY' V='0'/><Cell N='ShapePermeablePlace' V='0'/><Cell N='Relationships' V='0'/><Cell N='ShapeFixedCode' V='0'/><Cell N='ShapePlowCode' V='0'/><Cell N='ShapeRouteStyle' V='0'/><Cell N='ShapePlaceStyle' V='0'/><Cell N='ConFixedCode' V='0'/><Cell N='ConLineJumpCode' V='0'/><Cell N='ConLineJumpStyle' V='0'/><Cell N='ConLineJumpDirX' V='0'/><Cell N='ConLineJumpDirY' V='0'/><Cell N='ShapePlaceFlip' V='0'/><Cell N='ConLineRouteExt' V='0'/><Cell N='ShapeSplit' V='0'/><Cell N='ShapeSplittable' V='0'/><Cell N='DisplayLevel' V='0'/><Cell N='ResizePage' V='0'/><Cell N='EnableGrid' V='0'/><Cell N='DynamicsOff' V='0'/><Cell N='CtrlAsInput' V='0'/><Cell N='AvoidPageBreaks' V='0'/><Cell N='PlaceStyle' V='0'/><Cell N='RouteStyle' V='0'/><Cell N='PlaceDepth' V='0'/><Cell N='PlowCode' V='0'/><Cell N='LineJumpCode' V='1'/><Cell N='LineJumpStyle' V='0'/><Cell N='PageLineJumpDirX' V='0'/><Cell N='PageLineJumpDirY' V='0'/><Cell N='LineToNodeX' V='0.125'/><Cell N='LineToNodeY' V='0.125'/><Cell N='BlockSizeX' V='0.25'/><Cell N='BlockSizeY' V='0.25'/><Cell N='AvenueSizeX' V='0.375'/><Cell N='AvenueSizeY' V='0.375'/><Cell N='LineToLineX' V='0.125'/><Cell N='LineToLineY' V='0.125'/><Cell N='LineJumpFactorX' V='0.66666666666667'/><Cell N='LineJumpFactorY' V='0.66666666666667'/><Cell N='LineAdjustFrom' V='0'/><Cell N='LineAdjustTo' V='0'/><Cell N='PlaceFlip' V='0'/><Cell N='LineRouteExt' V='0'/><Cell N='PageShapeSplit' V='0'/><Cell N='PageLeftMargin' V='0.25'/><Cell N='PageRightMargin' V='0.25'/><Cell N='PageTopMargin' V='0.25'/><Cell N='PageBottomMargin' V='0.25'/><Cell N='ScaleX' V='1'/><Cell N='ScaleY' V='1'/><Cell N='PagesX' V='1'/><Cell N='PagesY' V='1'/><Cell N='CenterX' V='0'/><Cell N='CenterY' V='0'/><Cell N='OnPage' V='0'/><Cell N='PrintGrid' V='0'/><Cell N='PrintPageOrientation' V='1'/><Cell N='PaperKind' V='1'/><Cell N='PaperSource' V='7'/><Cell N='QuickStyleLineColor' V='100'/><Cell N='QuickStyleFillColor' V='100'/><Cell N='QuickStyleShadowColor' V='100'/><Cell N='QuickStyleFontColor' V='100'/><Cell N='QuickStyleLineMatrix' V='100'/><Cell N='QuickStyleFillMatrix' V='100'/><Cell N='QuickStyleEffectsMatrix' V='100'/><Cell N='QuickStyleFontMatrix' V='100'/><Cell N='QuickStyleType' V='0'/><Cell N='QuickStyleVariation' V='0'/><Cell N='LineGradientDir' V='0'/><Cell N='LineGradientAngle' V='1.5707963267949'/><Cell N='FillGradientDir' V='0'/><Cell N='FillGradientAngle' V='1.5707963267949'/><Cell N='LineGradientEnabled' V='0'/><Cell N='FillGradientEnabled' V='0'/><Cell N='RotateGradientWithShape' V='1'/><Cell N='UseGroupGradient' V='0'/><Cell N='BevelTopType' V='0'/><Cell N='BevelTopWidth' V='0'/><Cell N='BevelTopHeight' V='0'/><Cell N='BevelBottomType' V='0'/><Cell N='BevelBottomWidth' V='0'/><Cell N='BevelBottomHeight' V='0'/><Cell N='BevelDepthColor' V='1'/><Cell N='BevelDepthSize' V='0'/><Cell N='BevelContourColor' V='0'/><Cell N='BevelContourSize' V='0'/><Cell N='BevelMaterialType' V='0'/><Cell N='BevelLightingType' V='0'/><Cell N='BevelLightingAngle' V='0'/><Cell N='RotationXAngle' V='0'/><Cell N='RotationYAngle' V='0'/><Cell N='RotationZAngle' V='0'/><Cell N='RotationType' V='0'/><Cell N='Perspective' V='0'/><Cell N='DistanceFromGround' V='0'/><Cell N='KeepTextFlat' V='0'/><Cell N='ReflectionTrans' V='0'/><Cell N='ReflectionSize' V='0'/><Cell N='ReflectionDist' V='0'/><Cell N='ReflectionBlur' V='0'/><Cell N='GlowColor' V='1'/><Cell N='GlowColorTrans' V='0'/><Cell N='GlowSize' V='0'/><Cell N='SoftEdgesSize' V='0'/><Cell N='SketchSeed' V='0'/><Cell N='SketchEnabled' V='0'/><Cell N='SketchAmount' V='5'/><Cell N='SketchLineWeight' V='0.04166666666666666' U='PT'/><Cell N='SketchLineChange' V='0.14'/><Cell N='SketchFillChange' V='0.1'/><Cell N='ColorSchemeIndex' V='0'/><Cell N='EffectSchemeIndex' V='0'/><Cell N='ConnectorSchemeIndex' V='0'/><Cell N='FontSchemeIndex' V='0'/><Cell N='ThemeIndex' V='0'/><Cell N='VariationColorIndex' V='0'/><Cell N='VariationStyleIndex' V='0'/><Cell N='EmbellishmentIndex' V='0'/><Cell N='ReplaceLockShapeData' V='0'/><Cell N='ReplaceLockText' V='0'/><Cell N='ReplaceLockFormat' V='0'/><Cell N='ReplaceCopyCells' V='0' U='BOOL' F='No Formula'/><Cell N='PageWidth' V='0' F='No Formula'/><Cell N='PageHeight' V='0' F='No Formula'/><Cell N='ShdwOffsetX' V='0' F='No Formula'/><Cell N='ShdwOffsetY' V='0' F='No Formula'/><Cell N='PageScale' V='0' U='IN_F' F='No Formula'/><Cell N='DrawingScale' V='0' U='IN_F' F='No Formula'/><Cell N='DrawingSizeType' V='0' F='No Formula'/><Cell N='DrawingScaleType' V='0' F='No Formula'/><Cell N='InhibitSnap' V='0' F='No Formula'/><Cell N='PageLockReplace' V='0' U='BOOL' F='No Formula'/><Cell N='PageLockDuplicate' V='0' U='BOOL' F='No Formula'/><Cell N='UIVisibility' V='0' F='No Formula'/><Cell N='ShdwType' V='0' F='No Formula'/><Cell N='ShdwObliqueAngle' V='0' F='No Formula'/><Cell N='ShdwScaleFactor' V='0' F='No Formula'/><Cell N='DrawingResizeType' V='0' F='No Formula'/><Section N='Character'><Row IX='0'><Cell N='Font' V='Calibri'/><Cell N='Color' V='0'/><Cell N='Style' V='0'/><Cell N='Case' V='0'/><Cell N='Pos' V='0'/><Cell N='FontScale' V='1'/><Cell N='Size' V='0.1666666666666667'/><Cell N='DblUnderline' V='0'/><Cell N='Overline' V='0'/><Cell N='Strikethru' V='0'/><Cell N='DoubleStrikethrough' V='0'/><Cell N='Letterspace' V='0'/><Cell N='ColorTrans' V='0'/><Cell N='AsianFont' V='0'/><Cell N='ComplexScriptFont' V='0'/><Cell N='ComplexScriptSize' V='-1'/><Cell N='LangID' V='en-US'/></Row></Section><Section N='Paragraph'><Row IX='0'><Cell N='IndFirst' V='0'/><Cell N='IndLeft' V='0'/><Cell N='IndRight' V='0'/><Cell N='SpLine' V='-1.2'/><Cell N='SpBefore' V='0'/><Cell N='SpAfter' V='0'/><Cell N='HorzAlign' V='1'/><Cell N='Bullet' V='0'/><Cell N='BulletStr' V=''/><Cell N='BulletFont' V='0'/><Cell N='BulletFontSize' V='-1'/><Cell N='TextPosAfterBullet' V='0'/><Cell N='Flags' V='0'/></Row></Section><Section N='Tabs'><Row IX='0'/></Section><Section N='LineGradient'><Row IX='0'><Cell N='GradientStopColor' V='1'/><Cell N='GradientStopColorTrans' V='0'/><Cell N='GradientStopPosition' V='0'/></Row></Section><Section N='FillGradient'><Row IX='0'><Cell N='GradientStopColor' V='1'/><Cell N='GradientStopColorTrans' V='0'/><Cell N='GradientStopPosition' V='0'/></Row></Section></StyleSheet><StyleSheet ID='1' NameU='Text Only' IsCustomNameU='1' Name='Text Only' IsCustomName='1' LineStyle='3' FillStyle='3' TextStyle='3'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LineWeight' V='Themed' F='Inh'/><Cell N='LineColor' V='Themed' F='Inh'/><Cell N='LinePattern' V='Themed' F='Inh'/><Cell N='Rounding' V='Themed' F='Inh'/><Cell N='EndArrowSize' V='2' F='Inh'/><Cell N='BeginArrow' V='0' F='Inh'/><Cell N='EndArrow' V='0' F='Inh'/><Cell N='LineCap' V='Themed' F='Inh'/><Cell N='BeginArrowSize' V='2' F='Inh'/><Cell N='LineColorTrans' V='Themed' F='Inh'/><Cell N='CompoundType' V='Themed' F='Inh'/><Cell N='FillForegnd' V='Themed' F='Inh'/><Cell N='FillBkgnd' V='Themed' F='Inh'/><Cell N='FillPattern' V='Themed' F='Inh'/><Cell N='ShdwForegnd' V='Themed' F='Inh'/><Cell N='ShdwPattern' V='Themed' F='Inh'/><Cell N='FillForegndTrans' V='Themed' F='Inh'/><Cell N='FillBkgndTrans' V='Themed' F='Inh'/><Cell N='ShdwForegndTrans' V='Themed' F='Inh'/><Cell N='ShapeShdwType' V='Themed' F='Inh'/><Cell N='ShapeShdwOffsetX' V='Themed' F='Inh'/><Cell N='ShapeShdwOffsetY' V='Themed' F='Inh'/><Cell N='ShapeShdwObliqueAngle' V='Themed' F='Inh'/><Cell N='ShapeShdwScaleFactor' V='Themed' F='Inh'/><Cell N='ShapeShdwBlur' V='Themed' F='Inh'/><Cell N='ShapeShdwShow' V='0' F='Inh'/><Cell N='LeftMargin' V='0'/><Cell N='RightMargin' V='0'/><Cell N='TopMargin' V='0'/><Cell N='BottomMargin' V='0'/><Cell N='VerticalAlign' V='0'/><Cell N='TextBkgnd' V='0'/><Cell N='DefaultTabStop' V='0.5' F='Inh'/><Cell N='TextDirection' V='0' F='Inh'/><Cell N='TextBkgndTrans' V='0' F='Inh'/><Cell N='LineGradientDir' V='Themed' F='Inh'/><Cell N='LineGradientAngle' V='Themed' F='Inh'/><Cell N='FillGradientDir' V='Themed' F='Inh'/><Cell N='FillGradientAngle' V='Themed' F='Inh'/><Cell N='LineGradientEnabled' V='Themed' F='Inh'/><Cell N='FillGradientEnabled' V='Themed' F='Inh'/><Cell N='RotateGradientWithShape' V='Themed' F='Inh'/><Cell N='UseGroupGradient' V='Themed' F='Inh'/><Section N='Paragraph'><Row IX='0'><Cell N='IndFirst' V='0' F='Inh'/><Cell N='IndLeft' V='0' F='Inh'/><Cell N='IndRight' V='0' F='Inh'/><Cell N='SpLine' V='-1.2' F='Inh'/><Cell N='SpBefore' V='0' F='Inh'/><Cell N='SpAfter' V='0' F='Inh'/><Cell N='HorzAlign' V='0'/><Cell N='Bullet' V='0' F='Inh'/><Cell N='BulletStr' V='' F='Inh'/><Cell N='BulletFont' V='0' F='Inh'/><Cell N='BulletFontSize' V='-1' F='Inh'/><Cell N='TextPosAfterBullet' V='0' F='Inh'/><Cell N='Flags' V='0' F='Inh'/></Row></Section></StyleSheet><StyleSheet ID='2' NameU='None' IsCustomNameU='1' Name='None' IsCustomName='1' LineStyle='3' FillStyle='3' TextStyle='3'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LineWeight' V='Themed' F='Inh'/><Cell N='LineColor' V='Themed' F='Inh'/><Cell N='LinePattern' V='0'/><Cell N='Rounding' V='Themed' F='Inh'/><Cell N='EndArrowSize' V='2' F='Inh'/><Cell N='BeginArrow' V='0' F='Inh'/><Cell N='EndArrow' V='0' F='Inh'/><Cell N='LineCap' V='Themed' F='Inh'/><Cell N='BeginArrowSize' V='2' F='Inh'/><Cell N='LineColorTrans' V='Themed' F='Inh'/><Cell N='CompoundType' V='Themed' F='Inh'/><Cell N='FillForegnd' V='Themed' F='Inh'/><Cell N='FillBkgnd' V='Themed' F='Inh'/><Cell N='FillPattern' V='0'/><Cell N='ShdwForegnd' V='Themed' F='Inh'/><Cell N='ShdwPattern' V='Themed' F='Inh'/><Cell N='FillForegndTrans' V='Themed' F='Inh'/><Cell N='FillBkgndTrans' V='Themed' F='Inh'/><Cell N='ShdwForegndTrans' V='Themed' F='Inh'/><Cell N='ShapeShdwType' V='Themed' F='Inh'/><Cell N='ShapeShdwOffsetX' V='Themed' F='Inh'/><Cell N='ShapeShdwOffsetY' V='Themed' F='Inh'/><Cell N='ShapeShdwObliqueAngle' V='Themed' F='Inh'/><Cell N='ShapeShdwScaleFactor' V='Themed' F='Inh'/><Cell N='ShapeShdwBlur' V='Themed' F='Inh'/><Cell N='ShapeShdwShow' V='0' F='Inh'/><Cell N='LineGradientDir' V='Themed' F='Inh'/><Cell N='LineGradientAngle' V='Themed' F='Inh'/><Cell N='FillGradientDir' V='Themed' F='Inh'/><Cell N='FillGradientAngle' V='Themed' F='Inh'/><Cell N='LineGradientEnabled' V='0'/><Cell N='FillGradientEnabled' V='0'/><Cell N='RotateGradientWithShape' V='Themed' F='Inh'/><Cell N='UseGroupGradient' V='Themed' F='Inh'/><Cell N='QuickStyleLineColor' V='100' F='Inh'/><Cell N='QuickStyleFillColor' V='100' F='Inh'/><Cell N='QuickStyleShadowColor' V='100' F='Inh'/><Cell N='QuickStyleFontColor' V='100' F='Inh'/><Cell N='QuickStyleLineMatrix' V='100' F='Inh'/><Cell N='QuickStyleFillMatrix' V='100' F='Inh'/><Cell N='QuickStyleEffectsMatrix' V='0' F='GUARD(0)'/><Cell N='QuickStyleFontMatrix' V='100' F='Inh'/><Cell N='QuickStyleType' V='0' F='Inh'/><Cell N='QuickStyleVariation' V='2'/></StyleSheet><StyleSheet ID='3' NameU='Normal' IsCustomNameU='1' Name='Normal' IsCustomName='1' LineStyle='6' FillStyle='6' TextStyle='6'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LeftMargin' V='0.05555555555555555' U='PT'/><Cell N='RightMargin' V='0.05555555555555555' U='PT'/><Cell N='TopMargin' V='0.05555555555555555' U='PT'/><Cell N='BottomMargin' V='0.05555555555555555' U='PT'/><Cell N='VerticalAlign' V='1' F='Inh'/><Cell N='TextBkgnd' V='0' F='Inh'/><Cell N='DefaultTabStop' V='0.5' F='Inh'/><Cell N='TextDirection' V='0' F='Inh'/><Cell N='TextBkgndTrans' V='0' F='Inh'/></StyleSheet><StyleSheet ID='4' NameU='Guide' IsCustomNameU='1' Name='Guide' IsCustomName='1' LineStyle='3' FillStyle='3' TextStyle='3'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LineWeight' V='0' U='PT'/><Cell N='LineColor' V='#7f7f7f'/><Cell N='LinePattern' V='23'/><Cell N='Rounding' V='Themed' F='Inh'/><Cell N='EndArrowSize' V='2' F='Inh'/><Cell N='BeginArrow' V='0' F='Inh'/><Cell N='EndArrow' V='0' F='Inh'/><Cell N='LineCap' V='Themed' F='Inh'/><Cell N='BeginArrowSize' V='2' F='Inh'/><Cell N='LineColorTrans' V='Themed' F='Inh'/><Cell N='CompoundType' V='Themed' F='Inh'/><Cell N='FillForegnd' V='Themed' F='Inh'/><Cell N='FillBkgnd' V='Themed' F='Inh'/><Cell N='FillPattern' V='0'/><Cell N='ShdwForegnd' V='Themed' F='Inh'/><Cell N='ShdwPattern' V='Themed' F='Inh'/><Cell N='FillForegndTrans' V='Themed' F='Inh'/><Cell N='FillBkgndTrans' V='Themed' F='Inh'/><Cell N='ShdwForegndTrans' V='Themed' F='Inh'/><Cell N='ShapeShdwType' V='Themed' F='Inh'/><Cell N='ShapeShdwOffsetX' V='Themed' F='Inh'/><Cell N='ShapeShdwOffsetY' V='Themed' F='Inh'/><Cell N='ShapeShdwObliqueAngle' V='Themed' F='Inh'/><Cell N='ShapeShdwScaleFactor' V='Themed' F='Inh'/><Cell N='ShapeShdwBlur' V='Themed' F='Inh'/><Cell N='ShapeShdwShow' V='0' F='Inh'/><Cell N='LineGradientDir' V='Themed' F='Inh'/><Cell N='LineGradientAngle' V='Themed' F='Inh'/><Cell N='FillGradientDir' V='Themed' F='Inh'/><Cell N='FillGradientAngle' V='Themed' F='Inh'/><Cell N='LineGradientEnabled' V='0'/><Cell N='FillGradientEnabled' V='0'/><Cell N='RotateGradientWithShape' V='Themed' F='Inh'/><Cell N='UseGroupGradient' V='Themed' F='Inh'/><Cell N='LeftMargin' V='0.05555555555555555' U='PT' F='Inh'/><Cell N='RightMargin' V='0.05555555555555555' U='PT' F='Inh'/><Cell N='TopMargin' V='0'/><Cell N='BottomMargin' V='0'/><Cell N='VerticalAlign' V='2'/><Cell N='TextBkgnd' V='0' F='Inh'/><Cell N='DefaultTabStop' V='0.5' F='Inh'/><Cell N='TextDirection' V='0' F='Inh'/><Cell N='TextBkgndTrans' V='0' F='Inh'/><Cell N='NoObjHandles' V='0' F='Inh'/><Cell N='NonPrinting' V='1'/><Cell N='NoCtlHandles' V='0' F='Inh'/><Cell N='NoAlignBox' V='0' F='Inh'/><Cell N='UpdateAlignBox' V='0' F='Inh'/><Cell N='HideText' V='0' F='Inh'/><Cell N='DynFeedback' V='0' F='Inh'/><Cell N='GlueType' V='0' F='Inh'/><Cell N='WalkPreference' V='0' F='Inh'/><Cell N='BegTrigger' V='0' F='No Formula'/><Cell N='EndTrigger' V='0' F='No Formula'/><Cell N='ObjType' V='0' F='Inh'/><Cell N='Comment' V='' F='Inh'/><Cell N='IsDropSource' V='0' F='Inh'/><Cell N='NoLiveDynamics' V='0' F='Inh'/><Cell N='LocalizeMerge' V='0' F='Inh'/><Cell N='NoProofing' V='0' F='Inh'/><Cell N='Calendar' V='0' F='Inh'/><Cell N='LangID' V='en-US' F='Inh'/><Cell N='ShapeKeywords' V='' F='Inh'/><Cell N='DropOnPageScale' V='1' F='Inh'/><Cell N='ShapePermeableX' V='1'/><Cell N='ShapePermeableY' V='1'/><Cell N='ShapePermeablePlace' V='1'/><Cell N='Relationships' V='0' F='Inh'/><Cell N='ShapeFixedCode' V='0' F='Inh'/><Cell N='ShapePlowCode' V='0' F='Inh'/><Cell N='ShapeRouteStyle' V='0' F='Inh'/><Cell N='ShapePlaceStyle' V='0' F='Inh'/><Cell N='ConFixedCode' V='0' F='Inh'/><Cell N='ConLineJumpCode' V='0' F='Inh'/><Cell N='ConLineJumpStyle' V='0' F='Inh'/><Cell N='ConLineJumpDirX' V='0' F='Inh'/><Cell N='ConLineJumpDirY' V='0' F='Inh'/><Cell N='ShapePlaceFlip' V='0' F='Inh'/><Cell N='ConLineRouteExt' V='0' F='Inh'/><Cell N='ShapeSplit' V='0' F='Inh'/><Cell N='ShapeSplittable' V='0' F='Inh'/><Cell N='DisplayLevel' V='0' F='Inh'/><Section N='Character'><Row IX='0'><Cell N='Font' V='Themed' F='Inh'/><Cell N='Color' V='4'/><Cell N='Style' V='Themed' F='Inh'/><Cell N='Case' V='0' F='Inh'/><Cell N='Pos' V='0' F='Inh'/><Cell N='FontScale' V='1' F='Inh'/><Cell N='Size' V='0.125'/><Cell N='DblUnderline' V='0' F='Inh'/><Cell N='Overline' V='0' F='Inh'/><Cell N='Strikethru' V='0' F='Inh'/><Cell N='DoubleStrikethrough' V='0' F='Inh'/><Cell N='Letterspace' V='0' F='Inh'/><Cell N='ColorTrans' V='0' F='Inh'/><Cell N='AsianFont' V='Themed' F='Inh'/><Cell N='ComplexScriptFont' V='Themed' F='Inh'/><Cell N='ComplexScriptSize' V='-1' F='Inh'/><Cell N='LangID' V='en-US' F='Inh'/></Row></Section></StyleSheet><StyleSheet ID='6' NameU='Theme' IsCustomNameU='1' Name='Theme' IsCustomName='1' LineStyle='0' FillStyle='0' TextStyle='0'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LineWeight' V='Themed' F='THEMEVAL()'/><Cell N='LineColor' V='Themed' F='THEMEVAL()'/><Cell N='LinePattern' V='Themed' F='THEMEVAL()'/><Cell N='Rounding' V='Themed' F='THEMEVAL()'/><Cell N='EndArrowSize' V='2' F='Inh'/><Cell N='BeginArrow' V='0' F='Inh'/><Cell N='EndArrow' V='0' F='Inh'/><Cell N='LineCap' V='Themed' F='THEMEVAL()'/><Cell N='BeginArrowSize' V='2' F='Inh'/><Cell N='LineColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='CompoundType' V='Themed' F='THEMEVAL()'/><Cell N='FillForegnd' V='Themed' F='THEMEVAL()'/><Cell N='FillBkgnd' V='Themed' F='THEMEVAL()'/><Cell N='FillPattern' V='Themed' F='THEMEVAL()'/><Cell N='ShdwForegnd' V='Themed' F='THEMEVAL()'/><Cell N='ShdwPattern' V='Themed' F='THEMEVAL()'/><Cell N='FillForegndTrans' V='Themed' F='THEMEVAL()'/><Cell N='FillBkgndTrans' V='Themed' F='THEMEVAL()'/><Cell N='ShdwForegndTrans' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwType' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwOffsetX' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwOffsetY' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwObliqueAngle' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwScaleFactor' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwBlur' V='Themed' F='THEMEVAL()'/><Cell N='ShapeShdwShow' V='0' F='Inh'/><Cell N='LineGradientDir' V='Themed' F='THEMEVAL()'/><Cell N='LineGradientAngle' V='Themed' F='THEMEVAL()'/><Cell N='FillGradientDir' V='Themed' F='THEMEVAL()'/><Cell N='FillGradientAngle' V='Themed' F='THEMEVAL()'/><Cell N='LineGradientEnabled' V='Themed' F='THEMEVAL()'/><Cell N='FillGradientEnabled' V='Themed' F='THEMEVAL()'/><Cell N='RotateGradientWithShape' V='Themed' F='THEMEVAL()'/><Cell N='UseGroupGradient' V='Themed' F='THEMEVAL()'/><Cell N='BevelTopType' V='Themed' F='THEMEVAL()'/><Cell N='BevelTopWidth' V='Themed' F='THEMEVAL()'/><Cell N='BevelTopHeight' V='Themed' F='THEMEVAL()'/><Cell N='BevelBottomType' V='0' F='Inh'/><Cell N='BevelBottomWidth' V='0' F='Inh'/><Cell N='BevelBottomHeight' V='0' F='Inh'/><Cell N='BevelDepthColor' V='1' F='Inh'/><Cell N='BevelDepthSize' V='0' F='Inh'/><Cell N='BevelContourColor' V='Themed' F='THEMEVAL()'/><Cell N='BevelContourSize' V='Themed' F='THEMEVAL()'/><Cell N='BevelMaterialType' V='Themed' F='THEMEVAL()'/><Cell N='BevelLightingType' V='Themed' F='THEMEVAL()'/><Cell N='BevelLightingAngle' V='Themed' F='THEMEVAL()'/><Cell N='ReflectionTrans' V='Themed' F='THEMEVAL()'/><Cell N='ReflectionSize' V='Themed' F='THEMEVAL()'/><Cell N='ReflectionDist' V='Themed' F='THEMEVAL()'/><Cell N='ReflectionBlur' V='Themed' F='THEMEVAL()'/><Cell N='GlowColor' V='Themed' F='THEMEVAL()'/><Cell N='GlowColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GlowSize' V='Themed' F='THEMEVAL()'/><Cell N='SoftEdgesSize' V='Themed' F='THEMEVAL()'/><Cell N='SketchSeed' V='0' F='Inh'/><Cell N='SketchEnabled' V='Themed' F='THEMEVAL()'/><Cell N='SketchAmount' V='Themed' F='THEMEVAL()'/><Cell N='SketchLineWeight' V='Themed' F='THEMEVAL()'/><Cell N='SketchLineChange' V='Themed' F='THEMEVAL()'/><Cell N='SketchFillChange' V='Themed' F='THEMEVAL()'/><Cell N='QuickStyleLineColor' V='100'/><Cell N='QuickStyleFillColor' V='100'/><Cell N='QuickStyleShadowColor' V='100'/><Cell N='QuickStyleFontColor' V='100'/><Cell N='QuickStyleLineMatrix' V='100'/><Cell N='QuickStyleFillMatrix' V='100'/><Cell N='QuickStyleEffectsMatrix' V='100'/><Cell N='QuickStyleFontMatrix' V='100'/><Cell N='QuickStyleType' V='0' F='Inh'/><Cell N='QuickStyleVariation' V='0' F='Inh'/><Cell N='ColorSchemeIndex' V='65534'/><Cell N='EffectSchemeIndex' V='65534'/><Cell N='ConnectorSchemeIndex' V='65534'/><Cell N='FontSchemeIndex' V='65534'/><Cell N='ThemeIndex' V='65534'/><Cell N='VariationColorIndex' V='65534'/><Cell N='VariationStyleIndex' V='65534'/><Cell N='EmbellishmentIndex' V='65534'/><Section N='Character'><Row IX='0'><Cell N='Font' V='Themed' F='THEMEVAL()'/><Cell N='Color' V='Themed' F='THEMEVAL()'/><Cell N='Style' V='Themed' F='THEMEVAL()'/><Cell N='Case' V='0' F='Inh'/><Cell N='Pos' V='0' F='Inh'/><Cell N='FontScale' V='1' F='Inh'/><Cell N='Size' V='0.1666666666666667' F='Inh'/><Cell N='DblUnderline' V='0' F='Inh'/><Cell N='Overline' V='0' F='Inh'/><Cell N='Strikethru' V='0' F='Inh'/><Cell N='DoubleStrikethrough' V='0' F='Inh'/><Cell N='Letterspace' V='0' F='Inh'/><Cell N='ColorTrans' V='0' F='Inh'/><Cell N='AsianFont' V='Themed' F='THEMEVAL()'/><Cell N='ComplexScriptFont' V='Themed' F='THEMEVAL()'/><Cell N='ComplexScriptSize' V='-1' F='Inh'/><Cell N='LangID' V='en-US' F='Inh'/></Row></Section><Section N='FillGradient'><Row IX='0'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='1'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='2'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='3'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='4'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='5'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='6'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='7'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='8'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='9'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row></Section><Section N='LineGradient'><Row IX='0'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='1'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='2'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='3'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='4'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='5'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='6'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='7'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='8'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row><Row IX='9'><Cell N='GradientStopColor' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopColorTrans' V='Themed' F='THEMEVAL()'/><Cell N='GradientStopPosition' V='Themed' F='THEMEVAL()'/></Row></Section></StyleSheet><StyleSheet ID='7' NameU='Connector' IsCustomNameU='1' Name='Connector' IsCustomName='1' LineStyle='3' FillStyle='3' TextStyle='3'><Cell N='EnableLineProps' V='1'/><Cell N='EnableFillProps' V='1'/><Cell N='EnableTextProps' V='1'/><Cell N='HideForApply' V='0'/><Cell N='LeftMargin' V='0.05555555555555555' U='PT' F='Inh'/><Cell N='RightMargin' V='0.05555555555555555' U='PT' F='Inh'/><Cell N='TopMargin' V='0.05555555555555555' U='PT' F='Inh'/><Cell N='BottomMargin' V='0.05555555555555555' U='PT' F='Inh'/><Cell N='VerticalAlign' V='1' F='Inh'/><Cell N='TextBkgnd' V='#ffffff' F='THEMEGUARD(THEMEVAL(\"BackgroundColor\")+1)'/><Cell N='DefaultTabStop' V='0.5' F='Inh'/><Cell N='TextDirection' V='0' F='Inh'/><Cell N='TextBkgndTrans' V='0' F='Inh'/><Cell N='NoObjHandles' V='0' F='Inh'/><Cell N='NonPrinting' V='0' F='Inh'/><Cell N='NoCtlHandles' V='0' F='Inh'/><Cell N='NoAlignBox' V='0' F='Inh'/><Cell N='UpdateAlignBox' V='0' F='Inh'/><Cell N='HideText' V='0' F='Inh'/><Cell N='DynFeedback' V='0' F='Inh'/><Cell N='GlueType' V='0' F='Inh'/><Cell N='WalkPreference' V='0' F='Inh'/><Cell N='BegTrigger' V='0' F='No Formula'/><Cell N='EndTrigger' V='0' F='No Formula'/><Cell N='ObjType' V='0' F='Inh'/><Cell N='Comment' V='' F='Inh'/><Cell N='IsDropSource' V='0' F='Inh'/><Cell N='NoLiveDynamics' V='0' F='Inh'/><Cell N='LocalizeMerge' V='0' F='Inh'/><Cell N='NoProofing' V='0' F='Inh'/><Cell N='Calendar' V='0' F='Inh'/><Cell N='LangID' V='en-US' F='Inh'/><Cell N='ShapeKeywords' V='' F='Inh'/><Cell N='DropOnPageScale' V='1' F='Inh'/><Cell N='QuickStyleLineColor' V='100'/><Cell N='QuickStyleFillColor' V='100'/><Cell N='QuickStyleShadowColor' V='100'/><Cell N='QuickStyleFontColor' V='100'/><Cell N='QuickStyleLineMatrix' V='1'/><Cell N='QuickStyleFillMatrix' V='1'/><Cell N='QuickStyleEffectsMatrix' V='1'/><Cell N='QuickStyleFontMatrix' V='1'/><Cell N='QuickStyleType' V='0'/><Cell N='QuickStyleVariation' V='0'/><Cell N='LineWeight' V='Themed' F='Inh'/><Cell N='LineColor' V='Themed' F='Inh'/><Cell N='LinePattern' V='Themed' F='Inh'/><Cell N='Rounding' V='Themed' F='Inh'/><Cell N='EndArrowSize' V='Themed' F='THEMEVAL()'/><Cell N='BeginArrow' V='Themed' F='THEMEVAL()'/><Cell N='EndArrow' V='Themed' F='THEMEVAL()'/><Cell N='LineCap' V='Themed' F='Inh'/><Cell N='BeginArrowSize' V='Themed' F='THEMEVAL()'/><Cell N='LineColorTrans' V='Themed' F='Inh'/><Cell N='CompoundType' V='Themed' F='Inh'/><Section N='Character'><Row IX='0'><Cell N='Font' V='Themed' F='Inh'/><Cell N='Color' V='Themed' F='Inh'/><Cell N='Style' V='Themed' F='Inh'/><Cell N='Case' V='0' F='Inh'/><Cell N='Pos' V='0' F='Inh'/><Cell N='FontScale' V='1' F='Inh'/><Cell N='Size' V='0.1111111111111111'/><Cell N='DblUnderline' V='0' F='Inh'/><Cell N='Overline' V='0' F='Inh'/><Cell N='Strikethru' V='0' F='Inh'/><Cell N='DoubleStrikethrough' V='0' F='Inh'/><Cell N='Letterspace' V='0' F='Inh'/><Cell N='ColorTrans' V='0' F='Inh'/><Cell N='AsianFont' V='Themed' F='Inh'/><Cell N='ComplexScriptFont' V='Themed' F='Inh'/><Cell N='ComplexScriptSize' V='-1' F='Inh'/><Cell N='LangID' V='en-US' F='Inh'/></Row></Section></StyleSheet></StyleSheets><DocumentSheet NameU='TheDoc' IsCustomNameU='1' Name='TheDoc' IsCustomName='1' LineStyle='0' FillStyle='0' TextStyle='0'><Cell N='OutputFormat' V='0'/><Cell N='LockPreview' V='0'/><Cell N='AddMarkup' V='0'/><Cell N='ViewMarkup' V='0'/><Cell N='DocLockReplace' V='0' U='BOOL'/><Cell N='NoCoauth' V='0' U='BOOL'/><Cell N='DocLockDuplicatePage' V='0' U='BOOL'/><Cell N='PreviewQuality' V='0'/><Cell N='PreviewScope' V='0'/><Cell N='DocLangID' V='en-US'/><Section N='User'><Row N='msvNoAutoConnect'><Cell N='Value' V='1'/><Cell N='Prompt' V='' F='No Formula'/></Row></Section></DocumentSheet></VisioDocument>",
26			"visio/windows.xml" : "<?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' />",
27			"visio/_rels/document.xml.rels" : "<?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>",
28			"visio/masters/_rels/masters.xml.rels" : '<?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/master" Target="master1.xml"/></Relationships>',
29			"visio/masters/masters.xml" : "<?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'><Master ID='4' NameU='Dynamic connector' IsCustomNameU='1' Name='Dynamic connector' IsCustomName='1' Prompt='This connector automatically routes between the shapes it connects.' IconSize='1' AlignName='2' MatchByName='1' IconUpdate='0' UniqueID='{002A9108-0000-0000-8E40-00608CF305B2}' BaseID='{F7290A45-E3AD-11D2-AE4F-006008C9F5A9}' PatternFlags='0' Hidden='0' MasterType='0'><PageSheet LineStyle='0' FillStyle='0' TextStyle='0'><Cell N='PageWidth' V='3'/><Cell N='PageHeight' V='3'/><Cell N='ShdwOffsetX' V='0.125'/><Cell N='ShdwOffsetY' V='-0.125'/><Cell N='PageScale' V='1' U='IN_F'/><Cell N='DrawingScale' V='1' U='IN_F'/><Cell N='DrawingSizeType' V='4'/><Cell N='DrawingScaleType' V='0'/><Cell N='InhibitSnap' V='0'/><Cell N='PageLockReplace' V='0' U='BOOL'/><Cell N='PageLockDuplicate' V='0' U='BOOL'/><Cell N='UIVisibility' V='0'/><Cell N='ShdwType' V='0'/><Cell N='ShdwObliqueAngle' V='0'/><Cell N='ShdwScaleFactor' V='1'/><Cell N='DrawingResizeType' V='0'/><Section N='Layer'><Row IX='0'><Cell N='Name' V='Connector'/><Cell N='Color' V='255'/><Cell N='Status' V='0'/><Cell N='Visible' V='1'/><Cell N='Print' V='1'/><Cell N='Active' V='0'/><Cell N='Lock' V='0'/><Cell N='Snap' V='1'/><Cell N='Glue' V='1'/><Cell N='NameUniv' V='Connector'/><Cell N='ColorTrans' V='0'/></Row></Section></PageSheet><Rel r:id='rId1'/></Master></Masters>",
30			"visio/masters/master1.xml" : "<?xml version='1.0' encoding='utf-8' ?><MasterContents xmlns='http://schemas.microsoft.com/office/visio/2012/main' xmlns:r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' xml:space='preserve'><Shapes><Shape ID='5' OriginalID='0' Type='Shape' LineStyle='7' FillStyle='7' TextStyle='7'><Cell N='PinX' V='1.5' F='GUARD((BeginX+EndX)/2)'/><Cell N='PinY' V='1.5' F='GUARD((BeginY+EndY)/2)'/><Cell N='Width' V='1' F='GUARD(EndX-BeginX)'/><Cell N='Height' V='-1' F='GUARD(EndY-BeginY)'/><Cell N='LocPinX' V='0.5' F='GUARD(Width*0.5)'/><Cell N='LocPinY' V='-0.5' F='GUARD(Height*0.5)'/><Cell N='Angle' V='0' F='GUARD(0DA)'/><Cell N='FlipX' V='0' F='GUARD(FALSE)'/><Cell N='FlipY' V='0' F='GUARD(FALSE)'/><Cell N='ResizeMode' V='0'/><Cell N='BeginX' V='1'/><Cell N='BeginY' V='2'/><Cell N='EndX' V='2'/><Cell N='EndY' V='1'/><Cell N='TxtPinX' V='0' F='SETATREF(Controls.TextPosition)'/><Cell N='TxtPinY' V='-1' F='SETATREF(Controls.TextPosition.Y)'/><Cell N='TxtWidth' V='0.5555555555555556' F='MAX(TEXTWIDTH(TheText),5*Char.Size)'/><Cell N='TxtHeight' V='0.2444444444444444' F='TEXTHEIGHT(TheText,TxtWidth)'/><Cell N='TxtLocPinX' V='0.2777777777777778' F='TxtWidth*0.5'/><Cell N='TxtLocPinY' V='0.1222222222222222' F='TxtHeight*0.5'/><Cell N='TxtAngle' V='0'/><Cell N='LockHeight' V='1'/><Cell N='LockCalcWH' V='1'/><Cell N='HelpTopic' V='Vis_SE.chm!#20000'/><Cell N='Copyright' V='Copyright 2001 Microsoft Corporation.  All rights reserved.'/><Cell N='NoAlignBox' V='1'/><Cell N='DynFeedback' V='2'/><Cell N='GlueType' V='2'/><Cell N='ObjType' V='2'/><Cell N='NoLiveDynamics' V='1'/><Cell N='ShapeSplittable' V='1'/><Cell N='LayerMember' V='0'/><Section N='Control'><Row N='TextPosition'><Cell N='X' V='0'/><Cell N='Y' V='-1'/><Cell N='XDyn' V='0' F='Controls.TextPosition'/><Cell N='YDyn' V='-1' F='Controls.TextPosition.Y'/><Cell N='XCon' V='5' F='IF(OR(STRSAME(SHAPETEXT(TheText),\"\"),HideText),5,0)'/><Cell N='YCon' V='0'/><Cell N='CanGlue' V='0'/><Cell N='Prompt' V='Reposition Text'/></Row></Section><Section N='Geometry' IX='0'><Cell N='NoFill' V='1'/><Cell N='NoLine' V='0'/><Cell N='NoShow' V='0'/><Cell N='NoSnap' V='0'/><Cell N='NoQuickDrag' V='0'/><Row T='MoveTo' IX='1'><Cell N='X' V='0'/><Cell N='Y' V='0'/></Row><Row T='LineTo' IX='2'><Cell N='X' V='0'/><Cell N='Y' V='-1'/></Row></Section></Shape></Shapes></MasterContents>"
31		};
32
33		for (var id in files)
34		{
35			if (pageCount > 1 && id == that.CONTENT_TYPES_XML)
36			{
37				//Add the remaining pages
38				var doc = mxUtils.parseXml(files[id]);
39				var root = doc.documentElement;
40
41				var children = root.children;
42				var page1 = null;
43
44				for (var i = 0; i < children.length; i++)
45				{
46					var child = children[i];
47					if ("/visio/pages/page1.xml" == child.getAttribute(that.PART_NAME))
48					{
49						page1 = child;
50					}
51				}
52
53				for (var i = 2; i <= pageCount; i++)
54				{
55					var newPage = page1.cloneNode();
56		    		newPage.setAttribute(that.PART_NAME, "/visio/pages/page" + i + ".xml");
57		    		root.appendChild(newPage);
58		    	}
59
60		    	writeXmlDoc2Zip(zip, id, doc, true);
61		    }
62		    else
63		    {
64			    zip.file(id, files[id]);
65		    }
66	    }
67	};
68
69	function createElt(doc, ns, name)
70	{
71		return (doc.createElementNS != null) ? doc.createElementNS(ns, name) : doc.createElement(name);
72	};
73
74	function getCellVsdxId(cellId)
75	{
76		var vsdxId = idsMap[cellId];
77
78		if (vsdxId == null)
79		{
80			vsdxId = idsCounter++;
81			idsMap[cellId] = vsdxId;
82		}
83		return vsdxId;
84	};
85
86	function getGraphAttributes(graph)
87	{
88		var attr = {};
89
90		try
91		{
92			//This doesn't work when pageView is off
93//			// Computes the horizontal and vertical page count
94//			var bounds = graph.getGraphBounds();
95//			var sc = graph.view.scale;
96//			var bgBounds = graph.view.getBackgroundPageBounds();
97//
98//			var x0 = Math.round((bounds.x - bgBounds.x) / sc);
99//			var y0 = Math.round((bounds.y - bgBounds.y) / sc);
100//
101//			var hpages = Math.max(1, Math.ceil((bounds.width / sc  + x0) / graph.pageFormat.width));
102//			var vpages = Math.max(1, Math.ceil((bounds.height / sc + y0) / graph.pageFormat.height));
103
104			// Computes the horizontal and vertical page count
105			var bounds = graph.getGraphBounds().clone();
106			var sc = graph.view.scale;
107			var tr = graph.view.translate;
108
109			var x0 = Math.round(bounds.x / sc) - tr.x;
110			var y0 = Math.round(bounds.y / sc) - tr.y;
111
112			// Store the available page area
113			var availableWidth = graph.pageFormat.width;
114			var availableHeight = graph.pageFormat.height;
115
116			if (x0 < 0)
117			{
118				x0 += Math.ceil((tr.x - bounds.x / sc) / availableWidth) * availableWidth;
119			}
120
121			if (y0 < 0)
122			{
123				y0 += Math.ceil((tr.y - bounds.y / sc) / availableHeight) * availableHeight;
124			}
125
126			var hpages = Math.max(1, Math.ceil((bounds.width / sc  + x0) / availableWidth));
127			var vpages = Math.max(1, Math.ceil((bounds.height / sc + y0) / availableHeight));
128
129			attr['gridEnabled'] = graph.gridEnabled;
130			attr['gridSize'] = graph.gridSize;
131			attr['guidesEnabled'] = graph.graphHandler.guidesEnabled
132			attr['pageVisible'] = graph.pageVisible;
133			attr['pageScale'] = graph.pageScale;
134			attr['pageWidth'] = graph.pageFormat.width * hpages;
135			attr['pageHeight'] = graph.pageFormat.height * vpages;
136			attr['backgroundClr'] = graph.background;
137			attr['mathEnabled'] = graph.mathEnabled;
138			attr['shadowVisible'] = graph.shadowVisible;
139		}
140		catch(e)
141		{
142			//nothing
143		}
144		return attr;
145	};
146
147	function createCellElemScaled(name, val, xmlDoc, formula)
148	{
149		return createCellElem(name, val / that.CONVERSION_FACTOR, xmlDoc, formula);
150	};
151
152	function createCellElem(name, val, xmlDoc, formula)
153	{
154		var cell = createElt(xmlDoc, that.XMLNS, "Cell");
155		cell.setAttribute("N", name);
156		cell.setAttribute("V", val);
157
158		if (formula) cell.setAttribute("F", formula);
159
160		return cell;
161	};
162
163	function createRow(type, index, x, y, xmlDoc)
164	{
165		var row = createElt(xmlDoc, that.XMLNS, "Row");
166		row.setAttribute("T", type);
167		row.setAttribute("IX", index);
168		row.appendChild(createCellElemScaled("X", x, xmlDoc));
169		row.appendChild(createCellElemScaled("Y", y, xmlDoc));
170		return row;
171	};
172
173	function applyMxCellStyle(state, shape, xmlDoc)
174	{
175		var fillClr = state.style[mxConstants.STYLE_FILLCOLOR];
176
177		if (!fillClr || fillClr == "none")
178		{
179			shape.appendChild(createCellElem("FillPattern", 0, xmlDoc));
180		}
181		else
182		{
183			shape.appendChild(createCellElem("FillForegnd", fillClr, xmlDoc));
184			var gradClr = state.style[mxConstants.STYLE_GRADIENTCOLOR];
185
186			if (gradClr && gradClr != "none")
187			{
188				shape.appendChild(createCellElem("FillBkgnd", gradClr, xmlDoc));
189
190				var gradDir = state.style[mxConstants.STYLE_GRADIENT_DIRECTION];
191				var dir = 28;
192
193				if (gradDir)
194				{
195					switch(gradDir)
196					{
197						case mxConstants.DIRECTION_EAST:
198							dir = 25;
199						break
200						case mxConstants.DIRECTION_WEST:
201							dir = 27;
202						break
203						case mxConstants.DIRECTION_NORTH:
204							dir = 30;
205						break
206					}
207				}
208				shape.appendChild(createCellElem("FillPattern", dir, xmlDoc));
209			}
210		}
211
212		var strokeClr = state.style[mxConstants.STYLE_STROKECOLOR];
213
214		if (!strokeClr || strokeClr == "none")
215			shape.appendChild(createCellElem("LinePattern", 0, xmlDoc));
216		else
217			shape.appendChild(createCellElem("LineColor", strokeClr, xmlDoc));
218
219		var strokeW = state.style[mxConstants.STYLE_STROKEWIDTH];
220		if (strokeW) shape.appendChild(createCellElemScaled("LineWeight", strokeW, xmlDoc));
221
222
223		var opacity = state.style[mxConstants.STYLE_OPACITY];
224		var fillOpaq;
225		var strkOpaq;
226
227		if (opacity)
228		{
229			fillOpaq = opacity;
230			strkOpaq = opacity;
231		}
232		else
233		{
234			fillOpaq = state.style[mxConstants.STYLE_FILL_OPACITY];
235			strkOpaq = state.style[mxConstants.STYLE_STROKE_OPACITY];
236		}
237
238		if (fillOpaq) shape.appendChild(createCellElem("FillForegndTrans", 1 - parseInt(fillOpaq)/100.0, xmlDoc));
239		if (strkOpaq) shape.appendChild(createCellElem("LineColorTrans", 1 - parseInt(strkOpaq)/100.0, xmlDoc));
240
241		var isDashed = state.style[mxConstants.STYLE_DASHED];
242
243		if (isDashed == 1)
244		{
245			var dashPatrn = state.style[mxConstants.STYLE_DASH_PATTERN];
246			var pattern = 9
247
248			if (dashPatrn)
249			{
250				//We only support the patterns of draw.io UI
251				switch(dashPatrn)
252				{
253					case "1 1":
254						pattern = 10;
255					break;
256					case "1 2":
257						pattern = 3;
258					break;
259					case "1 4":
260						pattern = 17;
261					break;
262				}
263			}
264
265			shape.appendChild(createCellElem("LinePattern", pattern, xmlDoc));
266		}
267
268		var hasShadow = state.style[mxConstants.STYLE_SHADOW];
269
270		if (hasShadow == 1)
271		{
272			shape.appendChild(createCellElem("ShdwPattern", 1, xmlDoc));
273			shape.appendChild(createCellElem("ShdwForegnd", '#000000', xmlDoc));
274			shape.appendChild(createCellElem("ShdwForegndTrans", 0.6, xmlDoc));
275			shape.appendChild(createCellElem("ShapeShdwType", 1, xmlDoc));
276			shape.appendChild(createCellElem("ShapeShdwOffsetX", '0.02946278254943948', xmlDoc));
277			shape.appendChild(createCellElem("ShapeShdwOffsetY", '-0.02946278254943948', xmlDoc));
278			shape.appendChild(createCellElem("ShapeShdwScaleFactor", '1', xmlDoc));
279			shape.appendChild(createCellElem("ShapeShdwBlur", '0.05555555555555555', xmlDoc));
280			shape.appendChild(createCellElem("ShapeShdwShow", 2, xmlDoc));
281		}
282
283		//Probably we don't need margins as the canvas get the modified position?
284	/*
285		var topMargin = state.style[mxConstants.STYLE_SPACING_TOP];
286		if (topMargin) shape.appendChild(createCellElemScaled("TopMargin", parseFloat(topMargin) * 2 + 2.8 , xmlDoc));
287
288/*		//Defines label bottom spacing
289		double bottomMargin = getBottomSpacing() * 100/100;
290
291		if (bottomMargin != 0)
292		{
293			styleMap.put(mxConstants.STYLE_SPACING_BOTTOM, Double.toString(bottomMargin));
294		}
295
296		//Defines label left spacing
297		double leftMargin = getLeftSpacing() * 100/100;
298
299		if (leftMargin != 0)
300		{
301			styleMap.put(mxConstants.STYLE_SPACING_LEFT, Double.toString(leftMargin));
302		}
303
304		//Defines label right spacing
305		double rightMargin = getRightSpacing() * 100/100;
306
307		if(rightMargin !=0)
308		{
309			styleMap.put(mxConstants.STYLE_SPACING_RIGHT, Double.toString(rightMargin));
310		}*/
311
312		//Direction is not clear that we need it
313		/*
314		var direction = state.style[mxConstants.STYLE_DIRECTION];
315
316		if (direction != mxConstants.DIRECTION_EAST)
317		{
318			styleMap.put(mxConstants.STYLE_DIRECTION, direction);
319		}
320		*/
321
322		var flibX = state.style[mxConstants.STYLE_FLIPH];
323		if (flibX == 1) shape.appendChild(createCellElem("FlipX", 1, xmlDoc));
324
325		var flibY = state.style[mxConstants.STYLE_FLIPV];
326		if (flibY == 1) shape.appendChild(createCellElem("FlipY", 1, xmlDoc));
327
328		var rounded = state.style[mxConstants.STYLE_ROUNDED];
329		if (rounded == 1) shape.appendChild(createCellElemScaled("Rounding", state.cell.geometry.width*0.1, xmlDoc));
330
331		//TODO for some reason, visio doesn't show the label (text) background color!
332		//May be we need mxSvgCanvas2D.prototype.addTextBackground = function(node, str, x, y, w, h, align, valign, overflow)
333		var lbkgnd = state.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR];
334		if (lbkgnd) shape.appendChild(createCellElem("TextBkgnd", lbkgnd, xmlDoc));
335	};
336
337	function createShape(id, geo, layerIndex, xmlDoc, parentHeight, isChild)
338	{
339		var shape = createElt(xmlDoc, that.XMLNS, "Shape");
340
341		shape.setAttribute("ID", id);
342		shape.setAttribute("NameU", "Shape" + id);
343		shape.setAttribute("LineStyle", "0");
344		shape.setAttribute("FillStyle", "0");
345		shape.setAttribute("TextStyle", "0");
346
347		var hw = geo.width/2, hh = geo.height/2;
348
349		shape.appendChild(createCellElemScaled("PinX", geo.x + hw + (isChild? 0 : vsdxCanvas.shiftX), xmlDoc));
350		shape.appendChild(createCellElemScaled("PinY", parentHeight - geo.y - hh - (isChild? 0 : vsdxCanvas.shiftY), xmlDoc));
351		shape.appendChild(createCellElemScaled("Width", geo.width, xmlDoc));
352		shape.appendChild(createCellElemScaled("Height", geo.height, xmlDoc));
353		shape.appendChild(createCellElemScaled("LocPinX", hw, xmlDoc));
354		shape.appendChild(createCellElemScaled("LocPinY", hh, xmlDoc));
355		shape.appendChild(createCellElem("LayerMember", layerIndex + "", xmlDoc));
356
357		return shape;
358	};
359
360	function getArrowType(arrow, isFilled)
361	{
362		isFilled = isFilled == null? "1" : isFilled;
363		arrow = arrow == null? "none" : arrow;
364		var key = arrow + "|" + isFilled;
365		var type = that.ARROWS_MAP[key];
366		if (type != null)
367			return type;
368		else
369			return 1;
370	};
371
372	function getArrowSize(size)
373	{
374		if (size == null) return 2;
375
376		if (size <=2)
377			return 0;
378		else if (size <= 3)
379			return 1;
380		else if (size <= 5)
381			return 2;
382		else if (size <= 7)
383			return 3;
384		else if (size <= 9)
385			return 4;
386		else if (size <= 22)
387			return 5;
388		else
389			return 6;
390	};
391
392	function createEdge(cell, layerIndex, graph, xmlDoc, parentHeight, isChild)
393	{
394		var state = graph.view.getState(cell, true);
395
396		if (state == null || state.absolutePoints == null || state.cellBounds == null)
397		{
398			return null;
399		}
400
401		var shape = createElt(xmlDoc, that.XMLNS, "Shape");
402		var vsdxId = getCellVsdxId(cell.id);
403		shape.setAttribute("ID", vsdxId);
404		shape.setAttribute("NameU", "Dynamic connector." + vsdxId);
405		shape.setAttribute("Name", "Dynamic connector." + vsdxId);
406		shape.setAttribute("Type", "Shape");
407		shape.setAttribute("Master", "4"); //Dynamic Connector Master
408
409		var s = vsdxCanvas.state;
410		var points = state.absolutePoints;
411		var bounds = state.cellBounds;
412
413		var hw = bounds.width/2, hh = bounds.height/2;
414
415		shape.appendChild(createCellElemScaled("PinX", bounds.x + hw + (isChild? 0 : vsdxCanvas.shiftX), xmlDoc));
416		shape.appendChild(createCellElemScaled("PinY", parentHeight - bounds.y - hh - (isChild? 0 : vsdxCanvas.shiftY), xmlDoc));
417		shape.appendChild(createCellElemScaled("Width", bounds.width, xmlDoc));
418		shape.appendChild(createCellElemScaled("Height", bounds.height, xmlDoc));
419		shape.appendChild(createCellElemScaled("LocPinX", hw, xmlDoc));
420		shape.appendChild(createCellElemScaled("LocPinY", hh, xmlDoc));
421
422		vsdxCanvas.newEdge(shape, state, xmlDoc);
423
424		var calcVsdxPoint = function(p, noHeight, withoutShift)
425		{
426			var x = p.x, y = p.y;
427			x = x * s.scale - bounds.x + s.dx + (withoutShift || isChild? 0 : vsdxCanvas.shiftX);
428			y = (noHeight? 0 : bounds.height) - y * s.scale + bounds.y - s.dy - (withoutShift || isChild? 0 : vsdxCanvas.shiftY);
429			return {x: x, y: y};
430		};
431
432		var p0 = calcVsdxPoint(points[0], true);
433
434		//Formula is used to make the edge dynamic
435		shape.appendChild(createCellElemScaled("BeginX", bounds.x + p0.x, xmlDoc, "_WALKGLUE(BegTrigger,EndTrigger,WalkPreference)"));
436		shape.appendChild(createCellElemScaled("BeginY", parentHeight - bounds.y + p0.y, xmlDoc, "_WALKGLUE(BegTrigger,EndTrigger,WalkPreference)"));
437
438		var pe = calcVsdxPoint(points[points.length - 1], true);
439
440		//Formula is used to make the edge dynamic
441		shape.appendChild(createCellElemScaled("EndX", bounds.x + pe.x, xmlDoc, "_WALKGLUE(EndTrigger,BegTrigger,WalkPreference)"));
442		shape.appendChild(createCellElemScaled("EndY", parentHeight - bounds.y + pe.y, xmlDoc, "_WALKGLUE(EndTrigger,BegTrigger,WalkPreference)"));
443
444		//Formula is used to make the edge dynamic (specify source id and target id)
445		shape.appendChild(createCellElem("BegTrigger", "2", xmlDoc, cell.source? "_XFTRIGGER(Sheet."+ getCellVsdxId(cell.source.id) +"!EventXFMod)" : null));
446		shape.appendChild(createCellElem("EndTrigger", "2", xmlDoc, cell.target? "_XFTRIGGER(Sheet."+ getCellVsdxId(cell.target.id) +"!EventXFMod)" : null));
447		shape.appendChild(createCellElem("ConFixedCode", "6", xmlDoc));
448		shape.appendChild(createCellElem("LayerMember", layerIndex + "", xmlDoc));
449
450		applyMxCellStyle(state, shape, xmlDoc);
451
452		//Edge special styles
453		var startFill =  state.style[mxConstants.STYLE_STARTFILL];
454		var startArrow = state.style[mxConstants.STYLE_STARTARROW];
455		var startSize =  state.style[mxConstants.STYLE_STARTSIZE];
456
457		var type = getArrowType(startArrow, startFill);
458		shape.appendChild(createCellElem("BeginArrow", type, xmlDoc));
459		shape.appendChild(createCellElem("BeginArrowSize", getArrowSize(startSize), xmlDoc));
460
461		var endFill =  state.style[mxConstants.STYLE_ENDFILL];
462		var endArrow = state.style[mxConstants.STYLE_ENDARROW];
463		var endSize =  state.style[mxConstants.STYLE_ENDSIZE];
464
465		var type = getArrowType(endArrow, endFill);
466		shape.appendChild(createCellElem("EndArrow", type, xmlDoc));
467		shape.appendChild(createCellElem("EndArrowSize", getArrowSize(endSize), xmlDoc));
468
469		//Draw text first to have its shape cell elements before visio geo.
470		if (state.text != null && state.text.checkBounds())
471		{
472			vsdxCanvas.save();
473			state.text.paint(vsdxCanvas);
474			vsdxCanvas.restore();
475		}
476
477		var geoSec = createElt(xmlDoc, that.XMLNS, "Section");
478
479		geoSec.setAttribute("N", "Geometry");
480		geoSec.setAttribute("IX", "0");
481
482		for (var i = 0; i < points.length; i++)
483		{
484			var p = calcVsdxPoint(points[i], false, true);
485			geoSec.appendChild(createRow(i==0 ? "MoveTo" : "LineTo", (i + 1), p.x, p.y, xmlDoc));
486		}
487
488		geoSec.appendChild(createCellElem("NoFill", "1", xmlDoc));
489		geoSec.appendChild(createCellElem("NoLine", "0", xmlDoc));
490		shape.appendChild(geoSec);
491
492		return shape;
493	};
494
495	function convertMxCell2Shape(cell, layerIndex, graph, xmlDoc, parentHeight, parentGeo, isChild)
496	{
497		var geo = cell.geometry, origGeo = geo;
498
499		if (geo != null)
500		{
501		  try
502		  {
503			//fix relative geo coordinates
504			if (geo.relative && parentGeo)
505			{
506				origGeo = geo.clone();
507				geo.x *= parentGeo.width;
508				geo.y *= parentGeo.height;
509
510				if (cell.vertex && geo.offset != null)
511				{
512					geo.x += geo.offset.x;
513					geo.y += geo.offset.y;
514				}
515
516				geo.relative = 0;
517			}
518
519			var vsdxId = getCellVsdxId(cell.id);
520
521			if (!cell.treatAsSingle && cell.getChildCount() > 0) //Group
522			{
523				//Create group shape as an empty shape with no geo
524				var shape = createShape(vsdxId + "10000", geo, layerIndex, xmlDoc, parentHeight, isChild);
525				shape.setAttribute("Type", "Group");
526
527				//Create group shape
528				var gShapes = createElt(xmlDoc, that.XMLNS, "Shapes");
529
530				//translate the canvas using the group coordinates
531				vsdxCanvas.save();
532				vsdxCanvas.translate(-geo.x, -geo.y);
533
534				//Draw the actual group shape as a child (so change its geo coord to 0,0).
535				//	In mxGraph group shape can have styles and stencil
536				var newGeo = geo.clone();
537				newGeo.x = 0;
538				newGeo.y = 0;
539				cell.setGeometry(newGeo);
540				cell.treatAsSingle = true;
541				var subShape = convertMxCell2Shape(cell, layerIndex, graph, xmlDoc, geo.height, geo, true);
542				delete cell.treatAsSingle;
543				cell.setGeometry(geo);
544
545				if (subShape != null)
546				{
547					gShapes.appendChild(subShape);
548				}
549
550				//add group children
551				for (var i = 0; i < cell.getChildCount(); i++)
552				{
553					var child = cell.children[i];
554
555					var subShape = convertMxCell2Shape(child, layerIndex, graph, xmlDoc, geo.height, geo, true);
556
557					if (subShape != null)
558					{
559						gShapes.appendChild(subShape);
560					}
561				}
562
563				shape.appendChild(gShapes);
564
565				//restore the canvas to before group translation
566				vsdxCanvas.restore();
567
568				return shape;
569			}
570			else if (cell.vertex)
571			{
572
573				var shape = createShape(vsdxId, geo, layerIndex, xmlDoc, parentHeight, isChild);
574
575				var state = graph.view.getState(cell, true);
576
577				applyMxCellStyle(state, shape, xmlDoc);
578
579				vsdxCanvas.newShape(shape, state, xmlDoc);
580
581				//Draw text first to have its shape cell elements before visio geo.
582				if (state.text != null && state.text.checkBounds())
583				{
584					vsdxCanvas.save();
585					state.text.paint(vsdxCanvas);
586					vsdxCanvas.restore();
587				}
588				if (state.shape != null && state.shape.checkBounds())
589				{
590					vsdxCanvas.save();
591					state.shape.paint(vsdxCanvas);
592					vsdxCanvas.restore();
593				}
594
595				shape.appendChild(vsdxCanvas.getShapeGeo());
596
597				vsdxCanvas.endShape();
598				shape.setAttribute("Type", vsdxCanvas.getShapeType());
599
600				return shape;
601			}
602			else
603			{
604				return createEdge(cell, layerIndex, graph, xmlDoc, parentHeight, isChild);
605			}
606		  }
607		  finally
608		  {
609			cell.geometry = origGeo;
610		  }
611		}
612		else
613		{
614			return null;
615		}
616	};
617
618
619	function convertMxModel2Page(graph, modelAttrib)
620	{
621        var xmlDoc = mxUtils.createXmlDocument();
622
623        var root = createElt(xmlDoc, that.XMLNS, "PageContents");
624
625        root.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', that.XMLNS);
626        root.setAttributeNS('http://www.w3.org/2000/xmlns/', "xmlns:r", that.XMLNS_R);
627
628        var shapes = createElt(xmlDoc, that.XMLNS, "Shapes");
629        root.appendChild(shapes);
630
631        var model = graph.model;
632
633		var t = graph.view.translate;
634		var s = graph.view.scale;
635		var bounds = graph.getGraphBounds();
636
637		vsdxCanvas.shiftX = 0; vsdxCanvas.shiftY = 0;
638		//-ve pages
639		if (bounds.x / s < t.x || bounds.y / s < t.y)
640		{
641			vsdxCanvas.shiftX = Math.ceil((t.x - bounds.x / s) / graph.pageFormat.width) * graph.pageFormat.width;
642			vsdxCanvas.shiftY = Math.ceil((t.y - bounds.y / s) / graph.pageFormat.height) * graph.pageFormat.height;
643		}
644
645		vsdxCanvas.save();
646		vsdxCanvas.translate(-t.x, -t.y);
647		vsdxCanvas.scale(1 / s);
648		vsdxCanvas.newPage();
649
650		var layers = graph.model.getChildCells(graph.model.root);
651		var layerIdsMaps = {};
652
653		for (var k = 0; k < layers.length; k++)
654		{
655			layerIdsMaps[layers[k].id] = k;
656		}
657
658		for (var id in model.cells)
659		{
660			var cell = model.cells[id];
661			//top-most cells
662			var layerIndex = cell.parent != null? layerIdsMaps[cell.parent.id] : null;
663
664			if (layerIndex != null)
665			{
666				var shape = convertMxCell2Shape(cell, layerIndex, graph, xmlDoc, modelAttrib.pageHeight);
667
668				if (shape != null)
669					shapes.appendChild(shape);
670			}
671		}
672
673        var connects = createElt(xmlDoc, that.XMLNS, "Connects");
674        root.appendChild(connects);
675
676        //Second pass to add edges (connections)
677		for (var id in model.cells)
678		{
679			var cell = model.cells[id];
680
681			if (cell.edge)
682			{
683				if (cell.source)
684				{
685					var connect = createElt(xmlDoc, that.XMLNS, "Connect");
686					connect.setAttribute("FromSheet", getCellVsdxId(cell.id));
687					connect.setAttribute("FromCell", "BeginX");
688					connect.setAttribute("ToSheet", getCellVsdxId(cell.source.id));
689					connects.appendChild(connect);
690				}
691
692				if (cell.target)
693				{
694					var connect = createElt(xmlDoc, that.XMLNS, "Connect");
695					connect.setAttribute("FromSheet", getCellVsdxId(cell.id));
696					connect.setAttribute("FromCell", "EndX");
697					connect.setAttribute("ToSheet", getCellVsdxId(cell.target.id));
698					connects.appendChild(connect);
699				}
700			}
701		}
702
703		xmlDoc.appendChild(root);
704
705		vsdxCanvas.restore();
706
707		return xmlDoc;
708	};
709
710	function writeXmlDoc2Zip(zip, name, xmlDoc, noHeader)
711	{
712		zip.file(name, (noHeader? "" : "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>") + mxUtils.getXml(xmlDoc, '\n'));
713	};
714
715	function addPagesXML(zip, pages, pageLayers, modelsAttr)
716	{
717		var pagesXmlDoc = mxUtils.createXmlDocument();
718		var pagesRelsXmlDoc = mxUtils.createXmlDocument();
719
720		var pagesRoot = createElt(pagesXmlDoc, that.XMLNS, "Pages");
721		pagesRoot.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', that.XMLNS);
722		pagesRoot.setAttributeNS('http://www.w3.org/2000/xmlns/', "xmlns:r", that.XMLNS_R);
723
724		var pagesRelsRoot = createElt(pagesRelsXmlDoc, that.RELS_XMLNS, "Relationships");
725
726		var i = 1;
727		for (var name in pages)
728		{
729			var pageName = "page" + i + ".xml";
730
731			var pageE = createElt(pagesXmlDoc, that.XMLNS, "Page");
732			pageE.setAttribute("ID", i-1);
733			pageE.setAttribute("NameU", name);
734			pageE.setAttribute("Name", name);
735
736			var pageSheet = createElt(pagesXmlDoc, that.XMLNS, "PageSheet");
737			var modelAttr = modelsAttr[name];
738
739			pageSheet.appendChild(createCellElemScaled("PageWidth", modelAttr['pageWidth'], pagesXmlDoc));
740			pageSheet.appendChild(createCellElemScaled("PageHeight", modelAttr['pageHeight'], pagesXmlDoc));
741			pageSheet.appendChild(createCellElem("PageScale", modelAttr['pageScale'], pagesXmlDoc));
742			pageSheet.appendChild(createCellElem("DrawingScale", 1, pagesXmlDoc));
743
744			var relE = createElt(pagesXmlDoc, that.XMLNS,"Rel");
745			relE.setAttributeNS(that.XMLNS_R, "r:id", "rId" + i);
746
747			//Add Layers
748			var layerSec = createElt(pagesXmlDoc, that.XMLNS, "Section");
749			layerSec.setAttribute("N", "Layer");
750
751			var layers = pageLayers[name];
752
753			for (var k = 0; k < layers.length; k++)
754			{
755				var layerRow = createElt(pagesXmlDoc, that.XMLNS, "Row");
756				layerRow.setAttribute("IX", k + "");
757
758				layerSec.appendChild(layerRow)
759
760				layerRow.appendChild(createCellElem("Name", layers[k].name, pagesXmlDoc));
761				layerRow.appendChild(createCellElem("Color", '255', pagesXmlDoc));
762				layerRow.appendChild(createCellElem("Status", '0', pagesXmlDoc));
763				layerRow.appendChild(createCellElem("Visible", layers[k].visible? '1' : '0', pagesXmlDoc));
764				layerRow.appendChild(createCellElem("Print", '1', pagesXmlDoc));
765				layerRow.appendChild(createCellElem("Active", '0', pagesXmlDoc));
766				layerRow.appendChild(createCellElem("Lock", layers[k].locked? '1' : '0', pagesXmlDoc));
767				layerRow.appendChild(createCellElem("Snap", '1', pagesXmlDoc));
768				layerRow.appendChild(createCellElem("Glue", '1', pagesXmlDoc));
769				layerRow.appendChild(createCellElem("NameUniv", layers[k].name, pagesXmlDoc));
770				layerRow.appendChild(createCellElem("ColorTrans", '0', pagesXmlDoc));
771			}
772
773			pageSheet.appendChild(layerSec);
774
775			pageE.appendChild(pageSheet);
776			pageE.appendChild(relE);
777			pagesRoot.appendChild(pageE);
778
779			var relationship = createElt(pagesRelsXmlDoc, that.RELS_XMLNS, "Relationship");
780			relationship.setAttribute("Id", "rId" + i);
781			relationship.setAttribute("Type", that.PAGES_TYPE);
782			relationship.setAttribute("Target", pageName);
783			pagesRelsRoot.appendChild(relationship);
784
785			//Note:Each page rels is created with the skeleton as they are constants
786
787			//write the page docs
788			var xmlDoc = pages[name];
789			writeXmlDoc2Zip(zip, that.VISIO_PAGES + pageName, xmlDoc);
790			i++;
791		}
792
793		pagesXmlDoc.appendChild(pagesRoot);
794		pagesRelsXmlDoc.appendChild(pagesRelsRoot);
795		writeXmlDoc2Zip(zip, that.VISIO_PAGES + "pages.xml", pagesXmlDoc);
796		writeXmlDoc2Zip(zip, that.VISIO_PAGES + "_rels/pages.xml.rels", pagesRelsXmlDoc);
797	}
798
799	function addImagesRels(zip, pIndex)
800	{
801		//create a new page rels file
802		var fId = that.VISIO_PAGES_RELS + "page" + pIndex + ".xml.rels";
803		var pageRelDoc = mxUtils.createXmlDocument();
804
805		var relationships = createElt(pageRelDoc, that.RELS_XMLNS, "Relationships");
806
807		//Add master relationship (rId1)
808		var relationship = createElt(pageRelDoc, that.RELS_XMLNS, "Relationship");
809        relationship.setAttribute("Type", "http://schemas.microsoft.com/visio/2010/relationships/master");
810        relationship.setAttribute("Id", "rId1");
811        relationship.setAttribute("Target", "../masters/master1.xml");
812        relationships.appendChild(relationship);
813
814		var imgs = vsdxCanvas.images;
815
816		//create rels of image files
817		if (imgs.length > 0)
818		{
819    		for (var i = 0; i < imgs.length; i++)
820			{
821    			var relationship = createElt(pageRelDoc, that.RELS_XMLNS, "Relationship");
822    	        relationship.setAttribute("Type", that.XMLNS_R + "/image");
823    	        relationship.setAttribute("Id", "rId" + (i+2));
824    	        relationship.setAttribute("Target", "../media/" + imgs[i]);
825
826    	        relationships.appendChild(relationship);
827			}
828    	}
829		pageRelDoc.appendChild(relationships);
830    	writeXmlDoc2Zip(zip, fId, pageRelDoc);
831	};
832	/**
833	 *
834	 * Convert current Editor UI pages into a vdsx file
835	 * @return true if successful, false otherwise
836	 */
837	this.exportCurrentDiagrams = function (currentPageOnly)
838	{
839		try
840		{
841			if (editorUi.spinner.spin(document.body, mxResources.get('exporting')))
842			{
843				var zip = new JSZip();
844
845				//init class global variables
846				vsdxCanvas.init(zip);
847				idsMap = {};
848				idsCounter = 1;
849
850				var pages = {};
851				var pageLayers = {};
852				var modelsAttr = {};
853
854				var pagesCount = editorUi.pages != null? editorUi.pages.length : 1;
855
856				function collectLayers(graph, diagramName)
857				{
858					var layers = graph.model.getChildCells(graph.model.root);
859					pageLayers[diagramName] = [];
860
861					for (var k = 0; k < layers.length; k++)
862					{
863						//KNOWN We don't export invisible layers, we may support it later but we need to have a full cell state for invisible cells
864						if (layers[k].visible)
865						{
866							pageLayers[diagramName].push({
867								name: layers[k].value || 'Background',
868								visible: layers[k].visible,
869								locked: layers[k].style && layers[k].style.indexOf('locked=1') >= 0
870							});
871						}
872					}
873				};
874
875				if (editorUi.pages != null)
876				{
877					function exportPage(page)
878					{
879						var diagramName = page.getName();
880						var graph = editorUi.editor.graph;
881
882						//Handles dark mode
883						var temp = null;
884
885						if (graph.themes != null && graph.defaultThemeName == 'darkTheme')
886						{
887							temp = graph.stylesheet;
888							graph.stylesheet = graph.getDefaultStylesheet();
889							graph.refresh();
890						}
891
892						try
893						{
894							var modelAttrib = getGraphAttributes(graph);
895							pages[diagramName] = convertMxModel2Page(graph, modelAttrib);
896							collectLayers(graph, diagramName);
897							addImagesRels(zip, i+1);
898							modelsAttr[diagramName] = modelAttrib;
899						}
900						finally
901						{
902							if (temp != null)
903							{
904								graph.stylesheet = temp;
905								graph.refresh();
906							}
907						}
908					};
909
910					var selectedCells = editorUi.editor.graph.getSelectionCells();
911					var currentPage = editorUi.currentPage;
912
913					if (currentPageOnly)
914					{
915						exportPage(currentPage);
916					}
917					else
918					{
919						for (var i=0; i < editorUi.pages.length; i++)
920						{
921							var page = editorUi.pages[i];
922
923							if (editorUi.currentPage != page)
924							{
925								editorUi.selectPage(page, true);
926							}
927
928							exportPage(page);
929						}
930
931						if (currentPage != editorUi.currentPage)
932						{
933							editorUi.selectPage(currentPage, true);
934						}
935
936						editorUi.editor.graph.setSelectionCells(selectedCells);
937					}
938				}
939				else
940				{
941					var graph = editorUi.editor.graph;
942					var modelAttrib = getGraphAttributes(graph);
943					var diagramName = "Page1";
944					pages[diagramName] = convertMxModel2Page(graph, modelAttrib);
945					collectLayers(graph, diagramName);
946					addImagesRels(zip, 1);
947					modelsAttr[diagramName] = modelAttrib;
948				}
949
950				createVsdxSkeleton(zip, pagesCount);
951
952				addPagesXML(zip, pages, pageLayers, modelsAttr);
953
954				var createZipFile = function()
955				{
956					zip.generateAsync({type:"base64"}).then(
957						function(content)
958						{
959							editorUi.spinner.stop();
960							var basename = editorUi.getBaseFilename();
961						    editorUi.saveData(basename + ".vsdx", 'vsdx', content,
962						    	'application/vnd.visio2013', true);
963						}
964					);
965				};
966
967				if (vsdxCanvas.filesLoading > 0)
968				{
969					// wait until all media files are loaded
970					vsdxCanvas.onFilesLoaded = createZipFile;
971				}
972				else
973				{
974					createZipFile();
975				}
976			}
977
978			return true;
979		}
980		catch(e)
981		{
982			console.log(e);
983			editorUi.spinner.stop();
984			return false;
985		}
986	};
987}
988
989VsdxExport.prototype.CONVERSION_FACTOR = 40 * 2.54; //screenCoordinatesPerCm (40) x CENTIMETERS_PER_INCHES (2.54)
990VsdxExport.prototype.PAGES_TYPE = "http://schemas.microsoft.com/visio/2010/relationships/page";
991VsdxExport.prototype.RELS_XMLNS = "http://schemas.openxmlformats.org/package/2006/relationships";
992VsdxExport.prototype.XML_SPACE = "preserve";
993VsdxExport.prototype.XMLNS_R = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
994VsdxExport.prototype.XMLNS = "http://schemas.microsoft.com/office/visio/2012/main";
995VsdxExport.prototype.VISIO_PAGES = "visio/pages/";
996VsdxExport.prototype.PREFEX = "com/mxgraph/io/vsdx/resources/export/";
997VsdxExport.prototype.VSDX_ENC = "ISO-8859-1";
998VsdxExport.prototype.PART_NAME = "PartName";
999VsdxExport.prototype.CONTENT_TYPES_XML = "[Content_Types].xml";
1000VsdxExport.prototype.VISIO_PAGES_RELS = "visio/pages/_rels/";
1001VsdxExport.prototype.ARROWS_MAP = {
1002	"none|1": 0, "none|0": 0, "open|1": 1, "open|0": 1, "block|1": 4, "block|0": 14, "classic|1": 5, "classic|0": 17,
1003	"oval|1": 10, "oval|0": 20, "diamond|1": 11, "diamond|0": 22, "blockThin|1": 2, "blockThin|0": 15, "dash|1": 23, "dash|0": 23,
1004	"ERone|1": 24, "ERone|0": 24, "ERmandOne|1": 25, "ERmandOne|0": 25, "ERmany|1": 27, "ERmany|0": 27, "ERoneToMany|1": 28, "ERoneToMany|0": 28,
1005	"ERzeroToMany|1": 29, "ERzeroToMany|0": 29, "ERzeroToOne|1": 30, "ERzeroToOne|0": 30, "openAsync|1": 9, "openAsync|0": 9
1006};
1007